@burdenoff/microfe-ggnomad 2026.705.6 → 2026.710.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.
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +23527 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +57851 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/ggnomad/GGNomadRoot.d.ts +5 -0
- package/dist/ggnomad/GGNomadRoot.d.ts.map +1 -0
- package/dist/ggnomad/GGNomadRoutes.d.ts +2 -0
- package/dist/ggnomad/GGNomadRoutes.d.ts.map +1 -0
- package/dist/ggnomad/GGNomadRoutes.js.map +1 -1
- package/dist/ggnomad/components/BookingPanel.d.ts +16 -0
- package/dist/ggnomad/components/BookingPanel.d.ts.map +1 -0
- package/dist/ggnomad/components/DetailHero.d.ts +13 -0
- package/dist/ggnomad/components/DetailHero.d.ts.map +1 -0
- package/dist/ggnomad/components/DetailRow.d.ts +8 -0
- package/dist/ggnomad/components/DetailRow.d.ts.map +1 -0
- package/dist/ggnomad/components/EntityCard.d.ts +27 -0
- package/dist/ggnomad/components/EntityCard.d.ts.map +1 -0
- package/dist/ggnomad/components/ListingEditDialog.d.ts +20 -0
- package/dist/ggnomad/components/ListingEditDialog.d.ts.map +1 -0
- package/dist/ggnomad/components/ListingEditDialog.js +151 -0
- package/dist/ggnomad/components/ListingEditDialog.js.map +1 -0
- package/dist/ggnomad/components/LoadMoreButton.d.ts +13 -0
- package/dist/ggnomad/components/LoadMoreButton.d.ts.map +1 -0
- package/dist/ggnomad/components/ReviewsSection.d.ts +12 -0
- package/dist/ggnomad/components/ReviewsSection.d.ts.map +1 -0
- package/dist/ggnomad/components/SectionCard.d.ts +12 -0
- package/dist/ggnomad/components/SectionCard.d.ts.map +1 -0
- package/dist/ggnomad/components/StatCard.d.ts +17 -0
- package/dist/ggnomad/components/StatCard.d.ts.map +1 -0
- package/dist/ggnomad/components/StatusBadge.d.ts +12 -0
- package/dist/ggnomad/components/StatusBadge.d.ts.map +1 -0
- package/dist/ggnomad/components/index.d.ts +11 -0
- package/dist/ggnomad/components/index.d.ts.map +1 -0
- package/dist/ggnomad/components/index.js +1 -0
- package/dist/ggnomad/graphql.d.ts +47 -0
- package/dist/ggnomad/graphql.d.ts.map +1 -0
- package/dist/ggnomad/graphql.js +46 -1
- package/dist/ggnomad/graphql.js.map +1 -1
- package/dist/ggnomad/index.d.ts +4 -0
- package/dist/ggnomad/index.d.ts.map +1 -0
- package/dist/ggnomad/pages/ActivityDetailsPage.d.ts +2 -0
- package/dist/ggnomad/pages/ActivityDetailsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/ActivityDetailsPage.js +86 -61
- package/dist/ggnomad/pages/ActivityDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/AnalyticsPage.d.ts +2 -0
- package/dist/ggnomad/pages/AnalyticsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/BookingsPage.d.ts +2 -0
- package/dist/ggnomad/pages/BookingsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/DashboardPage.d.ts +2 -0
- package/dist/ggnomad/pages/DashboardPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/EntertainmentPage.d.ts +2 -0
- package/dist/ggnomad/pages/EntertainmentPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/EventDetailsPage.d.ts +2 -0
- package/dist/ggnomad/pages/EventDetailsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/EventDetailsPage.js +87 -62
- package/dist/ggnomad/pages/EventDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/FavoritesPage.d.ts +2 -0
- package/dist/ggnomad/pages/FavoritesPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/HospitalityPage.d.ts +2 -0
- package/dist/ggnomad/pages/HospitalityPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/PageShell.d.ts +23 -0
- package/dist/ggnomad/pages/PageShell.d.ts.map +1 -0
- package/dist/ggnomad/pages/PropertyDetailsPage.d.ts +2 -0
- package/dist/ggnomad/pages/PropertyDetailsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/PropertyDetailsPage.js +91 -66
- package/dist/ggnomad/pages/PropertyDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/ProviderPage.d.ts +2 -0
- package/dist/ggnomad/pages/ProviderPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/SearchPage.d.ts +2 -0
- package/dist/ggnomad/pages/SearchPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TourDetailsPage.d.ts +2 -0
- package/dist/ggnomad/pages/TourDetailsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TourDetailsPage.js +86 -61
- package/dist/ggnomad/pages/TourDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/TourismPage.d.ts +2 -0
- package/dist/ggnomad/pages/TourismPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TravelPage.d.ts +2 -0
- package/dist/ggnomad/pages/TravelPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TripPlanDetailPage.d.ts +2 -0
- package/dist/ggnomad/pages/TripPlanDetailPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TripPlanDetailPage.js +23 -3
- package/dist/ggnomad/pages/TripPlanDetailPage.js.map +1 -1
- package/dist/ggnomad/pages/TripsPage.d.ts +2 -0
- package/dist/ggnomad/pages/TripsPage.d.ts.map +1 -0
- package/dist/ggnomad/pages/TripsPage.js.map +1 -1
- package/dist/ggnomad/providers/GGNomadProvider.d.ts +6 -0
- package/dist/ggnomad/providers/GGNomadProvider.d.ts.map +1 -0
- package/dist/ggnomad/types/index.d.ts +58 -0
- package/dist/ggnomad/types/index.d.ts.map +1 -0
- package/dist/ggnomad/utils/cn.d.ts +4 -0
- package/dist/ggnomad/utils/cn.d.ts.map +1 -0
- package/dist/ggnomad/utils/navigation.d.ts +2 -0
- package/dist/ggnomad/utils/navigation.d.ts.map +1 -0
- package/dist/ggnomad/utils/notify.d.ts +22 -0
- package/dist/ggnomad/utils/notify.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -1
- package/dist/services/createSandboxAssistantTransport.d.ts +44 -0
- package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/services/createSandboxAssistantTransport.js +338 -0
- package/dist/services/createSandboxAssistantTransport.js.map +1 -0
- package/dist/utils/pageContext.d.ts +28 -0
- package/dist/utils/pageContext.d.ts.map +1 -0
- package/dist/utils/pageContext.js +50 -0
- package/dist/utils/pageContext.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGNomadRoot.d.ts","sourceRoot":"","sources":["../../src/ggnomad/GGNomadRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAoBhC,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,SAAS,CAAC;AAGzD,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA0H5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGNomadRoutes.d.ts","sourceRoot":"","sources":["../../src/ggnomad/GGNomadRoutes.tsx"],"names":[],"mappings":"AA0DA,wBAAgB,aAAa,gCAwB5B"}
|
|
@@ -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 TripsPage = lazy(()
|
|
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 TripsPage = lazy(() => import('./pages/TripsPage').then((m) => ({ default: m.TripsPage })));\nconst TripPlanDetailPage = lazy(() =>\n import('./pages/TripPlanDetailPage').then((m) => ({ default: m.TripPlanDetailPage }))\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=\"favorites\" element={<FavoritesPage />} />\n <Route path=\"provider\" element={<ProviderPage />} />\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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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type BookingType = 'PROPERTY' | 'TOUR' | 'EVENT' | 'ACTIVITY';
|
|
2
|
+
type BookingPanelProps = {
|
|
3
|
+
bookingType: BookingType;
|
|
4
|
+
itemId: string;
|
|
5
|
+
itemName: string;
|
|
6
|
+
unitPrice: number;
|
|
7
|
+
currency: string;
|
|
8
|
+
/** For PROPERTY bookings, the number of nights to calculate price */
|
|
9
|
+
nights?: number;
|
|
10
|
+
/** For EVENT bookings, the event date (ISO string) */
|
|
11
|
+
eventDate?: string;
|
|
12
|
+
};
|
|
13
|
+
/** Frosted glass booking panel with type-specific inputs and real createGgnomadBooking mutation. */
|
|
14
|
+
export declare function BookingPanel({ bookingType, itemId, itemName, unitPrice, currency, nights, eventDate, }: BookingPanelProps): import("react").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=BookingPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BookingPanel.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/BookingPanel.tsx"],"names":[],"mappings":"AAcA,KAAK,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAE9D,KAAK,iBAAiB,GAAG;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,MAAM,EACN,SAAS,GACV,EAAE,iBAAiB,+BAySnB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface DetailHeroProps {
|
|
2
|
+
/** Primary cover image URL; a branded gradient is shown when absent. */
|
|
3
|
+
image?: string | null;
|
|
4
|
+
alt?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Full-width hero cover for a listing detail page — a 21:9 photo with a bottom
|
|
9
|
+
* gradient scrim, or a branded gradient fallback when the listing has no media.
|
|
10
|
+
*/
|
|
11
|
+
export declare function DetailHero({ image, alt, className }: DetailHeroProps): import("react").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=DetailHero.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailHero.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/DetailHero.tsx"],"names":[],"mappings":"AAEA,UAAU,eAAe;IACvB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,eAAe,+BAyBpE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
/** A single label/value pair inside a details list (low-contrast, tabular). */
|
|
4
|
+
export declare function DetailRow({ label, value }: {
|
|
5
|
+
label: string;
|
|
6
|
+
value: ReactNode;
|
|
7
|
+
}): import("react").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=DetailRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailRow.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/DetailRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,+BAO9E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
type EntityCardProps = {
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
/** Optional secondary line (category / type / duration). */
|
|
6
|
+
meta?: ReactNode;
|
|
7
|
+
/** Right-aligned price or primary figure. */
|
|
8
|
+
price?: ReactNode;
|
|
9
|
+
badge?: ReactNode;
|
|
10
|
+
footer?: ReactNode;
|
|
11
|
+
/** Optional cover photo URL. Falls back to a branded gradient tile. */
|
|
12
|
+
image?: string | null;
|
|
13
|
+
/** Accessible description for the cover photo. */
|
|
14
|
+
imageAlt?: string;
|
|
15
|
+
/** When provided, the whole card becomes a router Link. */
|
|
16
|
+
to?: string;
|
|
17
|
+
className?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* An inventory tile for a property / tour / event / activity / provider. When an
|
|
21
|
+
* `image` is supplied it renders a 16:10 cover photo (with a branded gradient
|
|
22
|
+
* fallback otherwise) above the title / meta / price. Hover lifts the shadow and
|
|
23
|
+
* gently zooms the photo. When `to` is set the whole surface is one accessible link.
|
|
24
|
+
*/
|
|
25
|
+
export declare function EntityCard({ title, meta, price, badge, footer, image, imageAlt, to, className, }: EntityCardProps): import("react").JSX.Element;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=EntityCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityCard.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/EntityCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,EAAE,EACF,SAAS,GACV,EAAE,eAAe,+BA4DjB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type TargetType = 'PROPERTY' | 'TOUR' | 'EVENT' | 'ACTIVITY';
|
|
2
|
+
interface ListingEditDialogProps {
|
|
3
|
+
open: boolean;
|
|
4
|
+
onOpenChange: (open: boolean) => void;
|
|
5
|
+
targetType: TargetType;
|
|
6
|
+
id: string;
|
|
7
|
+
initial: {
|
|
8
|
+
name?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
price?: number;
|
|
11
|
+
pricePerNight?: number;
|
|
12
|
+
status?: string;
|
|
13
|
+
images?: string[];
|
|
14
|
+
};
|
|
15
|
+
onSaved?: () => void;
|
|
16
|
+
}
|
|
17
|
+
/** Edit dialog for listing details (property, tour, event, activity). */
|
|
18
|
+
export declare function ListingEditDialog({ open, onOpenChange, targetType, id, initial, onSaved, }: ListingEditDialogProps): import("react").JSX.Element;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=ListingEditDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListingEditDialog.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/ListingEditDialog.tsx"],"names":[],"mappings":"AAwBA,KAAK,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7D,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,EAAE,EACF,OAAO,EACP,OAAO,GACR,EAAE,sBAAsB,+BA4RxB"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { UPDATE_GGNOMAD_ACTIVITY_MUTATION as e, UPDATE_GGNOMAD_EVENT_MUTATION as t, UPDATE_GGNOMAD_PROPERTY_MUTATION as n, UPDATE_GGNOMAD_TOUR_MUTATION as r } from "../graphql.js";
|
|
2
|
+
import { notify as i } from "../utils/notify.js";
|
|
3
|
+
import { useMemo as a, useState as o } from "react";
|
|
4
|
+
import { Pencil as s } from "lucide-react";
|
|
5
|
+
import { useI18n as c } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
6
|
+
import { useMutation as l } from "@apollo/client/react";
|
|
7
|
+
import { AlertDialog as u, AlertDialogAction as d, AlertDialogCancel as f, AlertDialogContent as p, AlertDialogDescription as m, AlertDialogFooter as h, AlertDialogHeader as g, AlertDialogTitle as _ } from "@burdenoff/fe-libs/ui";
|
|
8
|
+
import { jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
9
|
+
//#region src/ggnomad/components/ListingEditDialog.tsx
|
|
10
|
+
function b({ open: b, onOpenChange: x, targetType: S, id: C, initial: w, onSaved: T }) {
|
|
11
|
+
let { t: E } = c(), [D, O] = o(w.name ?? ""), [k, A] = o(w.description ?? ""), j = w.pricePerNight ?? w.price ?? 0, [M, N] = o(String(j)), [P, F] = o(w.status ?? "ACTIVE"), [I, L] = o((w.images ?? []).join("\n")), [R, { loading: z }] = l(n), [B, { loading: V }] = l(r), [H, { loading: U }] = l(t), [W, { loading: G }] = l(e), K = a(() => z || V || U || G, [
|
|
12
|
+
z,
|
|
13
|
+
V,
|
|
14
|
+
U,
|
|
15
|
+
G
|
|
16
|
+
]), q = async () => {
|
|
17
|
+
try {
|
|
18
|
+
let e = {};
|
|
19
|
+
D !== (w.name ?? "") && (e.name = D), k !== (w.description ?? "") && (e.description = k);
|
|
20
|
+
let t = parseFloat(M);
|
|
21
|
+
t !== (w.pricePerNight ?? w.price ?? 0) && (S === "PROPERTY" ? e.pricePerNight = t : e.price = t), P !== (w.status ?? "ACTIVE") && (e.status = P);
|
|
22
|
+
let n = I.split("\n").map((e) => e.trim()).filter(Boolean), r = w.images ?? [];
|
|
23
|
+
if (JSON.stringify(n) !== JSON.stringify(r) && (e.images = n), Object.keys(e).length === 0) {
|
|
24
|
+
i.info(E("ggnomad.listingEdit.noChangesTitle", "No changes"), E("ggnomad.listingEdit.noChangesBody", "Nothing was modified.")), x(!1);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
let a;
|
|
28
|
+
if (a = S === "PROPERTY" ? await R({ variables: {
|
|
29
|
+
id: C,
|
|
30
|
+
input: e
|
|
31
|
+
} }) : S === "TOUR" ? await B({ variables: {
|
|
32
|
+
id: C,
|
|
33
|
+
input: e
|
|
34
|
+
} }) : S === "EVENT" ? await H({ variables: {
|
|
35
|
+
id: C,
|
|
36
|
+
input: e
|
|
37
|
+
} }) : await W({ variables: {
|
|
38
|
+
id: C,
|
|
39
|
+
input: e
|
|
40
|
+
} }), a?.error) {
|
|
41
|
+
i.error(E("ggnomad.listingEdit.errorTitle", "Could not update listing"), a.error.message);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
i.success(E("ggnomad.listingEdit.successTitle", "Listing updated"), E("ggnomad.listingEdit.successBody", "Your changes have been saved.")), x(!1), T?.();
|
|
45
|
+
} catch (e) {
|
|
46
|
+
i.error(E("ggnomad.listingEdit.errorTitle", "Could not update listing"), e instanceof Error ? e.message : String(e));
|
|
47
|
+
}
|
|
48
|
+
}, J = S === "PROPERTY" ? "Price per night" : "Price";
|
|
49
|
+
return /* @__PURE__ */ v(u, {
|
|
50
|
+
open: b,
|
|
51
|
+
onOpenChange: x,
|
|
52
|
+
children: /* @__PURE__ */ y(p, {
|
|
53
|
+
className: "max-w-2xl",
|
|
54
|
+
children: [
|
|
55
|
+
/* @__PURE__ */ y(g, { children: [/* @__PURE__ */ y(_, {
|
|
56
|
+
className: "flex items-center gap-2",
|
|
57
|
+
children: [/* @__PURE__ */ v(s, { className: "size-4" }), E("ggnomad.listingEdit.title", "Edit listing")]
|
|
58
|
+
}), /* @__PURE__ */ v(m, { children: E("ggnomad.listingEdit.description", "Update the details for this listing.") })] }),
|
|
59
|
+
/* @__PURE__ */ y("div", {
|
|
60
|
+
className: "space-y-4",
|
|
61
|
+
children: [
|
|
62
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
63
|
+
className: "block text-sm font-medium text-text-primary",
|
|
64
|
+
children: E("ggnomad.listingEdit.nameLabel", "Name")
|
|
65
|
+
}), /* @__PURE__ */ v("input", {
|
|
66
|
+
type: "text",
|
|
67
|
+
value: D,
|
|
68
|
+
onChange: (e) => O(e.target.value),
|
|
69
|
+
disabled: K,
|
|
70
|
+
className: "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",
|
|
71
|
+
placeholder: E("ggnomad.listingEdit.namePlaceholder", "Enter name")
|
|
72
|
+
})] }),
|
|
73
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
74
|
+
className: "block text-sm font-medium text-text-primary",
|
|
75
|
+
children: E("ggnomad.listingEdit.descriptionLabel", "Description")
|
|
76
|
+
}), /* @__PURE__ */ v("textarea", {
|
|
77
|
+
value: k,
|
|
78
|
+
onChange: (e) => A(e.target.value),
|
|
79
|
+
disabled: K,
|
|
80
|
+
rows: 3,
|
|
81
|
+
className: "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",
|
|
82
|
+
placeholder: E("ggnomad.listingEdit.descriptionPlaceholder", "Enter description")
|
|
83
|
+
})] }),
|
|
84
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
85
|
+
className: "block text-sm font-medium text-text-primary",
|
|
86
|
+
children: E("ggnomad.listingEdit.priceLabel", J)
|
|
87
|
+
}), /* @__PURE__ */ v("input", {
|
|
88
|
+
type: "number",
|
|
89
|
+
step: "0.01",
|
|
90
|
+
min: "0",
|
|
91
|
+
value: M,
|
|
92
|
+
onChange: (e) => N(e.target.value),
|
|
93
|
+
disabled: K,
|
|
94
|
+
className: "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",
|
|
95
|
+
placeholder: "0.00"
|
|
96
|
+
})] }),
|
|
97
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
98
|
+
className: "block text-sm font-medium text-text-primary",
|
|
99
|
+
children: E("ggnomad.listingEdit.statusLabel", "Status")
|
|
100
|
+
}), /* @__PURE__ */ y("select", {
|
|
101
|
+
value: P,
|
|
102
|
+
onChange: (e) => F(e.target.value),
|
|
103
|
+
disabled: K,
|
|
104
|
+
className: "mt-1 w-full rounded-md border border-border-seam bg-bg-canvas px-3 py-2 text-sm text-text-primary focus:border-action-primary-bg focus:outline-none focus:ring-1 focus:ring-action-primary-bg disabled:opacity-50",
|
|
105
|
+
children: [
|
|
106
|
+
/* @__PURE__ */ v("option", {
|
|
107
|
+
value: "ACTIVE",
|
|
108
|
+
children: E("ggnomad.listingEdit.statusActive", "Active")
|
|
109
|
+
}),
|
|
110
|
+
/* @__PURE__ */ v("option", {
|
|
111
|
+
value: "PAUSED",
|
|
112
|
+
children: E("ggnomad.listingEdit.statusPaused", "Paused")
|
|
113
|
+
}),
|
|
114
|
+
/* @__PURE__ */ v("option", {
|
|
115
|
+
value: "DRAFT",
|
|
116
|
+
children: E("ggnomad.listingEdit.statusDraft", "Draft")
|
|
117
|
+
})
|
|
118
|
+
]
|
|
119
|
+
})] }),
|
|
120
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
|
|
121
|
+
className: "block text-sm font-medium text-text-primary",
|
|
122
|
+
children: E("ggnomad.listingEdit.imagesLabel", "Images (one URL per line)")
|
|
123
|
+
}), /* @__PURE__ */ v("textarea", {
|
|
124
|
+
value: I,
|
|
125
|
+
onChange: (e) => L(e.target.value),
|
|
126
|
+
disabled: K,
|
|
127
|
+
rows: 3,
|
|
128
|
+
className: "mt-1 w-full rounded-md border border-border-seam bg-bg-canvas px-3 py-2 text-sm font-mono 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",
|
|
129
|
+
placeholder: E("ggnomad.listingEdit.imagesPlaceholder", "https://example.com/image1.jpg\nhttps://example.com/image2.jpg")
|
|
130
|
+
})] })
|
|
131
|
+
]
|
|
132
|
+
}),
|
|
133
|
+
/* @__PURE__ */ y(h, { children: [/* @__PURE__ */ v(f, {
|
|
134
|
+
disabled: K,
|
|
135
|
+
children: E("ggnomad.listingEdit.cancel", "Cancel")
|
|
136
|
+
}), /* @__PURE__ */ v(d, {
|
|
137
|
+
onClick: (e) => {
|
|
138
|
+
e.preventDefault(), q();
|
|
139
|
+
},
|
|
140
|
+
disabled: K,
|
|
141
|
+
className: "bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bgHover",
|
|
142
|
+
children: K ? E("ggnomad.listingEdit.saving", "Saving…") : E("ggnomad.listingEdit.save", "Save changes")
|
|
143
|
+
})] })
|
|
144
|
+
]
|
|
145
|
+
})
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//#endregion
|
|
149
|
+
export { b as ListingEditDialog };
|
|
150
|
+
|
|
151
|
+
//# sourceMappingURL=ListingEditDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListingEditDialog.js","names":[],"sources":["../../../src/ggnomad/components/ListingEditDialog.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useMutation } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Pencil } from 'lucide-react';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '@burdenoff/fe-libs/ui';\n\nimport {\n UPDATE_GGNOMAD_PROPERTY_MUTATION,\n UPDATE_GGNOMAD_TOUR_MUTATION,\n UPDATE_GGNOMAD_EVENT_MUTATION,\n UPDATE_GGNOMAD_ACTIVITY_MUTATION,\n} from '../graphql';\nimport { notify } from '../utils/notify';\n\ntype TargetType = 'PROPERTY' | 'TOUR' | 'EVENT' | 'ACTIVITY';\n\ninterface ListingEditDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n targetType: TargetType;\n id: string;\n initial: {\n name?: string;\n description?: string;\n price?: number;\n pricePerNight?: number;\n status?: string;\n images?: string[];\n };\n onSaved?: () => void;\n}\n\n/** Edit dialog for listing details (property, tour, event, activity). */\nexport function ListingEditDialog({\n open,\n onOpenChange,\n targetType,\n id,\n initial,\n onSaved,\n}: ListingEditDialogProps) {\n const { t } = useI18n();\n const [name, setName] = useState(initial.name ?? '');\n const [description, setDescription] = useState(initial.description ?? '');\n const priceField = initial.pricePerNight ?? initial.price ?? 0;\n const [price, setPrice] = useState(String(priceField));\n const [status, setStatus] = useState(initial.status ?? 'ACTIVE');\n const [imagesText, setImagesText] = useState((initial.images ?? []).join('\\n'));\n\n const [updateProperty, { loading: updatingProperty }] = useMutation(\n UPDATE_GGNOMAD_PROPERTY_MUTATION as TypedDocumentNode<\n { updateGgnomadProperty: { id: string; name: string } },\n {\n id: string;\n input: {\n name?: string;\n description?: string;\n pricePerNight?: number;\n status?: string;\n images?: string[];\n };\n }\n >\n );\n\n const [updateTour, { loading: updatingTour }] = useMutation(\n UPDATE_GGNOMAD_TOUR_MUTATION as TypedDocumentNode<\n { updateGgnomadTour: { id: string; name: string } },\n {\n id: string;\n input: {\n name?: string;\n description?: string;\n price?: number;\n status?: string;\n images?: string[];\n };\n }\n >\n );\n\n const [updateEvent, { loading: updatingEvent }] = useMutation(\n UPDATE_GGNOMAD_EVENT_MUTATION as TypedDocumentNode<\n { updateGgnomadEvent: { id: string; name: string } },\n {\n id: string;\n input: {\n name?: string;\n description?: string;\n price?: number;\n status?: string;\n images?: string[];\n };\n }\n >\n );\n\n const [updateActivity, { loading: updatingActivity }] = useMutation(\n UPDATE_GGNOMAD_ACTIVITY_MUTATION as TypedDocumentNode<\n { updateGgnomadActivity: { id: string; name: string } },\n {\n id: string;\n input: {\n name?: string;\n description?: string;\n price?: number;\n status?: string;\n images?: string[];\n };\n }\n >\n );\n\n const loading = useMemo(\n () => updatingProperty || updatingTour || updatingEvent || updatingActivity,\n [updatingProperty, updatingTour, updatingEvent, updatingActivity]\n );\n\n const handleSave = async () => {\n try {\n // Build input with only changed fields\n const input: Record<string, unknown> = {};\n\n if (name !== (initial.name ?? '')) {\n input.name = name;\n }\n if (description !== (initial.description ?? '')) {\n input.description = description;\n }\n\n const priceValue = parseFloat(price);\n const initialPrice = initial.pricePerNight ?? initial.price ?? 0;\n if (priceValue !== initialPrice) {\n if (targetType === 'PROPERTY') {\n input.pricePerNight = priceValue;\n } else {\n input.price = priceValue;\n }\n }\n\n if (status !== (initial.status ?? 'ACTIVE')) {\n input.status = status;\n }\n\n const newImages = imagesText\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean);\n const initialImages = initial.images ?? [];\n if (JSON.stringify(newImages) !== JSON.stringify(initialImages)) {\n input.images = newImages;\n }\n\n // If nothing changed, just close\n if (Object.keys(input).length === 0) {\n notify.info(\n t('ggnomad.listingEdit.noChangesTitle', 'No changes'),\n t('ggnomad.listingEdit.noChangesBody', 'Nothing was modified.')\n );\n onOpenChange(false);\n return;\n }\n\n let result;\n if (targetType === 'PROPERTY') {\n result = await updateProperty({\n variables: { id, input },\n });\n } else if (targetType === 'TOUR') {\n result = await updateTour({\n variables: { id, input },\n });\n } else if (targetType === 'EVENT') {\n result = await updateEvent({\n variables: { id, input },\n });\n } else {\n result = await updateActivity({\n variables: { id, input },\n });\n }\n\n if (result?.error) {\n notify.error(\n t('ggnomad.listingEdit.errorTitle', 'Could not update listing'),\n result.error.message\n );\n return;\n }\n\n notify.success(\n t('ggnomad.listingEdit.successTitle', 'Listing updated'),\n t('ggnomad.listingEdit.successBody', 'Your changes have been saved.')\n );\n\n onOpenChange(false);\n onSaved?.();\n } catch (err) {\n notify.error(\n t('ggnomad.listingEdit.errorTitle', 'Could not update listing'),\n err instanceof Error ? err.message : String(err)\n );\n }\n };\n\n const priceLabel = targetType === 'PROPERTY' ? 'Price per night' : 'Price';\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent className=\"max-w-2xl\">\n <AlertDialogHeader>\n <AlertDialogTitle className=\"flex items-center gap-2\">\n <Pencil className=\"size-4\" />\n {t('ggnomad.listingEdit.title', 'Edit listing')}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {t('ggnomad.listingEdit.description', 'Update the details for this listing.')}\n </AlertDialogDescription>\n </AlertDialogHeader>\n\n <div className=\"space-y-4\">\n {/* Name */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary\">\n {t('ggnomad.listingEdit.nameLabel', 'Name')}\n </label>\n <input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n disabled={loading}\n className=\"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\"\n placeholder={t('ggnomad.listingEdit.namePlaceholder', 'Enter name')}\n />\n </div>\n\n {/* Description */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary\">\n {t('ggnomad.listingEdit.descriptionLabel', 'Description')}\n </label>\n <textarea\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={loading}\n rows={3}\n className=\"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\"\n placeholder={t('ggnomad.listingEdit.descriptionPlaceholder', 'Enter description')}\n />\n </div>\n\n {/* Price */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary\">\n {t(`ggnomad.listingEdit.priceLabel`, priceLabel)}\n </label>\n <input\n type=\"number\"\n step=\"0.01\"\n min=\"0\"\n value={price}\n onChange={(e) => setPrice(e.target.value)}\n disabled={loading}\n className=\"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\"\n placeholder=\"0.00\"\n />\n </div>\n\n {/* Status */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary\">\n {t('ggnomad.listingEdit.statusLabel', 'Status')}\n </label>\n <select\n value={status}\n onChange={(e) => setStatus(e.target.value)}\n disabled={loading}\n className=\"mt-1 w-full rounded-md border border-border-seam bg-bg-canvas px-3 py-2 text-sm text-text-primary focus:border-action-primary-bg focus:outline-none focus:ring-1 focus:ring-action-primary-bg disabled:opacity-50\"\n >\n <option value=\"ACTIVE\">{t('ggnomad.listingEdit.statusActive', 'Active')}</option>\n <option value=\"PAUSED\">{t('ggnomad.listingEdit.statusPaused', 'Paused')}</option>\n <option value=\"DRAFT\">{t('ggnomad.listingEdit.statusDraft', 'Draft')}</option>\n </select>\n </div>\n\n {/* Images */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary\">\n {t('ggnomad.listingEdit.imagesLabel', 'Images (one URL per line)')}\n </label>\n <textarea\n value={imagesText}\n onChange={(e) => setImagesText(e.target.value)}\n disabled={loading}\n rows={3}\n className=\"mt-1 w-full rounded-md border border-border-seam bg-bg-canvas px-3 py-2 text-sm font-mono 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\"\n placeholder={t(\n 'ggnomad.listingEdit.imagesPlaceholder',\n 'https://example.com/image1.jpg\\nhttps://example.com/image2.jpg'\n )}\n />\n </div>\n </div>\n\n <AlertDialogFooter>\n <AlertDialogCancel disabled={loading}>\n {t('ggnomad.listingEdit.cancel', 'Cancel')}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={(event) => {\n event.preventDefault();\n void handleSave();\n }}\n disabled={loading}\n className=\"bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bgHover\"\n >\n {loading\n ? t('ggnomad.listingEdit.saving', 'Saving…')\n : t('ggnomad.listingEdit.save', 'Save changes')}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface LoadMoreButtonProps {
|
|
2
|
+
/** Whether more items may exist (typically items.length >= current limit). */
|
|
3
|
+
visible: boolean;
|
|
4
|
+
/** Increase the page limit to fetch the next batch. */
|
|
5
|
+
onLoadMore: () => void;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Offset "Load more" control shown under a list grid when the current page is
|
|
9
|
+
* full and more results may exist. Tokenized + responsive; no fixed widths.
|
|
10
|
+
*/
|
|
11
|
+
export declare function LoadMoreButton({ visible, onLoadMore }: LoadMoreButtonProps): import("react").JSX.Element | null;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=LoadMoreButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadMoreButton.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/LoadMoreButton.tsx"],"names":[],"mappings":"AAEA,UAAU,mBAAmB;IAC3B,8EAA8E;IAC9E,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,mBAAmB,sCAc1E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type GgnomadBookingType = 'PROPERTY' | 'TOUR' | 'EVENT' | 'ACTIVITY';
|
|
2
|
+
type ReviewsSectionProps = {
|
|
3
|
+
targetType: GgnomadBookingType;
|
|
4
|
+
targetId: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* ReviewsSection component.
|
|
8
|
+
* Displays review summary, list, and composition UI for a bookable item.
|
|
9
|
+
*/
|
|
10
|
+
export declare function ReviewsSection({ targetType, targetId }: ReviewsSectionProps): import("react").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=ReviewsSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewsSection.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/ReviewsSection.tsx"],"names":[],"mappings":"AAeA,KAAK,kBAAkB,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAErE,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAyUF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,mBAAmB,+BAuH3E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PropsWithChildren, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
type SectionCardProps = PropsWithChildren<{
|
|
4
|
+
title?: ReactNode;
|
|
5
|
+
action?: ReactNode;
|
|
6
|
+
className?: string;
|
|
7
|
+
treatment?: 'plain' | 'glass' | 'metric' | 'insight';
|
|
8
|
+
}>;
|
|
9
|
+
/** A titled glass surface used for grouped content blocks. */
|
|
10
|
+
export declare function SectionCard({ title, action, className, treatment, children, }: SectionCardProps): import("react").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=SectionCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionCard.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/SectionCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI1D,KAAK,gBAAgB,GAAG,iBAAiB,CAAC;IACxC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;CACtD,CAAC,CAAC;AAEH,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,SAAS,EACT,SAAmB,EACnB,QAAQ,GACT,EAAE,gBAAgB,+BAgBlB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
type StatCardProps = {
|
|
4
|
+
label: string;
|
|
5
|
+
value: ReactNode;
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** The single most important metric on a page reads as the glass hero tile. */
|
|
8
|
+
hero?: boolean;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* KPI / metric tile. Neutral metric tiles use the GlassCard "metric" treatment;
|
|
12
|
+
* the page's hero metric uses the "glass" treatment with a soft accent glow and
|
|
13
|
+
* a gradient numeral. Numbers are tabular for calm vertical alignment.
|
|
14
|
+
*/
|
|
15
|
+
export declare function StatCard({ label, value, icon, hero }: StatCardProps): import("react").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=StatCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatCard.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/StatCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAY,EAAE,EAAE,aAAa,+BAgB3E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type Tone = 'success' | 'warning' | 'danger' | 'info' | 'neutral';
|
|
2
|
+
/** Maps a free-form status string to a semantic tone. */
|
|
3
|
+
export declare function toneForStatus(status: string): Tone;
|
|
4
|
+
type StatusBadgeProps = {
|
|
5
|
+
status: string;
|
|
6
|
+
/** Pulses the dot for live/active states (opacity only, reduced-motion-safe). */
|
|
7
|
+
live?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function StatusBadge({ status, live, className }: StatusBadgeProps): import("react").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=StatusBadge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/StatusBadge.tsx"],"names":[],"mappings":"AAEA,KAAK,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AA8BlE,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAYlD;AAED,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,IAAY,EAAE,SAAS,EAAE,EAAE,gBAAgB,+BAsBhF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { StatCard } from './StatCard';
|
|
2
|
+
export { StatusBadge, toneForStatus } from './StatusBadge';
|
|
3
|
+
export { SectionCard } from './SectionCard';
|
|
4
|
+
export { EntityCard } from './EntityCard';
|
|
5
|
+
export { DetailRow } from './DetailRow';
|
|
6
|
+
export { LoadMoreButton } from './LoadMoreButton';
|
|
7
|
+
export { DetailHero } from './DetailHero';
|
|
8
|
+
export { BookingPanel } from './BookingPanel';
|
|
9
|
+
export { ReviewsSection } from './ReviewsSection';
|
|
10
|
+
export { ListingEditDialog } from './ListingEditDialog';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export declare const GGNOMAD_OVERVIEW_QUERY: import('graphql').DocumentNode;
|
|
2
|
+
/**
|
|
3
|
+
* One bookable item of each type (properties are priced per night, the rest
|
|
4
|
+
* carry a flat price). Used to seed the Bookings "create demo booking" action
|
|
5
|
+
* with a REAL listing id so the mutation passes the backend's
|
|
6
|
+
* assertTargetInWorkspace check instead of failing on a synthetic id.
|
|
7
|
+
*/
|
|
8
|
+
export declare const GGNOMAD_BOOKABLE_SAMPLE_QUERY: import('graphql').DocumentNode;
|
|
9
|
+
/**
|
|
10
|
+
* id + name for every favouritable listing type, used to (a) resolve the real
|
|
11
|
+
* entity name for a saved favorite (which the backend only exposes as
|
|
12
|
+
* targetType + targetId) and (b) seed the "toggle demo favorite" action with a
|
|
13
|
+
* real target id.
|
|
14
|
+
*/
|
|
15
|
+
export declare const GGNOMAD_FAVORITE_TARGETS_QUERY: import('graphql').DocumentNode;
|
|
16
|
+
export declare const GGNOMAD_PROVIDERS_QUERY: import('graphql').DocumentNode;
|
|
17
|
+
export declare const GGNOMAD_PROPERTIES_QUERY: import('graphql').DocumentNode;
|
|
18
|
+
export declare const GGNOMAD_PROPERTY_QUERY: import('graphql').DocumentNode;
|
|
19
|
+
export declare const GGNOMAD_PROPERTY_FOR_BOOKING_QUERY: import('graphql').DocumentNode;
|
|
20
|
+
export declare const GGNOMAD_TOURS_QUERY: import('graphql').DocumentNode;
|
|
21
|
+
export declare const GGNOMAD_TOUR_QUERY: import('graphql').DocumentNode;
|
|
22
|
+
export declare const GGNOMAD_EVENTS_QUERY: import('graphql').DocumentNode;
|
|
23
|
+
export declare const GGNOMAD_EVENT_QUERY: import('graphql').DocumentNode;
|
|
24
|
+
export declare const GGNOMAD_ACTIVITIES_QUERY: import('graphql').DocumentNode;
|
|
25
|
+
export declare const GGNOMAD_ACTIVITY_QUERY: import('graphql').DocumentNode;
|
|
26
|
+
export declare const GGNOMAD_TRIPS_QUERY: import('graphql').DocumentNode;
|
|
27
|
+
export declare const GGNOMAD_BOOKINGS_QUERY: import('graphql').DocumentNode;
|
|
28
|
+
export declare const GGNOMAD_FAVORITES_QUERY: import('graphql').DocumentNode;
|
|
29
|
+
export declare const CREATE_GGNOMAD_BOOKING_MUTATION: import('graphql').DocumentNode;
|
|
30
|
+
export declare const TOGGLE_GGNOMAD_FAVORITE_MUTATION: import('graphql').DocumentNode;
|
|
31
|
+
export declare const CANCEL_GGNOMAD_BOOKING_MUTATION: import('graphql').DocumentNode;
|
|
32
|
+
export declare const GGNOMAD_TRIP_PLANS_QUERY: import('graphql').DocumentNode;
|
|
33
|
+
export declare const GGNOMAD_TRIP_PLAN_QUERY: import('graphql').DocumentNode;
|
|
34
|
+
export declare const CREATE_GGNOMAD_TRIP_PLAN_MUTATION: import('graphql').DocumentNode;
|
|
35
|
+
export declare const UPDATE_GGNOMAD_TRIP_PLAN_MUTATION: import('graphql').DocumentNode;
|
|
36
|
+
export declare const DELETE_GGNOMAD_TRIP_PLAN_MUTATION: import('graphql').DocumentNode;
|
|
37
|
+
export declare const ADD_GGNOMAD_TRIP_PLAN_ITEM_MUTATION: import('graphql').DocumentNode;
|
|
38
|
+
export declare const REMOVE_GGNOMAD_TRIP_PLAN_ITEM_MUTATION: import('graphql').DocumentNode;
|
|
39
|
+
export declare const GGNOMAD_REVIEW_SUMMARY_QUERY: import('graphql').DocumentNode;
|
|
40
|
+
export declare const GGNOMAD_REVIEWS_QUERY: import('graphql').DocumentNode;
|
|
41
|
+
export declare const CREATE_GGNOMAD_REVIEW_MUTATION: import('graphql').DocumentNode;
|
|
42
|
+
export declare const RESPOND_GGNOMAD_REVIEW_MUTATION: import('graphql').DocumentNode;
|
|
43
|
+
export declare const UPDATE_GGNOMAD_PROPERTY_MUTATION: import('graphql').DocumentNode;
|
|
44
|
+
export declare const UPDATE_GGNOMAD_TOUR_MUTATION: import('graphql').DocumentNode;
|
|
45
|
+
export declare const UPDATE_GGNOMAD_EVENT_MUTATION: import('graphql').DocumentNode;
|
|
46
|
+
export declare const UPDATE_GGNOMAD_ACTIVITY_MUTATION: import('graphql').DocumentNode;
|
|
47
|
+
//# sourceMappingURL=graphql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/ggnomad/graphql.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,gCAgBlC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,gCA2BzC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,gCAmB1C,CAAC;AAEF,eAAO,MAAM,uBAAuB,gCAenC,CAAC;AAEF,eAAO,MAAM,wBAAwB,gCAkBpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gCA4BlC,CAAC;AAGF,eAAO,MAAM,kCAAkC,gCAS9C,CAAC;AAEF,eAAO,MAAM,mBAAmB,gCAkB/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,gCAwB9B,CAAC;AAEF,eAAO,MAAM,oBAAoB,gCAiBhC,CAAC;AAEF,eAAO,MAAM,mBAAmB,gCAuB/B,CAAC;AAEF,eAAO,MAAM,wBAAwB,gCAoBpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gCA0BlC,CAAC;AAEF,eAAO,MAAM,mBAAmB,gCAoB/B,CAAC;AAEF,eAAO,MAAM,sBAAsB,gCAwBlC,CAAC;AAEF,eAAO,MAAM,uBAAuB,gCAInC,CAAC;AAEF,eAAO,MAAM,+BAA+B,gCAe3C,CAAC;AAEF,eAAO,MAAM,gCAAgC,gCAI5C,CAAC;AAEF,eAAO,MAAM,+BAA+B,gCAO3C,CAAC;AAGF,eAAO,MAAM,wBAAwB,gCAepC,CAAC;AAEF,eAAO,MAAM,uBAAuB,gCA2BnC,CAAC;AAGF,eAAO,MAAM,iCAAiC,gCAe7C,CAAC;AAEF,eAAO,MAAM,iCAAiC,gCAe7C,CAAC;AAEF,eAAO,MAAM,iCAAiC,gCAI7C,CAAC;AAEF,eAAO,MAAM,mCAAmC,gCAc/C,CAAC;AAEF,eAAO,MAAM,sCAAsC,gCAIlD,CAAC;AAGF,eAAO,MAAM,4BAA4B,gCAQxC,CAAC;AAEF,eAAO,MAAM,qBAAqB,gCAwBjC,CAAC;AAGF,eAAO,MAAM,8BAA8B,gCAS1C,CAAC;AAEF,eAAO,MAAM,+BAA+B,gCAQ3C,CAAC;AAGF,eAAO,MAAM,gCAAgC,gCAW5C,CAAC;AAEF,eAAO,MAAM,4BAA4B,gCAWxC,CAAC;AAEF,eAAO,MAAM,6BAA6B,gCAWzC,CAAC;AAEF,eAAO,MAAM,gCAAgC,gCAW5C,CAAC"}
|
package/dist/ggnomad/graphql.js
CHANGED
|
@@ -483,7 +483,52 @@ e`
|
|
|
483
483
|
}
|
|
484
484
|
}
|
|
485
485
|
`;
|
|
486
|
+
var O = e`
|
|
487
|
+
mutation UpdateGGNomadProperty($id: ID!, $input: UpdateGgnomadPropertyInput!) {
|
|
488
|
+
updateGgnomadProperty(id: $id, input: $input) {
|
|
489
|
+
id
|
|
490
|
+
name
|
|
491
|
+
description
|
|
492
|
+
pricePerNight
|
|
493
|
+
status
|
|
494
|
+
images
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
`, k = e`
|
|
498
|
+
mutation UpdateGGNomadTour($id: ID!, $input: UpdateGgnomadTourInput!) {
|
|
499
|
+
updateGgnomadTour(id: $id, input: $input) {
|
|
500
|
+
id
|
|
501
|
+
name
|
|
502
|
+
description
|
|
503
|
+
price
|
|
504
|
+
status
|
|
505
|
+
images
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
`, A = e`
|
|
509
|
+
mutation UpdateGGNomadEvent($id: ID!, $input: UpdateGgnomadEventInput!) {
|
|
510
|
+
updateGgnomadEvent(id: $id, input: $input) {
|
|
511
|
+
id
|
|
512
|
+
name
|
|
513
|
+
description
|
|
514
|
+
price
|
|
515
|
+
status
|
|
516
|
+
images
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
`, j = e`
|
|
520
|
+
mutation UpdateGGNomadActivity($id: ID!, $input: UpdateGgnomadActivityInput!) {
|
|
521
|
+
updateGgnomadActivity(id: $id, input: $input) {
|
|
522
|
+
id
|
|
523
|
+
name
|
|
524
|
+
description
|
|
525
|
+
price
|
|
526
|
+
status
|
|
527
|
+
images
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
`;
|
|
486
531
|
//#endregion
|
|
487
|
-
export { C as ADD_GGNOMAD_TRIP_PLAN_ITEM_MUTATION, v as CANCEL_GGNOMAD_BOOKING_MUTATION, g as CREATE_GGNOMAD_BOOKING_MUTATION, D as CREATE_GGNOMAD_REVIEW_MUTATION, x as CREATE_GGNOMAD_TRIP_PLAN_MUTATION, d as GGNOMAD_ACTIVITIES_QUERY, f as GGNOMAD_ACTIVITY_QUERY, n as GGNOMAD_BOOKABLE_SAMPLE_QUERY, m as GGNOMAD_BOOKINGS_QUERY, l as GGNOMAD_EVENTS_QUERY, u as GGNOMAD_EVENT_QUERY, h as GGNOMAD_FAVORITES_QUERY, r as GGNOMAD_FAVORITE_TARGETS_QUERY, t as GGNOMAD_OVERVIEW_QUERY, a as GGNOMAD_PROPERTIES_QUERY, o as GGNOMAD_PROPERTY_QUERY, i as GGNOMAD_PROVIDERS_QUERY, E as GGNOMAD_REVIEWS_QUERY, T as GGNOMAD_REVIEW_SUMMARY_QUERY, s as GGNOMAD_TOURS_QUERY, c as GGNOMAD_TOUR_QUERY, p as GGNOMAD_TRIPS_QUERY, y as GGNOMAD_TRIP_PLANS_QUERY, b as GGNOMAD_TRIP_PLAN_QUERY, w as REMOVE_GGNOMAD_TRIP_PLAN_ITEM_MUTATION, _ as TOGGLE_GGNOMAD_FAVORITE_MUTATION, S as UPDATE_GGNOMAD_TRIP_PLAN_MUTATION };
|
|
532
|
+
export { C as ADD_GGNOMAD_TRIP_PLAN_ITEM_MUTATION, v as CANCEL_GGNOMAD_BOOKING_MUTATION, g as CREATE_GGNOMAD_BOOKING_MUTATION, D as CREATE_GGNOMAD_REVIEW_MUTATION, x as CREATE_GGNOMAD_TRIP_PLAN_MUTATION, d as GGNOMAD_ACTIVITIES_QUERY, f as GGNOMAD_ACTIVITY_QUERY, n as GGNOMAD_BOOKABLE_SAMPLE_QUERY, m as GGNOMAD_BOOKINGS_QUERY, l as GGNOMAD_EVENTS_QUERY, u as GGNOMAD_EVENT_QUERY, h as GGNOMAD_FAVORITES_QUERY, r as GGNOMAD_FAVORITE_TARGETS_QUERY, t as GGNOMAD_OVERVIEW_QUERY, a as GGNOMAD_PROPERTIES_QUERY, o as GGNOMAD_PROPERTY_QUERY, i as GGNOMAD_PROVIDERS_QUERY, E as GGNOMAD_REVIEWS_QUERY, T as GGNOMAD_REVIEW_SUMMARY_QUERY, s as GGNOMAD_TOURS_QUERY, c as GGNOMAD_TOUR_QUERY, p as GGNOMAD_TRIPS_QUERY, y as GGNOMAD_TRIP_PLANS_QUERY, b as GGNOMAD_TRIP_PLAN_QUERY, w as REMOVE_GGNOMAD_TRIP_PLAN_ITEM_MUTATION, _ as TOGGLE_GGNOMAD_FAVORITE_MUTATION, j as UPDATE_GGNOMAD_ACTIVITY_MUTATION, A as UPDATE_GGNOMAD_EVENT_MUTATION, O as UPDATE_GGNOMAD_PROPERTY_MUTATION, k as UPDATE_GGNOMAD_TOUR_MUTATION, S as UPDATE_GGNOMAD_TRIP_PLAN_MUTATION };
|
|
488
533
|
|
|
489
534
|
//# sourceMappingURL=graphql.js.map
|