@burdenoff/microfe-ggnomad 2026.728.3 → 2026.730.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"GGNomadRoutes.d.ts","sourceRoot":"","sources":["../../src/ggnomad/GGNomadRoutes.tsx"],"names":[],"mappings":"AAmEA,wBAAgB,aAAa,gCA2B5B"}
1
+ {"version":3,"file":"GGNomadRoutes.d.ts","sourceRoot":"","sources":["../../src/ggnomad/GGNomadRoutes.tsx"],"names":[],"mappings":"AAyEA,wBAAgB,aAAa,gCA6B5B"}
@@ -4,16 +4,16 @@ import { Loader2 as r } from "lucide-react";
4
4
  import { Navigate as i, Route as a, Routes as o } from "react-router-dom";
5
5
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
6
  //#region src/ggnomad/GGNomadRoutes.tsx
7
- var l = n(() => import("./pages/SearchPage.js").then((e) => ({ default: e.SearchPage }))), u = n(() => import("./pages/TravelPage.js").then((e) => ({ default: e.TravelPage }))), d = n(() => import("./pages/HospitalityPage.js").then((e) => ({ default: e.HospitalityPage }))), f = n(() => import("./pages/PropertyDetailsPage.js").then((e) => ({ default: e.PropertyDetailsPage }))), p = n(() => import("./pages/TourismPage.js").then((e) => ({ default: e.TourismPage }))), m = n(() => import("./pages/TourDetailsPage.js").then((e) => ({ default: e.TourDetailsPage }))), h = n(() => import("./pages/ActivityDetailsPage.js").then((e) => ({ default: e.ActivityDetailsPage }))), g = n(() => import("./pages/EntertainmentPage.js").then((e) => ({ default: e.EntertainmentPage }))), _ = n(() => import("./pages/EventDetailsPage.js").then((e) => ({ default: e.EventDetailsPage }))), v = n(() => import("./pages/BookingsPage.js").then((e) => ({ default: e.BookingsPage }))), y = n(() => import("./pages/FavoritesPage.js").then((e) => ({ default: e.FavoritesPage }))), b = n(() => import("./pages/ProviderPage.js").then((e) => ({ default: e.ProviderPage }))), x = n(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), S = n(() => import("./pages/ProviderAnalyticsPage.js").then((e) => ({ default: e.ProviderAnalyticsPage }))), C = n(() => import("./pages/TripsPage.js").then((e) => ({ default: e.TripsPage }))), w = n(() => import("./pages/TripPlanDetailPage.js").then((e) => ({ default: e.TripPlanDetailPage }))), T = n(() => import("./pages/TravelPolicyPage.js").then((e) => ({ default: e.TravelPolicyPage }))), E = n(() => import("./pages/OperationsQueuePage.js").then((e) => ({ default: e.OperationsQueuePage })));
8
- function D() {
7
+ var l = n(() => import("./pages/SearchPage.js").then((e) => ({ default: e.SearchPage }))), u = n(() => import("./pages/TravelPage.js").then((e) => ({ default: e.TravelPage }))), d = n(() => import("./pages/HospitalityPage.js").then((e) => ({ default: e.HospitalityPage }))), f = n(() => import("./pages/PropertyDetailsPage.js").then((e) => ({ default: e.PropertyDetailsPage }))), p = n(() => import("./pages/TourismPage.js").then((e) => ({ default: e.TourismPage }))), m = n(() => import("./pages/TourDetailsPage.js").then((e) => ({ default: e.TourDetailsPage }))), h = n(() => import("./pages/ActivityDetailsPage.js").then((e) => ({ default: e.ActivityDetailsPage }))), g = n(() => import("./pages/EntertainmentPage.js").then((e) => ({ default: e.EntertainmentPage }))), _ = n(() => import("./pages/EventDetailsPage.js").then((e) => ({ default: e.EventDetailsPage }))), v = n(() => import("./pages/BookingsPage.js").then((e) => ({ default: e.BookingsPage }))), y = n(() => import("./pages/FavoritesPage.js").then((e) => ({ default: e.FavoritesPage }))), b = n(() => import("./pages/ProviderPage.js").then((e) => ({ default: e.ProviderPage }))), x = n(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), S = n(() => import("./pages/ProviderAnalyticsPage.js").then((e) => ({ default: e.ProviderAnalyticsPage }))), C = n(() => import("./pages/TripsPage.js").then((e) => ({ default: e.TripsPage }))), w = n(() => import("./pages/TripPlanDetailPage.js").then((e) => ({ default: e.TripPlanDetailPage }))), T = n(() => import("./pages/TravelPolicyPage.js").then((e) => ({ default: e.TravelPolicyPage }))), E = n(() => import("./pages/OperationsQueuePage.js").then((e) => ({ default: e.OperationsQueuePage }))), D = n(() => import("./pages/StorefrontPage.js").then((e) => ({ default: e.StorefrontPage }))), O = n(() => import("./pages/StorefrontPublicPage.js").then((e) => ({ default: e.StorefrontPublicPage })));
8
+ function k() {
9
9
  return /* @__PURE__ */ s("div", {
10
10
  className: "flex min-h-[320px] items-center justify-center",
11
11
  children: /* @__PURE__ */ s(r, { className: "h-8 w-8 animate-spin text-primary" })
12
12
  });
13
13
  }
14
- function O() {
14
+ function A() {
15
15
  return /* @__PURE__ */ s(t, {
16
- fallback: /* @__PURE__ */ s(D, {}),
16
+ fallback: /* @__PURE__ */ s(k, {}),
17
17
  children: /* @__PURE__ */ c(o, { children: [
18
18
  /* @__PURE__ */ s(a, {
19
19
  index: !0,
@@ -79,6 +79,14 @@ function O() {
79
79
  path: "provider/analytics",
80
80
  element: /* @__PURE__ */ s(S, {})
81
81
  }),
82
+ /* @__PURE__ */ s(a, {
83
+ path: "provider/:providerId/storefront",
84
+ element: /* @__PURE__ */ s(D, {})
85
+ }),
86
+ /* @__PURE__ */ s(a, {
87
+ path: "store/:slug",
88
+ element: /* @__PURE__ */ s(O, {})
89
+ }),
82
90
  /* @__PURE__ */ s(a, {
83
91
  path: "analytics",
84
92
  element: /* @__PURE__ */ s(x, {})
@@ -102,6 +110,6 @@ function O() {
102
110
  });
103
111
  }
104
112
  //#endregion
105
- export { O as GGNomadRoutes };
113
+ export { A as GGNomadRoutes };
106
114
 
107
115
  //# sourceMappingURL=GGNomadRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GGNomadRoutes.js","names":[],"sources":["../../src/ggnomad/GGNomadRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\n\nimport { DashboardPage } from './pages/DashboardPage';\n\nconst SearchPage = lazy(() =>\n import('./pages/SearchPage').then((m) => ({ default: m.SearchPage }))\n);\nconst TravelPage = lazy(() =>\n import('./pages/TravelPage').then((m) => ({ default: m.TravelPage }))\n);\nconst HospitalityPage = lazy(() =>\n import('./pages/HospitalityPage').then((m) => ({ default: m.HospitalityPage }))\n);\nconst PropertyDetailsPage = lazy(() =>\n import('./pages/PropertyDetailsPage').then((m) => ({ default: m.PropertyDetailsPage }))\n);\nconst TourismPage = lazy(() =>\n import('./pages/TourismPage').then((m) => ({ default: m.TourismPage }))\n);\nconst TourDetailsPage = lazy(() =>\n import('./pages/TourDetailsPage').then((m) => ({ default: m.TourDetailsPage }))\n);\nconst ActivityDetailsPage = lazy(() =>\n import('./pages/ActivityDetailsPage').then((m) => ({ default: m.ActivityDetailsPage }))\n);\nconst EntertainmentPage = lazy(() =>\n import('./pages/EntertainmentPage').then((m) => ({ default: m.EntertainmentPage }))\n);\nconst EventDetailsPage = lazy(() =>\n import('./pages/EventDetailsPage').then((m) => ({ default: m.EventDetailsPage }))\n);\nconst BookingsPage = lazy(() =>\n import('./pages/BookingsPage').then((m) => ({ default: m.BookingsPage }))\n);\nconst FavoritesPage = lazy(() =>\n import('./pages/FavoritesPage').then((m) => ({ default: m.FavoritesPage }))\n);\nconst ProviderPage = lazy(() =>\n import('./pages/ProviderPage').then((m) => ({ default: m.ProviderPage }))\n);\nconst AnalyticsPage = lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst ProviderAnalyticsPage = lazy(() =>\n import('./pages/ProviderAnalyticsPage').then((m) => ({ default: m.ProviderAnalyticsPage }))\n);\nconst TripsPage = lazy(() => import('./pages/TripsPage').then((m) => ({ default: m.TripsPage })));\nconst TripPlanDetailPage = lazy(() =>\n import('./pages/TripPlanDetailPage').then((m) => ({ default: m.TripPlanDetailPage }))\n);\nconst TravelPolicyPage = lazy(() =>\n import('./pages/TravelPolicyPage').then((m) => ({ default: m.TravelPolicyPage }))\n);\nconst OperationsQueuePage = lazy(() =>\n import('./pages/OperationsQueuePage').then((m) => ({ default: m.OperationsQueuePage }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nexport function GGNomadRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<DashboardPage />} />\n <Route path=\"search\" element={<SearchPage />} />\n <Route path=\"travel\" element={<TravelPage />} />\n <Route path=\"hospitality\" element={<HospitalityPage />} />\n <Route path=\"hospitality/:id\" element={<PropertyDetailsPage />} />\n <Route path=\"tourism\" element={<TourismPage />} />\n <Route path=\"tourism/tours/:id\" element={<TourDetailsPage />} />\n <Route path=\"tourism/activities/:id\" element={<ActivityDetailsPage />} />\n <Route path=\"entertainment\" element={<EntertainmentPage />} />\n <Route path=\"entertainment/:id\" element={<EventDetailsPage />} />\n <Route path=\"bookings\" element={<BookingsPage />} />\n <Route path=\"travel-policy\" element={<TravelPolicyPage />} />\n <Route path=\"operations\" element={<OperationsQueuePage />} />\n <Route path=\"favorites\" element={<FavoritesPage />} />\n <Route path=\"provider\" element={<ProviderPage />} />\n <Route path=\"provider/analytics\" element={<ProviderAnalyticsPage />} />\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n <Route path=\"trips\" element={<TripsPage />} />\n <Route path=\"trips/:id\" element={<TripPlanDetailPage />} />\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"GGNomadRoutes.js","names":[],"sources":["../../src/ggnomad/GGNomadRoutes.tsx"],"sourcesContent":["import { lazy, Suspense } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport { Navigate, Route, Routes } from 'react-router-dom';\n\nimport { DashboardPage } from './pages/DashboardPage';\n\nconst SearchPage = lazy(() =>\n import('./pages/SearchPage').then((m) => ({ default: m.SearchPage }))\n);\nconst TravelPage = lazy(() =>\n import('./pages/TravelPage').then((m) => ({ default: m.TravelPage }))\n);\nconst HospitalityPage = lazy(() =>\n import('./pages/HospitalityPage').then((m) => ({ default: m.HospitalityPage }))\n);\nconst PropertyDetailsPage = lazy(() =>\n import('./pages/PropertyDetailsPage').then((m) => ({ default: m.PropertyDetailsPage }))\n);\nconst TourismPage = lazy(() =>\n import('./pages/TourismPage').then((m) => ({ default: m.TourismPage }))\n);\nconst TourDetailsPage = lazy(() =>\n import('./pages/TourDetailsPage').then((m) => ({ default: m.TourDetailsPage }))\n);\nconst ActivityDetailsPage = lazy(() =>\n import('./pages/ActivityDetailsPage').then((m) => ({ default: m.ActivityDetailsPage }))\n);\nconst EntertainmentPage = lazy(() =>\n import('./pages/EntertainmentPage').then((m) => ({ default: m.EntertainmentPage }))\n);\nconst EventDetailsPage = lazy(() =>\n import('./pages/EventDetailsPage').then((m) => ({ default: m.EventDetailsPage }))\n);\nconst BookingsPage = lazy(() =>\n import('./pages/BookingsPage').then((m) => ({ default: m.BookingsPage }))\n);\nconst FavoritesPage = lazy(() =>\n import('./pages/FavoritesPage').then((m) => ({ default: m.FavoritesPage }))\n);\nconst ProviderPage = lazy(() =>\n import('./pages/ProviderPage').then((m) => ({ default: m.ProviderPage }))\n);\nconst AnalyticsPage = lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst ProviderAnalyticsPage = lazy(() =>\n import('./pages/ProviderAnalyticsPage').then((m) => ({ default: m.ProviderAnalyticsPage }))\n);\nconst TripsPage = lazy(() => import('./pages/TripsPage').then((m) => ({ default: m.TripsPage })));\nconst TripPlanDetailPage = lazy(() =>\n import('./pages/TripPlanDetailPage').then((m) => ({ default: m.TripPlanDetailPage }))\n);\nconst TravelPolicyPage = lazy(() =>\n import('./pages/TravelPolicyPage').then((m) => ({ default: m.TravelPolicyPage }))\n);\nconst OperationsQueuePage = lazy(() =>\n import('./pages/OperationsQueuePage').then((m) => ({ default: m.OperationsQueuePage }))\n);\nconst StorefrontPage = lazy(() =>\n import('./pages/StorefrontPage').then((m) => ({ default: m.StorefrontPage }))\n);\nconst StorefrontPublicPage = lazy(() =>\n import('./pages/StorefrontPublicPage').then((m) => ({ default: m.StorefrontPublicPage }))\n);\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-primary\" />\n </div>\n );\n}\n\nexport function GGNomadRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n <Route index element={<DashboardPage />} />\n <Route path=\"search\" element={<SearchPage />} />\n <Route path=\"travel\" element={<TravelPage />} />\n <Route path=\"hospitality\" element={<HospitalityPage />} />\n <Route path=\"hospitality/:id\" element={<PropertyDetailsPage />} />\n <Route path=\"tourism\" element={<TourismPage />} />\n <Route path=\"tourism/tours/:id\" element={<TourDetailsPage />} />\n <Route path=\"tourism/activities/:id\" element={<ActivityDetailsPage />} />\n <Route path=\"entertainment\" element={<EntertainmentPage />} />\n <Route path=\"entertainment/:id\" element={<EventDetailsPage />} />\n <Route path=\"bookings\" element={<BookingsPage />} />\n <Route path=\"travel-policy\" element={<TravelPolicyPage />} />\n <Route path=\"operations\" element={<OperationsQueuePage />} />\n <Route path=\"favorites\" element={<FavoritesPage />} />\n <Route path=\"provider\" element={<ProviderPage />} />\n <Route path=\"provider/analytics\" element={<ProviderAnalyticsPage />} />\n <Route path=\"provider/:providerId/storefront\" element={<StorefrontPage />} />\n <Route path=\"store/:slug\" element={<StorefrontPublicPage />} />\n <Route path=\"analytics\" element={<AnalyticsPage />} />\n <Route path=\"trips\" element={<TripsPage />} />\n <Route path=\"trips/:id\" element={<TripPlanDetailPage />} />\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
@@ -70,4 +70,10 @@ export declare const MARK_GGNOMAD_BOOKING_NO_SHOW_MUTATION: import('graphql').Do
70
70
  export declare const GGNOMAD_AUDIT_LOG_QUERY: import('graphql').DocumentNode;
71
71
  export declare const GGNOMAD_MY_PROVIDERS_QUERY: import('graphql').DocumentNode;
72
72
  export declare const GGNOMAD_MY_PROVIDER_ANALYTICS_QUERY: import('graphql').DocumentNode;
73
+ export declare const GGNOMAD_OPERATOR_STOREFRONT_QUERY: import('graphql').DocumentNode;
74
+ export declare const GGNOMAD_STOREFRONT_BY_SLUG_QUERY: import('graphql').DocumentNode;
75
+ export declare const CREATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION: import('graphql').DocumentNode;
76
+ export declare const UPDATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION: import('graphql').DocumentNode;
77
+ export declare const PUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION: import('graphql').DocumentNode;
78
+ export declare const UNPUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION: import('graphql').DocumentNode;
73
79
  //# sourceMappingURL=graphql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/ggnomad/graphql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/ggnomad/graphql.ts"],"names":[],"mappings":"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"}
@@ -531,7 +531,7 @@ e`
531
531
  }
532
532
  }
533
533
  `;
534
- var j = e`
534
+ var ee = e`
535
535
  mutation UpdateGGNomadProperty($id: ID!, $input: UpdateGgnomadPropertyInput!) {
536
536
  updateGgnomadProperty(id: $id, input: $input) {
537
537
  id
@@ -542,7 +542,7 @@ var j = e`
542
542
  images
543
543
  }
544
544
  }
545
- `, M = e`
545
+ `, j = e`
546
546
  mutation UpdateGGNomadTour($id: ID!, $input: UpdateGgnomadTourInput!) {
547
547
  updateGgnomadTour(id: $id, input: $input) {
548
548
  id
@@ -553,7 +553,7 @@ var j = e`
553
553
  images
554
554
  }
555
555
  }
556
- `, N = e`
556
+ `, M = e`
557
557
  mutation UpdateGGNomadEvent($id: ID!, $input: UpdateGgnomadEventInput!) {
558
558
  updateGgnomadEvent(id: $id, input: $input) {
559
559
  id
@@ -564,7 +564,7 @@ var j = e`
564
564
  images
565
565
  }
566
566
  }
567
- `, P = e`
567
+ `, N = e`
568
568
  mutation UpdateGGNomadActivity($id: ID!, $input: UpdateGgnomadActivityInput!) {
569
569
  updateGgnomadActivity(id: $id, input: $input) {
570
570
  id
@@ -575,7 +575,7 @@ var j = e`
575
575
  images
576
576
  }
577
577
  }
578
- `, F = e`
578
+ `, P = e`
579
579
  query GGNomadTravelPolicies($limit: Int, $offset: Int) {
580
580
  ggnomadTravelPolicies(pagination: { limit: $limit, offset: $offset }) {
581
581
  id
@@ -591,7 +591,7 @@ var j = e`
591
591
  createdAt
592
592
  }
593
593
  }
594
- `, I = e`
594
+ `, F = e`
595
595
  mutation CreateGGNomadTravelPolicy($input: CreateGgnomadTravelPolicyInput!) {
596
596
  createGgnomadTravelPolicy(input: $input) {
597
597
  id
@@ -615,11 +615,11 @@ e`
615
615
  }
616
616
  }
617
617
  `;
618
- var L = e`
618
+ var I = e`
619
619
  mutation DeleteGGNomadTravelPolicy($id: ID!) {
620
620
  deleteGgnomadTravelPolicy(id: $id)
621
621
  }
622
- `, R = e`
622
+ `, L = e`
623
623
  query GGNomadBookingApprovals($status: GgnomadApprovalStatus, $limit: Int, $offset: Int) {
624
624
  ggnomadBookingApprovals(status: $status, pagination: { limit: $limit, offset: $offset }) {
625
625
  id
@@ -643,7 +643,7 @@ var L = e`
643
643
  }
644
644
  }
645
645
  }
646
- `, z = e`
646
+ `, R = e`
647
647
  mutation ApproveGGNomadBookingApproval($id: ID!, $note: String) {
648
648
  approveGgnomadBookingApproval(id: $id, note: $note) {
649
649
  id
@@ -652,7 +652,7 @@ var L = e`
652
652
  reviewedAt
653
653
  }
654
654
  }
655
- `, B = e`
655
+ `, z = e`
656
656
  mutation RejectGGNomadBookingApproval($id: ID!, $reason: String!) {
657
657
  rejectGgnomadBookingApproval(id: $id, reason: $reason) {
658
658
  id
@@ -662,7 +662,7 @@ var L = e`
662
662
  reviewNote
663
663
  }
664
664
  }
665
- `, V = e`
665
+ `, B = e`
666
666
  query GGNomadSpendSummary($costCenter: String) {
667
667
  ggnomadSpendSummary(costCenter: $costCenter) {
668
668
  totalSpend
@@ -672,53 +672,53 @@ var L = e`
672
672
  byCostCenter
673
673
  }
674
674
  }
675
- `, H = "\n __typename\n ... on GgnomadProperty {\n id\n name\n status\n pricePerNight\n currency\n providerId\n updatedAt\n }\n ... on GgnomadTour {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n ... on GgnomadEvent {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n ... on GgnomadActivity {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n", U = e`
675
+ `, V = "\n __typename\n ... on GgnomadProperty {\n id\n name\n status\n pricePerNight\n currency\n providerId\n updatedAt\n }\n ... on GgnomadTour {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n ... on GgnomadEvent {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n ... on GgnomadActivity {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n", H = e`
676
676
  query GGNomadListingReviewQueue($limit: Int, $offset: Int) {
677
677
  ggnomadListingReviewQueue(pagination: { limit: $limit, offset: $offset }) {
678
- ${H}
678
+ ${V}
679
679
  }
680
680
  }
681
681
  `;
682
682
  e`
683
683
  mutation SubmitGGNomadListingForReview($listingType: GgnomadListingType!, $id: ID!) {
684
684
  submitGgnomadListingForReview(listingType: $listingType, id: $id) {
685
- ${H}
685
+ ${V}
686
686
  }
687
687
  }
688
688
  `;
689
- var W = e`
689
+ var U = e`
690
690
  mutation ApproveGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $note: String) {
691
691
  approveGgnomadListing(listingType: $listingType, id: $id, note: $note) {
692
- ${H}
692
+ ${V}
693
693
  }
694
694
  }
695
- `, G = e`
695
+ `, W = e`
696
696
  mutation RejectGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $reason: String!) {
697
697
  rejectGgnomadListing(listingType: $listingType, id: $id, reason: $reason) {
698
- ${H}
698
+ ${V}
699
699
  }
700
700
  }
701
701
  `;
702
702
  e`
703
703
  mutation PauseGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $reason: String) {
704
704
  pauseGgnomadListing(listingType: $listingType, id: $id, reason: $reason) {
705
- ${H}
705
+ ${V}
706
706
  }
707
707
  }
708
708
  `, e`
709
709
  mutation ResumeGGNomadListing($listingType: GgnomadListingType!, $id: ID!) {
710
710
  resumeGgnomadListing(listingType: $listingType, id: $id) {
711
- ${H}
711
+ ${V}
712
712
  }
713
713
  }
714
714
  `, e`
715
715
  mutation ArchiveGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $reason: String) {
716
716
  archiveGgnomadListing(listingType: $listingType, id: $id, reason: $reason) {
717
- ${H}
717
+ ${V}
718
718
  }
719
719
  }
720
720
  `;
721
- var K = e`
721
+ var G = e`
722
722
  query GGNomadBookingQueue($limit: Int, $offset: Int) {
723
723
  ggnomadBookingQueue(pagination: { limit: $limit, offset: $offset }) {
724
724
  id
@@ -736,28 +736,28 @@ var K = e`
736
736
  createdAt
737
737
  }
738
738
  }
739
- `, q = e`
739
+ `, K = e`
740
740
  mutation CheckInGGNomadBooking($id: ID!) {
741
741
  checkInGgnomadBooking(id: $id) {
742
742
  id
743
743
  status
744
744
  }
745
745
  }
746
- `, J = e`
746
+ `, q = e`
747
747
  mutation CompleteGGNomadBooking($id: ID!) {
748
748
  completeGgnomadBooking(id: $id) {
749
749
  id
750
750
  status
751
751
  }
752
752
  }
753
- `, Y = e`
753
+ `, J = e`
754
754
  mutation MarkGGNomadBookingNoShow($id: ID!, $reason: String) {
755
755
  markGgnomadBookingNoShow(id: $id, reason: $reason) {
756
756
  id
757
757
  status
758
758
  }
759
759
  }
760
- `, X = e`
760
+ `, Y = e`
761
761
  query GGNomadAuditLog($entityType: String!, $entityId: String!, $limit: Int, $offset: Int) {
762
762
  ggnomadAuditLog(
763
763
  entityType: $entityType
@@ -773,7 +773,7 @@ var K = e`
773
773
  createdAt
774
774
  }
775
775
  }
776
- `, Z = e`
776
+ `, X = e`
777
777
  query GGNomadMyProviders {
778
778
  myGgnomadProviders {
779
779
  id
@@ -782,7 +782,7 @@ var K = e`
782
782
  status
783
783
  }
784
784
  }
785
- `, Q = e`
785
+ `, Z = e`
786
786
  query GGNomadMyProviderAnalytics(
787
787
  $providerId: ID!
788
788
  $dateFrom: DateTime
@@ -821,8 +821,118 @@ var K = e`
821
821
  }
822
822
  }
823
823
  }
824
+ `, Q = e`
825
+ query GGNomadOperatorStorefront($providerId: ID!) {
826
+ ggnomadOperatorStorefront(providerId: $providerId) {
827
+ id
828
+ providerId
829
+ slug
830
+ displayName
831
+ logoUrl
832
+ primaryColor
833
+ aboutText
834
+ isPublished
835
+ publishedAt
836
+ }
837
+ }
838
+ `, $ = e`
839
+ query GGNomadStorefrontBySlug($workspaceId: ID!, $slug: String!) {
840
+ ggnomadStorefrontBySlug(workspaceId: $workspaceId, slug: $slug) {
841
+ storefront {
842
+ id
843
+ displayName
844
+ logoUrl
845
+ primaryColor
846
+ aboutText
847
+ publishedAt
848
+ }
849
+ properties {
850
+ id
851
+ name
852
+ pricePerNight
853
+ currency
854
+ images
855
+ rating
856
+ sustainabilityScore
857
+ }
858
+ tours {
859
+ id
860
+ name
861
+ price
862
+ currency
863
+ images
864
+ rating
865
+ sustainabilityScore
866
+ }
867
+ events {
868
+ id
869
+ name
870
+ price
871
+ currency
872
+ images
873
+ startsAt
874
+ sustainabilityScore
875
+ }
876
+ activities {
877
+ id
878
+ name
879
+ price
880
+ currency
881
+ images
882
+ rating
883
+ sustainabilityScore
884
+ }
885
+ }
886
+ }
887
+ `, te = e`
888
+ mutation CreateGGNomadOperatorStorefront($input: CreateGgnomadOperatorStorefrontInput!) {
889
+ createGgnomadOperatorStorefront(input: $input) {
890
+ id
891
+ providerId
892
+ slug
893
+ displayName
894
+ logoUrl
895
+ primaryColor
896
+ aboutText
897
+ isPublished
898
+ publishedAt
899
+ }
900
+ }
901
+ `, ne = e`
902
+ mutation UpdateGGNomadOperatorStorefront(
903
+ $id: ID!
904
+ $input: UpdateGgnomadOperatorStorefrontInput!
905
+ ) {
906
+ updateGgnomadOperatorStorefront(id: $id, input: $input) {
907
+ id
908
+ providerId
909
+ slug
910
+ displayName
911
+ logoUrl
912
+ primaryColor
913
+ aboutText
914
+ isPublished
915
+ publishedAt
916
+ }
917
+ }
918
+ `, re = e`
919
+ mutation PublishGGNomadOperatorStorefront($id: ID!) {
920
+ publishGgnomadOperatorStorefront(id: $id) {
921
+ id
922
+ isPublished
923
+ publishedAt
924
+ }
925
+ }
926
+ `, ie = e`
927
+ mutation UnpublishGGNomadOperatorStorefront($id: ID!) {
928
+ unpublishGgnomadOperatorStorefront(id: $id) {
929
+ id
930
+ isPublished
931
+ publishedAt
932
+ }
933
+ }
824
934
  `;
825
935
  //#endregion
826
- export { E as ADD_GGNOMAD_TRIP_PLAN_ITEM_MUTATION, z as APPROVE_GGNOMAD_BOOKING_APPROVAL_MUTATION, W as APPROVE_GGNOMAD_LISTING_MUTATION, v as CANCEL_GGNOMAD_BOOKING_MUTATION, q as CHECK_IN_GGNOMAD_BOOKING_MUTATION, J as COMPLETE_GGNOMAD_BOOKING_MUTATION, g as CREATE_GGNOMAD_BOOKING_MUTATION, A as CREATE_GGNOMAD_REVIEW_MUTATION, I as CREATE_GGNOMAD_TRAVEL_POLICY_MUTATION, w as CREATE_GGNOMAD_TRIP_PLAN_MUTATION, L as DELETE_GGNOMAD_TRAVEL_POLICY_MUTATION, d as GGNOMAD_ACTIVITIES_QUERY, f as GGNOMAD_ACTIVITY_QUERY, X as GGNOMAD_AUDIT_LOG_QUERY, n as GGNOMAD_BOOKABLE_SAMPLE_QUERY, m as GGNOMAD_BOOKINGS_QUERY, R as GGNOMAD_BOOKING_APPROVALS_QUERY, K as GGNOMAD_BOOKING_QUEUE_QUERY, l as GGNOMAD_EVENTS_QUERY, u as GGNOMAD_EVENT_QUERY, h as GGNOMAD_FAVORITES_QUERY, r as GGNOMAD_FAVORITE_TARGETS_QUERY, U as GGNOMAD_LISTING_REVIEW_QUEUE_QUERY, Z as GGNOMAD_MY_PROVIDERS_QUERY, Q as GGNOMAD_MY_PROVIDER_ANALYTICS_QUERY, t as GGNOMAD_OVERVIEW_QUERY, a as GGNOMAD_PROPERTIES_QUERY, o as GGNOMAD_PROPERTY_QUERY, i as GGNOMAD_PROVIDERS_QUERY, k as GGNOMAD_REVIEWS_QUERY, O as GGNOMAD_REVIEW_SUMMARY_QUERY, V as GGNOMAD_SPEND_SUMMARY_QUERY, y as GGNOMAD_TICKETS_QUERY, s as GGNOMAD_TOURS_QUERY, c as GGNOMAD_TOUR_QUERY, F as GGNOMAD_TRAVEL_POLICIES_QUERY, p as GGNOMAD_TRIPS_QUERY, S as GGNOMAD_TRIP_PLANS_QUERY, C as GGNOMAD_TRIP_PLAN_QUERY, b as ISSUE_GGNOMAD_TICKET_MUTATION, Y as MARK_GGNOMAD_BOOKING_NO_SHOW_MUTATION, x as REDEEM_GGNOMAD_TICKET_MUTATION, B as REJECT_GGNOMAD_BOOKING_APPROVAL_MUTATION, G as REJECT_GGNOMAD_LISTING_MUTATION, D as REMOVE_GGNOMAD_TRIP_PLAN_ITEM_MUTATION, _ as TOGGLE_GGNOMAD_FAVORITE_MUTATION, P as UPDATE_GGNOMAD_ACTIVITY_MUTATION, N as UPDATE_GGNOMAD_EVENT_MUTATION, j as UPDATE_GGNOMAD_PROPERTY_MUTATION, M as UPDATE_GGNOMAD_TOUR_MUTATION, T as UPDATE_GGNOMAD_TRIP_PLAN_MUTATION };
936
+ export { E as ADD_GGNOMAD_TRIP_PLAN_ITEM_MUTATION, R as APPROVE_GGNOMAD_BOOKING_APPROVAL_MUTATION, U as APPROVE_GGNOMAD_LISTING_MUTATION, v as CANCEL_GGNOMAD_BOOKING_MUTATION, K as CHECK_IN_GGNOMAD_BOOKING_MUTATION, q as COMPLETE_GGNOMAD_BOOKING_MUTATION, g as CREATE_GGNOMAD_BOOKING_MUTATION, te as CREATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION, A as CREATE_GGNOMAD_REVIEW_MUTATION, F as CREATE_GGNOMAD_TRAVEL_POLICY_MUTATION, w as CREATE_GGNOMAD_TRIP_PLAN_MUTATION, I as DELETE_GGNOMAD_TRAVEL_POLICY_MUTATION, d as GGNOMAD_ACTIVITIES_QUERY, f as GGNOMAD_ACTIVITY_QUERY, Y as GGNOMAD_AUDIT_LOG_QUERY, n as GGNOMAD_BOOKABLE_SAMPLE_QUERY, m as GGNOMAD_BOOKINGS_QUERY, L as GGNOMAD_BOOKING_APPROVALS_QUERY, G as GGNOMAD_BOOKING_QUEUE_QUERY, l as GGNOMAD_EVENTS_QUERY, u as GGNOMAD_EVENT_QUERY, h as GGNOMAD_FAVORITES_QUERY, r as GGNOMAD_FAVORITE_TARGETS_QUERY, H as GGNOMAD_LISTING_REVIEW_QUEUE_QUERY, X as GGNOMAD_MY_PROVIDERS_QUERY, Z as GGNOMAD_MY_PROVIDER_ANALYTICS_QUERY, Q as GGNOMAD_OPERATOR_STOREFRONT_QUERY, t as GGNOMAD_OVERVIEW_QUERY, a as GGNOMAD_PROPERTIES_QUERY, o as GGNOMAD_PROPERTY_QUERY, i as GGNOMAD_PROVIDERS_QUERY, k as GGNOMAD_REVIEWS_QUERY, O as GGNOMAD_REVIEW_SUMMARY_QUERY, B as GGNOMAD_SPEND_SUMMARY_QUERY, $ as GGNOMAD_STOREFRONT_BY_SLUG_QUERY, y as GGNOMAD_TICKETS_QUERY, s as GGNOMAD_TOURS_QUERY, c as GGNOMAD_TOUR_QUERY, P as GGNOMAD_TRAVEL_POLICIES_QUERY, p as GGNOMAD_TRIPS_QUERY, S as GGNOMAD_TRIP_PLANS_QUERY, C as GGNOMAD_TRIP_PLAN_QUERY, b as ISSUE_GGNOMAD_TICKET_MUTATION, J as MARK_GGNOMAD_BOOKING_NO_SHOW_MUTATION, re as PUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION, x as REDEEM_GGNOMAD_TICKET_MUTATION, z as REJECT_GGNOMAD_BOOKING_APPROVAL_MUTATION, W as REJECT_GGNOMAD_LISTING_MUTATION, D as REMOVE_GGNOMAD_TRIP_PLAN_ITEM_MUTATION, _ as TOGGLE_GGNOMAD_FAVORITE_MUTATION, ie as UNPUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION, N as UPDATE_GGNOMAD_ACTIVITY_MUTATION, M as UPDATE_GGNOMAD_EVENT_MUTATION, ne as UPDATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION, ee as UPDATE_GGNOMAD_PROPERTY_MUTATION, j as UPDATE_GGNOMAD_TOUR_MUTATION, T as UPDATE_GGNOMAD_TRIP_PLAN_MUTATION };
827
937
 
828
938
  //# sourceMappingURL=graphql.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.js","names":[],"sources":["../../src/ggnomad/graphql.ts"],"sourcesContent":["import { gql } from '@apollo/client/core';\n\nexport const GGNOMAD_OVERVIEW_QUERY = gql`\n query GGNomadOverview {\n ggnomadOverviewStats {\n users\n listings\n bookings\n monthlyRevenue\n }\n ggnomadAnalytics {\n totalRevenue\n totalBookings\n totalUsers\n conversionRate\n revenueByCategory\n }\n }\n`;\n\n/**\n * One bookable item of each type (properties are priced per night, the rest\n * carry a flat price). Used to seed the Bookings \"create demo booking\" action\n * with a REAL listing id so the mutation passes the backend's\n * assertTargetInWorkspace check instead of failing on a synthetic id.\n */\nexport const GGNOMAD_BOOKABLE_SAMPLE_QUERY = gql`\n query GGNomadBookableSample {\n ggnomadProperties(pagination: { limit: 1, offset: 0 }) {\n id\n name\n pricePerNight\n currency\n }\n ggnomadTours(pagination: { limit: 1, offset: 0 }) {\n id\n name\n price\n currency\n }\n ggnomadEvents(pagination: { limit: 1, offset: 0 }) {\n id\n name\n price\n currency\n }\n ggnomadActivities(pagination: { limit: 1, offset: 0 }) {\n id\n name\n price\n currency\n }\n }\n`;\n\n/**\n * id + name for every favouritable listing type, used to (a) resolve the real\n * entity name for a saved favorite (which the backend only exposes as\n * targetType + targetId) and (b) seed the \"toggle demo favorite\" action with a\n * real target id.\n */\nexport const GGNOMAD_FAVORITE_TARGETS_QUERY = gql`\n query GGNomadFavoriteTargets {\n ggnomadProperties(pagination: { limit: 100, offset: 0 }) {\n id\n name\n }\n ggnomadTours(pagination: { limit: 100, offset: 0 }) {\n id\n name\n }\n ggnomadEvents(pagination: { limit: 100, offset: 0 }) {\n id\n name\n }\n ggnomadActivities(pagination: { limit: 100, offset: 0 }) {\n id\n name\n }\n }\n`;\n\nexport const GGNOMAD_PROVIDERS_QUERY = gql`\n query GGNomadProviders($limit: Int, $offset: Int) {\n ggnomadProviders(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n type\n status\n listingCount\n totalRevenue\n rating\n reviewCount\n contactEmail\n website\n }\n }\n`;\n\nexport const GGNOMAD_PROPERTIES_QUERY = gql`\n query GGNomadProperties($limit: Int, $offset: Int) {\n ggnomadProperties(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n type\n status\n description\n pricePerNight\n currency\n rating\n reviewCount\n maxGuests\n amenities\n images\n providerId\n }\n }\n`;\n\nexport const GGNOMAD_PROPERTY_QUERY = gql`\n query GGNomadProperty($id: ID!) {\n ggnomadProperty(id: $id) {\n id\n name\n type\n status\n description\n address\n pricePerNight\n currency\n rating\n reviewCount\n bedrooms\n bathrooms\n maxGuests\n checkInTime\n checkOutTime\n amenities\n images\n provider {\n id\n name\n type\n rating\n }\n }\n }\n`;\n\n// Query to get property details for booking - ensures id is included\nexport const GGNOMAD_PROPERTY_FOR_BOOKING_QUERY = gql`\n query GGNomadPropertyForBooking($id: ID!) {\n ggnomadProperty(id: $id) {\n id\n name\n pricePerNight\n currency\n }\n }\n`;\n\nexport const GGNOMAD_TOURS_QUERY = gql`\n query GGNomadTours($limit: Int, $offset: Int) {\n ggnomadTours(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n description\n type\n status\n duration\n difficulty\n price\n currency\n rating\n reviewCount\n highlights\n images\n }\n }\n`;\n\nexport const GGNOMAD_TOUR_QUERY = gql`\n query GGNomadTour($id: ID!) {\n ggnomadTour(id: $id) {\n id\n name\n description\n type\n status\n duration\n difficulty\n price\n currency\n rating\n reviewCount\n highlights\n images\n languages\n guideName\n provider {\n id\n name\n }\n }\n }\n`;\n\nexport const GGNOMAD_EVENTS_QUERY = gql`\n query GGNomadEvents($limit: Int, $offset: Int) {\n ggnomadEvents(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n description\n category\n status\n startsAt\n price\n currency\n rating\n reviewCount\n performers\n images\n }\n }\n`;\n\nexport const GGNOMAD_EVENT_QUERY = gql`\n query GGNomadEvent($id: ID!) {\n ggnomadEvent(id: $id) {\n id\n name\n description\n category\n status\n startsAt\n endsAt\n venue\n price\n currency\n rating\n reviewCount\n performers\n images\n provider {\n id\n name\n }\n }\n }\n`;\n\nexport const GGNOMAD_ACTIVITIES_QUERY = gql`\n query GGNomadActivities($limit: Int, $offset: Int) {\n ggnomadActivities(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n description\n category\n status\n duration\n difficulty\n price\n currency\n rating\n reviewCount\n maxParticipants\n includes\n requirements\n images\n }\n }\n`;\n\nexport const GGNOMAD_ACTIVITY_QUERY = gql`\n query GGNomadActivity($id: ID!) {\n ggnomadActivity(id: $id) {\n id\n name\n description\n category\n status\n location\n duration\n difficulty\n price\n currency\n rating\n reviewCount\n maxParticipants\n includes\n requirements\n safetyInfo\n images\n provider {\n id\n name\n }\n }\n }\n`;\n\nexport const GGNOMAD_TRIPS_QUERY = gql`\n query GGNomadTrips($limit: Int, $offset: Int) {\n ggnomadTrips(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n transportMode\n status\n origin\n destination\n departureAt\n arrivalAt\n isRoundTrip\n carrier\n class\n price\n currency\n passengers\n ecoFriendly\n }\n }\n`;\n\nexport const GGNOMAD_BOOKINGS_QUERY = gql`\n query GGNomadBookings($limit: Int, $offset: Int) {\n ggnomadBookings(pagination: { limit: $limit, offset: $offset }) {\n id\n referenceCode\n bookingType\n status\n itemId\n itemName\n guestName\n guestEmail\n guestPhone\n guests\n checkIn\n checkOut\n eventDate\n totalPrice\n currency\n paymentStatus\n paymentMethod\n specialRequests\n createdAt\n }\n }\n`;\n\nexport const GGNOMAD_FAVORITES_QUERY = gql`\n query GGNomadFavorites {\n ggnomadFavorites\n }\n`;\n\nexport const CREATE_GGNOMAD_BOOKING_MUTATION = gql`\n mutation CreateGGNomadBooking($input: CreateGgnomadBookingInput!) {\n createGgnomadBooking(input: $input) {\n id\n referenceCode\n bookingType\n status\n itemId\n itemName\n guestName\n totalPrice\n currency\n createdAt\n }\n }\n`;\n\nexport const TOGGLE_GGNOMAD_FAVORITE_MUTATION = gql`\n mutation ToggleGGNomadFavorite($input: ToggleGgnomadFavoriteInput!) {\n toggleGgnomadFavorite(input: $input)\n }\n`;\n\nexport const CANCEL_GGNOMAD_BOOKING_MUTATION = gql`\n mutation CancelGGNomadBooking($id: ID!, $reason: String) {\n cancelGgnomadBooking(id: $id, reason: $reason) {\n id\n status\n }\n }\n`;\n\n// Mobile tickets / QR-code redemption (BOFF-4362)\nexport const GGNOMAD_TICKETS_QUERY = gql`\n query GGNomadTickets($bookingId: String) {\n ggnomadTickets(bookingId: $bookingId) {\n id\n bookingId\n ticketCode\n qrCodeDataUrl\n status\n issuedAt\n redeemedAt\n redeemedBy\n revokedAt\n revokedReason\n }\n }\n`;\n\nexport const ISSUE_GGNOMAD_TICKET_MUTATION = gql`\n mutation IssueGGNomadTicket($bookingId: ID!) {\n issueGgnomadTicket(bookingId: $bookingId) {\n id\n bookingId\n ticketCode\n qrCodeDataUrl\n status\n issuedAt\n }\n }\n`;\n\nexport const REDEEM_GGNOMAD_TICKET_MUTATION = gql`\n mutation RedeemGGNomadTicket($token: String!) {\n redeemGgnomadTicket(token: $token) {\n id\n bookingId\n ticketCode\n status\n redeemedAt\n redeemedBy\n }\n }\n`;\n\nexport const REVOKE_GGNOMAD_TICKET_MUTATION = gql`\n mutation RevokeGGNomadTicket($id: ID!, $reason: String) {\n revokeGgnomadTicket(id: $id, reason: $reason) {\n id\n status\n revokedAt\n revokedReason\n }\n }\n`;\n\n// Trip Plan Queries\nexport const GGNOMAD_TRIP_PLANS_QUERY = gql`\n query GGNomadTripPlans($limit: Int, $offset: Int) {\n ggnomadTripPlans(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n description\n startDate\n endDate\n travelers\n status\n total\n itemCount\n createdAt\n }\n }\n`;\n\nexport const GGNOMAD_TRIP_PLAN_QUERY = gql`\n query GGNomadTripPlan($id: ID!) {\n ggnomadTripPlan(id: $id) {\n id\n name\n description\n startDate\n endDate\n travelers\n status\n total\n itemCount\n items {\n id\n itemType\n itemId\n itemName\n day\n scheduledAt\n price\n currency\n notes\n }\n createdAt\n updatedAt\n }\n }\n`;\n\n// Trip Plan Mutations\nexport const CREATE_GGNOMAD_TRIP_PLAN_MUTATION = gql`\n mutation CreateGGNomadTripPlan($input: CreateGgnomadTripPlanInput!) {\n createGgnomadTripPlan(input: $input) {\n id\n name\n description\n startDate\n endDate\n travelers\n status\n total\n itemCount\n createdAt\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_TRIP_PLAN_MUTATION = gql`\n mutation UpdateGGNomadTripPlan($id: ID!, $input: UpdateGgnomadTripPlanInput!) {\n updateGgnomadTripPlan(id: $id, input: $input) {\n id\n name\n description\n startDate\n endDate\n travelers\n status\n total\n itemCount\n updatedAt\n }\n }\n`;\n\nexport const DELETE_GGNOMAD_TRIP_PLAN_MUTATION = gql`\n mutation DeleteGGNomadTripPlan($id: ID!) {\n deleteGgnomadTripPlan(id: $id)\n }\n`;\n\nexport const ADD_GGNOMAD_TRIP_PLAN_ITEM_MUTATION = gql`\n mutation AddGGNomadTripPlanItem($tripPlanId: ID!, $input: AddGgnomadTripPlanItemInput!) {\n addGgnomadTripPlanItem(tripPlanId: $tripPlanId, input: $input) {\n id\n itemType\n itemId\n itemName\n day\n scheduledAt\n price\n currency\n notes\n }\n }\n`;\n\nexport const REMOVE_GGNOMAD_TRIP_PLAN_ITEM_MUTATION = gql`\n mutation RemoveGGNomadTripPlanItem($id: ID!) {\n removeGgnomadTripPlanItem(id: $id)\n }\n`;\n\n// Review Queries\nexport const GGNOMAD_REVIEW_SUMMARY_QUERY = gql`\n query GGNomadReviewSummary($targetType: GgnomadBookingType!, $targetId: String!) {\n ggnomadReviewSummary(targetType: $targetType, targetId: $targetId) {\n average\n count\n distribution\n }\n }\n`;\n\nexport const GGNOMAD_REVIEWS_QUERY = gql`\n query GGNomadReviews(\n $targetType: GgnomadBookingType!\n $targetId: String!\n $limit: Int\n $offset: Int\n ) {\n ggnomadReviews(\n targetType: $targetType\n targetId: $targetId\n pagination: { limit: $limit, offset: $offset }\n ) {\n id\n rating\n title\n content\n images\n isVerified\n helpfulCount\n response\n respondedAt\n createdAt\n }\n }\n`;\n\n// Review Mutations\nexport const CREATE_GGNOMAD_REVIEW_MUTATION = gql`\n mutation CreateGGNomadReview($input: CreateGgnomadReviewInput!) {\n createGgnomadReview(input: $input) {\n id\n rating\n title\n content\n }\n }\n`;\n\nexport const RESPOND_GGNOMAD_REVIEW_MUTATION = gql`\n mutation RespondGGNomadReview($id: ID!, $response: String!) {\n respondGgnomadReview(id: $id, response: $response) {\n id\n response\n respondedAt\n }\n }\n`;\n\n// Listing Edit Mutations\nexport const UPDATE_GGNOMAD_PROPERTY_MUTATION = gql`\n mutation UpdateGGNomadProperty($id: ID!, $input: UpdateGgnomadPropertyInput!) {\n updateGgnomadProperty(id: $id, input: $input) {\n id\n name\n description\n pricePerNight\n status\n images\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_TOUR_MUTATION = gql`\n mutation UpdateGGNomadTour($id: ID!, $input: UpdateGgnomadTourInput!) {\n updateGgnomadTour(id: $id, input: $input) {\n id\n name\n description\n price\n status\n images\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_EVENT_MUTATION = gql`\n mutation UpdateGGNomadEvent($id: ID!, $input: UpdateGgnomadEventInput!) {\n updateGgnomadEvent(id: $id, input: $input) {\n id\n name\n description\n price\n status\n images\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_ACTIVITY_MUTATION = gql`\n mutation UpdateGGNomadActivity($id: ID!, $input: UpdateGgnomadActivityInput!) {\n updateGgnomadActivity(id: $id, input: $input) {\n id\n name\n description\n price\n status\n images\n }\n }\n`;\n\n// Corporate travel management — policy, budgets, approvals (BOFF-4365)\nexport const GGNOMAD_TRAVEL_POLICIES_QUERY = gql`\n query GGNomadTravelPolicies($limit: Int, $offset: Int) {\n ggnomadTravelPolicies(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n isActive\n costCenter\n currency\n maxBookingAmount\n maxMonthlyPerTraveler\n blockedDestinations\n allowedTravelClasses\n requireApprovalAlways\n createdAt\n }\n }\n`;\n\nexport const CREATE_GGNOMAD_TRAVEL_POLICY_MUTATION = gql`\n mutation CreateGGNomadTravelPolicy($input: CreateGgnomadTravelPolicyInput!) {\n createGgnomadTravelPolicy(input: $input) {\n id\n name\n isActive\n costCenter\n currency\n maxBookingAmount\n maxMonthlyPerTraveler\n blockedDestinations\n allowedTravelClasses\n requireApprovalAlways\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_TRAVEL_POLICY_MUTATION = gql`\n mutation UpdateGGNomadTravelPolicy($id: ID!, $input: UpdateGgnomadTravelPolicyInput!) {\n updateGgnomadTravelPolicy(id: $id, input: $input) {\n id\n isActive\n }\n }\n`;\n\nexport const DELETE_GGNOMAD_TRAVEL_POLICY_MUTATION = gql`\n mutation DeleteGGNomadTravelPolicy($id: ID!) {\n deleteGgnomadTravelPolicy(id: $id)\n }\n`;\n\nexport const GGNOMAD_BOOKING_APPROVALS_QUERY = gql`\n query GGNomadBookingApprovals($status: GgnomadApprovalStatus, $limit: Int, $offset: Int) {\n ggnomadBookingApprovals(status: $status, pagination: { limit: $limit, offset: $offset }) {\n id\n bookingId\n requestedBy\n costCenter\n reasons\n status\n reviewedBy\n reviewedAt\n reviewNote\n createdAt\n booking {\n id\n referenceCode\n itemName\n totalPrice\n currency\n status\n paymentStatus\n }\n }\n }\n`;\n\nexport const APPROVE_GGNOMAD_BOOKING_APPROVAL_MUTATION = gql`\n mutation ApproveGGNomadBookingApproval($id: ID!, $note: String) {\n approveGgnomadBookingApproval(id: $id, note: $note) {\n id\n status\n reviewedBy\n reviewedAt\n }\n }\n`;\n\nexport const REJECT_GGNOMAD_BOOKING_APPROVAL_MUTATION = gql`\n mutation RejectGGNomadBookingApproval($id: ID!, $reason: String!) {\n rejectGgnomadBookingApproval(id: $id, reason: $reason) {\n id\n status\n reviewedBy\n reviewedAt\n reviewNote\n }\n }\n`;\n\nexport const GGNOMAD_SPEND_SUMMARY_QUERY = gql`\n query GGNomadSpendSummary($costCenter: String) {\n ggnomadSpendSummary(costCenter: $costCenter) {\n totalSpend\n bookingCount\n pendingApprovalCount\n pendingApprovalAmount\n byCostCenter\n }\n }\n`;\n\n// ─── BOFF-4388 — listing verification + booking lifecycle operations queue ─\n\nconst LISTING_QUEUE_FIELDS = `\n __typename\n ... on GgnomadProperty {\n id\n name\n status\n pricePerNight\n currency\n providerId\n updatedAt\n }\n ... on GgnomadTour {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n ... on GgnomadEvent {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n ... on GgnomadActivity {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n`;\n\nexport const GGNOMAD_LISTING_REVIEW_QUEUE_QUERY = gql`\n query GGNomadListingReviewQueue($limit: Int, $offset: Int) {\n ggnomadListingReviewQueue(pagination: { limit: $limit, offset: $offset }) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const SUBMIT_GGNOMAD_LISTING_FOR_REVIEW_MUTATION = gql`\n mutation SubmitGGNomadListingForReview($listingType: GgnomadListingType!, $id: ID!) {\n submitGgnomadListingForReview(listingType: $listingType, id: $id) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const APPROVE_GGNOMAD_LISTING_MUTATION = gql`\n mutation ApproveGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $note: String) {\n approveGgnomadListing(listingType: $listingType, id: $id, note: $note) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const REJECT_GGNOMAD_LISTING_MUTATION = gql`\n mutation RejectGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $reason: String!) {\n rejectGgnomadListing(listingType: $listingType, id: $id, reason: $reason) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const PAUSE_GGNOMAD_LISTING_MUTATION = gql`\n mutation PauseGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $reason: String) {\n pauseGgnomadListing(listingType: $listingType, id: $id, reason: $reason) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const RESUME_GGNOMAD_LISTING_MUTATION = gql`\n mutation ResumeGGNomadListing($listingType: GgnomadListingType!, $id: ID!) {\n resumeGgnomadListing(listingType: $listingType, id: $id) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_GGNOMAD_LISTING_MUTATION = gql`\n mutation ArchiveGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $reason: String) {\n archiveGgnomadListing(listingType: $listingType, id: $id, reason: $reason) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const GGNOMAD_BOOKING_QUEUE_QUERY = gql`\n query GGNomadBookingQueue($limit: Int, $offset: Int) {\n ggnomadBookingQueue(pagination: { limit: $limit, offset: $offset }) {\n id\n referenceCode\n bookingType\n status\n itemName\n guestName\n guests\n checkIn\n checkOut\n eventDate\n totalPrice\n currency\n createdAt\n }\n }\n`;\n\nexport const CHECK_IN_GGNOMAD_BOOKING_MUTATION = gql`\n mutation CheckInGGNomadBooking($id: ID!) {\n checkInGgnomadBooking(id: $id) {\n id\n status\n }\n }\n`;\n\nexport const COMPLETE_GGNOMAD_BOOKING_MUTATION = gql`\n mutation CompleteGGNomadBooking($id: ID!) {\n completeGgnomadBooking(id: $id) {\n id\n status\n }\n }\n`;\n\nexport const MARK_GGNOMAD_BOOKING_NO_SHOW_MUTATION = gql`\n mutation MarkGGNomadBookingNoShow($id: ID!, $reason: String) {\n markGgnomadBookingNoShow(id: $id, reason: $reason) {\n id\n status\n }\n }\n`;\n\nexport const GGNOMAD_AUDIT_LOG_QUERY = gql`\n query GGNomadAuditLog($entityType: String!, $entityId: String!, $limit: Int, $offset: Int) {\n ggnomadAuditLog(\n entityType: $entityType\n entityId: $entityId\n pagination: { limit: $limit, offset: $offset }\n ) {\n id\n action\n fromStatus\n toStatus\n reason\n actorId\n createdAt\n }\n }\n`;\n\n// ─── BOFF-4390 — provider analytics dashboards ─────────────────────────────\n\nexport const GGNOMAD_MY_PROVIDERS_QUERY = gql`\n query GGNomadMyProviders {\n myGgnomadProviders {\n id\n name\n type\n status\n }\n }\n`;\n\nexport const GGNOMAD_MY_PROVIDER_ANALYTICS_QUERY = gql`\n query GGNomadMyProviderAnalytics(\n $providerId: ID!\n $dateFrom: DateTime\n $dateTo: DateTime\n $granularity: String\n ) {\n myGgnomadProviderAnalytics(\n providerId: $providerId\n dateFrom: $dateFrom\n dateTo: $dateTo\n granularity: $granularity\n ) {\n providerId\n providerName\n dateFrom\n dateTo\n granularity\n totalBookings\n totalRevenue\n cancelledBookings\n cancellationRate\n capacityUtilizationRate\n bookingsOverTime {\n period\n bookings\n revenue\n }\n topListings {\n listingId\n listingType\n listingName\n bookings\n revenue\n cancellationRate\n capacityUtilizationRate\n }\n }\n }\n`;\n"],"mappings":";;AAEA,IAAa,IAAyB,CAAG;;;;;;;;;;;;;;;;GAwB5B,IAAgC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCnC,IAAiC,CAAG;;;;;;;;;;;;;;;;;;;GAqBpC,IAA0B,CAAG;;;;;;;;;;;;;;;GAiB7B,IAA2B,CAAG;;;;;;;;;;;;;;;;;;GAoB9B,IAAyB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BS,CAAG;;;;;;;;;;AAWrD,IAAa,IAAsB,CAAG;;;;;;;;;;;;;;;;;;GAoBzB,IAAqB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;GA0BxB,IAAuB,CAAG;;;;;;;;;;;;;;;;;GAmB1B,IAAsB,CAAG;;;;;;;;;;;;;;;;;;;;;;;GAyBzB,IAA2B,CAAG;;;;;;;;;;;;;;;;;;;;GAsB9B,IAAyB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;GA4B5B,IAAsB,CAAG;;;;;;;;;;;;;;;;;;;;GAsBzB,IAAyB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;GA0B5B,IAA0B,CAAG;;;;GAM7B,IAAkC,CAAG;;;;;;;;;;;;;;;GAiBrC,IAAmC,CAAG;;;;GAMtC,IAAkC,CAAG;;;;;;;GAUrC,IAAwB,CAAG;;;;;;;;;;;;;;;GAiB3B,IAAgC,CAAG;;;;;;;;;;;GAanC,IAAiC,CAAG;;;;;;;;;;;;AAaH,CAAG;;;;;;;;;;AAYjD,IAAa,IAA2B,CAAG;;;;;;;;;;;;;;;GAiB9B,IAA0B,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8B7B,IAAoC,CAAG;;;;;;;;;;;;;;;GAiBvC,IAAoC,CAAG;;;;;;;;;;;;;;;;AAiBH,CAAG;;;;;AAMpD,IAAa,IAAsC,CAAG;;;;;;;;;;;;;;GAgBzC,IAAyC,CAAG;;;;GAO5C,IAA+B,CAAG;;;;;;;;GAUlC,IAAwB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;GA2B3B,IAAiC,CAAG;;;;;;;;;;AAWF,CAAG;;;;;;;;;AAWlD,IAAa,IAAmC,CAAG;;;;;;;;;;;GAatC,IAA+B,CAAG;;;;;;;;;;;GAalC,IAAgC,CAAG;;;;;;;;;;;GAanC,IAAmC,CAAG;;;;;;;;;;;GActC,IAAgC,CAAG;;;;;;;;;;;;;;;;GAkBnC,IAAwC,CAAG;;;;;;;;;;;;;;;;AAiBH,CAAG;;;;;;;;AASxD,IAAa,IAAwC,CAAG;;;;GAM3C,IAAkC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;GA0BrC,IAA4C,CAAG;;;;;;;;;GAW/C,IAA2C,CAAG;;;;;;;;;;GAY9C,IAA8B,CAAG;;;;;;;;;;GAcxC,IAAuB,ifAwChB,IAAqC,CAAG;;;QAG7C,EAAqB;;;;AAK6B,CAAG;;;QAGrD,EAAqB;;;;AAK7B,IAAa,IAAmC,CAAG;;;QAG3C,EAAqB;;;GAKhB,IAAkC,CAAG;;;QAG1C,EAAqB;;;;AAKiB,CAAG;;;QAGzC,EAAqB;;;GAKkB,CAAG;;;QAG1C,EAAqB;;;GAKmB,CAAG;;;QAG3C,EAAqB;;;;AAK7B,IAAa,IAA8B,CAAG;;;;;;;;;;;;;;;;;;GAoBjC,IAAoC,CAAG;;;;;;;GASvC,IAAoC,CAAG;;;;;;;GASvC,IAAwC,CAAG;;;;;;;GAS3C,IAA0B,CAAG;;;;;;;;;;;;;;;;GAoB7B,IAA6B,CAAG;;;;;;;;;GAWhC,IAAsC,CAAG"}
1
+ {"version":3,"file":"graphql.js","names":[],"sources":["../../src/ggnomad/graphql.ts"],"sourcesContent":["import { gql } from '@apollo/client/core';\n\nexport const GGNOMAD_OVERVIEW_QUERY = gql`\n query GGNomadOverview {\n ggnomadOverviewStats {\n users\n listings\n bookings\n monthlyRevenue\n }\n ggnomadAnalytics {\n totalRevenue\n totalBookings\n totalUsers\n conversionRate\n revenueByCategory\n }\n }\n`;\n\n/**\n * One bookable item of each type (properties are priced per night, the rest\n * carry a flat price). Used to seed the Bookings \"create demo booking\" action\n * with a REAL listing id so the mutation passes the backend's\n * assertTargetInWorkspace check instead of failing on a synthetic id.\n */\nexport const GGNOMAD_BOOKABLE_SAMPLE_QUERY = gql`\n query GGNomadBookableSample {\n ggnomadProperties(pagination: { limit: 1, offset: 0 }) {\n id\n name\n pricePerNight\n currency\n }\n ggnomadTours(pagination: { limit: 1, offset: 0 }) {\n id\n name\n price\n currency\n }\n ggnomadEvents(pagination: { limit: 1, offset: 0 }) {\n id\n name\n price\n currency\n }\n ggnomadActivities(pagination: { limit: 1, offset: 0 }) {\n id\n name\n price\n currency\n }\n }\n`;\n\n/**\n * id + name for every favouritable listing type, used to (a) resolve the real\n * entity name for a saved favorite (which the backend only exposes as\n * targetType + targetId) and (b) seed the \"toggle demo favorite\" action with a\n * real target id.\n */\nexport const GGNOMAD_FAVORITE_TARGETS_QUERY = gql`\n query GGNomadFavoriteTargets {\n ggnomadProperties(pagination: { limit: 100, offset: 0 }) {\n id\n name\n }\n ggnomadTours(pagination: { limit: 100, offset: 0 }) {\n id\n name\n }\n ggnomadEvents(pagination: { limit: 100, offset: 0 }) {\n id\n name\n }\n ggnomadActivities(pagination: { limit: 100, offset: 0 }) {\n id\n name\n }\n }\n`;\n\nexport const GGNOMAD_PROVIDERS_QUERY = gql`\n query GGNomadProviders($limit: Int, $offset: Int) {\n ggnomadProviders(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n type\n status\n listingCount\n totalRevenue\n rating\n reviewCount\n contactEmail\n website\n }\n }\n`;\n\nexport const GGNOMAD_PROPERTIES_QUERY = gql`\n query GGNomadProperties($limit: Int, $offset: Int) {\n ggnomadProperties(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n type\n status\n description\n pricePerNight\n currency\n rating\n reviewCount\n maxGuests\n amenities\n images\n providerId\n }\n }\n`;\n\nexport const GGNOMAD_PROPERTY_QUERY = gql`\n query GGNomadProperty($id: ID!) {\n ggnomadProperty(id: $id) {\n id\n name\n type\n status\n description\n address\n pricePerNight\n currency\n rating\n reviewCount\n bedrooms\n bathrooms\n maxGuests\n checkInTime\n checkOutTime\n amenities\n images\n provider {\n id\n name\n type\n rating\n }\n }\n }\n`;\n\n// Query to get property details for booking - ensures id is included\nexport const GGNOMAD_PROPERTY_FOR_BOOKING_QUERY = gql`\n query GGNomadPropertyForBooking($id: ID!) {\n ggnomadProperty(id: $id) {\n id\n name\n pricePerNight\n currency\n }\n }\n`;\n\nexport const GGNOMAD_TOURS_QUERY = gql`\n query GGNomadTours($limit: Int, $offset: Int) {\n ggnomadTours(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n description\n type\n status\n duration\n difficulty\n price\n currency\n rating\n reviewCount\n highlights\n images\n }\n }\n`;\n\nexport const GGNOMAD_TOUR_QUERY = gql`\n query GGNomadTour($id: ID!) {\n ggnomadTour(id: $id) {\n id\n name\n description\n type\n status\n duration\n difficulty\n price\n currency\n rating\n reviewCount\n highlights\n images\n languages\n guideName\n provider {\n id\n name\n }\n }\n }\n`;\n\nexport const GGNOMAD_EVENTS_QUERY = gql`\n query GGNomadEvents($limit: Int, $offset: Int) {\n ggnomadEvents(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n description\n category\n status\n startsAt\n price\n currency\n rating\n reviewCount\n performers\n images\n }\n }\n`;\n\nexport const GGNOMAD_EVENT_QUERY = gql`\n query GGNomadEvent($id: ID!) {\n ggnomadEvent(id: $id) {\n id\n name\n description\n category\n status\n startsAt\n endsAt\n venue\n price\n currency\n rating\n reviewCount\n performers\n images\n provider {\n id\n name\n }\n }\n }\n`;\n\nexport const GGNOMAD_ACTIVITIES_QUERY = gql`\n query GGNomadActivities($limit: Int, $offset: Int) {\n ggnomadActivities(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n description\n category\n status\n duration\n difficulty\n price\n currency\n rating\n reviewCount\n maxParticipants\n includes\n requirements\n images\n }\n }\n`;\n\nexport const GGNOMAD_ACTIVITY_QUERY = gql`\n query GGNomadActivity($id: ID!) {\n ggnomadActivity(id: $id) {\n id\n name\n description\n category\n status\n location\n duration\n difficulty\n price\n currency\n rating\n reviewCount\n maxParticipants\n includes\n requirements\n safetyInfo\n images\n provider {\n id\n name\n }\n }\n }\n`;\n\nexport const GGNOMAD_TRIPS_QUERY = gql`\n query GGNomadTrips($limit: Int, $offset: Int) {\n ggnomadTrips(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n transportMode\n status\n origin\n destination\n departureAt\n arrivalAt\n isRoundTrip\n carrier\n class\n price\n currency\n passengers\n ecoFriendly\n }\n }\n`;\n\nexport const GGNOMAD_BOOKINGS_QUERY = gql`\n query GGNomadBookings($limit: Int, $offset: Int) {\n ggnomadBookings(pagination: { limit: $limit, offset: $offset }) {\n id\n referenceCode\n bookingType\n status\n itemId\n itemName\n guestName\n guestEmail\n guestPhone\n guests\n checkIn\n checkOut\n eventDate\n totalPrice\n currency\n paymentStatus\n paymentMethod\n specialRequests\n createdAt\n }\n }\n`;\n\nexport const GGNOMAD_FAVORITES_QUERY = gql`\n query GGNomadFavorites {\n ggnomadFavorites\n }\n`;\n\nexport const CREATE_GGNOMAD_BOOKING_MUTATION = gql`\n mutation CreateGGNomadBooking($input: CreateGgnomadBookingInput!) {\n createGgnomadBooking(input: $input) {\n id\n referenceCode\n bookingType\n status\n itemId\n itemName\n guestName\n totalPrice\n currency\n createdAt\n }\n }\n`;\n\nexport const TOGGLE_GGNOMAD_FAVORITE_MUTATION = gql`\n mutation ToggleGGNomadFavorite($input: ToggleGgnomadFavoriteInput!) {\n toggleGgnomadFavorite(input: $input)\n }\n`;\n\nexport const CANCEL_GGNOMAD_BOOKING_MUTATION = gql`\n mutation CancelGGNomadBooking($id: ID!, $reason: String) {\n cancelGgnomadBooking(id: $id, reason: $reason) {\n id\n status\n }\n }\n`;\n\n// Mobile tickets / QR-code redemption (BOFF-4362)\nexport const GGNOMAD_TICKETS_QUERY = gql`\n query GGNomadTickets($bookingId: String) {\n ggnomadTickets(bookingId: $bookingId) {\n id\n bookingId\n ticketCode\n qrCodeDataUrl\n status\n issuedAt\n redeemedAt\n redeemedBy\n revokedAt\n revokedReason\n }\n }\n`;\n\nexport const ISSUE_GGNOMAD_TICKET_MUTATION = gql`\n mutation IssueGGNomadTicket($bookingId: ID!) {\n issueGgnomadTicket(bookingId: $bookingId) {\n id\n bookingId\n ticketCode\n qrCodeDataUrl\n status\n issuedAt\n }\n }\n`;\n\nexport const REDEEM_GGNOMAD_TICKET_MUTATION = gql`\n mutation RedeemGGNomadTicket($token: String!) {\n redeemGgnomadTicket(token: $token) {\n id\n bookingId\n ticketCode\n status\n redeemedAt\n redeemedBy\n }\n }\n`;\n\nexport const REVOKE_GGNOMAD_TICKET_MUTATION = gql`\n mutation RevokeGGNomadTicket($id: ID!, $reason: String) {\n revokeGgnomadTicket(id: $id, reason: $reason) {\n id\n status\n revokedAt\n revokedReason\n }\n }\n`;\n\n// Trip Plan Queries\nexport const GGNOMAD_TRIP_PLANS_QUERY = gql`\n query GGNomadTripPlans($limit: Int, $offset: Int) {\n ggnomadTripPlans(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n description\n startDate\n endDate\n travelers\n status\n total\n itemCount\n createdAt\n }\n }\n`;\n\nexport const GGNOMAD_TRIP_PLAN_QUERY = gql`\n query GGNomadTripPlan($id: ID!) {\n ggnomadTripPlan(id: $id) {\n id\n name\n description\n startDate\n endDate\n travelers\n status\n total\n itemCount\n items {\n id\n itemType\n itemId\n itemName\n day\n scheduledAt\n price\n currency\n notes\n }\n createdAt\n updatedAt\n }\n }\n`;\n\n// Trip Plan Mutations\nexport const CREATE_GGNOMAD_TRIP_PLAN_MUTATION = gql`\n mutation CreateGGNomadTripPlan($input: CreateGgnomadTripPlanInput!) {\n createGgnomadTripPlan(input: $input) {\n id\n name\n description\n startDate\n endDate\n travelers\n status\n total\n itemCount\n createdAt\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_TRIP_PLAN_MUTATION = gql`\n mutation UpdateGGNomadTripPlan($id: ID!, $input: UpdateGgnomadTripPlanInput!) {\n updateGgnomadTripPlan(id: $id, input: $input) {\n id\n name\n description\n startDate\n endDate\n travelers\n status\n total\n itemCount\n updatedAt\n }\n }\n`;\n\nexport const DELETE_GGNOMAD_TRIP_PLAN_MUTATION = gql`\n mutation DeleteGGNomadTripPlan($id: ID!) {\n deleteGgnomadTripPlan(id: $id)\n }\n`;\n\nexport const ADD_GGNOMAD_TRIP_PLAN_ITEM_MUTATION = gql`\n mutation AddGGNomadTripPlanItem($tripPlanId: ID!, $input: AddGgnomadTripPlanItemInput!) {\n addGgnomadTripPlanItem(tripPlanId: $tripPlanId, input: $input) {\n id\n itemType\n itemId\n itemName\n day\n scheduledAt\n price\n currency\n notes\n }\n }\n`;\n\nexport const REMOVE_GGNOMAD_TRIP_PLAN_ITEM_MUTATION = gql`\n mutation RemoveGGNomadTripPlanItem($id: ID!) {\n removeGgnomadTripPlanItem(id: $id)\n }\n`;\n\n// Review Queries\nexport const GGNOMAD_REVIEW_SUMMARY_QUERY = gql`\n query GGNomadReviewSummary($targetType: GgnomadBookingType!, $targetId: String!) {\n ggnomadReviewSummary(targetType: $targetType, targetId: $targetId) {\n average\n count\n distribution\n }\n }\n`;\n\nexport const GGNOMAD_REVIEWS_QUERY = gql`\n query GGNomadReviews(\n $targetType: GgnomadBookingType!\n $targetId: String!\n $limit: Int\n $offset: Int\n ) {\n ggnomadReviews(\n targetType: $targetType\n targetId: $targetId\n pagination: { limit: $limit, offset: $offset }\n ) {\n id\n rating\n title\n content\n images\n isVerified\n helpfulCount\n response\n respondedAt\n createdAt\n }\n }\n`;\n\n// Review Mutations\nexport const CREATE_GGNOMAD_REVIEW_MUTATION = gql`\n mutation CreateGGNomadReview($input: CreateGgnomadReviewInput!) {\n createGgnomadReview(input: $input) {\n id\n rating\n title\n content\n }\n }\n`;\n\nexport const RESPOND_GGNOMAD_REVIEW_MUTATION = gql`\n mutation RespondGGNomadReview($id: ID!, $response: String!) {\n respondGgnomadReview(id: $id, response: $response) {\n id\n response\n respondedAt\n }\n }\n`;\n\n// Listing Edit Mutations\nexport const UPDATE_GGNOMAD_PROPERTY_MUTATION = gql`\n mutation UpdateGGNomadProperty($id: ID!, $input: UpdateGgnomadPropertyInput!) {\n updateGgnomadProperty(id: $id, input: $input) {\n id\n name\n description\n pricePerNight\n status\n images\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_TOUR_MUTATION = gql`\n mutation UpdateGGNomadTour($id: ID!, $input: UpdateGgnomadTourInput!) {\n updateGgnomadTour(id: $id, input: $input) {\n id\n name\n description\n price\n status\n images\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_EVENT_MUTATION = gql`\n mutation UpdateGGNomadEvent($id: ID!, $input: UpdateGgnomadEventInput!) {\n updateGgnomadEvent(id: $id, input: $input) {\n id\n name\n description\n price\n status\n images\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_ACTIVITY_MUTATION = gql`\n mutation UpdateGGNomadActivity($id: ID!, $input: UpdateGgnomadActivityInput!) {\n updateGgnomadActivity(id: $id, input: $input) {\n id\n name\n description\n price\n status\n images\n }\n }\n`;\n\n// Corporate travel management — policy, budgets, approvals (BOFF-4365)\nexport const GGNOMAD_TRAVEL_POLICIES_QUERY = gql`\n query GGNomadTravelPolicies($limit: Int, $offset: Int) {\n ggnomadTravelPolicies(pagination: { limit: $limit, offset: $offset }) {\n id\n name\n isActive\n costCenter\n currency\n maxBookingAmount\n maxMonthlyPerTraveler\n blockedDestinations\n allowedTravelClasses\n requireApprovalAlways\n createdAt\n }\n }\n`;\n\nexport const CREATE_GGNOMAD_TRAVEL_POLICY_MUTATION = gql`\n mutation CreateGGNomadTravelPolicy($input: CreateGgnomadTravelPolicyInput!) {\n createGgnomadTravelPolicy(input: $input) {\n id\n name\n isActive\n costCenter\n currency\n maxBookingAmount\n maxMonthlyPerTraveler\n blockedDestinations\n allowedTravelClasses\n requireApprovalAlways\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_TRAVEL_POLICY_MUTATION = gql`\n mutation UpdateGGNomadTravelPolicy($id: ID!, $input: UpdateGgnomadTravelPolicyInput!) {\n updateGgnomadTravelPolicy(id: $id, input: $input) {\n id\n isActive\n }\n }\n`;\n\nexport const DELETE_GGNOMAD_TRAVEL_POLICY_MUTATION = gql`\n mutation DeleteGGNomadTravelPolicy($id: ID!) {\n deleteGgnomadTravelPolicy(id: $id)\n }\n`;\n\nexport const GGNOMAD_BOOKING_APPROVALS_QUERY = gql`\n query GGNomadBookingApprovals($status: GgnomadApprovalStatus, $limit: Int, $offset: Int) {\n ggnomadBookingApprovals(status: $status, pagination: { limit: $limit, offset: $offset }) {\n id\n bookingId\n requestedBy\n costCenter\n reasons\n status\n reviewedBy\n reviewedAt\n reviewNote\n createdAt\n booking {\n id\n referenceCode\n itemName\n totalPrice\n currency\n status\n paymentStatus\n }\n }\n }\n`;\n\nexport const APPROVE_GGNOMAD_BOOKING_APPROVAL_MUTATION = gql`\n mutation ApproveGGNomadBookingApproval($id: ID!, $note: String) {\n approveGgnomadBookingApproval(id: $id, note: $note) {\n id\n status\n reviewedBy\n reviewedAt\n }\n }\n`;\n\nexport const REJECT_GGNOMAD_BOOKING_APPROVAL_MUTATION = gql`\n mutation RejectGGNomadBookingApproval($id: ID!, $reason: String!) {\n rejectGgnomadBookingApproval(id: $id, reason: $reason) {\n id\n status\n reviewedBy\n reviewedAt\n reviewNote\n }\n }\n`;\n\nexport const GGNOMAD_SPEND_SUMMARY_QUERY = gql`\n query GGNomadSpendSummary($costCenter: String) {\n ggnomadSpendSummary(costCenter: $costCenter) {\n totalSpend\n bookingCount\n pendingApprovalCount\n pendingApprovalAmount\n byCostCenter\n }\n }\n`;\n\n// ─── BOFF-4388 — listing verification + booking lifecycle operations queue ─\n\nconst LISTING_QUEUE_FIELDS = `\n __typename\n ... on GgnomadProperty {\n id\n name\n status\n pricePerNight\n currency\n providerId\n updatedAt\n }\n ... on GgnomadTour {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n ... on GgnomadEvent {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n ... on GgnomadActivity {\n id\n name\n status\n price\n currency\n providerId\n updatedAt\n }\n`;\n\nexport const GGNOMAD_LISTING_REVIEW_QUEUE_QUERY = gql`\n query GGNomadListingReviewQueue($limit: Int, $offset: Int) {\n ggnomadListingReviewQueue(pagination: { limit: $limit, offset: $offset }) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const SUBMIT_GGNOMAD_LISTING_FOR_REVIEW_MUTATION = gql`\n mutation SubmitGGNomadListingForReview($listingType: GgnomadListingType!, $id: ID!) {\n submitGgnomadListingForReview(listingType: $listingType, id: $id) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const APPROVE_GGNOMAD_LISTING_MUTATION = gql`\n mutation ApproveGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $note: String) {\n approveGgnomadListing(listingType: $listingType, id: $id, note: $note) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const REJECT_GGNOMAD_LISTING_MUTATION = gql`\n mutation RejectGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $reason: String!) {\n rejectGgnomadListing(listingType: $listingType, id: $id, reason: $reason) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const PAUSE_GGNOMAD_LISTING_MUTATION = gql`\n mutation PauseGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $reason: String) {\n pauseGgnomadListing(listingType: $listingType, id: $id, reason: $reason) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const RESUME_GGNOMAD_LISTING_MUTATION = gql`\n mutation ResumeGGNomadListing($listingType: GgnomadListingType!, $id: ID!) {\n resumeGgnomadListing(listingType: $listingType, id: $id) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_GGNOMAD_LISTING_MUTATION = gql`\n mutation ArchiveGGNomadListing($listingType: GgnomadListingType!, $id: ID!, $reason: String) {\n archiveGgnomadListing(listingType: $listingType, id: $id, reason: $reason) {\n ${LISTING_QUEUE_FIELDS}\n }\n }\n`;\n\nexport const GGNOMAD_BOOKING_QUEUE_QUERY = gql`\n query GGNomadBookingQueue($limit: Int, $offset: Int) {\n ggnomadBookingQueue(pagination: { limit: $limit, offset: $offset }) {\n id\n referenceCode\n bookingType\n status\n itemName\n guestName\n guests\n checkIn\n checkOut\n eventDate\n totalPrice\n currency\n createdAt\n }\n }\n`;\n\nexport const CHECK_IN_GGNOMAD_BOOKING_MUTATION = gql`\n mutation CheckInGGNomadBooking($id: ID!) {\n checkInGgnomadBooking(id: $id) {\n id\n status\n }\n }\n`;\n\nexport const COMPLETE_GGNOMAD_BOOKING_MUTATION = gql`\n mutation CompleteGGNomadBooking($id: ID!) {\n completeGgnomadBooking(id: $id) {\n id\n status\n }\n }\n`;\n\nexport const MARK_GGNOMAD_BOOKING_NO_SHOW_MUTATION = gql`\n mutation MarkGGNomadBookingNoShow($id: ID!, $reason: String) {\n markGgnomadBookingNoShow(id: $id, reason: $reason) {\n id\n status\n }\n }\n`;\n\nexport const GGNOMAD_AUDIT_LOG_QUERY = gql`\n query GGNomadAuditLog($entityType: String!, $entityId: String!, $limit: Int, $offset: Int) {\n ggnomadAuditLog(\n entityType: $entityType\n entityId: $entityId\n pagination: { limit: $limit, offset: $offset }\n ) {\n id\n action\n fromStatus\n toStatus\n reason\n actorId\n createdAt\n }\n }\n`;\n\n// ─── BOFF-4390 — provider analytics dashboards ─────────────────────────────\n\nexport const GGNOMAD_MY_PROVIDERS_QUERY = gql`\n query GGNomadMyProviders {\n myGgnomadProviders {\n id\n name\n type\n status\n }\n }\n`;\n\nexport const GGNOMAD_MY_PROVIDER_ANALYTICS_QUERY = gql`\n query GGNomadMyProviderAnalytics(\n $providerId: ID!\n $dateFrom: DateTime\n $dateTo: DateTime\n $granularity: String\n ) {\n myGgnomadProviderAnalytics(\n providerId: $providerId\n dateFrom: $dateFrom\n dateTo: $dateTo\n granularity: $granularity\n ) {\n providerId\n providerName\n dateFrom\n dateTo\n granularity\n totalBookings\n totalRevenue\n cancelledBookings\n cancellationRate\n capacityUtilizationRate\n bookingsOverTime {\n period\n bookings\n revenue\n }\n topListings {\n listingId\n listingType\n listingName\n bookings\n revenue\n cancellationRate\n capacityUtilizationRate\n }\n }\n }\n`;\n\n// ─── BOFF-4363 — white-label operator storefront ───────────────────────────\n\nexport const GGNOMAD_OPERATOR_STOREFRONT_QUERY = gql`\n query GGNomadOperatorStorefront($providerId: ID!) {\n ggnomadOperatorStorefront(providerId: $providerId) {\n id\n providerId\n slug\n displayName\n logoUrl\n primaryColor\n aboutText\n isPublished\n publishedAt\n }\n }\n`;\n\nexport const GGNOMAD_STOREFRONT_BY_SLUG_QUERY = gql`\n query GGNomadStorefrontBySlug($workspaceId: ID!, $slug: String!) {\n ggnomadStorefrontBySlug(workspaceId: $workspaceId, slug: $slug) {\n storefront {\n id\n displayName\n logoUrl\n primaryColor\n aboutText\n publishedAt\n }\n properties {\n id\n name\n pricePerNight\n currency\n images\n rating\n sustainabilityScore\n }\n tours {\n id\n name\n price\n currency\n images\n rating\n sustainabilityScore\n }\n events {\n id\n name\n price\n currency\n images\n startsAt\n sustainabilityScore\n }\n activities {\n id\n name\n price\n currency\n images\n rating\n sustainabilityScore\n }\n }\n }\n`;\n\nexport const CREATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION = gql`\n mutation CreateGGNomadOperatorStorefront($input: CreateGgnomadOperatorStorefrontInput!) {\n createGgnomadOperatorStorefront(input: $input) {\n id\n providerId\n slug\n displayName\n logoUrl\n primaryColor\n aboutText\n isPublished\n publishedAt\n }\n }\n`;\n\nexport const UPDATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION = gql`\n mutation UpdateGGNomadOperatorStorefront(\n $id: ID!\n $input: UpdateGgnomadOperatorStorefrontInput!\n ) {\n updateGgnomadOperatorStorefront(id: $id, input: $input) {\n id\n providerId\n slug\n displayName\n logoUrl\n primaryColor\n aboutText\n isPublished\n publishedAt\n }\n }\n`;\n\nexport const PUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION = gql`\n mutation PublishGGNomadOperatorStorefront($id: ID!) {\n publishGgnomadOperatorStorefront(id: $id) {\n id\n isPublished\n publishedAt\n }\n }\n`;\n\nexport const UNPUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION = gql`\n mutation UnpublishGGNomadOperatorStorefront($id: ID!) {\n unpublishGgnomadOperatorStorefront(id: $id) {\n id\n isPublished\n publishedAt\n }\n }\n`;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/ProviderPage.tsx"],"names":[],"mappings":"AAWA,wBAAgB,YAAY,gCA+F3B"}
1
+ {"version":3,"file":"ProviderPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/ProviderPage.tsx"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,gCAwG3B"}
@@ -5,83 +5,92 @@ import { EntityCard as r } from "../components/EntityCard.js";
5
5
  import { LoadMoreButton as i } from "../components/LoadMoreButton.js";
6
6
  import "../components/index.js";
7
7
  import { useState as a } from "react";
8
- import { Briefcase as o } from "lucide-react";
9
- import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
- import { useQuery as c } from "@apollo/client/react";
11
- import { GlassCard as l, IllustratedEmptyState as u, PagePurpose as d } from "@burdenoff/fe-libs/ui";
12
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
8
+ import { Briefcase as o, Store as s } from "lucide-react";
9
+ import { useI18n as c } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ import { Link as l } from "react-router-dom";
11
+ import { useQuery as u } from "@apollo/client/react";
12
+ import { GlassCard as d, IllustratedEmptyState as f, PagePurpose as p } from "@burdenoff/fe-libs/ui";
13
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
13
14
  //#region src/ggnomad/pages/ProviderPage.tsx
14
- function m() {
15
- let { t: m } = s(), [h, g] = a(12), { data: _ } = c(e, { variables: {
16
- limit: h,
15
+ function g() {
16
+ let { t: g } = c(), [_, v] = a(12), { data: y } = u(e, { variables: {
17
+ limit: _,
17
18
  offset: 0
18
- } }), v = _?.ggnomadProviders ?? [];
19
- return /* @__PURE__ */ p(t, {
20
- title: m("ggnomad.provider.title", "Provider Dashboard"),
21
- titleAccent: m("ggnomad.provider.title.accent", "Provider"),
22
- subtitle: m("ggnomad.provider.subtitle", "B2B provider operations and onboarding metrics"),
23
- children: [/* @__PURE__ */ f(d, {
24
- icon: /* @__PURE__ */ f(o, { className: "size-4" }),
25
- children: m("ggnomad.provider.purpose", "Track the supply side of the marketplace — the hotels, tour operators and venues that publish inventory. Use it to monitor each provider’s status, listing count, revenue and rating, and to spot who needs onboarding attention.")
26
- }), v.length === 0 ? /* @__PURE__ */ f(u, {
19
+ } }), b = y?.ggnomadProviders ?? [];
20
+ return /* @__PURE__ */ h(t, {
21
+ title: g("ggnomad.provider.title", "Provider Dashboard"),
22
+ titleAccent: g("ggnomad.provider.title.accent", "Provider"),
23
+ subtitle: g("ggnomad.provider.subtitle", "B2B provider operations and onboarding metrics"),
24
+ children: [/* @__PURE__ */ m(p, {
25
+ icon: /* @__PURE__ */ m(o, { className: "size-4" }),
26
+ children: g("ggnomad.provider.purpose", "Track the supply side of the marketplace — the hotels, tour operators and venues that publish inventory. Use it to monitor each provider’s status, listing count, revenue and rating, and to spot who needs onboarding attention.")
27
+ }), b.length === 0 ? /* @__PURE__ */ m(f, {
27
28
  illustration: "empty-people",
28
- title: m("ggnomad.provider.emptyTitle", "No providers onboarded"),
29
- description: m("ggnomad.provider.emptyDescription", "Onboarded B2B providers and their performance will be tracked here.")
30
- }) : /* @__PURE__ */ p(l, {
29
+ title: g("ggnomad.provider.emptyTitle", "No providers onboarded"),
30
+ description: g("ggnomad.provider.emptyDescription", "Onboarded B2B providers and their performance will be tracked here.")
31
+ }) : /* @__PURE__ */ h(d, {
31
32
  treatment: "glass",
32
33
  glow: !0,
33
34
  className: "border-border-seam p-5",
34
35
  children: [
35
- /* @__PURE__ */ f("h2", {
36
+ /* @__PURE__ */ m("h2", {
36
37
  className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
37
- children: m("ggnomad.provider.onboardedProviders", "Onboarded providers")
38
+ children: g("ggnomad.provider.onboardedProviders", "Onboarded providers")
38
39
  }),
39
- /* @__PURE__ */ f("div", {
40
+ /* @__PURE__ */ m("div", {
40
41
  className: "grid gap-3 sm:grid-cols-2 xl:grid-cols-3",
41
- children: v.map((e) => /* @__PURE__ */ f(r, {
42
+ children: b.map((e) => /* @__PURE__ */ m(r, {
42
43
  title: e.name,
43
44
  meta: e.type,
44
- badge: /* @__PURE__ */ f(n, {
45
+ badge: /* @__PURE__ */ m(n, {
45
46
  status: e.status,
46
47
  live: e.status === "ACTIVE"
47
48
  }),
48
- footer: /* @__PURE__ */ p("dl", {
49
+ footer: /* @__PURE__ */ h("dl", {
49
50
  className: "grid grid-cols-3 gap-2 text-xs",
50
51
  children: [
51
- /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("dt", {
52
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("dt", {
52
53
  className: "text-text-secondary",
53
- children: m("ggnomad.provider.listings", "Listings")
54
- }), /* @__PURE__ */ f("dd", {
54
+ children: g("ggnomad.provider.listings", "Listings")
55
+ }), /* @__PURE__ */ m("dd", {
55
56
  className: "mt-0.5 font-medium tabular-nums text-text-primary",
56
57
  children: e.listingCount
57
58
  })] }),
58
- /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("dt", {
59
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("dt", {
59
60
  className: "text-text-secondary",
60
- children: m("ggnomad.provider.revenue", "Revenue")
61
- }), /* @__PURE__ */ p("dd", {
61
+ children: g("ggnomad.provider.revenue", "Revenue")
62
+ }), /* @__PURE__ */ h("dd", {
62
63
  className: "mt-0.5 font-medium tabular-nums text-text-primary",
63
64
  children: ["$", Number(e.totalRevenue).toLocaleString()]
64
65
  })] }),
65
- /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("dt", {
66
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("dt", {
66
67
  className: "text-text-secondary",
67
- children: m("ggnomad.provider.rating", "Rating")
68
- }), /* @__PURE__ */ f("dd", {
68
+ children: g("ggnomad.provider.rating", "Rating")
69
+ }), /* @__PURE__ */ m("dd", {
69
70
  className: "mt-0.5 font-medium tabular-nums text-text-primary",
70
- children: e.rating ?? m("ggnomad.provider.noRating", "N/A")
71
- })] })
71
+ children: e.rating ?? g("ggnomad.provider.noRating", "N/A")
72
+ })] }),
73
+ /* @__PURE__ */ m("div", {
74
+ className: "col-span-3 mt-1 border-t border-border-seam pt-2",
75
+ children: /* @__PURE__ */ h(l, {
76
+ to: `provider/${e.id}/storefront`,
77
+ className: "inline-flex items-center gap-1 text-xs font-medium text-action-primary-bg hover:underline",
78
+ children: [/* @__PURE__ */ m(s, { className: "size-3.5" }), g("ggnomad.provider.manageStorefront", "Manage storefront")]
79
+ })
80
+ })
72
81
  ]
73
82
  })
74
83
  }, e.id))
75
84
  }),
76
- /* @__PURE__ */ f(i, {
77
- visible: v.length >= h,
78
- onLoadMore: () => g((e) => e + 12)
85
+ /* @__PURE__ */ m(i, {
86
+ visible: b.length >= _,
87
+ onLoadMore: () => v((e) => e + 12)
79
88
  })
80
89
  ]
81
90
  })]
82
91
  });
83
92
  }
84
93
  //#endregion
85
- export { m as ProviderPage };
94
+ export { g as ProviderPage };
86
95
 
87
96
  //# sourceMappingURL=ProviderPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderPage.js","names":[],"sources":["../../../src/ggnomad/pages/ProviderPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Briefcase } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_PROVIDERS_QUERY } from '../graphql';\nimport { PageShell } from './PageShell';\nimport { EntityCard, LoadMoreButton, StatusBadge } from '../components';\n\nexport function ProviderPage() {\n const { t } = useI18n();\n const [limit, setLimit] = useState(12);\n const { data } = useQuery(\n GGNOMAD_PROVIDERS_QUERY as TypedDocumentNode<\n {\n ggnomadProviders: Array<{\n id: string;\n name: string;\n type: string;\n status: string;\n listingCount: number;\n totalRevenue: number;\n rating?: number;\n }>;\n },\n { limit: number; offset: number }\n >,\n { variables: { limit, offset: 0 } }\n );\n const providers = data?.ggnomadProviders ?? [];\n\n return (\n <PageShell\n title={t('ggnomad.provider.title', 'Provider Dashboard')}\n titleAccent={t('ggnomad.provider.title.accent', 'Provider')}\n subtitle={t('ggnomad.provider.subtitle', 'B2B provider operations and onboarding metrics')}\n >\n <PagePurpose icon={<Briefcase className=\"size-4\" />}>\n {t(\n 'ggnomad.provider.purpose',\n 'Track the supply side of the marketplace — the hotels, tour operators and venues that publish inventory. Use it to monitor each provider’s status, listing count, revenue and rating, and to spot who needs onboarding attention.'\n )}\n </PagePurpose>\n\n {providers.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title={t('ggnomad.provider.emptyTitle', 'No providers onboarded')}\n description={t(\n 'ggnomad.provider.emptyDescription',\n 'Onboarded B2B providers and their performance will be tracked here.'\n )}\n />\n ) : (\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.provider.onboardedProviders', 'Onboarded providers')}\n </h2>\n <div className=\"grid gap-3 sm:grid-cols-2 xl:grid-cols-3\">\n {providers.map((provider) => (\n <EntityCard\n key={provider.id}\n title={provider.name}\n meta={provider.type}\n badge={<StatusBadge status={provider.status} live={provider.status === 'ACTIVE'} />}\n footer={\n <dl className=\"grid grid-cols-3 gap-2 text-xs\">\n <div>\n <dt className=\"text-text-secondary\">\n {t('ggnomad.provider.listings', 'Listings')}\n </dt>\n <dd className=\"mt-0.5 font-medium tabular-nums text-text-primary\">\n {provider.listingCount}\n </dd>\n </div>\n <div>\n <dt className=\"text-text-secondary\">\n {t('ggnomad.provider.revenue', 'Revenue')}\n </dt>\n <dd className=\"mt-0.5 font-medium tabular-nums text-text-primary\">\n ${Number(provider.totalRevenue).toLocaleString()}\n </dd>\n </div>\n <div>\n <dt className=\"text-text-secondary\">\n {t('ggnomad.provider.rating', 'Rating')}\n </dt>\n <dd className=\"mt-0.5 font-medium tabular-nums text-text-primary\">\n {provider.rating ?? t('ggnomad.provider.noRating', 'N/A')}\n </dd>\n </div>\n </dl>\n }\n />\n ))}\n </div>\n <LoadMoreButton\n visible={providers.length >= limit}\n onLoadMore={() => setLimit((l) => l + 12)}\n />\n </GlassCard>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAWA,SAAgB,IAAe;CAC7B,IAAM,EAAE,SAAM,EAAQ,GAChB,CAAC,GAAO,KAAY,EAAS,EAAE,GAC/B,EAAE,YAAS,EACf,GAcA,EAAE,WAAW;EAAE;EAAO,QAAQ;CAAE,EAAE,CACpC,GACM,IAAY,GAAM,oBAAoB,CAAC;CAE7C,OACE,kBAAC,GAAD;EACE,OAAO,EAAE,0BAA0B,oBAAoB;EACvD,aAAa,EAAE,iCAAiC,UAAU;EAC1D,UAAU,EAAE,6BAA6B,gDAAgD;YAH3F,CAKE,kBAAC,GAAD;GAAa,MAAM,kBAAC,GAAD,EAAW,WAAU,SAAU,CAAA;aAC/C,EACC,4BACA,mOACF;EACW,CAAA,GAEZ,EAAU,WAAW,IACpB,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,+BAA+B,wBAAwB;GAChE,aAAa,EACX,qCACA,qEACF;EACD,CAAA,IAED,kBAAC,GAAD;GAAW,WAAU;GAAQ,MAAA;GAAK,WAAU;aAA5C;IACE,kBAAC,MAAD;KAAI,WAAU;eACX,EAAE,uCAAuC,qBAAqB;IAC7D,CAAA;IACJ,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAU,KAAK,MACd,kBAAC,GAAD;MAEE,OAAO,EAAS;MAChB,MAAM,EAAS;MACf,OAAO,kBAAC,GAAD;OAAa,QAAQ,EAAS;OAAQ,MAAM,EAAS,WAAW;MAAW,CAAA;MAClF,QACE,kBAAC,MAAD;OAAI,WAAU;iBAAd;QACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAE,6BAA6B,UAAU;QACxC,CAAA,GACJ,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAS;QACR,CAAA,CACD,EAAA,CAAA;QACL,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAE,4BAA4B,SAAS;QACtC,CAAA,GACJ,kBAAC,MAAD;SAAI,WAAU;mBAAd,CAAkE,KAC9D,OAAO,EAAS,YAAY,EAAE,eAAe,CAC7C;UACD,EAAA,CAAA;QACL,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAE,2BAA2B,QAAQ;QACpC,CAAA,GACJ,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAS,UAAU,EAAE,6BAA6B,KAAK;QACtD,CAAA,CACD,EAAA,CAAA;OACH;;KAEP,GAhCM,EAAS,EAgCf,CACF;IACE,CAAA;IACL,kBAAC,GAAD;KACE,SAAS,EAAU,UAAU;KAC7B,kBAAkB,GAAU,MAAM,IAAI,EAAE;IACzC,CAAA;GACQ;IAEJ;;AAEf"}
1
+ {"version":3,"file":"ProviderPage.js","names":[],"sources":["../../../src/ggnomad/pages/ProviderPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { Link } from 'react-router-dom';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Briefcase, Store } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_PROVIDERS_QUERY } from '../graphql';\nimport { PageShell } from './PageShell';\nimport { EntityCard, LoadMoreButton, StatusBadge } from '../components';\n\nexport function ProviderPage() {\n const { t } = useI18n();\n const [limit, setLimit] = useState(12);\n const { data } = useQuery(\n GGNOMAD_PROVIDERS_QUERY as TypedDocumentNode<\n {\n ggnomadProviders: Array<{\n id: string;\n name: string;\n type: string;\n status: string;\n listingCount: number;\n totalRevenue: number;\n rating?: number;\n }>;\n },\n { limit: number; offset: number }\n >,\n { variables: { limit, offset: 0 } }\n );\n const providers = data?.ggnomadProviders ?? [];\n\n return (\n <PageShell\n title={t('ggnomad.provider.title', 'Provider Dashboard')}\n titleAccent={t('ggnomad.provider.title.accent', 'Provider')}\n subtitle={t('ggnomad.provider.subtitle', 'B2B provider operations and onboarding metrics')}\n >\n <PagePurpose icon={<Briefcase className=\"size-4\" />}>\n {t(\n 'ggnomad.provider.purpose',\n 'Track the supply side of the marketplace — the hotels, tour operators and venues that publish inventory. Use it to monitor each provider’s status, listing count, revenue and rating, and to spot who needs onboarding attention.'\n )}\n </PagePurpose>\n\n {providers.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title={t('ggnomad.provider.emptyTitle', 'No providers onboarded')}\n description={t(\n 'ggnomad.provider.emptyDescription',\n 'Onboarded B2B providers and their performance will be tracked here.'\n )}\n />\n ) : (\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.provider.onboardedProviders', 'Onboarded providers')}\n </h2>\n <div className=\"grid gap-3 sm:grid-cols-2 xl:grid-cols-3\">\n {providers.map((provider) => (\n <EntityCard\n key={provider.id}\n title={provider.name}\n meta={provider.type}\n badge={<StatusBadge status={provider.status} live={provider.status === 'ACTIVE'} />}\n footer={\n <dl className=\"grid grid-cols-3 gap-2 text-xs\">\n <div>\n <dt className=\"text-text-secondary\">\n {t('ggnomad.provider.listings', 'Listings')}\n </dt>\n <dd className=\"mt-0.5 font-medium tabular-nums text-text-primary\">\n {provider.listingCount}\n </dd>\n </div>\n <div>\n <dt className=\"text-text-secondary\">\n {t('ggnomad.provider.revenue', 'Revenue')}\n </dt>\n <dd className=\"mt-0.5 font-medium tabular-nums text-text-primary\">\n ${Number(provider.totalRevenue).toLocaleString()}\n </dd>\n </div>\n <div>\n <dt className=\"text-text-secondary\">\n {t('ggnomad.provider.rating', 'Rating')}\n </dt>\n <dd className=\"mt-0.5 font-medium tabular-nums text-text-primary\">\n {provider.rating ?? t('ggnomad.provider.noRating', 'N/A')}\n </dd>\n </div>\n <div className=\"col-span-3 mt-1 border-t border-border-seam pt-2\">\n <Link\n to={`provider/${provider.id}/storefront`}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-action-primary-bg hover:underline\"\n >\n <Store className=\"size-3.5\" />\n {t('ggnomad.provider.manageStorefront', 'Manage storefront')}\n </Link>\n </div>\n </dl>\n }\n />\n ))}\n </div>\n <LoadMoreButton\n visible={providers.length >= limit}\n onLoadMore={() => setLimit((l) => l + 12)}\n />\n </GlassCard>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAYA,SAAgB,IAAe;CAC7B,IAAM,EAAE,SAAM,EAAQ,GAChB,CAAC,GAAO,KAAY,EAAS,EAAE,GAC/B,EAAE,YAAS,EACf,GAcA,EAAE,WAAW;EAAE;EAAO,QAAQ;CAAE,EAAE,CACpC,GACM,IAAY,GAAM,oBAAoB,CAAC;CAE7C,OACE,kBAAC,GAAD;EACE,OAAO,EAAE,0BAA0B,oBAAoB;EACvD,aAAa,EAAE,iCAAiC,UAAU;EAC1D,UAAU,EAAE,6BAA6B,gDAAgD;YAH3F,CAKE,kBAAC,GAAD;GAAa,MAAM,kBAAC,GAAD,EAAW,WAAU,SAAU,CAAA;aAC/C,EACC,4BACA,mOACF;EACW,CAAA,GAEZ,EAAU,WAAW,IACpB,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,+BAA+B,wBAAwB;GAChE,aAAa,EACX,qCACA,qEACF;EACD,CAAA,IAED,kBAAC,GAAD;GAAW,WAAU;GAAQ,MAAA;GAAK,WAAU;aAA5C;IACE,kBAAC,MAAD;KAAI,WAAU;eACX,EAAE,uCAAuC,qBAAqB;IAC7D,CAAA;IACJ,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAU,KAAK,MACd,kBAAC,GAAD;MAEE,OAAO,EAAS;MAChB,MAAM,EAAS;MACf,OAAO,kBAAC,GAAD;OAAa,QAAQ,EAAS;OAAQ,MAAM,EAAS,WAAW;MAAW,CAAA;MAClF,QACE,kBAAC,MAAD;OAAI,WAAU;iBAAd;QACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAE,6BAA6B,UAAU;QACxC,CAAA,GACJ,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAS;QACR,CAAA,CACD,EAAA,CAAA;QACL,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAE,4BAA4B,SAAS;QACtC,CAAA,GACJ,kBAAC,MAAD;SAAI,WAAU;mBAAd,CAAkE,KAC9D,OAAO,EAAS,YAAY,EAAE,eAAe,CAC7C;UACD,EAAA,CAAA;QACL,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAE,2BAA2B,QAAQ;QACpC,CAAA,GACJ,kBAAC,MAAD;SAAI,WAAU;mBACX,EAAS,UAAU,EAAE,6BAA6B,KAAK;QACtD,CAAA,CACD,EAAA,CAAA;QACL,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,GAAD;UACE,IAAI,YAAY,EAAS,GAAG;UAC5B,WAAU;oBAFZ,CAIE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,GAC5B,EAAE,qCAAqC,mBAAmB,CACvD;;QACH,CAAA;OACH;;KAEP,GAzCM,EAAS,EAyCf,CACF;IACE,CAAA;IACL,kBAAC,GAAD;KACE,SAAS,EAAU,UAAU;KAC7B,kBAAkB,GAAU,MAAM,IAAI,EAAE;IACzC,CAAA;GACQ;IAEJ;;AAEf"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * BOFF-4363 — operator storefront settings: create/edit the branding
3
+ * (logo/color/slug/about) for one provider and publish/unpublish it. The
4
+ * right-hand panel renders a live, themeable preview of the branded page a
5
+ * traveler would see at `ggnomadStorefrontBySlug` once published.
6
+ *
7
+ * Custom-domain DNS/SSL provisioning and a drag-and-drop page builder are
8
+ * explicitly out of scope for this pass — see Linear BOFF-4363.
9
+ */
10
+ export declare function StorefrontPage(): import("react").JSX.Element;
11
+ //# sourceMappingURL=StorefrontPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorefrontPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/StorefrontPage.tsx"],"names":[],"mappings":"AAqCA;;;;;;;;GAQG;AACH,wBAAgB,cAAc,gCAwY7B"}
@@ -0,0 +1,252 @@
1
+ import { CREATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION as e, GGNOMAD_OPERATOR_STOREFRONT_QUERY as t, PUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION as n, UNPUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION as r, UPDATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION as ee } from "../graphql.js";
2
+ import { PageShell as i } from "./PageShell.js";
3
+ import { notify as a } from "../utils/notify.js";
4
+ import { useState as o } from "react";
5
+ import { Globe as s, Palette as c, Store as l } from "lucide-react";
6
+ import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
+ import { useParams as d } from "react-router-dom";
8
+ import { useMutation as f, useQuery as p } from "@apollo/client/react";
9
+ import { Button as m, GlassCard as te, Input as h, PagePurpose as g, Spinner as _, Textarea as v } from "@burdenoff/fe-libs/ui";
10
+ import { jsx as y, jsxs as b } from "react/jsx-runtime";
11
+ //#region src/ggnomad/pages/StorefrontPage.tsx
12
+ var x = /^#[0-9a-fA-F]{6}$/, S = /^[a-z0-9]([a-z0-9-]{1,78}[a-z0-9])?$/, C = "mt-1 w-full rounded-md border border-border-seam bg-bg-canvas px-3 py-2 text-sm text-text-primary placeholder-text-secondary focus:border-action-primary-bg focus:outline-none focus:ring-1 focus:ring-action-primary-bg disabled:opacity-50", w = "block text-sm font-medium text-text-primary";
13
+ function T() {
14
+ let { t: T } = u(), { providerId: E = "" } = d(), { data: D, loading: O, refetch: k } = p(t, {
15
+ variables: { providerId: E },
16
+ skip: !E
17
+ }), A = D?.ggnomadOperatorStorefront ?? null, [j, M] = o(""), [N, P] = o(""), [F, I] = o(""), [L, R] = o("#1E88E5"), [z, B] = o(""), [V, H] = o(!1);
18
+ A && !V && (M(A.slug), P(A.displayName), I(A.logoUrl ?? ""), R(A.primaryColor ?? "#1E88E5"), B(A.aboutText ?? ""), H(!0));
19
+ let [U, { loading: W }] = f(e), [G, { loading: K }] = f(ee), [q, { loading: J }] = f(n), [Y, { loading: X }] = f(r), Z = async () => {
20
+ if (!j.trim() || !S.test(j.trim())) {
21
+ a.warning(T("ggnomad.storefront.invalidSlugTitle", "Invalid slug"), T("ggnomad.storefront.invalidSlugBody", "3-80 lowercase letters, digits, or hyphens; no leading/trailing hyphen."));
22
+ return;
23
+ }
24
+ if (!N.trim()) {
25
+ a.warning(T("ggnomad.storefront.nameRequiredTitle", "Display name is required"), T("ggnomad.storefront.nameRequiredBody", "Give your storefront a public-facing name."));
26
+ return;
27
+ }
28
+ if (L.trim() && !x.test(L.trim())) {
29
+ a.warning(T("ggnomad.storefront.invalidColorTitle", "Invalid color"), T("ggnomad.storefront.invalidColorBody", "Use a 6-digit hex color, e.g. #1E88E5."));
30
+ return;
31
+ }
32
+ try {
33
+ if (A) {
34
+ let e = await G({ variables: {
35
+ id: A.id,
36
+ input: {
37
+ slug: j.trim().toLowerCase(),
38
+ displayName: N.trim(),
39
+ logoUrl: F.trim() || null,
40
+ primaryColor: L.trim() || null,
41
+ aboutText: z.trim() || null
42
+ }
43
+ } });
44
+ if (e.error) throw e.error;
45
+ a.success(T("ggnomad.storefront.savedTitle", "Storefront updated"), N);
46
+ } else {
47
+ let e = await U({ variables: { input: {
48
+ providerId: E,
49
+ slug: j.trim().toLowerCase(),
50
+ displayName: N.trim(),
51
+ logoUrl: F.trim() || null,
52
+ primaryColor: L.trim() || null,
53
+ aboutText: z.trim() || null
54
+ } } });
55
+ if (e.error) throw e.error;
56
+ a.success(T("ggnomad.storefront.createdTitle", "Storefront created"), N);
57
+ }
58
+ await k();
59
+ } catch (e) {
60
+ a.error(T("ggnomad.storefront.errorTitle", "Could not save storefront"), e instanceof Error ? e.message : String(e));
61
+ }
62
+ }, ne = async () => {
63
+ if (A) try {
64
+ A.isPublished ? (await Y({ variables: { id: A.id } }), a.success(T("ggnomad.storefront.unpublishedTitle", "Storefront unpublished"), T("ggnomad.storefront.unpublishedBody", "It is no longer visible to the public."))) : (await q({ variables: { id: A.id } }), a.success(T("ggnomad.storefront.publishedTitle", "Storefront published"), T("ggnomad.storefront.publishedBody", "Your branded page is now publicly reachable."))), await k();
65
+ } catch (e) {
66
+ a.error(T("ggnomad.storefront.errorTitle", "Could not update storefront"), e instanceof Error ? e.message : String(e));
67
+ }
68
+ }, Q = W || K, $ = x.test(L.trim()) ? L.trim() : "#1E88E5";
69
+ return E ? /* @__PURE__ */ b(i, {
70
+ title: T("ggnomad.storefront.title", "Operator Storefront"),
71
+ titleAccent: T("ggnomad.storefront.title.accent", "Storefront"),
72
+ subtitle: T("ggnomad.storefront.subtitle", "White-label branding for your public listing page — logo, color, slug, and about text."),
73
+ children: [/* @__PURE__ */ y(g, {
74
+ icon: /* @__PURE__ */ y(l, { className: "size-4" }),
75
+ children: T("ggnomad.storefront.purpose", "Configure how travelers see your business when they visit your branded storefront URL. Publish when ready — draft branding stays private until then. Custom domains and a drag-and-drop builder are on the roadmap, not part of this core.")
76
+ }), O && !V ? /* @__PURE__ */ y("div", {
77
+ className: "flex justify-center py-10",
78
+ children: /* @__PURE__ */ y(_, {})
79
+ }) : /* @__PURE__ */ b("div", {
80
+ className: "grid gap-5 lg:grid-cols-2",
81
+ children: [/* @__PURE__ */ b(te, {
82
+ treatment: "glass",
83
+ glow: !0,
84
+ className: "border-border-seam p-5",
85
+ children: [/* @__PURE__ */ b("h2", {
86
+ className: "mb-4 flex items-center gap-2 text-lg font-medium tracking-tight text-text-primary",
87
+ children: [/* @__PURE__ */ y(c, { className: "size-4" }), T("ggnomad.storefront.brandingHeading", "Branding")]
88
+ }), /* @__PURE__ */ b("div", {
89
+ className: "space-y-4",
90
+ children: [
91
+ /* @__PURE__ */ b("div", { children: [
92
+ /* @__PURE__ */ y("label", {
93
+ className: w,
94
+ htmlFor: "storefront-slug",
95
+ children: T("ggnomad.storefront.slugLabel", "Public slug")
96
+ }),
97
+ /* @__PURE__ */ y(h, {
98
+ id: "storefront-slug",
99
+ className: C,
100
+ value: j,
101
+ onChange: (e) => M(e.target.value.toLowerCase()),
102
+ placeholder: "my-eco-stays",
103
+ disabled: Q
104
+ }),
105
+ /* @__PURE__ */ y("p", {
106
+ className: "mt-1 text-xs text-text-secondary",
107
+ children: T("ggnomad.storefront.slugHelp", "Lowercase letters, digits, hyphens — 3-80 chars.")
108
+ })
109
+ ] }),
110
+ /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
111
+ className: w,
112
+ htmlFor: "storefront-name",
113
+ children: T("ggnomad.storefront.nameLabel", "Display name")
114
+ }), /* @__PURE__ */ y(h, {
115
+ id: "storefront-name",
116
+ className: C,
117
+ value: N,
118
+ onChange: (e) => P(e.target.value),
119
+ placeholder: T("ggnomad.storefront.namePlaceholder", "Sunset Eco Stays"),
120
+ disabled: Q
121
+ })] }),
122
+ /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
123
+ className: w,
124
+ htmlFor: "storefront-logo",
125
+ children: T("ggnomad.storefront.logoLabel", "Logo URL")
126
+ }), /* @__PURE__ */ y(h, {
127
+ id: "storefront-logo",
128
+ className: C,
129
+ value: F,
130
+ onChange: (e) => I(e.target.value),
131
+ placeholder: "https://example.com/logo.png",
132
+ disabled: Q
133
+ })] }),
134
+ /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
135
+ className: w,
136
+ htmlFor: "storefront-color",
137
+ children: T("ggnomad.storefront.colorLabel", "Primary color")
138
+ }), /* @__PURE__ */ b("div", {
139
+ className: "mt-1 flex items-center gap-2",
140
+ children: [/* @__PURE__ */ y("input", {
141
+ id: "storefront-color",
142
+ type: "color",
143
+ className: "h-9 w-12 rounded border border-border-seam bg-bg-canvas",
144
+ value: x.test(L) ? L : "#1E88E5",
145
+ onChange: (e) => R(e.target.value),
146
+ disabled: Q
147
+ }), /* @__PURE__ */ y(h, {
148
+ className: C,
149
+ value: L,
150
+ onChange: (e) => R(e.target.value),
151
+ placeholder: "#1E88E5",
152
+ disabled: Q
153
+ })]
154
+ })] }),
155
+ /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
156
+ className: w,
157
+ htmlFor: "storefront-about",
158
+ children: T("ggnomad.storefront.aboutLabel", "About text")
159
+ }), /* @__PURE__ */ y(v, {
160
+ id: "storefront-about",
161
+ className: C,
162
+ rows: 4,
163
+ value: z,
164
+ onChange: (e) => B(e.target.value),
165
+ placeholder: T("ggnomad.storefront.aboutPlaceholder", "Tell travelers what makes your business worth booking."),
166
+ disabled: Q
167
+ })] }),
168
+ /* @__PURE__ */ b("div", {
169
+ className: "flex flex-wrap items-center gap-3 pt-2",
170
+ children: [
171
+ /* @__PURE__ */ y(m, {
172
+ onClick: Z,
173
+ disabled: Q,
174
+ children: A ? T("ggnomad.storefront.saveButton", "Save changes") : T("ggnomad.storefront.createButton", "Create storefront")
175
+ }),
176
+ A ? /* @__PURE__ */ y(m, {
177
+ variant: "secondary",
178
+ onClick: ne,
179
+ disabled: J || X,
180
+ children: A.isPublished ? T("ggnomad.storefront.unpublishButton", "Unpublish") : T("ggnomad.storefront.publishButton", "Publish")
181
+ }) : null,
182
+ A?.isPublished ? /* @__PURE__ */ b("span", {
183
+ className: "inline-flex items-center gap-1 text-xs text-text-secondary",
184
+ children: [/* @__PURE__ */ y(s, { className: "size-3.5" }), T("ggnomad.storefront.livePathLabel", "Live at /store/{slug}").replace("{slug}", A.slug)]
185
+ }) : null
186
+ ]
187
+ })
188
+ ]
189
+ })]
190
+ }), /* @__PURE__ */ b("div", {
191
+ className: "overflow-hidden rounded-lg border border-border-seam",
192
+ style: {
193
+ borderTopColor: $,
194
+ borderTopWidth: 4
195
+ },
196
+ children: [/* @__PURE__ */ b("div", {
197
+ className: "p-5",
198
+ style: { background: `${$}14` },
199
+ children: [
200
+ /* @__PURE__ */ b("div", {
201
+ className: "flex items-center gap-3",
202
+ children: [F ? /* @__PURE__ */ y("img", {
203
+ src: F,
204
+ alt: "",
205
+ className: "size-12 rounded object-contain",
206
+ onError: (e) => {
207
+ e.currentTarget.style.display = "none";
208
+ }
209
+ }) : /* @__PURE__ */ y("div", {
210
+ className: "flex size-12 items-center justify-center rounded text-lg font-semibold text-white",
211
+ style: { background: $ },
212
+ children: (N || "S").slice(0, 1).toUpperCase()
213
+ }), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("h3", {
214
+ className: "text-lg font-semibold text-text-primary",
215
+ children: N || T("ggnomad.storefront.previewPlaceholderName", "Your Storefront")
216
+ }), /* @__PURE__ */ y("p", {
217
+ className: "text-xs text-text-secondary",
218
+ children: j ? `/store/${j}` : T("ggnomad.storefront.previewSlugPlaceholder", "/store/…")
219
+ })] })]
220
+ }),
221
+ z ? /* @__PURE__ */ y("p", {
222
+ className: "mt-4 text-sm text-text-primary",
223
+ children: z
224
+ }) : /* @__PURE__ */ y("p", {
225
+ className: "mt-4 text-sm text-text-secondary",
226
+ children: T("ggnomad.storefront.previewNoAbout", "Add an about text to introduce your business.")
227
+ }),
228
+ /* @__PURE__ */ y("div", {
229
+ className: "mt-4 inline-block rounded px-3 py-1.5 text-xs font-medium text-white",
230
+ style: { background: $ },
231
+ children: T("ggnomad.storefront.previewCta", "Book with us")
232
+ })
233
+ ]
234
+ }), /* @__PURE__ */ y("div", {
235
+ className: "border-t border-border-seam bg-bg-surface p-4 text-xs text-text-secondary",
236
+ children: T("ggnomad.storefront.previewFooter", "ACTIVE properties, tours, events, and activities from this provider render below this banner on the public page.")
237
+ })]
238
+ })]
239
+ })]
240
+ }) : /* @__PURE__ */ y(i, {
241
+ title: T("ggnomad.storefront.title", "Operator Storefront"),
242
+ subtitle: T("ggnomad.storefront.missingProvider", "No provider selected."),
243
+ children: /* @__PURE__ */ y(g, {
244
+ icon: /* @__PURE__ */ y(l, { className: "size-4" }),
245
+ children: T("ggnomad.storefront.missingProviderHelp", "Open a provider from the Provider Dashboard and choose “Manage storefront”.")
246
+ })
247
+ });
248
+ }
249
+ //#endregion
250
+ export { T as StorefrontPage };
251
+
252
+ //# sourceMappingURL=StorefrontPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorefrontPage.js","names":[],"sources":["../../../src/ggnomad/pages/StorefrontPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useParams } from 'react-router-dom';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Globe, Palette, Store } from 'lucide-react';\nimport { Button, GlassCard, Input, PagePurpose, Spinner, Textarea } from '@burdenoff/fe-libs/ui';\n\nimport {\n CREATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION,\n GGNOMAD_OPERATOR_STOREFRONT_QUERY,\n PUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION,\n UNPUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION,\n UPDATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION,\n} from '../graphql';\nimport { PageShell } from './PageShell';\nimport { notify } from '../utils/notify';\n\ntype GgnomadOperatorStorefront = {\n id: string;\n providerId: string;\n slug: string;\n displayName: string;\n logoUrl: string | null;\n primaryColor: string | null;\n aboutText: string | null;\n isPublished: boolean;\n publishedAt: string | null;\n};\n\nconst HEX_COLOR_PATTERN = /^#[0-9a-fA-F]{6}$/;\nconst SLUG_PATTERN = /^[a-z0-9]([a-z0-9-]{1,78}[a-z0-9])?$/;\n\nconst fieldClass =\n 'mt-1 w-full rounded-md border border-border-seam bg-bg-canvas px-3 py-2 text-sm text-text-primary placeholder-text-secondary focus:border-action-primary-bg focus:outline-none focus:ring-1 focus:ring-action-primary-bg disabled:opacity-50';\nconst labelClass = 'block text-sm font-medium text-text-primary';\n\n/**\n * BOFF-4363 — operator storefront settings: create/edit the branding\n * (logo/color/slug/about) for one provider and publish/unpublish it. The\n * right-hand panel renders a live, themeable preview of the branded page a\n * traveler would see at `ggnomadStorefrontBySlug` once published.\n *\n * Custom-domain DNS/SSL provisioning and a drag-and-drop page builder are\n * explicitly out of scope for this pass — see Linear BOFF-4363.\n */\nexport function StorefrontPage() {\n const { t } = useI18n();\n const { providerId = '' } = useParams();\n\n const { data, loading, refetch } = useQuery(\n GGNOMAD_OPERATOR_STOREFRONT_QUERY as TypedDocumentNode<\n { ggnomadOperatorStorefront: GgnomadOperatorStorefront | null },\n { providerId: string }\n >,\n { variables: { providerId }, skip: !providerId }\n );\n const storefront = data?.ggnomadOperatorStorefront ?? null;\n\n const [slug, setSlug] = useState('');\n const [displayName, setDisplayName] = useState('');\n const [logoUrl, setLogoUrl] = useState('');\n const [primaryColor, setPrimaryColor] = useState('#1E88E5');\n const [aboutText, setAboutText] = useState('');\n const [hydrated, setHydrated] = useState(false);\n\n if (storefront && !hydrated) {\n setSlug(storefront.slug);\n setDisplayName(storefront.displayName);\n setLogoUrl(storefront.logoUrl ?? '');\n setPrimaryColor(storefront.primaryColor ?? '#1E88E5');\n setAboutText(storefront.aboutText ?? '');\n setHydrated(true);\n }\n\n const [createStorefront, { loading: creating }] = useMutation(\n CREATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION as TypedDocumentNode<\n { createGgnomadOperatorStorefront: GgnomadOperatorStorefront },\n {\n input: {\n providerId: string;\n slug: string;\n displayName: string;\n logoUrl?: string | null;\n primaryColor?: string | null;\n aboutText?: string | null;\n };\n }\n >\n );\n const [updateStorefront, { loading: updating }] = useMutation(\n UPDATE_GGNOMAD_OPERATOR_STOREFRONT_MUTATION as TypedDocumentNode<\n { updateGgnomadOperatorStorefront: GgnomadOperatorStorefront },\n {\n id: string;\n input: {\n slug?: string;\n displayName?: string;\n logoUrl?: string | null;\n primaryColor?: string | null;\n aboutText?: string | null;\n };\n }\n >\n );\n const [publishStorefront, { loading: publishing }] = useMutation(\n PUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION as TypedDocumentNode<\n { publishGgnomadOperatorStorefront: GgnomadOperatorStorefront },\n { id: string }\n >\n );\n const [unpublishStorefront, { loading: unpublishing }] = useMutation(\n UNPUBLISH_GGNOMAD_OPERATOR_STOREFRONT_MUTATION as TypedDocumentNode<\n { unpublishGgnomadOperatorStorefront: GgnomadOperatorStorefront },\n { id: string }\n >\n );\n\n const handleSave = async () => {\n if (!slug.trim() || !SLUG_PATTERN.test(slug.trim())) {\n notify.warning(\n t('ggnomad.storefront.invalidSlugTitle', 'Invalid slug'),\n t(\n 'ggnomad.storefront.invalidSlugBody',\n '3-80 lowercase letters, digits, or hyphens; no leading/trailing hyphen.'\n )\n );\n return;\n }\n if (!displayName.trim()) {\n notify.warning(\n t('ggnomad.storefront.nameRequiredTitle', 'Display name is required'),\n t('ggnomad.storefront.nameRequiredBody', 'Give your storefront a public-facing name.')\n );\n return;\n }\n if (primaryColor.trim() && !HEX_COLOR_PATTERN.test(primaryColor.trim())) {\n notify.warning(\n t('ggnomad.storefront.invalidColorTitle', 'Invalid color'),\n t('ggnomad.storefront.invalidColorBody', 'Use a 6-digit hex color, e.g. #1E88E5.')\n );\n return;\n }\n\n try {\n if (storefront) {\n const result = await updateStorefront({\n variables: {\n id: storefront.id,\n input: {\n slug: slug.trim().toLowerCase(),\n displayName: displayName.trim(),\n logoUrl: logoUrl.trim() || null,\n primaryColor: primaryColor.trim() || null,\n aboutText: aboutText.trim() || null,\n },\n },\n });\n if (result.error) throw result.error;\n notify.success(t('ggnomad.storefront.savedTitle', 'Storefront updated'), displayName);\n } else {\n const result = await createStorefront({\n variables: {\n input: {\n providerId,\n slug: slug.trim().toLowerCase(),\n displayName: displayName.trim(),\n logoUrl: logoUrl.trim() || null,\n primaryColor: primaryColor.trim() || null,\n aboutText: aboutText.trim() || null,\n },\n },\n });\n if (result.error) throw result.error;\n notify.success(t('ggnomad.storefront.createdTitle', 'Storefront created'), displayName);\n }\n await refetch();\n } catch (err) {\n notify.error(\n t('ggnomad.storefront.errorTitle', 'Could not save storefront'),\n err instanceof Error ? err.message : String(err)\n );\n }\n };\n\n const handleTogglePublish = async () => {\n if (!storefront) return;\n try {\n if (storefront.isPublished) {\n await unpublishStorefront({ variables: { id: storefront.id } });\n notify.success(\n t('ggnomad.storefront.unpublishedTitle', 'Storefront unpublished'),\n t('ggnomad.storefront.unpublishedBody', 'It is no longer visible to the public.')\n );\n } else {\n await publishStorefront({ variables: { id: storefront.id } });\n notify.success(\n t('ggnomad.storefront.publishedTitle', 'Storefront published'),\n t('ggnomad.storefront.publishedBody', 'Your branded page is now publicly reachable.')\n );\n }\n await refetch();\n } catch (err) {\n notify.error(\n t('ggnomad.storefront.errorTitle', 'Could not update storefront'),\n err instanceof Error ? err.message : String(err)\n );\n }\n };\n\n const saving = creating || updating;\n const previewColor = HEX_COLOR_PATTERN.test(primaryColor.trim())\n ? primaryColor.trim()\n : '#1E88E5';\n\n if (!providerId) {\n return (\n <PageShell\n title={t('ggnomad.storefront.title', 'Operator Storefront')}\n subtitle={t('ggnomad.storefront.missingProvider', 'No provider selected.')}\n >\n <PagePurpose icon={<Store className=\"size-4\" />}>\n {t(\n 'ggnomad.storefront.missingProviderHelp',\n 'Open a provider from the Provider Dashboard and choose “Manage storefront”.'\n )}\n </PagePurpose>\n </PageShell>\n );\n }\n\n return (\n <PageShell\n title={t('ggnomad.storefront.title', 'Operator Storefront')}\n titleAccent={t('ggnomad.storefront.title.accent', 'Storefront')}\n subtitle={t(\n 'ggnomad.storefront.subtitle',\n 'White-label branding for your public listing page — logo, color, slug, and about text.'\n )}\n >\n <PagePurpose icon={<Store className=\"size-4\" />}>\n {t(\n 'ggnomad.storefront.purpose',\n 'Configure how travelers see your business when they visit your branded storefront URL. Publish when ready — draft branding stays private until then. Custom domains and a drag-and-drop builder are on the roadmap, not part of this core.'\n )}\n </PagePurpose>\n\n {loading && !hydrated ? (\n <div className=\"flex justify-center py-10\">\n <Spinner />\n </div>\n ) : (\n <div className=\"grid gap-5 lg:grid-cols-2\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 flex items-center gap-2 text-lg font-medium tracking-tight text-text-primary\">\n <Palette className=\"size-4\" />\n {t('ggnomad.storefront.brandingHeading', 'Branding')}\n </h2>\n <div className=\"space-y-4\">\n <div>\n <label className={labelClass} htmlFor=\"storefront-slug\">\n {t('ggnomad.storefront.slugLabel', 'Public slug')}\n </label>\n <Input\n id=\"storefront-slug\"\n className={fieldClass}\n value={slug}\n onChange={(e) => setSlug(e.target.value.toLowerCase())}\n placeholder=\"my-eco-stays\"\n disabled={saving}\n />\n <p className=\"mt-1 text-xs text-text-secondary\">\n {t(\n 'ggnomad.storefront.slugHelp',\n 'Lowercase letters, digits, hyphens — 3-80 chars.'\n )}\n </p>\n </div>\n <div>\n <label className={labelClass} htmlFor=\"storefront-name\">\n {t('ggnomad.storefront.nameLabel', 'Display name')}\n </label>\n <Input\n id=\"storefront-name\"\n className={fieldClass}\n value={displayName}\n onChange={(e) => setDisplayName(e.target.value)}\n placeholder={t('ggnomad.storefront.namePlaceholder', 'Sunset Eco Stays')}\n disabled={saving}\n />\n </div>\n <div>\n <label className={labelClass} htmlFor=\"storefront-logo\">\n {t('ggnomad.storefront.logoLabel', 'Logo URL')}\n </label>\n <Input\n id=\"storefront-logo\"\n className={fieldClass}\n value={logoUrl}\n onChange={(e) => setLogoUrl(e.target.value)}\n placeholder=\"https://example.com/logo.png\"\n disabled={saving}\n />\n </div>\n <div>\n <label className={labelClass} htmlFor=\"storefront-color\">\n {t('ggnomad.storefront.colorLabel', 'Primary color')}\n </label>\n <div className=\"mt-1 flex items-center gap-2\">\n <input\n id=\"storefront-color\"\n type=\"color\"\n className=\"h-9 w-12 rounded border border-border-seam bg-bg-canvas\"\n value={HEX_COLOR_PATTERN.test(primaryColor) ? primaryColor : '#1E88E5'}\n onChange={(e) => setPrimaryColor(e.target.value)}\n disabled={saving}\n />\n <Input\n className={fieldClass}\n value={primaryColor}\n onChange={(e) => setPrimaryColor(e.target.value)}\n placeholder=\"#1E88E5\"\n disabled={saving}\n />\n </div>\n </div>\n <div>\n <label className={labelClass} htmlFor=\"storefront-about\">\n {t('ggnomad.storefront.aboutLabel', 'About text')}\n </label>\n <Textarea\n id=\"storefront-about\"\n className={fieldClass}\n rows={4}\n value={aboutText}\n onChange={(e) => setAboutText(e.target.value)}\n placeholder={t(\n 'ggnomad.storefront.aboutPlaceholder',\n 'Tell travelers what makes your business worth booking.'\n )}\n disabled={saving}\n />\n </div>\n\n <div className=\"flex flex-wrap items-center gap-3 pt-2\">\n <Button onClick={handleSave} disabled={saving}>\n {storefront\n ? t('ggnomad.storefront.saveButton', 'Save changes')\n : t('ggnomad.storefront.createButton', 'Create storefront')}\n </Button>\n {storefront ? (\n <Button\n variant=\"secondary\"\n onClick={handleTogglePublish}\n disabled={publishing || unpublishing}\n >\n {storefront.isPublished\n ? t('ggnomad.storefront.unpublishButton', 'Unpublish')\n : t('ggnomad.storefront.publishButton', 'Publish')}\n </Button>\n ) : null}\n {storefront?.isPublished ? (\n <span className=\"inline-flex items-center gap-1 text-xs text-text-secondary\">\n <Globe className=\"size-3.5\" />\n {t('ggnomad.storefront.livePathLabel', 'Live at /store/{slug}').replace(\n '{slug}',\n storefront.slug\n )}\n </span>\n ) : null}\n </div>\n </div>\n </GlassCard>\n\n {/* Live preview — the same visual shape ggnomadStorefrontBySlug renders publicly. */}\n <div\n className=\"overflow-hidden rounded-lg border border-border-seam\"\n style={{ borderTopColor: previewColor, borderTopWidth: 4 }}\n >\n <div className=\"p-5\" style={{ background: `${previewColor}14` }}>\n <div className=\"flex items-center gap-3\">\n {logoUrl ? (\n <img\n src={logoUrl}\n alt=\"\"\n className=\"size-12 rounded object-contain\"\n onError={(e) => {\n (e.currentTarget as HTMLImageElement).style.display = 'none';\n }}\n />\n ) : (\n <div\n className=\"flex size-12 items-center justify-center rounded text-lg font-semibold text-white\"\n style={{ background: previewColor }}\n >\n {(displayName || 'S').slice(0, 1).toUpperCase()}\n </div>\n )}\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary\">\n {displayName ||\n t('ggnomad.storefront.previewPlaceholderName', 'Your Storefront')}\n </h3>\n <p className=\"text-xs text-text-secondary\">\n {slug\n ? `/store/${slug}`\n : t('ggnomad.storefront.previewSlugPlaceholder', '/store/…')}\n </p>\n </div>\n </div>\n {aboutText ? (\n <p className=\"mt-4 text-sm text-text-primary\">{aboutText}</p>\n ) : (\n <p className=\"mt-4 text-sm text-text-secondary\">\n {t(\n 'ggnomad.storefront.previewNoAbout',\n 'Add an about text to introduce your business.'\n )}\n </p>\n )}\n <div\n className=\"mt-4 inline-block rounded px-3 py-1.5 text-xs font-medium text-white\"\n style={{ background: previewColor }}\n >\n {t('ggnomad.storefront.previewCta', 'Book with us')}\n </div>\n </div>\n <div className=\"border-t border-border-seam bg-bg-surface p-4 text-xs text-text-secondary\">\n {t(\n 'ggnomad.storefront.previewFooter',\n 'ACTIVE properties, tours, events, and activities from this provider render below this banner on the public page.'\n )}\n </div>\n </div>\n </div>\n )}\n </PageShell>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * BOFF-4363 — the branded storefront page a traveler sees, backed by the
3
+ * genuinely public `ggnomadStorefrontBySlug` query. Note: this route still
4
+ * renders inside the authenticated app shell today — making it reachable
5
+ * without any login at all is a routing/CDN concern for the app shell, not
6
+ * this MFE (tracked alongside the deferred custom-domain work in BOFF-4363).
7
+ */
8
+ export declare function StorefrontPublicPage(): import("react").JSX.Element;
9
+ //# sourceMappingURL=StorefrontPublicPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorefrontPublicPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/StorefrontPublicPage.tsx"],"names":[],"mappings":"AAqCA;;;;;;GAMG;AACH,wBAAgB,oBAAoB,gCAqHnC"}
@@ -0,0 +1,98 @@
1
+ import { GGNOMAD_STOREFRONT_BY_SLUG_QUERY as e } from "../graphql.js";
2
+ import { PageShell as t } from "./PageShell.js";
3
+ import { useGGNomad as n } from "../providers/GGNomadProvider.js";
4
+ import { Leaf as r } from "lucide-react";
5
+ import { useI18n as i } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
+ import { useParams as a } from "react-router-dom";
7
+ import { useQuery as o } from "@apollo/client/react";
8
+ import { GlassCard as s, IllustratedEmptyState as c, Spinner as l } from "@burdenoff/fe-libs/ui";
9
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
10
+ //#region src/ggnomad/pages/StorefrontPublicPage.tsx
11
+ function f() {
12
+ let { t: f } = i(), { slug: p = "" } = a(), { workspaceId: m = "" } = n(), { data: h, loading: g } = o(e, {
13
+ variables: {
14
+ workspaceId: m,
15
+ slug: p
16
+ },
17
+ skip: !m || !p
18
+ }), _ = h?.ggnomadStorefrontBySlug ?? null, v = _?.storefront.primaryColor ?? "#1E88E5", y = _ ? [
19
+ ..._.properties,
20
+ ..._.tours,
21
+ ..._.events,
22
+ ..._.activities
23
+ ] : [];
24
+ return g ? /* @__PURE__ */ u(t, {
25
+ title: f("ggnomad.storefrontPublic.title", "Storefront"),
26
+ subtitle: "",
27
+ children: /* @__PURE__ */ u("div", {
28
+ className: "flex justify-center py-10",
29
+ children: /* @__PURE__ */ u(l, {})
30
+ })
31
+ }) : _ ? /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("div", {
32
+ className: "p-6",
33
+ style: {
34
+ background: `${v}14`,
35
+ borderBottom: `4px solid ${v}`
36
+ },
37
+ children: /* @__PURE__ */ d("div", {
38
+ className: "mx-auto flex max-w-4xl items-center gap-4",
39
+ children: [_.storefront.logoUrl ? /* @__PURE__ */ u("img", {
40
+ src: _.storefront.logoUrl,
41
+ alt: "",
42
+ className: "size-16 rounded object-contain"
43
+ }) : /* @__PURE__ */ u("div", {
44
+ className: "flex size-16 items-center justify-center rounded text-2xl font-semibold text-white",
45
+ style: { background: v },
46
+ children: _.storefront.displayName.slice(0, 1).toUpperCase()
47
+ }), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
48
+ className: "text-2xl font-semibold text-text-primary",
49
+ children: _.storefront.displayName
50
+ }), _.storefront.aboutText ? /* @__PURE__ */ u("p", {
51
+ className: "mt-1 max-w-2xl text-sm text-text-secondary",
52
+ children: _.storefront.aboutText
53
+ }) : null] })]
54
+ })
55
+ }), /* @__PURE__ */ u("div", {
56
+ className: "mx-auto max-w-4xl p-6",
57
+ children: y.length === 0 ? /* @__PURE__ */ u(c, {
58
+ illustration: "empty-people",
59
+ title: f("ggnomad.storefrontPublic.emptyTitle", "Nothing listed yet"),
60
+ description: f("ggnomad.storefrontPublic.emptyDescription", "This operator has not published any active listings.")
61
+ }) : /* @__PURE__ */ u("div", {
62
+ className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
63
+ children: y.map((e) => /* @__PURE__ */ d(s, {
64
+ treatment: "glass",
65
+ className: "border-border-seam p-4",
66
+ children: [
67
+ /* @__PURE__ */ u("h3", {
68
+ className: "font-medium text-text-primary",
69
+ children: e.name
70
+ }),
71
+ /* @__PURE__ */ u("p", {
72
+ className: "mt-1 text-sm text-text-secondary",
73
+ children: (e.price ?? e.pricePerNight ?? 0).toLocaleString(void 0, {
74
+ style: "currency",
75
+ currency: e.currency
76
+ })
77
+ }),
78
+ e.sustainabilityScore > 0 ? /* @__PURE__ */ d("p", {
79
+ className: "mt-2 inline-flex items-center gap-1 text-xs text-text-secondary",
80
+ children: [/* @__PURE__ */ u(r, { className: "size-3.5 text-emerald-500" }), f("ggnomad.storefrontPublic.sustainabilityScore", "{score}% self-reported sustainable").replace("{score}", String(e.sustainabilityScore))]
81
+ }) : null
82
+ ]
83
+ }, e.id))
84
+ })
85
+ })] }) : /* @__PURE__ */ u(t, {
86
+ title: f("ggnomad.storefrontPublic.title", "Storefront"),
87
+ subtitle: f("ggnomad.storefrontPublic.notFoundSubtitle", "This storefront is not available."),
88
+ children: /* @__PURE__ */ u(c, {
89
+ illustration: "empty-search",
90
+ title: f("ggnomad.storefrontPublic.notFoundTitle", "Storefront not found"),
91
+ description: f("ggnomad.storefrontPublic.notFoundDescription", "This link may be mistyped, or the operator has not published a storefront yet.")
92
+ })
93
+ });
94
+ }
95
+ //#endregion
96
+ export { f as StorefrontPublicPage };
97
+
98
+ //# sourceMappingURL=StorefrontPublicPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorefrontPublicPage.js","names":[],"sources":["../../../src/ggnomad/pages/StorefrontPublicPage.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useParams } from 'react-router-dom';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Leaf } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, Spinner } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_STOREFRONT_BY_SLUG_QUERY } from '../graphql';\nimport { PageShell } from './PageShell';\nimport { useGGNomad } from '../providers/GGNomadProvider';\n\ntype StorefrontListing = {\n id: string;\n name: string;\n price?: number;\n pricePerNight?: number;\n currency: string;\n images: string[];\n rating?: number | null;\n sustainabilityScore: number;\n};\n\ntype StorefrontPage = {\n storefront: {\n id: string;\n displayName: string;\n logoUrl: string | null;\n primaryColor: string | null;\n aboutText: string | null;\n publishedAt: string | null;\n };\n properties: StorefrontListing[];\n tours: StorefrontListing[];\n events: StorefrontListing[];\n activities: StorefrontListing[];\n};\n\n/**\n * BOFF-4363 — the branded storefront page a traveler sees, backed by the\n * genuinely public `ggnomadStorefrontBySlug` query. Note: this route still\n * renders inside the authenticated app shell today — making it reachable\n * without any login at all is a routing/CDN concern for the app shell, not\n * this MFE (tracked alongside the deferred custom-domain work in BOFF-4363).\n */\nexport function StorefrontPublicPage() {\n const { t } = useI18n();\n const { slug = '' } = useParams();\n const { workspaceId = '' } = useGGNomad();\n\n const { data, loading } = useQuery(\n GGNOMAD_STOREFRONT_BY_SLUG_QUERY as TypedDocumentNode<\n { ggnomadStorefrontBySlug: StorefrontPage | null },\n { workspaceId: string; slug: string }\n >,\n { variables: { workspaceId, slug }, skip: !workspaceId || !slug }\n );\n\n const page = data?.ggnomadStorefrontBySlug ?? null;\n const brandColor = page?.storefront.primaryColor ?? '#1E88E5';\n const allListings = page\n ? [...page.properties, ...page.tours, ...page.events, ...page.activities]\n : [];\n\n if (loading) {\n return (\n <PageShell title={t('ggnomad.storefrontPublic.title', 'Storefront')} subtitle=\"\">\n <div className=\"flex justify-center py-10\">\n <Spinner />\n </div>\n </PageShell>\n );\n }\n\n if (!page) {\n return (\n <PageShell\n title={t('ggnomad.storefrontPublic.title', 'Storefront')}\n subtitle={t(\n 'ggnomad.storefrontPublic.notFoundSubtitle',\n 'This storefront is not available.'\n )}\n >\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title={t('ggnomad.storefrontPublic.notFoundTitle', 'Storefront not found')}\n description={t(\n 'ggnomad.storefrontPublic.notFoundDescription',\n 'This link may be mistyped, or the operator has not published a storefront yet.'\n )}\n />\n </PageShell>\n );\n }\n\n return (\n <div>\n <div\n className=\"p-6\"\n style={{ background: `${brandColor}14`, borderBottom: `4px solid ${brandColor}` }}\n >\n <div className=\"mx-auto flex max-w-4xl items-center gap-4\">\n {page.storefront.logoUrl ? (\n <img src={page.storefront.logoUrl} alt=\"\" className=\"size-16 rounded object-contain\" />\n ) : (\n <div\n className=\"flex size-16 items-center justify-center rounded text-2xl font-semibold text-white\"\n style={{ background: brandColor }}\n >\n {page.storefront.displayName.slice(0, 1).toUpperCase()}\n </div>\n )}\n <div>\n <h1 className=\"text-2xl font-semibold text-text-primary\">\n {page.storefront.displayName}\n </h1>\n {page.storefront.aboutText ? (\n <p className=\"mt-1 max-w-2xl text-sm text-text-secondary\">\n {page.storefront.aboutText}\n </p>\n ) : null}\n </div>\n </div>\n </div>\n\n <div className=\"mx-auto max-w-4xl p-6\">\n {allListings.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title={t('ggnomad.storefrontPublic.emptyTitle', 'Nothing listed yet')}\n description={t(\n 'ggnomad.storefrontPublic.emptyDescription',\n 'This operator has not published any active listings.'\n )}\n />\n ) : (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {allListings.map((listing) => (\n <GlassCard key={listing.id} treatment=\"glass\" className=\"border-border-seam p-4\">\n <h3 className=\"font-medium text-text-primary\">{listing.name}</h3>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {(listing.price ?? listing.pricePerNight ?? 0).toLocaleString(undefined, {\n style: 'currency',\n currency: listing.currency,\n })}\n </p>\n {listing.sustainabilityScore > 0 ? (\n <p className=\"mt-2 inline-flex items-center gap-1 text-xs text-text-secondary\">\n <Leaf className=\"size-3.5 text-emerald-500\" />\n {t(\n 'ggnomad.storefrontPublic.sustainabilityScore',\n '{score}% self-reported sustainable'\n ).replace('{score}', String(listing.sustainabilityScore))}\n </p>\n ) : null}\n </GlassCard>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AA4CA,SAAgB,IAAuB;CACrC,IAAM,EAAE,SAAM,EAAQ,GAChB,EAAE,UAAO,OAAO,EAAU,GAC1B,EAAE,iBAAc,OAAO,EAAW,GAElC,EAAE,SAAM,eAAY,EACxB,GAIA;EAAE,WAAW;GAAE;GAAa;EAAK;EAAG,MAAM,CAAC,KAAe,CAAC;CAAK,CAClE,GAEM,IAAO,GAAM,2BAA2B,MACxC,IAAa,GAAM,WAAW,gBAAgB,WAC9C,IAAc,IAChB;EAAC,GAAG,EAAK;EAAY,GAAG,EAAK;EAAO,GAAG,EAAK;EAAQ,GAAG,EAAK;CAAU,IACtE,CAAC;CAiCL,OA/BI,IAEA,kBAAC,GAAD;EAAW,OAAO,EAAE,kCAAkC,YAAY;EAAG,UAAS;YAC5E,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD,CAAU,CAAA;EACP,CAAA;CACI,CAAA,IAIV,IAsBH,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;EACE,WAAU;EACV,OAAO;GAAE,YAAY,GAAG,EAAW;GAAK,cAAc,aAAa;EAAa;YAEhF,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,EAAK,WAAW,UACf,kBAAC,OAAD;IAAK,KAAK,EAAK,WAAW;IAAS,KAAI;IAAG,WAAU;GAAkC,CAAA,IAEtF,kBAAC,OAAD;IACE,WAAU;IACV,OAAO,EAAE,YAAY,EAAW;cAE/B,EAAK,WAAW,YAAY,MAAM,GAAG,CAAC,EAAE,YAAY;GAClD,CAAA,GAEP,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACX,EAAK,WAAW;GACf,CAAA,GACH,EAAK,WAAW,YACf,kBAAC,KAAD;IAAG,WAAU;cACV,EAAK,WAAW;GAChB,CAAA,IACD,IACD,EAAA,CAAA,CACF;;CACF,CAAA,GAEL,kBAAC,OAAD;EAAK,WAAU;YACZ,EAAY,WAAW,IACtB,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,uCAAuC,oBAAoB;GACpE,aAAa,EACX,6CACA,sDACF;EACD,CAAA,IAED,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAY,KAAK,MAChB,kBAAC,GAAD;IAA4B,WAAU;IAAQ,WAAU;cAAxD;KACE,kBAAC,MAAD;MAAI,WAAU;gBAAiC,EAAQ;KAAS,CAAA;KAChE,kBAAC,KAAD;MAAG,WAAU;iBACT,EAAQ,SAAS,EAAQ,iBAAiB,GAAG,eAAe,KAAA,GAAW;OACvE,OAAO;OACP,UAAU,EAAQ;MACpB,CAAC;KACA,CAAA;KACF,EAAQ,sBAAsB,IAC7B,kBAAC,KAAD;MAAG,WAAU;gBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,4BAA6B,CAAA,GAC5C,EACC,gDACA,oCACF,EAAE,QAAQ,WAAW,OAAO,EAAQ,mBAAmB,CAAC,CACvD;UACD;IACK;MAjBK,EAAQ,EAiBb,CACZ;EACE,CAAA;CAEJ,CAAA,CACF,EAAA,CAAA,IApFH,kBAAC,GAAD;EACE,OAAO,EAAE,kCAAkC,YAAY;EACvD,UAAU,EACR,6CACA,mCACF;YAEA,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,0CAA0C,sBAAsB;GACzE,aAAa,EACX,gDACA,gFACF;EACD,CAAA;CACQ,CAAA;AAuEjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-ggnomad",
3
- "version": "2026.728.3",
3
+ "version": "2026.730.1",
4
4
  "description": "Burdenoff GGNomad Microfrontend",
5
5
  "type": "module",
6
6
  "files": [