@voyantjs/bookings-ui 0.62.3 → 0.63.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.
Files changed (35) hide show
  1. package/README.md +18 -21
  2. package/dist/components/booking-create-dialog.d.ts.map +1 -1
  3. package/dist/components/booking-create-dialog.js +8 -2
  4. package/dist/components/booking-detail-page.d.ts +32 -1
  5. package/dist/components/booking-detail-page.d.ts.map +1 -1
  6. package/dist/components/booking-detail-page.js +53 -10
  7. package/dist/components/booking-item-list.d.ts.map +1 -1
  8. package/dist/components/booking-item-list.js +18 -5
  9. package/dist/components/booking-list-filters.d.ts +7 -1
  10. package/dist/components/booking-list-filters.d.ts.map +1 -1
  11. package/dist/components/booking-list-filters.js +44 -2
  12. package/dist/components/booking-list.d.ts.map +1 -1
  13. package/dist/components/booking-list.js +21 -7
  14. package/dist/components/option-units-stepper-section.d.ts +11 -1
  15. package/dist/components/option-units-stepper-section.d.ts.map +1 -1
  16. package/dist/components/option-units-stepper-section.js +41 -14
  17. package/dist/components/supplier-status-list.d.ts.map +1 -1
  18. package/dist/components/supplier-status-list.js +46 -9
  19. package/dist/i18n/en.d.ts +10 -19
  20. package/dist/i18n/en.d.ts.map +1 -1
  21. package/dist/i18n/en.js +13 -22
  22. package/dist/i18n/messages.d.ts +10 -8
  23. package/dist/i18n/messages.d.ts.map +1 -1
  24. package/dist/i18n/provider.d.ts +20 -38
  25. package/dist/i18n/provider.d.ts.map +1 -1
  26. package/dist/i18n/ro.d.ts +10 -19
  27. package/dist/i18n/ro.d.ts.map +1 -1
  28. package/dist/i18n/ro.js +13 -22
  29. package/dist/index.d.ts +1 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +0 -1
  32. package/package.json +30 -30
  33. package/dist/components/booking-workspace-page.d.ts +0 -61
  34. package/dist/components/booking-workspace-page.d.ts.map +0 -1
  35. package/dist/components/booking-workspace-page.js +0 -113
