mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
933 lines
47 KiB
JSON
933 lines
47 KiB
JSON
{
|
|
"pairs": [
|
|
{
|
|
"feature": "Accommodation (stay) create/edit",
|
|
"hooks": ["src/components/Planner/stayFormModel.ts"],
|
|
"desktop": ["src/components/Planner/DayDetailPanel.tsx", "src/components/Planner/useDayDetail.ts"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MAccommodationSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Add place to collection",
|
|
"hooks": ["src/components/Collections/addPlaceModel.ts", "src/components/Collections/useAddPlaceToCollection.ts"],
|
|
"desktop": ["src/components/Collections/AddPlaceToCollectionModal.tsx"],
|
|
"mobile": ["src/mobile/screens/collections/MCollAddSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Addon manager",
|
|
"hooks": [
|
|
"src/components/Admin/addons/addonModel.ts",
|
|
"src/components/Admin/addons/useAddonManager.ts",
|
|
"src/components/Admin/addons/useLlmParsingConfig.ts"
|
|
],
|
|
"desktop": ["src/components/Admin/AddonManager.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminAddonManager.tsx"]
|
|
},
|
|
{
|
|
"feature": "Admin notification preference matrix",
|
|
"hooks": ["src/components/Admin/useAdminNotificationMatrix.ts", "src/pages/admin/AdminPage.constants.ts"],
|
|
"desktop": ["src/pages/admin/AdminNotificationsPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminNotifyMatrix.tsx"]
|
|
},
|
|
{
|
|
"feature": "Admin notifications tab",
|
|
"hooks": ["src/components/Admin/useAdminNotificationSettings.ts"],
|
|
"desktop": ["src/pages/admin/AdminNotificationsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminNotificationsSection.tsx"]
|
|
},
|
|
{
|
|
"feature": "Admin page shell",
|
|
"hooks": ["src/pages/admin/useAdmin.ts"],
|
|
"desktop": ["src/pages/AdminPage.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdmin.tsx"]
|
|
},
|
|
{
|
|
"feature": "Admin settings tab: trekApiModel",
|
|
"hooks": ["src/components/Admin/trekApiModel.ts"],
|
|
"desktop": ["src/pages/admin/TrekApiCard.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MApiProviderBlocks.tsx"]
|
|
},
|
|
{
|
|
"feature": "Admin settings tab: useAdminSettingsActions",
|
|
"hooks": ["src/components/Admin/useAdminSettingsActions.ts"],
|
|
"desktop": ["src/pages/admin/AdminSettingsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminSettingsSection.tsx"]
|
|
},
|
|
{
|
|
"feature": "Admin users invite status",
|
|
"hooks": ["src/pages/admin/adminModel.ts"],
|
|
"desktop": ["src/pages/admin/AdminUsersTab.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminUsersSection.tsx"]
|
|
},
|
|
{
|
|
"feature": "Atlas country/region action sheet",
|
|
"hooks": ["src/pages/atlas/useAtlasCountryActions.ts"],
|
|
"desktop": ["src/pages/AtlasPage.tsx"],
|
|
"mobile": ["src/mobile/screens/atlas/MAtlasCountryPopup.tsx"]
|
|
},
|
|
{
|
|
"feature": "Atlas page: atlasModel",
|
|
"hooks": ["src/pages/atlas/atlasModel.ts"],
|
|
"desktop": [
|
|
"src/components/Atlas/AtlasCountryPlaces.tsx",
|
|
"src/components/shared/CountryFlag.tsx",
|
|
"src/pages/AtlasPage.tsx"
|
|
],
|
|
"mobile": ["src/mobile/screens/atlas/MAtlas.tsx", "src/mobile/screens/atlas/MAtlasBucketSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Atlas page: useAtlas",
|
|
"hooks": ["src/pages/atlas/useAtlas.ts"],
|
|
"desktop": ["src/pages/AtlasPage.tsx"],
|
|
"mobile": ["src/mobile/screens/atlas/MAtlas.tsx", "src/mobile/screens/atlas/atlasController.ts"]
|
|
},
|
|
{
|
|
"feature": "Audit log",
|
|
"hooks": ["src/components/Admin/useAuditLog.ts"],
|
|
"desktop": ["src/components/Admin/AuditLogPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminAuditLogPanel.tsx"]
|
|
},
|
|
{
|
|
"feature": "Backup panel",
|
|
"hooks": ["src/components/Admin/useBackupAdmin.ts"],
|
|
"desktop": ["src/components/Admin/BackupPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminBackupPanel.tsx"]
|
|
},
|
|
{
|
|
"feature": "Booking forms: linked expense and file attach",
|
|
"hooks": ["src/components/Planner/useBookingExpenseIntent.ts"],
|
|
"desktop": ["src/components/Planner/ReservationModal.tsx", "src/components/Planner/TransportModal.tsx"],
|
|
"mobile": [
|
|
"src/mobile/screens/trip/sheets/MReservationSheet.tsx",
|
|
"src/mobile/screens/trip/sheets/MTransportFormSheet.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Bookings and transports lists",
|
|
"hooks": ["src/components/Planner/bookings/bookingsModel.ts"],
|
|
"desktop": [
|
|
"src/components/Planner/DayDetailPanel.tsx",
|
|
"src/components/Planner/DayPlanSidebar.tsx",
|
|
"src/components/Planner/PlaceInspector.tsx",
|
|
"src/components/Planner/ReservationModal.tsx",
|
|
"src/components/Planner/ReservationsPanel.tsx",
|
|
"src/components/Planner/TransportModal.tsx",
|
|
"src/components/Planner/bookings/BookingCard.tsx",
|
|
"src/components/Planner/bookings/BookingDetailDialog.tsx",
|
|
"src/components/Planner/bookings/BookingDetailHost.tsx",
|
|
"src/components/Planner/bookings/BookingDialogShell.tsx",
|
|
"src/components/Planner/bookings/BookingsHeader.tsx",
|
|
"src/components/Planner/bookings/BookingsList.tsx",
|
|
"src/components/Planner/bookings/BookingsTimeline.tsx",
|
|
"src/components/Planner/bookings/bookingFacts.ts",
|
|
"src/components/Planner/bookings/bookingParts.tsx",
|
|
"src/components/Planner/bookings/timelineModel.ts",
|
|
"src/components/Planner/bookings/useReservationListFilter.ts",
|
|
"src/components/Planner/planCosts.ts",
|
|
"src/pages/sharedTrip/SharedBookingsView.tsx",
|
|
"src/pages/sharedTrip/SharedDayCard.tsx"
|
|
],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MBookingsTab.tsx", "src/mobile/screens/trip/tabs/MTransportsTab.tsx"]
|
|
},
|
|
{
|
|
"feature": "Bottom nav context-aware create action",
|
|
"hooks": ["src/components/Layout/useCreateAction.ts"],
|
|
"desktop": ["src/components/Layout/BottomNav.tsx"],
|
|
"mobile": ["src/mobile/components/MBottomNav.tsx"]
|
|
},
|
|
{
|
|
"feature": "Bulk save selected places to a collection",
|
|
"hooks": ["src/components/Collections/useSaveTripPlacesToList.ts"],
|
|
"desktop": ["src/components/Collections/SaveTripPlacesToListModal.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/places/MPlacesSaveToCollectionSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Category manager",
|
|
"hooks": ["src/components/Admin/useCategoryAdmin.ts"],
|
|
"desktop": ["src/components/Admin/CategoryManager.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminCategoryManager.tsx"]
|
|
},
|
|
{
|
|
"feature": "Collab chat: collabModel",
|
|
"hooks": ["src/components/Collab/collabModel.ts"],
|
|
"desktop": [
|
|
"src/components/Collab/CollabChatMessages.tsx",
|
|
"src/components/Collab/CollabPolls.tsx",
|
|
"src/components/Collab/useCollabChat.ts"
|
|
],
|
|
"mobile": [
|
|
"src/mobile/screens/trip/tabs/MCollabChat.tsx",
|
|
"src/mobile/screens/trip/tabs/MCollabNotes.tsx",
|
|
"src/mobile/screens/trip/tabs/MCollabPolls.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Collab chat: useCollabChatData",
|
|
"hooks": ["src/components/Collab/useCollabChatData.ts"],
|
|
"desktop": ["src/components/Collab/useCollabChat.ts"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MCollabChat.tsx"]
|
|
},
|
|
{
|
|
"feature": "Collab notes",
|
|
"hooks": ["src/components/Collab/useCollabNotesData.ts"],
|
|
"desktop": ["src/components/Collab/CollabNotes.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MCollabNotes.tsx"]
|
|
},
|
|
{
|
|
"feature": "Collab polls",
|
|
"hooks": ["src/components/Collab/useCollabPolls.ts"],
|
|
"desktop": ["src/components/Collab/CollabPolls.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MCollabPolls.tsx"]
|
|
},
|
|
{
|
|
"feature": "Collection list editor",
|
|
"hooks": ["src/components/Collections/useListEditor.ts"],
|
|
"desktop": ["src/components/Collections/ListEditorModal.tsx"],
|
|
"mobile": ["src/mobile/screens/collections/MCollEditSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Collection place detail",
|
|
"hooks": ["src/components/Collections/useCollectionPlaceForm.ts"],
|
|
"desktop": ["src/components/Collections/CollectionPlaceDetail.tsx"],
|
|
"mobile": ["src/mobile/screens/collections/MCollPlaceSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Collection sharing",
|
|
"hooks": ["src/components/Collections/useCollectionSharing.ts"],
|
|
"desktop": ["src/components/Collections/ShareCollectionModal.tsx"],
|
|
"mobile": ["src/mobile/screens/collections/MCollShareSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Collections page: collectionsModel",
|
|
"hooks": ["src/pages/collections/collectionsModel.ts"],
|
|
"desktop": [
|
|
"src/components/Collections/AddPlaceToCollectionModal.tsx",
|
|
"src/components/Collections/CollectionFilterBar.tsx",
|
|
"src/components/Collections/CollectionMap.tsx",
|
|
"src/components/Collections/CollectionPicker.tsx",
|
|
"src/components/Collections/CollectionPlaceDetail.tsx",
|
|
"src/components/Collections/ListEditorModal.tsx",
|
|
"src/components/Collections/MSaveToCollectionSheet.tsx",
|
|
"src/components/Collections/StatusBadge.tsx"
|
|
],
|
|
"mobile": [
|
|
"src/mobile/screens/collections/MCollAddSheet.tsx",
|
|
"src/mobile/screens/collections/MCollEditSheet.tsx",
|
|
"src/mobile/screens/collections/MCollPlaceRow.tsx",
|
|
"src/mobile/screens/collections/MCollPlaceSheet.tsx",
|
|
"src/mobile/screens/collections/MCollections.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Collections page: useCollections",
|
|
"hooks": ["src/pages/collections/useCollections.ts"],
|
|
"desktop": ["src/pages/CollectionsPage.tsx"],
|
|
"mobile": ["src/mobile/screens/collections/MCollections.tsx"]
|
|
},
|
|
{
|
|
"feature": "Copy collection places to a trip",
|
|
"hooks": ["src/components/Collections/useTripCopyPicker.ts"],
|
|
"desktop": ["src/components/Collections/CopyToTripModal.tsx"],
|
|
"mobile": ["src/mobile/screens/collections/MCollTripPickerSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Costs/budget ledger: costsModel",
|
|
"hooks": ["src/components/Budget/costsModel.ts"],
|
|
"desktop": ["src/components/Budget/CostsPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MCostSheet.tsx", "src/mobile/screens/trip/tabs/MCostsTab.tsx"]
|
|
},
|
|
{
|
|
"feature": "Costs/budget ledger: useCostsLedger, useSettlementForm",
|
|
"hooks": ["src/components/Budget/useCostsLedger.ts", "src/components/Budget/useSettlementForm.ts"],
|
|
"desktop": ["src/components/Budget/CostsPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MCostsTab.tsx"]
|
|
},
|
|
{
|
|
"feature": "Create/edit trip form",
|
|
"hooks": ["src/components/Trips/tripFormModel.ts", "src/components/Trips/useTripCoverPicker.ts"],
|
|
"desktop": ["src/components/Trips/TripFormModal.tsx"],
|
|
"mobile": ["src/mobile/screens/dashboard/MNewTripSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Dashboard page",
|
|
"hooks": ["src/pages/dashboard/useDashboard.ts"],
|
|
"desktop": ["src/pages/DashboardPage.tsx"],
|
|
"mobile": ["src/mobile/screens/dashboard/MDashboard.tsx"]
|
|
},
|
|
{
|
|
"feature": "Dashboard residuals: dashboardModel",
|
|
"hooks": ["src/pages/dashboard/dashboardModel.ts"],
|
|
"desktop": ["src/pages/DashboardPage.tsx"],
|
|
"mobile": ["src/mobile/screens/dashboard/MDashWidgets.tsx", "src/mobile/screens/dashboard/MDashboard.tsx"]
|
|
},
|
|
{
|
|
"feature": "Dashboard residuals: useDashboardPlugins",
|
|
"hooks": ["src/components/Dashboard/useDashboardPlugins.ts"],
|
|
"desktop": ["src/pages/DashboardPage.tsx"],
|
|
"mobile": ["src/mobile/screens/dashboard/MDashboard.tsx"]
|
|
},
|
|
{
|
|
"feature": "Dashboard widgets: useCollectionLists",
|
|
"hooks": ["src/components/Dashboard/useCollectionLists.ts"],
|
|
"desktop": ["src/components/Dashboard/CollectionsWidget.tsx"],
|
|
"mobile": ["src/mobile/screens/dashboard/MDashWidgets.tsx"]
|
|
},
|
|
{
|
|
"feature": "Dashboard widgets: useCurrencyConverter, useDashboardTimezones",
|
|
"hooks": [
|
|
"src/components/Dashboard/useCurrencyConverter.ts",
|
|
"src/components/Dashboard/useDashboardTimezones.ts"
|
|
],
|
|
"desktop": ["src/pages/DashboardPage.tsx"],
|
|
"mobile": ["src/mobile/screens/dashboard/MDashWidgets.tsx"]
|
|
},
|
|
{
|
|
"feature": "Day detail",
|
|
"hooks": ["src/components/Planner/dayDetailModel.ts"],
|
|
"desktop": ["src/components/Planner/DayDetailPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/plan/useMPlanTimeline.ts", "src/mobile/screens/trip/sheets/MDaySheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Day note create/edit/delete",
|
|
"hooks": ["src/hooks/useDayNotes.ts"],
|
|
"desktop": ["src/components/Planner/DayPlanSidebar.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MDaySheet.tsx", "src/mobile/screens/trip/sheets/MNoteSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Day plan reorder",
|
|
"hooks": ["src/utils/mergedOrder.ts"],
|
|
"desktop": ["src/components/Planner/DayPlanSidebar.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/plan/useMPlanTimeline.ts"]
|
|
},
|
|
{
|
|
"feature": "Day route optimize + Google Maps / CoMaps export",
|
|
"hooks": ["src/components/Planner/dayRoute.ts"],
|
|
"desktop": ["src/components/Planner/DayPlanSidebar.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/plan/useMPlanTimeline.ts", "src/mobile/screens/trip/sheets/MDaySheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Day weather chip anchor + weather icon map: dayWeather",
|
|
"hooks": ["src/utils/dayWeather.ts"],
|
|
"desktop": ["src/components/Planner/DayPlanSidebar.tsx", "src/pages/TripPlannerPage.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/plan/useMPlanTimeline.ts", "src/mobile/screens/trip/sheets/MDaySheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Day weather chip anchor + weather icon map: weatherIcons",
|
|
"hooks": ["src/components/Weather/weatherIcons.ts"],
|
|
"desktop": ["src/components/Planner/DayDetailPanel.tsx", "src/components/Weather/WeatherWidget.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/plan/MPlanTimeline.tsx", "src/mobile/screens/trip/sheets/MDaySheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Default user settings",
|
|
"hooks": ["src/components/Admin/useDefaultUserSettings.ts"],
|
|
"desktop": ["src/components/Admin/DefaultUserSettingsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminDefaultUserSettings.tsx"]
|
|
},
|
|
{
|
|
"feature": "Dev test notifications panel",
|
|
"hooks": ["src/components/Admin/useDevNotifications.ts"],
|
|
"desktop": ["src/components/Admin/DevNotificationsPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminDevNotificationsPanel.tsx"]
|
|
},
|
|
{
|
|
"feature": "Document sync leftovers: docSyncModel",
|
|
"hooks": ["src/components/Files/docsync/docSyncModel.ts"],
|
|
"desktop": ["src/components/Files/docsync/DocSyncFlow.tsx", "src/components/Files/docsync/DocSyncPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MDocSyncSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Document sync leftovers: useScopePicker",
|
|
"hooks": ["src/components/Files/docsync/useScopePicker.ts"],
|
|
"desktop": ["src/components/Files/docsync/DocSyncScopeModal.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MDocSyncSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Expense editor",
|
|
"hooks": ["src/components/Budget/useExpenseForm.ts"],
|
|
"desktop": ["src/components/Budget/CostsPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MCostSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "GitHub releases panel",
|
|
"hooks": ["src/components/Admin/useGithubReleases.ts", "src/utils/releaseNotes.ts"],
|
|
"desktop": ["src/components/Admin/GitHubPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminGitHubPanel.tsx"]
|
|
},
|
|
{
|
|
"feature": "Google/Naver shared-list import",
|
|
"hooks": ["src/components/Planner/useListImport.ts"],
|
|
"desktop": ["src/components/Planner/usePlacesSidebar.ts"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/ImpListStep.tsx"]
|
|
},
|
|
{
|
|
"feature": "GPX/KML/KMZ file import into places",
|
|
"hooks": ["src/components/Planner/usePlacesFileImport.ts"],
|
|
"desktop": ["src/components/Planner/FileImportModal.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/ImpFileStep.tsx"]
|
|
},
|
|
{
|
|
"feature": "Journey detail page: JourneyDetailPage.helpers",
|
|
"hooks": ["src/pages/journeyDetail/JourneyDetailPage.helpers.ts"],
|
|
"desktop": [
|
|
"src/components/Journey/JourneyDetailPageAddTripDialog.tsx",
|
|
"src/components/Journey/JourneyDetailPageEntryCard.tsx",
|
|
"src/components/Journey/JourneyDetailPageEntryEditor.tsx",
|
|
"src/components/Journey/JourneyDetailPageGalleryView.tsx",
|
|
"src/components/Journey/JourneyDetailPageMapView.tsx",
|
|
"src/components/Journey/JourneyDetailPagePhotoGrid.tsx",
|
|
"src/components/Journey/JourneyDetailPageProviderPicker.tsx",
|
|
"src/components/Journey/JourneyDetailPageSettingsDialog.tsx",
|
|
"src/components/Journey/JourneyEntryCover.tsx",
|
|
"src/components/Journey/MobileEntryView.tsx",
|
|
"src/pages/JourneyDetailPage.tsx",
|
|
"src/pages/JourneyPublicPage.tsx",
|
|
"src/pages/journeyPublic/useJourneyPublic.ts"
|
|
],
|
|
"mobile": [
|
|
"src/mobile/screens/journey/MJourneyCreateSheet.tsx",
|
|
"src/mobile/screens/journey/MJourneyDetail.tsx",
|
|
"src/mobile/screens/journey/MJourneyEntrySheet.tsx",
|
|
"src/mobile/screens/journey/MJourneySettingsSheet.tsx",
|
|
"src/mobile/screens/journey/mobileJourneyMeta.ts"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Journey detail page: useJourneyDetail",
|
|
"hooks": ["src/pages/journeyDetail/useJourneyDetail.ts"],
|
|
"desktop": ["src/pages/JourneyDetailPage.tsx"],
|
|
"mobile": ["src/mobile/screens/journey/MJourneyDetail.tsx"]
|
|
},
|
|
{
|
|
"feature": "Journey detail screen: useGalleryUpload",
|
|
"hooks": ["src/components/Journey/useGalleryUpload.ts"],
|
|
"desktop": ["src/components/Journey/JourneyDetailPageGalleryView.tsx"],
|
|
"mobile": ["src/mobile/screens/journey/MJourneyDetail.tsx"]
|
|
},
|
|
{
|
|
"feature": "Journey detail screen: useJourneyCarouselSync",
|
|
"hooks": ["src/components/Journey/useJourneyCarouselSync.ts"],
|
|
"desktop": ["src/components/Journey/MobileMapTimeline.tsx"],
|
|
"mobile": ["src/mobile/screens/journey/MJourneyDetail.tsx"]
|
|
},
|
|
{
|
|
"feature": "Journey entry editor",
|
|
"hooks": ["src/components/Journey/useJourneyEntryForm.ts"],
|
|
"desktop": ["src/components/Journey/JourneyDetailPageEntryEditor.tsx"],
|
|
"mobile": ["src/mobile/screens/journey/MJourneyEntrySheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Journey list page",
|
|
"hooks": ["src/pages/journey/useJourney.ts"],
|
|
"desktop": ["src/pages/JourneyPage.tsx"],
|
|
"mobile": ["src/mobile/screens/journey/MJourney.tsx"]
|
|
},
|
|
{
|
|
"feature": "Journey settings: useJourneySettings",
|
|
"hooks": ["src/components/Journey/useJourneySettings.ts"],
|
|
"desktop": [
|
|
"src/components/Journey/JourneyDetailPageAddTripDialog.tsx",
|
|
"src/components/Journey/JourneyDetailPageSettingsDialog.tsx"
|
|
],
|
|
"mobile": ["src/mobile/screens/journey/MJourneySettingsSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Journey settings: useJourneyShareLink",
|
|
"hooks": ["src/components/Journey/useJourneyShareLink.ts"],
|
|
"desktop": ["src/components/Journey/JourneyShareSection.tsx"],
|
|
"mobile": ["src/mobile/screens/journey/MJourneySettingsSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Lists sub-tab (packing/todo) persistence",
|
|
"hooks": ["src/hooks/useListsSubTab.ts"],
|
|
"desktop": ["src/pages/tripPlanner/ListsContainer.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/MTripShell.tsx"]
|
|
},
|
|
{
|
|
"feature": "MCP tokens / OAuth sessions admin",
|
|
"hooks": ["src/components/Admin/useMcpTokensAdmin.ts"],
|
|
"desktop": ["src/components/Admin/AdminMcpTokensPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminMcpTokensPanel.tsx"]
|
|
},
|
|
{
|
|
"feature": "Media lightbox",
|
|
"hooks": ["src/components/Files/useMediaLightbox.ts"],
|
|
"desktop": ["src/components/Files/FileManagerImageLightbox.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MFileLightbox.tsx"]
|
|
},
|
|
{
|
|
"feature": "Notifications list row actions",
|
|
"hooks": ["src/components/Notifications/useNotificationItemActions.ts"],
|
|
"desktop": ["src/components/Notifications/InAppNotificationItem.tsx"],
|
|
"mobile": ["src/mobile/screens/notifications/MNotificationRow.tsx"]
|
|
},
|
|
{
|
|
"feature": "Notifications page",
|
|
"hooks": ["src/pages/inAppNotifications/useInAppNotifications.ts"],
|
|
"desktop": ["src/pages/InAppNotificationsPage.tsx"],
|
|
"mobile": ["src/mobile/screens/notifications/MNotifications.tsx"]
|
|
},
|
|
{
|
|
"feature": "OAuth scope group picker",
|
|
"hooks": ["src/components/OAuth/useScopeSelection.ts"],
|
|
"desktop": ["src/components/OAuth/ScopeGroupPicker.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MScopeGroupPicker.tsx"]
|
|
},
|
|
{
|
|
"feature": "Packing bag card and bag weight summary",
|
|
"hooks": ["src/components/Packing/useBagCardEditor.ts"],
|
|
"desktop": ["src/components/Packing/PackingListPanelBagCard.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MBagsSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Packing list: packingListModel",
|
|
"hooks": ["src/components/Packing/packingListModel.ts"],
|
|
"desktop": [
|
|
"src/components/Packing/packingPrintDocument.ts",
|
|
"src/components/Packing/usePackingExport.ts",
|
|
"src/components/Packing/usePackingListPanel.ts"
|
|
],
|
|
"mobile": [
|
|
"src/mobile/screens/trip/tabs/MBagsSheet.tsx",
|
|
"src/mobile/screens/trip/tabs/MPackItemSheet.tsx",
|
|
"src/mobile/screens/trip/tabs/MPackingListTab.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Packing list: usePackingBags, usePackingCategoryAssignees, usePackingItemActions, usePackingTemplates",
|
|
"hooks": [
|
|
"src/components/Packing/usePackingBags.ts",
|
|
"src/components/Packing/usePackingCategoryAssignees.ts",
|
|
"src/components/Packing/usePackingItemActions.ts",
|
|
"src/components/Packing/usePackingTemplates.ts"
|
|
],
|
|
"desktop": ["src/components/Packing/usePackingListPanel.ts"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MPackingListTab.tsx"]
|
|
},
|
|
{
|
|
"feature": "Packing list: usePackingImport",
|
|
"hooks": ["src/components/Packing/usePackingImport.ts"],
|
|
"desktop": ["src/components/Packing/usePackingListPanel.ts"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MPackingImportSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Packing template manager",
|
|
"hooks": ["src/components/Admin/usePackingTemplateAdmin.ts"],
|
|
"desktop": ["src/components/Admin/PackingTemplateManager.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminPackingTemplateManager.tsx"]
|
|
},
|
|
{
|
|
"feature": "Per-leg travel mode and connector mode menu",
|
|
"hooks": ["src/components/Planner/useLegModeActions.ts"],
|
|
"desktop": ["src/components/Planner/DayPlanSidebar.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/plan/MPlanTimeline.tsx", "src/mobile/screens/trip/plan/useMPlanTimeline.ts"]
|
|
},
|
|
{
|
|
"feature": "Permissions panel",
|
|
"hooks": ["src/components/Admin/usePermissionsAdmin.ts"],
|
|
"desktop": ["src/components/Admin/PermissionsPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminPermissionsPanel.tsx"]
|
|
},
|
|
{
|
|
"feature": "Place add/edit form and maps search: usePlaceForm",
|
|
"hooks": ["src/components/Planner/usePlaceForm.ts"],
|
|
"desktop": ["src/components/Planner/PlaceFormModal.tsx"],
|
|
"mobile": [
|
|
"src/mobile/screens/trip/sheets/MPlaceEditSheet.tsx",
|
|
"src/mobile/screens/trip/sheets/PlCategoryPicker.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Place add/edit form and maps search: usePlaceSearch",
|
|
"hooks": ["src/components/Planner/usePlaceSearch.ts"],
|
|
"desktop": ["src/components/Planner/PlaceFormModal.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/PlPlaceSearch.tsx"]
|
|
},
|
|
{
|
|
"feature": "Place detail actions",
|
|
"hooks": ["src/components/Planner/usePlaceActions.ts"],
|
|
"desktop": [
|
|
"src/components/Planner/PlaceInspector.tsx",
|
|
"src/components/shared/PlaceAvatarUpload.tsx",
|
|
"src/pages/tripPlanner/useTripPlannerPage.ts"
|
|
],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MPlaceSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Places pool list",
|
|
"hooks": ["src/components/Planner/usePlacesPool.ts"],
|
|
"desktop": ["src/components/Planner/PlacesSidebarHeader.tsx", "src/components/Planner/usePlacesSidebar.ts"],
|
|
"mobile": [
|
|
"src/mobile/screens/trip/places/MPlacesBrowser.tsx",
|
|
"src/mobile/screens/trip/places/MPlacesFilterControls.tsx",
|
|
"src/mobile/screens/trip/places/MPlacesFilterSheet.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Plugins admin",
|
|
"hooks": [
|
|
"src/components/Admin/plugins/pluginModel.ts",
|
|
"src/components/Admin/plugins/usePluginDetail.ts",
|
|
"src/components/Admin/plugins/usePluginsAdmin.ts"
|
|
],
|
|
"desktop": ["src/components/Admin/AdminPluginsPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminPluginsPanel.tsx"]
|
|
},
|
|
{
|
|
"feature": "Reservation form incl. hotel accommodation creation",
|
|
"hooks": ["src/components/Planner/reservationFormModel.ts", "src/components/Planner/useReservationForm.ts"],
|
|
"desktop": ["src/components/Planner/ReservationModal.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MReservationSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Road-trip add-stop draft",
|
|
"hooks": ["src/components/Roadtrip/useStopDraftForm.ts"],
|
|
"desktop": ["src/components/Roadtrip/RoadtripStopPopup.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/roadtrip/MRtDraftSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Road-trip stay length draft",
|
|
"hooks": ["src/components/Roadtrip/useStayDraft.ts"],
|
|
"desktop": ["src/components/Roadtrip/RoadtripStayModal.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/roadtrip/MRtStaySheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Account",
|
|
"hooks": ["src/components/Settings/useAccountSettings.ts"],
|
|
"desktop": ["src/components/Settings/AccountTab.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsAccount.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Account / Passkeys",
|
|
"hooks": ["src/components/Settings/usePasskeys.ts"],
|
|
"desktop": ["src/components/Settings/PasskeysSection.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsAccount.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Appearance",
|
|
"hooks": ["src/components/Settings/appearanceModel.ts", "src/components/Settings/useAppearanceEditor.ts"],
|
|
"desktop": ["src/components/Settings/AppearanceSettingsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsAppearance.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / General/Display",
|
|
"hooks": ["src/components/Settings/useSettingSaver.ts"],
|
|
"desktop": ["src/components/Settings/DisplaySettingsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsGeneral.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Integrations / AI parsing",
|
|
"hooks": ["src/components/Settings/useLlmConnection.ts"],
|
|
"desktop": ["src/components/Settings/LlmConnectionSection.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MLlmConnectionSection.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Integrations / AirTrail",
|
|
"hooks": ["src/components/Settings/useAirTrailSettings.ts"],
|
|
"desktop": ["src/components/Settings/AirTrailConnectionSection.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MAirTrailConnectionSection.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Integrations / MCP",
|
|
"hooks": ["src/components/Settings/useMcpIntegration.ts"],
|
|
"desktop": ["src/components/Settings/IntegrationsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsMcp.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Integrations / Photo providers",
|
|
"hooks": ["src/components/Settings/usePhotoProviderConnections.ts"],
|
|
"desktop": ["src/components/Settings/PhotoProvidersSection.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MPhotoProvidersSection.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Map: mapSettingsModel",
|
|
"hooks": ["src/components/Settings/mapSettingsModel.ts"],
|
|
"desktop": ["src/components/Admin/DefaultUserSettingsTab.tsx", "src/components/Settings/MapSettingsTab.tsx"],
|
|
"mobile": [
|
|
"src/mobile/screens/admin/MAdminDefaultUserSettings.tsx",
|
|
"src/mobile/screens/settings/MSettingsMap.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Settings / Map: useMapSettingsForm",
|
|
"hooks": ["src/components/Settings/useMapSettingsForm.ts"],
|
|
"desktop": ["src/components/Settings/MapSettingsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsMap.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Notifications",
|
|
"hooks": ["src/components/Settings/useNotificationSettings.ts"],
|
|
"desktop": ["src/components/Settings/NotificationsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsNotifications.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Plugins: usePluginActivity",
|
|
"hooks": ["src/components/Settings/usePluginActivity.ts"],
|
|
"desktop": ["src/components/Settings/PluginActivityPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsPlugins.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings / Plugins: usePluginUserSettings",
|
|
"hooks": ["src/components/Plugins/usePluginUserSettings.ts"],
|
|
"desktop": ["src/components/Settings/PluginSettingsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsPlugins.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings page",
|
|
"hooks": ["src/pages/settings/useSettings.ts"],
|
|
"desktop": ["src/pages/SettingsPage.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettings.tsx"]
|
|
},
|
|
{
|
|
"feature": "Settings shell: visible tabs + integrations gating",
|
|
"hooks": ["src/components/Settings/useIntegrationGates.ts"],
|
|
"desktop": ["src/components/Settings/IntegrationsTab.tsx"],
|
|
"mobile": ["src/mobile/screens/settings/MSettingsIntegrations.tsx"]
|
|
},
|
|
{
|
|
"feature": "Storage backends admin: useBackendForm",
|
|
"hooks": ["src/components/Admin/storage/useBackendForm.ts"],
|
|
"desktop": ["src/components/Admin/storage/BackendForm.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminStoragePanel.tsx"]
|
|
},
|
|
{
|
|
"feature": "Storage backends admin: useStoragePanel",
|
|
"hooks": ["src/components/Admin/storage/useStoragePanel.ts"],
|
|
"desktop": ["src/components/Admin/storage/AdminStoragePanel.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminStoragePanel.tsx"]
|
|
},
|
|
{
|
|
"feature": "To-do list and task add/edit form: useTaskForm",
|
|
"hooks": ["src/components/Todo/useTaskForm.ts"],
|
|
"desktop": ["src/components/Todo/TodoListPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MTaskSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "To-do list and task add/edit form: useTodoList",
|
|
"hooks": ["src/components/Todo/useTodoList.ts"],
|
|
"desktop": ["src/components/Todo/TodoListPanel.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MTodoListTab.tsx"]
|
|
},
|
|
{
|
|
"feature": "Toast presenter queue",
|
|
"hooks": ["src/components/shared/useToastQueue.ts"],
|
|
"desktop": ["src/components/shared/Toast.tsx"],
|
|
"mobile": ["src/mobile/components/MToastHost.tsx"]
|
|
},
|
|
{
|
|
"feature": "Tours list filter",
|
|
"hooks": ["src/components/Tours/tourPresentation.ts"],
|
|
"desktop": [
|
|
"src/components/Tours/TourDetailDialog.tsx",
|
|
"src/components/Tours/planner/TourPlannerPanels.tsx",
|
|
"src/components/Tours/tourParts.tsx"
|
|
],
|
|
"mobile": ["src/mobile/screens/trip/places/MToursSelectionList.tsx"]
|
|
},
|
|
{
|
|
"feature": "Tours list facets",
|
|
"hooks": ["src/components/Tours/useTourListFilters.ts"],
|
|
"desktop": ["src/components/Tours/ToursSidebar.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/places/MPlacesBrowser.tsx"]
|
|
},
|
|
{
|
|
"feature": "Transport booking detail view: reservationFiles",
|
|
"hooks": ["src/utils/reservationFiles.ts"],
|
|
"desktop": [
|
|
"src/components/Planner/DayPlanSidebarTransportDetailModal.tsx",
|
|
"src/components/Planner/ReservationsPanel.tsx",
|
|
"src/components/Planner/bookings/BookingDetailHost.tsx"
|
|
],
|
|
"mobile": [
|
|
"src/mobile/screens/trip/sheets/MTransportSheet.tsx",
|
|
"src/mobile/screens/trip/tabs/MBookingsTab.tsx",
|
|
"src/mobile/screens/trip/tabs/MTransportsTab.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Transport booking detail view: transportDetailModel",
|
|
"hooks": ["src/components/Planner/transportDetailModel.ts"],
|
|
"desktop": ["src/components/Planner/DayPlanSidebarTransportDetailModal.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MTransportSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Transport booking form: bookingFormModel",
|
|
"hooks": ["src/components/Planner/bookingFormModel.ts"],
|
|
"desktop": [
|
|
"src/components/Planner/ReservationModal.tsx",
|
|
"src/components/Planner/TransportModal.tsx",
|
|
"src/components/Planner/useBookingFileAttach.ts"
|
|
],
|
|
"mobile": [
|
|
"src/mobile/screens/trip/sheets/MReservationSheet.tsx",
|
|
"src/mobile/screens/trip/sheets/MTransportFormSheet.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Transport booking form: transportEndpoints, useTransportForm",
|
|
"hooks": ["src/components/Planner/transportEndpoints.ts", "src/components/Planner/useTransportForm.ts"],
|
|
"desktop": ["src/components/Planner/TransportModal.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MTransportFormSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Trip export",
|
|
"hooks": ["src/components/Planner/useTripExport.ts"],
|
|
"desktop": ["src/components/Planner/TripExportModal.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MExportSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Trip files: fileActions",
|
|
"hooks": ["src/components/Files/fileActions.ts"],
|
|
"desktop": ["src/components/Files/FileManagerAssignModal.tsx", "src/components/Files/useFileManager.ts"],
|
|
"mobile": [
|
|
"src/mobile/screens/trip/tabs/MFileLinkSheet.tsx",
|
|
"src/mobile/screens/trip/tabs/MFileMenuSheet.tsx",
|
|
"src/mobile/screens/trip/tabs/MFilesTab.tsx"
|
|
]
|
|
},
|
|
{
|
|
"feature": "Trip files: fileListRules",
|
|
"hooks": ["src/components/Files/fileListRules.ts"],
|
|
"desktop": ["src/components/Files/FileManagerRow.tsx", "src/components/Files/useFileManager.ts"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MFileLinkSheet.tsx", "src/mobile/screens/trip/tabs/filesModel.ts"]
|
|
},
|
|
{
|
|
"feature": "Trip files: useFileTrash",
|
|
"hooks": ["src/components/Files/useFileTrash.ts"],
|
|
"desktop": ["src/components/Files/useFileManager.ts"],
|
|
"mobile": ["src/mobile/screens/trip/tabs/MFileTrashSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Trip loading splash",
|
|
"hooks": ["src/components/shared/useTripSplashBeats.ts"],
|
|
"desktop": ["src/components/shared/TripLoadingSplash.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/MTripLoadingSplash.tsx"]
|
|
},
|
|
{
|
|
"feature": "Trip planner page",
|
|
"hooks": ["src/pages/tripPlanner/useTripPlanner.ts"],
|
|
"desktop": ["src/pages/tripPlanner/useTripPlannerPage.ts"],
|
|
"mobile": ["src/mobile/screens/trip/MTripShell.tsx"]
|
|
},
|
|
{
|
|
"feature": "Trip sheet wiring: transportEditorOpeners",
|
|
"hooks": ["src/pages/tripPlanner/transportEditorOpeners.ts"],
|
|
"desktop": ["src/pages/TripPlannerPage.tsx", "src/pages/tripPlanner/usePlannerDialogs.ts"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MTripSheets.tsx"]
|
|
},
|
|
{
|
|
"feature": "Trip sheet wiring: tripCover, useBookingExpenseEditor",
|
|
"hooks": ["src/pages/tripPlanner/tripCover.ts", "src/pages/tripPlanner/useBookingExpenseEditor.ts"],
|
|
"desktop": ["src/pages/TripPlannerPage.tsx"],
|
|
"mobile": ["src/mobile/screens/trip/sheets/MTripSheets.tsx"]
|
|
},
|
|
{
|
|
"feature": "User modals/sheets",
|
|
"hooks": ["src/components/Admin/useAdminUserActions.ts"],
|
|
"desktop": ["src/pages/admin/AdminUserModals.tsx"],
|
|
"mobile": ["src/mobile/screens/admin/MAdminSheets.tsx"]
|
|
},
|
|
{
|
|
"feature": "Vacay calendar logging logic: useVacayCalendarLogic",
|
|
"hooks": ["src/components/Vacay/useVacayCalendarLogic.ts"],
|
|
"desktop": ["src/components/Vacay/VacayCalendar.tsx", "src/components/Vacay/VacayPersons.tsx"],
|
|
"mobile": ["src/mobile/screens/vacay/useMVacay.ts"]
|
|
},
|
|
{
|
|
"feature": "Vacay calendar logging logic: vacayFormat",
|
|
"hooks": ["src/components/Vacay/vacayFormat.ts"],
|
|
"desktop": ["src/components/Vacay/VacayStats.tsx"],
|
|
"mobile": ["src/mobile/screens/vacay/MVacay.tsx"]
|
|
},
|
|
{
|
|
"feature": "Vacay fusion invite",
|
|
"hooks": ["src/components/Vacay/useVacayUserPicker.ts"],
|
|
"desktop": ["src/components/Vacay/VacayPersons.tsx", "src/components/Vacay/VacaySharedCalendars.tsx"],
|
|
"mobile": ["src/mobile/screens/vacay/MVacayInviteSheet.tsx", "src/mobile/screens/vacay/MVacayShareSheet.tsx"]
|
|
},
|
|
{
|
|
"feature": "Vacay page",
|
|
"hooks": ["src/pages/vacay/useVacay.ts"],
|
|
"desktop": ["src/pages/VacayPage.tsx"],
|
|
"mobile": ["src/mobile/screens/vacay/useMVacay.ts"]
|
|
},
|
|
{
|
|
"feature": "Vacay read-only calendar sharing",
|
|
"hooks": ["src/components/Vacay/useVacayShareActions.ts"],
|
|
"desktop": ["src/components/Vacay/VacaySharedCalendars.tsx"],
|
|
"mobile": ["src/mobile/screens/vacay/MVacayShareSheet.tsx", "src/mobile/screens/vacay/useMVacay.ts"]
|
|
},
|
|
{
|
|
"feature": "Vacay settings",
|
|
"hooks": ["src/components/Vacay/useVacaySettings.ts"],
|
|
"desktop": ["src/components/Vacay/VacaySettings.tsx"],
|
|
"mobile": ["src/mobile/screens/vacay/MVacaySettingsSheet.tsx"]
|
|
}
|
|
],
|
|
"mobileOnly": {
|
|
"src/mobile/screens/admin/MAdminUi.tsx": "Phone only admin UI primitives (button, card, field, input, secret input, sheet frame).",
|
|
"src/mobile/screens/atlas/MAtlasSearch.tsx": "Phone full screen country search overlay; options, suggestions and selection come through props from MAtlas.",
|
|
"src/mobile/screens/atlas/MAtlasStatsCard.tsx": "Markup only; renders the AtlasStats that MAtlas passes in.",
|
|
"src/mobile/screens/collections/MCollCategoryPicker.tsx": "Phone only category dropdown; value and categories come through props from the collection sheets.",
|
|
"src/mobile/screens/collections/MCollInvites.tsx": "Markup only; the invites and accept and decline come through props from useCollections via MCollections.",
|
|
"src/mobile/screens/collections/MCollLabelsSheet.tsx": "Phone label sheet; create, update, delete and assign come through props from useCollections.",
|
|
"src/mobile/screens/collections/MCollLinksEditor.tsx": "Markup only; link rows and the change handler come through props from the collection sheets.",
|
|
"src/mobile/screens/collections/MCollListPickerSheet.tsx": "Phone list picker sheet; the move or copy action comes through onPick from useCollections.",
|
|
"src/mobile/screens/collections/MCollSheetKit.tsx": "Phone only sheet UI primitives for the collections screens (header, footer, pill, eyebrow).",
|
|
"src/mobile/screens/collections/collectionsMobileModel.ts": "Visual constants only the phone collections screens use (category and status specs, swatches, cover gradient).",
|
|
"src/mobile/screens/dashboard/MUserMenu.tsx": "Phone avatar menu with a three state theme cycle the desktop navbar does not have.",
|
|
"src/mobile/screens/settings/MConfirmSheet.tsx": "Phone only bottom sheet confirm dialog used across the mobile screens.",
|
|
"src/mobile/screens/settings/MDawarichConnectionSection.tsx": "Already shares hooks/useDawarichConnection with components/Settings/DawarichConnectionSection.tsx.",
|
|
"src/mobile/screens/settings/MMobileDashOrder.tsx": "Phone only setting that orders the mobile dashboard blocks; the desktop has no such setting.",
|
|
"src/mobile/screens/settings/MMobileNavCustomizer.tsx": "Phone only editor for the mobile bottom nav, built on components/Settings/useMobileNavEditor.",
|
|
"src/mobile/screens/settings/MSetPickerSheet.tsx": "Phone only option picker bottom sheet, a generic UI primitive.",
|
|
"src/mobile/screens/settings/MSettingsAbout.tsx": "Markup only about card with static links and no state.",
|
|
"src/mobile/screens/settings/MSettingsOffline.tsx": "Already shares components/Settings/useOfflineSettings with components/Settings/OfflineTab.tsx.",
|
|
"src/mobile/screens/settings/MSettingsUi.tsx": "Phone only settings UI primitives (card, row, input, button, segments, hint).",
|
|
"src/mobile/screens/settings/MWebPushCard.tsx": "Already shares hooks/useWebPush with components/Settings/WebPushCard.tsx.",
|
|
"src/mobile/screens/trip/dockTabs.ts": "Phone only helper that picks which trip tabs get a seat in the mobile dock.",
|
|
"src/mobile/screens/trip/lib/dayNotes.ts": "Phone only helper that splits a leading time off a day note for the plan timeline.",
|
|
"src/mobile/screens/trip/map/MMapArea.tsx": "Phone map stage framing; already shares usePoiExplore and useMergedMapPois with the desktop trip planner.",
|
|
"src/mobile/screens/trip/map/MPlacesFilterPill.tsx": "Phone only map control for the active places filter count, built on the shared MapTogglePill.",
|
|
"src/mobile/screens/trip/places/MPlacesBulkCategorySheet.tsx": "Markup only; categories and the pick handler come through props from MPlacesBrowser.",
|
|
"src/mobile/screens/trip/places/MPlacesToursModeSwitch.tsx": "Markup only places or tours toggle; value and onChange come through props from MPlacesBrowser.",
|
|
"src/mobile/screens/trip/places/placesBrowserModel.ts": "Phone pool helpers over the shared utils/placesFilter, placeSearch and plannedPlaces.",
|
|
"src/mobile/screens/trip/plan/MPlanTimelineRows.tsx": "Markup only timeline rows; row data comes from MPlanTimeline and planTimelineModel.",
|
|
"src/mobile/screens/trip/plan/planTimelineModel.ts": "Phone plan timeline row builder over the shared utils/dayMerge, dayOrder and dayTourProjection.",
|
|
"src/mobile/screens/trip/plan/useMPlanDaySwipe.ts": "Phone only touch swipe gesture for switching days.",
|
|
"src/mobile/screens/trip/plan/useMPlanDragReorder.ts": "Phone only long press drag gesture; the reorder itself runs through the handler it is given.",
|
|
"src/mobile/screens/trip/roadtrip/MRoadtripRows.tsx": "Markup only road trip rows over the shared Roadtrip models the desktop sidebar rows also use.",
|
|
"src/mobile/screens/trip/roadtrip/MRoadtripTab.tsx": "Phone road trip tab over the shared roadtripRowModel, stopBookings and nightBookend RoadtripSidebar uses.",
|
|
"src/mobile/screens/trip/roadtrip/MRtAlternativesBar.tsx": "Markup only; state from useMRtAlternatives, text from the shared alternativeOverlays.",
|
|
"src/mobile/screens/trip/roadtrip/MRtCorridorBar.tsx": "Markup only; its corridor state comes through props from useMRtCorridor.",
|
|
"src/mobile/screens/trip/roadtrip/MRtCorridorSheet.tsx": "Phone corridor search sheet over useMRtCorridor and the planner's shared corridor state.",
|
|
"src/mobile/screens/trip/roadtrip/MRtInfoSheet.tsx": "Read only figures sheet that already shares useHotelBookends, dayWindow and parseAvoid with RoadtripLimitsCard.",
|
|
"src/mobile/screens/trip/roadtrip/MRtKindSheet.tsx": "Thin sheet over planner.setRoadtripStopKind that already shares STOP_KINDS with StopKindPicker.",
|
|
"src/mobile/screens/trip/roadtrip/MRtStopSheet.tsx": "Phone only stop detail sheet over the shared roadtripRowModel, stayReading and planner writers.",
|
|
"src/mobile/screens/trip/roadtrip/stageBadges.ts": "Badge helpers for the phone stage header and alternatives bar, which have no desktop counterpart.",
|
|
"src/mobile/screens/trip/roadtrip/useMRoadtrip.ts": "Phone stage screen adapter over the shared roadtripRowModel plus a live clock tick.",
|
|
"src/mobile/screens/trip/roadtrip/useMRtAlternatives.ts": "Tap to preview, confirm to write layer over the planner's shared route alternatives.",
|
|
"src/mobile/screens/trip/roadtrip/useMRtCorridor.ts": "Phone reach and anchor layer over the planner's shared corridor state.",
|
|
"src/mobile/screens/trip/sheets/MBookingFields.tsx": "Markup only: the booking code, notes, traveler and route stop fields both phone booking sheets draw.",
|
|
"src/mobile/screens/trip/sheets/MBookingFilesCosts.tsx": "Phone booking sheet footer that composes PlFileAttach and MLinkedCosts.",
|
|
"src/mobile/screens/trip/sheets/MBrowseActionsSheet.tsx": "Phone action sheet for a pool place that calls planner handlers and the shared placeToSaveTarget.",
|
|
"src/mobile/screens/trip/sheets/MDaysSheet.tsx": "Button based day reorder sheet over planner.handleReorderDays; the desktop reorders by drag.",
|
|
"src/mobile/screens/trip/sheets/MImportSheet.tsx": "Menu that routes to ImpFileStep and ImpListStep, with no logic of its own.",
|
|
"src/mobile/screens/trip/sheets/MLinkedCosts.tsx": "Already shares useExpenseLinks with the desktop BookingCostsSection; only markup and a search filter are local.",
|
|
"src/mobile/screens/trip/sheets/MMehrSheet.tsx": "Phone dock overflow menu that only opens tabs and sheets.",
|
|
"src/mobile/screens/trip/sheets/MTripSheetUi.tsx": "Phone sheet UI primitives (eyebrow, headers, stat boxes, action circles) and a time display helper.",
|
|
"src/mobile/screens/trip/sheets/PlFileAttach.tsx": "Markup only; pending files and link actions come through props from the phone form sheets.",
|
|
"src/mobile/screens/trip/sheets/PlSheetChrome.tsx": "Phone form sheet chrome primitives (header, footer, field classes).",
|
|
"src/mobile/screens/trip/sheets/PlTimeFields.tsx": "Phone time fields that already share timeCollisions with the desktop PlaceFormModal.",
|
|
"src/mobile/screens/trip/tabs/MCollabTab.tsx": "Phone collab sub tab router that reuses the desktop CollabLinks component.",
|
|
"src/mobile/screens/trip/tabs/MListsTab.tsx": "Phone router between the packing and to-do bodies, with no logic of its own.",
|
|
"src/mobile/screens/trip/tabs/MReceiptScanButton.tsx": "Already shares useReceiptScan and ReceiptScanModal with the desktop CostsPanel.",
|
|
"src/mobile/screens/trip/tabs/MReservationCardParts.tsx": "Markup only: the title, actions, date, files and delete sheet parts both phone booking tabs draw.",
|
|
"src/mobile/screens/trip/tabs/MTripTabPanel.tsx": "Phone tab router that mounts the per tab screens and plugin frames, with no logic of its own.",
|
|
"src/mobile/screens/trip/tabs/listsModel.ts": "Priority colour and label constants only the phone to-do list and task sheet use.",
|
|
"src/mobile/screens/trip/tabs/tabChrome.tsx": "Phone tab chrome primitives (scroller, section headers, fields, traveler chips, plugin slots).",
|
|
"src/mobile/screens/trip/tabs/tabModel.ts": "Phone tab prop type and status colour tokens only the phone tabs use.",
|
|
"src/mobile/screens/trip/tabs/transportsModel.ts": "Phone transport card readers (metadata, day and time cells) for MTransportsTab and MBookingsTab.",
|
|
"src/mobile/screens/vacay/MVacayMonth.tsx": "Markup only; its day cell colours come from the phone vacayDayModel.",
|
|
"src/mobile/screens/vacay/vacayDayModel.ts": "Phone day cell colour model for MVacayMonth; the desktop card styles its cells inline."
|
|
}
|
|
}
|