From 396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b Mon Sep 17 00:00:00 2001 From: Fuwn <50817549+Fuwn@users.noreply.github.com> Date: Sat, 24 Jan 2026 13:09:50 +0000 Subject: Initial commit Created from https://vercel.com/new --- src/app/(main)/App.tsx | 62 +++++ src/app/(main)/MobileNav.tsx | 71 +++++ src/app/(main)/SideNav.tsx | 87 ++++++ src/app/(main)/TopNav.tsx | 26 ++ src/app/(main)/UpdateNotice.tsx | 61 +++++ src/app/(main)/admin/AdminLayout.tsx | 33 +++ src/app/(main)/admin/AdminNav.tsx | 48 ++++ src/app/(main)/admin/layout.tsx | 17 ++ src/app/(main)/admin/teams/AdminTeamsDataTable.tsx | 19 ++ src/app/(main)/admin/teams/AdminTeamsPage.tsx | 19 ++ src/app/(main)/admin/teams/AdminTeamsTable.tsx | 86 ++++++ .../(main)/admin/teams/[teamId]/AdminTeamPage.tsx | 11 + src/app/(main)/admin/teams/[teamId]/page.tsx | 12 + src/app/(main)/admin/teams/page.tsx | 9 + src/app/(main)/admin/users/UserAddButton.tsx | 32 +++ src/app/(main)/admin/users/UserAddForm.tsx | 71 +++++ src/app/(main)/admin/users/UserDeleteButton.tsx | 35 +++ src/app/(main)/admin/users/UserDeleteForm.tsx | 41 +++ src/app/(main)/admin/users/UsersDataTable.tsx | 14 + src/app/(main)/admin/users/UsersPage.tsx | 24 ++ src/app/(main)/admin/users/UsersTable.tsx | 84 ++++++ .../(main)/admin/users/[userId]/UserEditForm.tsx | 73 +++++ src/app/(main)/admin/users/[userId]/UserHeader.tsx | 9 + src/app/(main)/admin/users/[userId]/UserPage.tsx | 19 ++ .../(main)/admin/users/[userId]/UserProvider.tsx | 20 ++ .../(main)/admin/users/[userId]/UserSettings.tsx | 25 ++ .../(main)/admin/users/[userId]/UserWebsites.tsx | 15 ++ src/app/(main)/admin/users/[userId]/page.tsx | 12 + src/app/(main)/admin/users/page.tsx | 9 + .../admin/websites/AdminWebsitesDataTable.tsx | 13 + .../(main)/admin/websites/AdminWebsitesPage.tsx | 19 ++ .../(main)/admin/websites/AdminWebsitesTable.tsx | 89 +++++++ .../websites/[websiteId]/AdminWebsitePage.tsx | 14 + src/app/(main)/admin/websites/[websiteId]/page.tsx | 12 + src/app/(main)/admin/websites/page.tsx | 9 + src/app/(main)/boards/BoardAddButton.tsx | 32 +++ src/app/(main)/boards/BoardAddForm.tsx | 60 +++++ src/app/(main)/boards/BoardsPage.tsx | 17 ++ src/app/(main)/boards/[boardId]/Board.tsx | 10 + src/app/(main)/boards/[boardId]/page.tsx | 12 + src/app/(main)/boards/page.tsx | 10 + .../(main)/console/[websiteId]/TestConsolePage.tsx | 207 +++++++++++++++ src/app/(main)/console/[websiteId]/page.tsx | 22 ++ src/app/(main)/dashboard/DashboardPage.tsx | 17 ++ src/app/(main)/dashboard/page.tsx | 10 + src/app/(main)/layout.tsx | 18 ++ src/app/(main)/links/LinkAddButton.tsx | 19 ++ src/app/(main)/links/LinkDeleteButton.tsx | 57 ++++ src/app/(main)/links/LinkEditButton.tsx | 16 ++ src/app/(main)/links/LinkEditForm.tsx | 148 +++++++++++ src/app/(main)/links/LinkProvider.tsx | 21 ++ src/app/(main)/links/LinksDataTable.tsx | 14 + src/app/(main)/links/LinksPage.tsx | 26 ++ src/app/(main)/links/LinksTable.tsx | 51 ++++ src/app/(main)/links/[linkId]/LinkControls.tsx | 32 +++ src/app/(main)/links/[linkId]/LinkHeader.tsx | 19 ++ src/app/(main)/links/[linkId]/LinkMetricsBar.tsx | 70 +++++ src/app/(main)/links/[linkId]/LinkPage.tsx | 34 +++ src/app/(main)/links/[linkId]/LinkPanels.tsx | 83 ++++++ src/app/(main)/links/[linkId]/page.tsx | 12 + src/app/(main)/links/page.tsx | 10 + src/app/(main)/pixels/PixelAddButton.tsx | 19 ++ src/app/(main)/pixels/PixelDeleteButton.tsx | 57 ++++ src/app/(main)/pixels/PixelEditButton.tsx | 21 ++ src/app/(main)/pixels/PixelEditForm.tsx | 129 +++++++++ src/app/(main)/pixels/PixelProvider.tsx | 21 ++ src/app/(main)/pixels/PixelsDataTable.tsx | 14 + src/app/(main)/pixels/PixelsPage.tsx | 26 ++ src/app/(main)/pixels/PixelsTable.tsx | 48 ++++ src/app/(main)/pixels/[pixelId]/PixelControls.tsx | 32 +++ src/app/(main)/pixels/[pixelId]/PixelHeader.tsx | 19 ++ .../(main)/pixels/[pixelId]/PixelMetricsBar.tsx | 70 +++++ src/app/(main)/pixels/[pixelId]/PixelPage.tsx | 34 +++ src/app/(main)/pixels/[pixelId]/PixelPanels.tsx | 83 ++++++ src/app/(main)/pixels/[pixelId]/page.tsx | 12 + src/app/(main)/pixels/page.tsx | 10 + src/app/(main)/settings/SettingsLayout.tsx | 26 ++ src/app/(main)/settings/SettingsNav.tsx | 53 ++++ src/app/(main)/settings/layout.tsx | 17 ++ .../settings/preferences/DateRangeSetting.tsx | 28 ++ .../settings/preferences/LanguageSetting.tsx | 48 ++++ .../settings/preferences/PreferenceSettings.tsx | 36 +++ .../settings/preferences/PreferencesPage.tsx | 22 ++ .../(main)/settings/preferences/ThemeSetting.tsx | 21 ++ .../settings/preferences/TimezoneSetting.tsx | 44 +++ src/app/(main)/settings/preferences/page.tsx | 10 + .../settings/profile/PasswordChangeButton.tsx | 29 ++ .../(main)/settings/profile/PasswordEditForm.tsx | 67 +++++ src/app/(main)/settings/profile/ProfileHeader.tsx | 8 + src/app/(main)/settings/profile/ProfilePage.tsx | 22 ++ .../(main)/settings/profile/ProfileSettings.tsx | 51 ++++ src/app/(main)/settings/profile/page.tsx | 10 + .../(main)/settings/teams/TeamsSettingsPage.tsx | 16 ++ .../settings/teams/[teamId]/TeamSettingsPage.tsx | 11 + src/app/(main)/settings/teams/[teamId]/page.tsx | 12 + src/app/(main)/settings/teams/page.tsx | 10 + .../settings/websites/WebsitesSettingsPage.tsx | 16 ++ .../websites/[websiteId]/WebsiteSettingsPage.tsx | 16 ++ .../(main)/settings/websites/[websiteId]/page.tsx | 12 + src/app/(main)/settings/websites/page.tsx | 12 + src/app/(main)/teams/TeamAddForm.tsx | 39 +++ src/app/(main)/teams/TeamJoinForm.tsx | 40 +++ src/app/(main)/teams/TeamLeaveButton.tsx | 41 +++ src/app/(main)/teams/TeamLeaveForm.tsx | 48 ++++ src/app/(main)/teams/TeamProvider.tsx | 21 ++ src/app/(main)/teams/TeamsAddButton.tsx | 33 +++ src/app/(main)/teams/TeamsDataTable.tsx | 27 ++ src/app/(main)/teams/TeamsHeader.tsx | 26 ++ src/app/(main)/teams/TeamsJoinButton.tsx | 31 +++ src/app/(main)/teams/TeamsPage.tsx | 19 ++ src/app/(main)/teams/TeamsTable.tsx | 29 ++ src/app/(main)/teams/[teamId]/TeamDeleteForm.tsx | 40 +++ src/app/(main)/teams/[teamId]/TeamEditForm.tsx | 89 +++++++ src/app/(main)/teams/[teamId]/TeamManage.tsx | 32 +++ .../(main)/teams/[teamId]/TeamMemberEditButton.tsx | 46 ++++ .../(main)/teams/[teamId]/TeamMemberEditForm.tsx | 62 +++++ .../teams/[teamId]/TeamMemberRemoveButton.tsx | 60 +++++ .../(main)/teams/[teamId]/TeamMembersDataTable.tsx | 19 ++ src/app/(main)/teams/[teamId]/TeamMembersTable.tsx | 55 ++++ src/app/(main)/teams/[teamId]/TeamSettings.tsx | 49 ++++ .../teams/[teamId]/TeamWebsiteRemoveButton.tsx | 25 ++ .../teams/[teamId]/TeamWebsitesDataTable.tsx | 19 ++ .../(main)/teams/[teamId]/TeamWebsitesTable.tsx | 50 ++++ src/app/(main)/teams/page.tsx | 10 + src/app/(main)/websites/WebsiteAddButton.tsx | 28 ++ src/app/(main)/websites/WebsiteAddForm.tsx | 60 +++++ src/app/(main)/websites/WebsiteProvider.tsx | 27 ++ src/app/(main)/websites/WebsitesDataTable.tsx | 47 ++++ src/app/(main)/websites/WebsitesHeader.tsx | 18 ++ src/app/(main)/websites/WebsitesPage.tsx | 26 ++ src/app/(main)/websites/WebsitesTable.tsx | 41 +++ .../(reports)/attribution/Attribution.tsx | 128 +++++++++ .../(reports)/attribution/AttributionPage.tsx | 63 +++++ .../[websiteId]/(reports)/attribution/page.tsx | 12 + .../[websiteId]/(reports)/breakdown/Breakdown.tsx | 91 +++++++ .../(reports)/breakdown/BreakdownPage.tsx | 51 ++++ .../(reports)/breakdown/FieldSelectForm.tsx | 46 ++++ .../[websiteId]/(reports)/breakdown/page.tsx | 12 + .../[websiteId]/(reports)/funnels/Funnel.tsx | 134 ++++++++++ .../(reports)/funnels/FunnelAddButton.tsx | 28 ++ .../(reports)/funnels/FunnelEditForm.tsx | 141 ++++++++++ .../[websiteId]/(reports)/funnels/FunnelsPage.tsx | 36 +++ .../[websiteId]/(reports)/funnels/page.tsx | 12 + .../websites/[websiteId]/(reports)/goals/Goal.tsx | 99 +++++++ .../[websiteId]/(reports)/goals/GoalAddButton.tsx | 28 ++ .../[websiteId]/(reports)/goals/GoalEditForm.tsx | 104 ++++++++ .../[websiteId]/(reports)/goals/GoalsPage.tsx | 36 +++ .../websites/[websiteId]/(reports)/goals/page.tsx | 12 + .../(reports)/journeys/Journey.module.css | 267 +++++++++++++++++++ .../[websiteId]/(reports)/journeys/Journey.tsx | 294 +++++++++++++++++++++ .../(reports)/journeys/JourneysPage.tsx | 67 +++++ .../[websiteId]/(reports)/journeys/page.tsx | 12 + .../[websiteId]/(reports)/retention/Retention.tsx | 140 ++++++++++ .../(reports)/retention/RetentionPage.tsx | 22 ++ .../[websiteId]/(reports)/retention/page.tsx | 12 + .../[websiteId]/(reports)/revenue/Revenue.tsx | 152 +++++++++++ .../[websiteId]/(reports)/revenue/RevenuePage.tsx | 18 ++ .../[websiteId]/(reports)/revenue/RevenueTable.tsx | 21 ++ .../[websiteId]/(reports)/revenue/page.tsx | 12 + .../websites/[websiteId]/(reports)/utm/UTM.tsx | 71 +++++ .../websites/[websiteId]/(reports)/utm/UTMPage.tsx | 18 ++ .../websites/[websiteId]/(reports)/utm/page.tsx | 12 + .../websites/[websiteId]/ExpandedViewModal.tsx | 52 ++++ .../(main)/websites/[websiteId]/WebsiteChart.tsx | 61 +++++ .../websites/[websiteId]/WebsiteControls.tsx | 40 +++ .../websites/[websiteId]/WebsiteExpandedMenu.tsx | 183 +++++++++++++ .../websites/[websiteId]/WebsiteExpandedView.tsx | 57 ++++ .../(main)/websites/[websiteId]/WebsiteHeader.tsx | 57 ++++ .../(main)/websites/[websiteId]/WebsiteLayout.tsx | 30 +++ .../(main)/websites/[websiteId]/WebsiteMenu.tsx | 56 ++++ .../websites/[websiteId]/WebsiteMetricsBar.tsx | 88 ++++++ src/app/(main)/websites/[websiteId]/WebsiteNav.tsx | 180 +++++++++++++ .../(main)/websites/[websiteId]/WebsitePage.tsx | 22 ++ .../(main)/websites/[websiteId]/WebsitePanels.tsx | 140 ++++++++++ .../(main)/websites/[websiteId]/WebsiteTabs.tsx | 64 +++++ .../[websiteId]/cohorts/CohortAddButton.tsx | 21 ++ .../[websiteId]/cohorts/CohortDeleteButton.tsx | 60 +++++ .../[websiteId]/cohorts/CohortEditButton.tsx | 37 +++ .../[websiteId]/cohorts/CohortEditForm.tsx | 135 ++++++++++ .../[websiteId]/cohorts/CohortsDataTable.tsx | 24 ++ .../websites/[websiteId]/cohorts/CohortsPage.tsx | 16 ++ .../websites/[websiteId]/cohorts/CohortsTable.tsx | 41 +++ .../(main)/websites/[websiteId]/cohorts/page.tsx | 12 + .../websites/[websiteId]/compare/ComparePage.tsx | 20 ++ .../websites/[websiteId]/compare/CompareTables.tsx | 171 ++++++++++++ .../(main)/websites/[websiteId]/compare/page.tsx | 12 + .../[websiteId]/events/EventProperties.tsx | 127 +++++++++ .../[websiteId]/events/EventsDataTable.tsx | 48 ++++ .../[websiteId]/events/EventsMetricsBar.tsx | 40 +++ .../websites/[websiteId]/events/EventsPage.tsx | 59 +++++ .../websites/[websiteId]/events/EventsTable.tsx | 107 ++++++++ .../(main)/websites/[websiteId]/events/page.tsx | 12 + src/app/(main)/websites/[websiteId]/layout.tsx | 21 ++ src/app/(main)/websites/[websiteId]/page.tsx | 12 + .../[websiteId]/realtime/RealtimeCountries.tsx | 31 +++ .../[websiteId]/realtime/RealtimeHeader.tsx | 17 ++ .../websites/[websiteId]/realtime/RealtimeLog.tsx | 206 +++++++++++++++ .../websites/[websiteId]/realtime/RealtimePage.tsx | 58 ++++ .../[websiteId]/realtime/RealtimePaths.tsx | 45 ++++ .../[websiteId]/realtime/RealtimeReferrers.tsx | 45 ++++ .../(main)/websites/[websiteId]/realtime/page.tsx | 12 + .../[websiteId]/segments/SegmentAddButton.tsx | 21 ++ .../[websiteId]/segments/SegmentDeleteButton.tsx | 60 +++++ .../[websiteId]/segments/SegmentEditButton.tsx | 37 +++ .../[websiteId]/segments/SegmentEditForm.tsx | 86 ++++++ .../[websiteId]/segments/SegmentsDataTable.tsx | 24 ++ .../websites/[websiteId]/segments/SegmentsPage.tsx | 16 ++ .../[websiteId]/segments/SegmentsTable.tsx | 38 +++ .../(main)/websites/[websiteId]/segments/page.tsx | 12 + .../[websiteId]/sessions/SessionActivity.tsx | 94 +++++++ .../websites/[websiteId]/sessions/SessionData.tsx | 32 +++ .../websites/[websiteId]/sessions/SessionInfo.tsx | 85 ++++++ .../websites/[websiteId]/sessions/SessionModal.tsx | 41 +++ .../[websiteId]/sessions/SessionProfile.tsx | 84 ++++++ .../[websiteId]/sessions/SessionProperties.tsx | 97 +++++++ .../websites/[websiteId]/sessions/SessionStats.tsx | 21 ++ .../[websiteId]/sessions/SessionsDataTable.tsx | 15 ++ .../[websiteId]/sessions/SessionsMetricsBar.tsx | 40 +++ .../websites/[websiteId]/sessions/SessionsPage.tsx | 43 +++ .../[websiteId]/sessions/SessionsTable.tsx | 58 ++++ .../(main)/websites/[websiteId]/sessions/page.tsx | 12 + .../websites/[websiteId]/settings/SettingsPage.tsx | 6 + .../websites/[websiteId]/settings/WebsiteData.tsx | 104 ++++++++ .../[websiteId]/settings/WebsiteDeleteForm.tsx | 40 +++ .../[websiteId]/settings/WebsiteEditForm.tsx | 55 ++++ .../[websiteId]/settings/WebsiteResetForm.tsx | 37 +++ .../[websiteId]/settings/WebsiteSettings.tsx | 28 ++ .../[websiteId]/settings/WebsiteSettingsHeader.tsx | 22 ++ .../[websiteId]/settings/WebsiteShareForm.tsx | 93 +++++++ .../[websiteId]/settings/WebsiteTrackingCode.tsx | 40 +++ .../[websiteId]/settings/WebsiteTransferForm.tsx | 102 +++++++ .../(main)/websites/[websiteId]/settings/page.tsx | 12 + src/app/(main)/websites/page.tsx | 10 + 233 files changed, 10611 insertions(+) create mode 100644 src/app/(main)/App.tsx create mode 100644 src/app/(main)/MobileNav.tsx create mode 100644 src/app/(main)/SideNav.tsx create mode 100644 src/app/(main)/TopNav.tsx create mode 100644 src/app/(main)/UpdateNotice.tsx create mode 100644 src/app/(main)/admin/AdminLayout.tsx create mode 100644 src/app/(main)/admin/AdminNav.tsx create mode 100644 src/app/(main)/admin/layout.tsx create mode 100644 src/app/(main)/admin/teams/AdminTeamsDataTable.tsx create mode 100644 src/app/(main)/admin/teams/AdminTeamsPage.tsx create mode 100644 src/app/(main)/admin/teams/AdminTeamsTable.tsx create mode 100644 src/app/(main)/admin/teams/[teamId]/AdminTeamPage.tsx create mode 100644 src/app/(main)/admin/teams/[teamId]/page.tsx create mode 100644 src/app/(main)/admin/teams/page.tsx create mode 100644 src/app/(main)/admin/users/UserAddButton.tsx create mode 100644 src/app/(main)/admin/users/UserAddForm.tsx create mode 100644 src/app/(main)/admin/users/UserDeleteButton.tsx create mode 100644 src/app/(main)/admin/users/UserDeleteForm.tsx create mode 100644 src/app/(main)/admin/users/UsersDataTable.tsx create mode 100644 src/app/(main)/admin/users/UsersPage.tsx create mode 100644 src/app/(main)/admin/users/UsersTable.tsx create mode 100644 src/app/(main)/admin/users/[userId]/UserEditForm.tsx create mode 100644 src/app/(main)/admin/users/[userId]/UserHeader.tsx create mode 100644 src/app/(main)/admin/users/[userId]/UserPage.tsx create mode 100644 src/app/(main)/admin/users/[userId]/UserProvider.tsx create mode 100644 src/app/(main)/admin/users/[userId]/UserSettings.tsx create mode 100644 src/app/(main)/admin/users/[userId]/UserWebsites.tsx create mode 100644 src/app/(main)/admin/users/[userId]/page.tsx create mode 100644 src/app/(main)/admin/users/page.tsx create mode 100644 src/app/(main)/admin/websites/AdminWebsitesDataTable.tsx create mode 100644 src/app/(main)/admin/websites/AdminWebsitesPage.tsx create mode 100644 src/app/(main)/admin/websites/AdminWebsitesTable.tsx create mode 100644 src/app/(main)/admin/websites/[websiteId]/AdminWebsitePage.tsx create mode 100644 src/app/(main)/admin/websites/[websiteId]/page.tsx create mode 100644 src/app/(main)/admin/websites/page.tsx create mode 100644 src/app/(main)/boards/BoardAddButton.tsx create mode 100644 src/app/(main)/boards/BoardAddForm.tsx create mode 100644 src/app/(main)/boards/BoardsPage.tsx create mode 100644 src/app/(main)/boards/[boardId]/Board.tsx create mode 100644 src/app/(main)/boards/[boardId]/page.tsx create mode 100644 src/app/(main)/boards/page.tsx create mode 100644 src/app/(main)/console/[websiteId]/TestConsolePage.tsx create mode 100644 src/app/(main)/console/[websiteId]/page.tsx create mode 100644 src/app/(main)/dashboard/DashboardPage.tsx create mode 100644 src/app/(main)/dashboard/page.tsx create mode 100644 src/app/(main)/layout.tsx create mode 100644 src/app/(main)/links/LinkAddButton.tsx create mode 100644 src/app/(main)/links/LinkDeleteButton.tsx create mode 100644 src/app/(main)/links/LinkEditButton.tsx create mode 100644 src/app/(main)/links/LinkEditForm.tsx create mode 100644 src/app/(main)/links/LinkProvider.tsx create mode 100644 src/app/(main)/links/LinksDataTable.tsx create mode 100644 src/app/(main)/links/LinksPage.tsx create mode 100644 src/app/(main)/links/LinksTable.tsx create mode 100644 src/app/(main)/links/[linkId]/LinkControls.tsx create mode 100644 src/app/(main)/links/[linkId]/LinkHeader.tsx create mode 100644 src/app/(main)/links/[linkId]/LinkMetricsBar.tsx create mode 100644 src/app/(main)/links/[linkId]/LinkPage.tsx create mode 100644 src/app/(main)/links/[linkId]/LinkPanels.tsx create mode 100644 src/app/(main)/links/[linkId]/page.tsx create mode 100644 src/app/(main)/links/page.tsx create mode 100644 src/app/(main)/pixels/PixelAddButton.tsx create mode 100644 src/app/(main)/pixels/PixelDeleteButton.tsx create mode 100644 src/app/(main)/pixels/PixelEditButton.tsx create mode 100644 src/app/(main)/pixels/PixelEditForm.tsx create mode 100644 src/app/(main)/pixels/PixelProvider.tsx create mode 100644 src/app/(main)/pixels/PixelsDataTable.tsx create mode 100644 src/app/(main)/pixels/PixelsPage.tsx create mode 100644 src/app/(main)/pixels/PixelsTable.tsx create mode 100644 src/app/(main)/pixels/[pixelId]/PixelControls.tsx create mode 100644 src/app/(main)/pixels/[pixelId]/PixelHeader.tsx create mode 100644 src/app/(main)/pixels/[pixelId]/PixelMetricsBar.tsx create mode 100644 src/app/(main)/pixels/[pixelId]/PixelPage.tsx create mode 100644 src/app/(main)/pixels/[pixelId]/PixelPanels.tsx create mode 100644 src/app/(main)/pixels/[pixelId]/page.tsx create mode 100644 src/app/(main)/pixels/page.tsx create mode 100644 src/app/(main)/settings/SettingsLayout.tsx create mode 100644 src/app/(main)/settings/SettingsNav.tsx create mode 100644 src/app/(main)/settings/layout.tsx create mode 100644 src/app/(main)/settings/preferences/DateRangeSetting.tsx create mode 100644 src/app/(main)/settings/preferences/LanguageSetting.tsx create mode 100644 src/app/(main)/settings/preferences/PreferenceSettings.tsx create mode 100644 src/app/(main)/settings/preferences/PreferencesPage.tsx create mode 100644 src/app/(main)/settings/preferences/ThemeSetting.tsx create mode 100644 src/app/(main)/settings/preferences/TimezoneSetting.tsx create mode 100644 src/app/(main)/settings/preferences/page.tsx create mode 100644 src/app/(main)/settings/profile/PasswordChangeButton.tsx create mode 100644 src/app/(main)/settings/profile/PasswordEditForm.tsx create mode 100644 src/app/(main)/settings/profile/ProfileHeader.tsx create mode 100644 src/app/(main)/settings/profile/ProfilePage.tsx create mode 100644 src/app/(main)/settings/profile/ProfileSettings.tsx create mode 100644 src/app/(main)/settings/profile/page.tsx create mode 100644 src/app/(main)/settings/teams/TeamsSettingsPage.tsx create mode 100644 src/app/(main)/settings/teams/[teamId]/TeamSettingsPage.tsx create mode 100644 src/app/(main)/settings/teams/[teamId]/page.tsx create mode 100644 src/app/(main)/settings/teams/page.tsx create mode 100644 src/app/(main)/settings/websites/WebsitesSettingsPage.tsx create mode 100644 src/app/(main)/settings/websites/[websiteId]/WebsiteSettingsPage.tsx create mode 100644 src/app/(main)/settings/websites/[websiteId]/page.tsx create mode 100644 src/app/(main)/settings/websites/page.tsx create mode 100644 src/app/(main)/teams/TeamAddForm.tsx create mode 100644 src/app/(main)/teams/TeamJoinForm.tsx create mode 100644 src/app/(main)/teams/TeamLeaveButton.tsx create mode 100644 src/app/(main)/teams/TeamLeaveForm.tsx create mode 100644 src/app/(main)/teams/TeamProvider.tsx create mode 100644 src/app/(main)/teams/TeamsAddButton.tsx create mode 100644 src/app/(main)/teams/TeamsDataTable.tsx create mode 100644 src/app/(main)/teams/TeamsHeader.tsx create mode 100644 src/app/(main)/teams/TeamsJoinButton.tsx create mode 100644 src/app/(main)/teams/TeamsPage.tsx create mode 100644 src/app/(main)/teams/TeamsTable.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamDeleteForm.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamEditForm.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamManage.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamMemberEditButton.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamMemberRemoveButton.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamMembersDataTable.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamMembersTable.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamSettings.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamWebsiteRemoveButton.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamWebsitesDataTable.tsx create mode 100644 src/app/(main)/teams/[teamId]/TeamWebsitesTable.tsx create mode 100644 src/app/(main)/teams/page.tsx create mode 100644 src/app/(main)/websites/WebsiteAddButton.tsx create mode 100644 src/app/(main)/websites/WebsiteAddForm.tsx create mode 100644 src/app/(main)/websites/WebsiteProvider.tsx create mode 100644 src/app/(main)/websites/WebsitesDataTable.tsx create mode 100644 src/app/(main)/websites/WebsitesHeader.tsx create mode 100644 src/app/(main)/websites/WebsitesPage.tsx create mode 100644 src/app/(main)/websites/WebsitesTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/attribution/Attribution.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/attribution/AttributionPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/attribution/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/breakdown/Breakdown.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/breakdown/BreakdownPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/breakdown/FieldSelectForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/breakdown/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/funnels/Funnel.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelAddButton.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelEditForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/funnels/FunnelsPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/funnels/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/goals/Goal.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/goals/GoalAddButton.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/goals/GoalEditForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/goals/GoalsPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/goals/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/journeys/Journey.module.css create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/journeys/Journey.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/journeys/JourneysPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/journeys/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/retention/Retention.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/retention/RetentionPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/retention/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/revenue/Revenue.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenuePage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/revenue/RevenueTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/revenue/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/utm/UTM.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/utm/UTMPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/(reports)/utm/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/ExpandedViewModal.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteChart.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteControls.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteHeader.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteLayout.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteNav.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsitePage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsitePanels.tsx create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteTabs.tsx create mode 100644 src/app/(main)/websites/[websiteId]/cohorts/CohortAddButton.tsx create mode 100644 src/app/(main)/websites/[websiteId]/cohorts/CohortDeleteButton.tsx create mode 100644 src/app/(main)/websites/[websiteId]/cohorts/CohortEditButton.tsx create mode 100644 src/app/(main)/websites/[websiteId]/cohorts/CohortEditForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/cohorts/CohortsDataTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/cohorts/CohortsPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/cohorts/CohortsTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/cohorts/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/compare/ComparePage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/compare/CompareTables.tsx create mode 100644 src/app/(main)/websites/[websiteId]/compare/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/events/EventProperties.tsx create mode 100644 src/app/(main)/websites/[websiteId]/events/EventsDataTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/events/EventsMetricsBar.tsx create mode 100644 src/app/(main)/websites/[websiteId]/events/EventsPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/events/EventsTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/events/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/layout.tsx create mode 100644 src/app/(main)/websites/[websiteId]/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/realtime/RealtimeCountries.tsx create mode 100644 src/app/(main)/websites/[websiteId]/realtime/RealtimeHeader.tsx create mode 100644 src/app/(main)/websites/[websiteId]/realtime/RealtimeLog.tsx create mode 100644 src/app/(main)/websites/[websiteId]/realtime/RealtimePage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/realtime/RealtimePaths.tsx create mode 100644 src/app/(main)/websites/[websiteId]/realtime/RealtimeReferrers.tsx create mode 100644 src/app/(main)/websites/[websiteId]/realtime/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/segments/SegmentAddButton.tsx create mode 100644 src/app/(main)/websites/[websiteId]/segments/SegmentDeleteButton.tsx create mode 100644 src/app/(main)/websites/[websiteId]/segments/SegmentEditButton.tsx create mode 100644 src/app/(main)/websites/[websiteId]/segments/SegmentEditForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/segments/SegmentsDataTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/segments/SegmentsPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/segments/SegmentsTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/segments/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionActivity.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionData.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionInfo.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionModal.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionProfile.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionProperties.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionStats.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionsDataTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionsMetricsBar.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionsPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/SessionsTable.tsx create mode 100644 src/app/(main)/websites/[websiteId]/sessions/page.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/SettingsPage.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/WebsiteData.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/WebsiteDeleteForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/WebsiteEditForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/WebsiteResetForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/WebsiteSettings.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/WebsiteSettingsHeader.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/WebsiteShareForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/WebsiteTrackingCode.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/WebsiteTransferForm.tsx create mode 100644 src/app/(main)/websites/[websiteId]/settings/page.tsx create mode 100644 src/app/(main)/websites/page.tsx (limited to 'src/app/(main)') diff --git a/src/app/(main)/App.tsx b/src/app/(main)/App.tsx new file mode 100644 index 0000000..eada680 --- /dev/null +++ b/src/app/(main)/App.tsx @@ -0,0 +1,62 @@ +'use client'; +import { Column, Grid, Loading, Row } from '@umami/react-zen'; +import Script from 'next/script'; +import { useEffect } from 'react'; +import { MobileNav } from '@/app/(main)/MobileNav'; +import { SideNav } from '@/app/(main)/SideNav'; +import { useConfig, useLoginQuery, useNavigation } from '@/components/hooks'; +import { LAST_TEAM_CONFIG } from '@/lib/constants'; +import { removeItem, setItem } from '@/lib/storage'; +import { UpdateNotice } from './UpdateNotice'; + +export function App({ children }) { + const { user, isLoading, error } = useLoginQuery(); + const config = useConfig(); + const { pathname, teamId } = useNavigation(); + + useEffect(() => { + if (teamId) { + setItem(LAST_TEAM_CONFIG, teamId); + } else { + removeItem(LAST_TEAM_CONFIG); + } + }, [teamId]); + + if (isLoading || !config) { + return ; + } + + if (error) { + window.location.href = config.cloudMode + ? `${process.env.cloudUrl}/login` + : `${process.env.basePath || ''}/login`; + return null; + } + + if (!user || !config) { + return null; + } + + return ( + + + + + + + + + {children} + + + {process.env.NODE_ENV === 'production' && !pathname.includes('/share/') && ( + `; + + return ( + + + {formatMessage(messages.trackingCode)} + + + ); +} diff --git a/src/app/(main)/websites/[websiteId]/settings/WebsiteTransferForm.tsx b/src/app/(main)/websites/[websiteId]/settings/WebsiteTransferForm.tsx new file mode 100644 index 0000000..8af4f05 --- /dev/null +++ b/src/app/(main)/websites/[websiteId]/settings/WebsiteTransferForm.tsx @@ -0,0 +1,102 @@ +import { + Button, + Form, + FormButtons, + FormField, + FormSubmitButton, + ListItem, + Loading, + Select, + Text, +} from '@umami/react-zen'; +import { type Key, useState } from 'react'; +import { + useLoginQuery, + useMessages, + useUpdateQuery, + useUserTeamsQuery, + useWebsite, +} from '@/components/hooks'; +import { ROLES } from '@/lib/constants'; + +export function WebsiteTransferForm({ + websiteId, + onSave, + onClose, +}: { + websiteId: string; + onSave?: () => void; + onClose?: () => void; +}) { + const { user } = useLoginQuery(); + const website = useWebsite(); + const [teamId, setTeamId] = useState(null); + const { formatMessage, labels, messages, getErrorMessage } = useMessages(); + const { mutateAsync, error, isPending } = useUpdateQuery(`/websites/${websiteId}/transfer`); + const { data: teams, isLoading } = useUserTeamsQuery(user.id); + const isTeamWebsite = !!website?.teamId; + + const items = + teams?.data?.filter(({ members }) => + members.some( + ({ role, userId }) => + [ROLES.teamOwner, ROLES.teamManager].includes(role) && userId === user.id, + ), + ) || []; + + const handleSubmit = async () => { + await mutateAsync( + { + userId: website.teamId ? user.id : undefined, + teamId: website.userId ? teamId : undefined, + }, + { + onSuccess: async () => { + onSave?.(); + onClose?.(); + }, + }, + ); + }; + + const handleChange = (key: Key) => { + setTeamId(key as string); + }; + + if (isLoading) { + return ; + } + + return ( +
+ + {formatMessage( + isTeamWebsite ? messages.transferTeamWebsiteToUser : messages.transferUserWebsiteToTeam, + )} + + + {!isTeamWebsite && ( + + )} + + + + + {formatMessage(labels.transfer)} + + +
+ ); +} diff --git a/src/app/(main)/websites/[websiteId]/settings/page.tsx b/src/app/(main)/websites/[websiteId]/settings/page.tsx new file mode 100644 index 0000000..a26d14f --- /dev/null +++ b/src/app/(main)/websites/[websiteId]/settings/page.tsx @@ -0,0 +1,12 @@ +import type { Metadata } from 'next'; +import { SettingsPage } from './SettingsPage'; + +export default async function ({ params }: { params: Promise<{ websiteId: string }> }) { + const { websiteId } = await params; + + return ; +} + +export const metadata: Metadata = { + title: 'Settings', +}; diff --git a/src/app/(main)/websites/page.tsx b/src/app/(main)/websites/page.tsx new file mode 100644 index 0000000..cefaf80 --- /dev/null +++ b/src/app/(main)/websites/page.tsx @@ -0,0 +1,10 @@ +import type { Metadata } from 'next'; +import { WebsitesPage } from './WebsitesPage'; + +export default function () { + return ; +} + +export const metadata: Metadata = { + title: 'Websites', +}; -- cgit v1.2.3