@@ -1,61 +0,0 @@
1
- import { type BookingRecord } from "@voyantjs/bookings-react";
2
- import { type Dispatch, type ReactNode, type SetStateAction } from "react";
3
- import { type BookingDetailPageSlots } from "./booking-detail-page.js";
4
- export type BookingWorkspaceSection = "booking" | "finance" | "legal" | "travelers" | "activity";
5
- export interface BookingWorkspaceBulkActionContext {
6
- bookingId: string;
7
- selectedTravelerIds: string[];
8
- selectedFinanceItemIds: string[];
9
- setSelectedTravelerIds: Dispatch<SetStateAction<string[]>>;
10
- setSelectedFinanceItemIds: Dispatch<SetStateAction<string[]>>;
11
- clearBulkSelection: () => void;
12
- }
13
- export interface BookingWorkspaceSlotContext {
14
- booking: BookingRecord;
15
- bookingId: string;
16
- activeSection: BookingWorkspaceSection;
17
- setActiveSection: (section: BookingWorkspaceSection) => void;
18
- bulkActions: BookingWorkspaceBulkActionContext;
19
- }
20
- export interface BookingWorkspaceNavigationItem {
21
- value: BookingWorkspaceSection;
22
- label: string;
23
- badge?: ReactNode;
24
- disabled?: boolean;
25
- }
26
- export interface BookingWorkspacePageSlots {
27
- actionBar?: (context: BookingWorkspaceSlotContext) => ReactNode;
28
- bulkActionBar?: (context: BookingWorkspaceSlotContext) => ReactNode;
29
- afterNavigation?: (context: BookingWorkspaceSlotContext) => ReactNode;
30
- workspaceSidebar?: (context: BookingWorkspaceSlotContext) => ReactNode;
31
- financeSidebar?: (context: BookingWorkspaceSlotContext) => ReactNode;
32
- legalSidebar?: (context: BookingWorkspaceSlotContext) => ReactNode;
33
- travelersSidebar?: (context: BookingWorkspaceSlotContext) => ReactNode;
34
- activitySidebar?: (context: BookingWorkspaceSlotContext) => ReactNode;
35
- bookingTab?: (context: BookingWorkspaceSlotContext) => ReactNode;
36
- financeTab?: (context: BookingWorkspaceSlotContext) => ReactNode;
37
- legalTab?: (context: BookingWorkspaceSlotContext) => ReactNode;
38
- travelersTabExtensions?: (context: BookingWorkspaceSlotContext) => ReactNode;
39
- activityTab?: (context: BookingWorkspaceSlotContext) => ReactNode;
40
- }
41
- export interface BookingWorkspacePageProps {
42
- id: string;
43
- className?: string;
44
- locale?: string;
45
- defaultSection?: BookingWorkspaceSection;
46
- navigationItems?: BookingWorkspaceNavigationItem[];
47
- onBack?: () => void;
48
- onPersonOpen?: (personId: string) => void;
49
- onOrganizationOpen?: (organizationId: string) => void;
50
- onCollectPayment?: (booking: BookingRecord) => void;
51
- bookingDetailSlots?: BookingDetailPageSlots;
52
- slots?: BookingWorkspacePageSlots;
53
- }
54
- export interface BookingWorkspaceShellProps extends BookingWorkspacePageProps {
55
- booking?: BookingRecord | null;
56
- isLoading?: boolean;
57
- }
58
- export declare function useBookingWorkspaceBulkActions(): BookingWorkspaceBulkActionContext;
59
- export declare function BookingWorkspacePage(props: BookingWorkspacePageProps): import("react/jsx-runtime").JSX.Element;
60
- export declare function BookingWorkspaceShell({ id, className, locale, defaultSection, navigationItems, onBack, onPersonOpen, onOrganizationOpen, onCollectPayment, bookingDetailSlots, slots, booking, isLoading, }: BookingWorkspaceShellProps): import("react/jsx-runtime").JSX.Element;
61
- //# sourceMappingURL=booking-workspace-page.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"booking-workspace-page.d.ts","sourceRoot":"","sources":["../../src/components/booking-workspace-page.tsx"],"names":[],"mappings":"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"}
@@ -1,113 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useBooking } from "@voyantjs/bookings-react";
4
- import { Button, Card, CardContent, cn } from "@voyantjs/ui/components";
5
- import { Tabs, TabsContent, TabsList, TabsTrigger } from "@voyantjs/ui/components/tabs";
6
- import { ArrowLeft, BriefcaseBusiness, FileText, Landmark, ListChecks, Users } from "lucide-react";
7
- import { createContext, useContext, useEffect, useMemo, useRef, useState, } from "react";
8
- import { useBookingsUiMessagesOrDefault } from "../i18n/index.js";
9
- import { BookingDetailPage } from "./booking-detail-page.js";
10
- const BookingWorkspaceBulkActionsContext = createContext(null);
11
- export function useBookingWorkspaceBulkActions() {
12
- const context = useContext(BookingWorkspaceBulkActionsContext);
13
- if (!context) {
14
- throw new Error("useBookingWorkspaceBulkActions must be used inside BookingWorkspacePage");
15
- }
16
- return context;
17
- }
18
- export function BookingWorkspacePage(props) {
19
- const bookingQuery = useBooking(props.id);
20
- return (_jsx(BookingWorkspaceShell, { ...props, booking: bookingQuery.data?.data ?? null, isLoading: bookingQuery.isPending }));
21
- }
22
- export function BookingWorkspaceShell({ id, className, locale, defaultSection = "booking", navigationItems, onBack, onPersonOpen, onOrganizationOpen, onCollectPayment, bookingDetailSlots, slots, booking, isLoading = false, }) {
23
- const messages = useBookingsUiMessagesOrDefault();
24
- const workspaceMessages = messages.bookingWorkspacePage;
25
- const [activeSection, setActiveSection] = useState(defaultSection);
26
- const [selectedTravelerIds, setSelectedTravelerIds] = useState([]);
27
- const [selectedFinanceItemIds, setSelectedFinanceItemIds] = useState([]);
28
- const bookingId = booking?.id ?? id;
29
- const previousBookingId = useRef(bookingId);
30
- useEffect(() => {
31
- if (previousBookingId.current === bookingId)
32
- return;
33
- previousBookingId.current = bookingId;
34
- setSelectedTravelerIds([]);
35
- setSelectedFinanceItemIds([]);
36
- }, [bookingId]);
37
- const bulkActions = useMemo(() => ({
38
- bookingId,
39
- selectedTravelerIds,
40
- selectedFinanceItemIds,
41
- setSelectedTravelerIds,
42
- setSelectedFinanceItemIds,
43
- clearBulkSelection: () => {
44
- setSelectedTravelerIds([]);
45
- setSelectedFinanceItemIds([]);
46
- },
47
- }), [bookingId, selectedFinanceItemIds, selectedTravelerIds]);
48
- if (isLoading) {
49
- return (_jsxs("div", { "data-slot": "booking-workspace-page", className: cn("flex flex-col gap-6 p-6", className), children: [_jsx(WorkspaceHeader, { title: workspaceMessages.loadingTitle, onBack: onBack }), _jsx(Card, { className: "border-dashed", children: _jsx(CardContent, { className: "flex min-h-48 items-center justify-center py-10", children: _jsx("p", { className: "text-sm text-muted-foreground", children: messages.common.loading }) }) })] }));
50
- }
51
- if (!booking) {
52
- return (_jsxs("div", { "data-slot": "booking-workspace-page", className: cn("flex flex-col gap-6 p-6", className), children: [_jsx(WorkspaceHeader, { title: workspaceMessages.notFoundTitle, onBack: onBack }), _jsx(Card, { className: "border-dashed", children: _jsxs(CardContent, { className: "flex min-h-48 flex-col items-center justify-center gap-4 py-10", children: [_jsx("p", { className: "text-sm text-muted-foreground", children: workspaceMessages.notFoundDescription }), onBack ? (_jsx(Button, { type: "button", variant: "outline", onClick: onBack, children: messages.bookingDetailPage.backToBookings })) : null] }) })] }));
53
- }
54
- const context = {
55
- booking,
56
- bookingId,
57
- activeSection,
58
- setActiveSection,
59
- bulkActions,
60
- };
61
- const items = navigationItems ?? getDefaultNavigationItems(workspaceMessages.tabs);
62
- const sidebar = renderSidebar(activeSection, slots, context);
63
- const hasSidebar = Boolean(sidebar);
64
- return (_jsx(BookingWorkspaceBulkActionsContext.Provider, { value: bulkActions, children: _jsxs("div", { "data-slot": "booking-workspace-page", className: cn("flex flex-col gap-5 p-6", className), children: [_jsx(WorkspaceHeader, { title: booking.bookingNumber, description: workspaceMessages.description, onBack: onBack, actions: slots?.actionBar?.(context) }), slots?.bulkActionBar?.(context), _jsxs(Tabs, { value: activeSection, onValueChange: (value) => setActiveSection(value), className: "flex min-w-0 flex-col gap-5", children: [_jsx("div", { className: "overflow-x-auto", children: _jsx(TabsList, { className: "h-auto min-w-max justify-start", children: items.map((item) => (_jsxs(TabsTrigger, { value: item.value, disabled: item.disabled, className: "gap-2", children: [_jsx(WorkspaceTabIcon, { section: item.value }), _jsx("span", { children: item.label }), item.badge] }, item.value))) }) }), slots?.afterNavigation?.(context), _jsxs("div", { className: cn("grid min-w-0 gap-6", hasSidebar ? "xl:grid-cols-[minmax(0,1fr)_320px]" : "xl:grid-cols-1"), children: [_jsxs("div", { className: "min-w-0", children: [_jsx(TabsContent, { value: "booking", className: "mt-0", children: slots?.bookingTab ? (slots.bookingTab(context)) : (_jsx(BookingDetailPage, { id: bookingId, className: "p-0", locale: locale, onBack: onBack, onPersonOpen: onPersonOpen, onOrganizationOpen: onOrganizationOpen, onCollectPayment: onCollectPayment, slots: bookingDetailSlots })) }), _jsx(TabsContent, { value: "finance", className: "mt-0", children: renderTabSlot(slots?.financeTab, context, workspaceMessages.empty.finance) }), _jsx(TabsContent, { value: "legal", className: "mt-0", children: renderTabSlot(slots?.legalTab, context, workspaceMessages.empty.legal) }), _jsx(TabsContent, { value: "travelers", className: "mt-0", children: renderTabSlot(slots?.travelersTabExtensions, context, workspaceMessages.empty.travelers) }), _jsx(TabsContent, { value: "activity", className: "mt-0", children: renderTabSlot(slots?.activityTab, context, workspaceMessages.empty.activity) })] }), hasSidebar ? (_jsx("aside", { "data-slot": "booking-workspace-sidebar", className: "flex min-w-0 flex-col gap-4", children: sidebar })) : null] })] })] }) }));
65
- }
66
- function WorkspaceHeader({ title, description, onBack, actions, }) {
67
- return (_jsxs("div", { "data-slot": "booking-workspace-header", className: "flex flex-col gap-4 border-b pb-4 sm:flex-row sm:items-start sm:justify-between", children: [_jsxs("div", { className: "min-w-0 space-y-1", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [onBack ? (_jsxs(Button, { type: "button", variant: "ghost", size: "icon-sm", onClick: onBack, children: [_jsx(ArrowLeft, { className: "size-4", "aria-hidden": "true" }), _jsx("span", { className: "sr-only", children: "Back" })] })) : null, _jsx("h1", { className: "truncate text-2xl font-semibold tracking-tight", children: title })] }), description ? _jsx("p", { className: "text-sm text-muted-foreground", children: description }) : null] }), actions ? _jsx("div", { className: "flex flex-wrap items-center gap-2", children: actions }) : null] }));
68
- }
69
- function WorkspaceTabIcon({ section }) {
70
- const iconClassName = "size-4";
71
- switch (section) {
72
- case "booking":
73
- return _jsx(BriefcaseBusiness, { className: iconClassName, "aria-hidden": "true" });
74
- case "finance":
75
- return _jsx(Landmark, { className: iconClassName, "aria-hidden": "true" });
76
- case "legal":
77
- return _jsx(FileText, { className: iconClassName, "aria-hidden": "true" });
78
- case "travelers":
79
- return _jsx(Users, { className: iconClassName, "aria-hidden": "true" });
80
- case "activity":
81
- return _jsx(ListChecks, { className: iconClassName, "aria-hidden": "true" });
82
- }
83
- }
84
- function renderTabSlot(slot, context, emptyMessage) {
85
- const content = slot?.(context);
86
- if (content)
87
- return content;
88
- return (_jsx(Card, { className: "border-dashed", children: _jsx(CardContent, { className: "flex min-h-48 items-center justify-center py-10", children: _jsx("p", { className: "max-w-md text-center text-sm text-muted-foreground", children: emptyMessage }) }) }));
89
- }
90
- function renderSidebar(activeSection, slots, context) {
91
- const sectionSidebar = activeSection === "finance"
92
- ? slots?.financeSidebar?.(context)
93
- : activeSection === "legal"
94
- ? slots?.legalSidebar?.(context)
95
- : activeSection === "travelers"
96
- ? slots?.travelersSidebar?.(context)
97
- : activeSection === "activity"
98
- ? slots?.activitySidebar?.(context)
99
- : null;
100
- const workspaceSidebar = slots?.workspaceSidebar?.(context);
101
- if (!workspaceSidebar && !sectionSidebar)
102
- return null;
103
- return (_jsxs(_Fragment, { children: [sectionSidebar, workspaceSidebar] }));
104
- }
105
- function getDefaultNavigationItems(tabs) {
106
- return [
107
- { value: "booking", label: tabs.booking },
108
- { value: "finance", label: tabs.finance },
109
- { value: "legal", label: tabs.legal },
110
- { value: "travelers", label: tabs.travelers },
111
- { value: "activity", label: tabs.activity },
112
- ];
113
- }