@voyantjs/availability-ui 0.21.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/README.md ADDED
@@ -0,0 +1,81 @@
1
+ # @voyantjs/availability-ui
2
+
3
+ Reusable availability UI primitives for Voyant operator/admin apps.
4
+
5
+ The initial package surface is intentionally leaf-level so downstream apps can
6
+ replace copied availability UI incrementally while page-level composition stays
7
+ app-owned.
8
+
9
+ ## Exports
10
+
11
+ | Entry | Description |
12
+ | --- | --- |
13
+ | `.` | Barrel re-exports |
14
+ | `./components/*` | Availability UI components |
15
+ | `./utils` | Small formatting helpers |
16
+
17
+ ## Surface
18
+
19
+ The package exports reusable pieces that keep app-owned data fetching,
20
+ routing, and mutations injected through props:
21
+
22
+ - `AvailabilityOverview`
23
+ - `AvailabilitySlotsTab`, `AvailabilityRulesTab`, `AvailabilityStartTimesTab`
24
+ - `AvailabilityCloseoutsTab`, `AvailabilityPickupPointsTab`
25
+ - `AvailabilityRuleDialog`, `AvailabilityStartTimeDialog`, `AvailabilitySlotDialog`
26
+ - `AvailabilityCloseoutDialog`, `AvailabilityPickupPointDialog`
27
+ - `AvailabilityPageSkeleton`, `AvailabilityBodySkeleton`, detail skeletons
28
+ - `availability*Columns` table column builders
29
+ - `AvailabilitySectionHeader`
30
+ - `formatLocalizedSelectionLabel`
31
+
32
+ ## Usage
33
+
34
+ ```tsx
35
+ import { AvailabilitySectionHeader } from "@voyantjs/availability-ui"
36
+
37
+ function SlotsHeader() {
38
+ return (
39
+ <AvailabilitySectionHeader
40
+ title="Slots"
41
+ description="Manage generated capacity."
42
+ actionLabel="Create slot"
43
+ onAction={() => setOpen(true)}
44
+ />
45
+ )
46
+ }
47
+ ```
48
+
49
+ Table column builders are available for apps that use `@voyantjs/ui`'s
50
+ `DataTable` and keep routing behavior app-owned:
51
+
52
+ ```tsx
53
+ import { availabilitySlotColumns } from "@voyantjs/availability-ui"
54
+
55
+ <DataTable
56
+ columns={availabilitySlotColumns(products, openSlotRoute, messages.availability)}
57
+ data={slots}
58
+ />
59
+ ```
60
+
61
+ Dialogs expose the reusable form UI and validation while the app decides how
62
+ to persist the payload:
63
+
64
+ ```tsx
65
+ import { AvailabilitySlotDialog } from "@voyantjs/availability-ui"
66
+
67
+ <AvailabilitySlotDialog
68
+ messages={messages.availability}
69
+ open={open}
70
+ onOpenChange={setOpen}
71
+ products={products}
72
+ rules={rules}
73
+ startTimes={startTimes}
74
+ onSubmit={(payload, context) =>
75
+ context.isEditing
76
+ ? api.patch(`/v1/availability/slots/${context.id}`, payload)
77
+ : api.post("/v1/availability/slots", payload)
78
+ }
79
+ onSuccess={refresh}
80
+ />
81
+ ```
@@ -0,0 +1,39 @@
1
+ import type { ColumnDef } from "@tanstack/react-table";
2
+ import { type AvailabilityCloseoutRow, type AvailabilityPickupPointRow, type AvailabilityRuleRow, type AvailabilitySlotRow, type AvailabilityStartTimeRow, type ProductOption } from "@voyantjs/availability-react";
3
+ export interface AvailabilityColumnsMessages {
4
+ activeLabel: string;
5
+ dateLabel: string;
6
+ details: {
7
+ noValue: string;
8
+ };
9
+ durationLabel: string;
10
+ labelLabel: string;
11
+ locationLabel: string;
12
+ maxPaxLabel: string;
13
+ nameLabel: string;
14
+ openLabel: string;
15
+ productLabel: string;
16
+ productLevelLabel: string;
17
+ reasonLabel: string;
18
+ recurrenceLabel: string;
19
+ remainingPaxLabel: string;
20
+ slotLabel: string;
21
+ startLabel: string;
22
+ startsAtLabel: string;
23
+ statusActive: string;
24
+ statusCancelled: string;
25
+ statusClosed: string;
26
+ statusInactive: string;
27
+ statusLabel: string;
28
+ statusOpen: string;
29
+ statusSoldOut: string;
30
+ timezoneLabel: string;
31
+ viewLabel: string;
32
+ }
33
+ export declare function getSlotStatusLabel(status: AvailabilitySlotRow["status"], messages: AvailabilityColumnsMessages): string;
34
+ export declare const availabilityRuleColumns: (products: ProductOption[], onView: (ruleId: string) => void, messages: AvailabilityColumnsMessages) => ColumnDef<AvailabilityRuleRow>[];
35
+ export declare const availabilityStartTimeColumns: (products: ProductOption[], onView: (startTimeId: string) => void, messages: AvailabilityColumnsMessages) => ColumnDef<AvailabilityStartTimeRow>[];
36
+ export declare const availabilitySlotColumns: (products: ProductOption[], onView: (slotId: string) => void, messages: AvailabilityColumnsMessages) => ColumnDef<AvailabilitySlotRow>[];
37
+ export declare const availabilityCloseoutColumns: (products: ProductOption[], messages: AvailabilityColumnsMessages) => ColumnDef<AvailabilityCloseoutRow>[];
38
+ export declare const availabilityPickupPointColumns: (products: ProductOption[], messages: AvailabilityColumnsMessages) => ColumnDef<AvailabilityPickupPointRow>[];
39
+ //# sourceMappingURL=availability-columns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability-columns.d.ts","sourceRoot":"","sources":["../../src/components/availability-columns.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAE7B,KAAK,aAAa,EAGnB,MAAM,8BAA8B,CAAA;AAKrC,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EACrC,QAAQ,EAAE,2BAA2B,UAYtC;AAkBD,eAAO,MAAM,uBAAuB,GAClC,UAAU,aAAa,EAAE,EACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,2BAA2B,KACpC,SAAS,CAAC,mBAAmB,CAAC,EA2ChC,CAAA;AAED,eAAO,MAAM,4BAA4B,GACvC,UAAU,aAAa,EAAE,EACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,EACrC,UAAU,2BAA2B,KACpC,SAAS,CAAC,wBAAwB,CAAC,EAyCrC,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,UAAU,aAAa,EAAE,EACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,2BAA2B,KACpC,SAAS,CAAC,mBAAmB,CAAC,EAwChC,CAAA;AAED,eAAO,MAAM,2BAA2B,GACtC,UAAU,aAAa,EAAE,EACzB,UAAU,2BAA2B,KACpC,SAAS,CAAC,uBAAuB,CAAC,EAoBpC,CAAA;AAED,eAAO,MAAM,8BAA8B,GACzC,UAAU,aAAa,EAAE,EACzB,UAAU,2BAA2B,KACpC,SAAS,CAAC,0BAA0B,CAAC,EA0BvC,CAAA"}
@@ -0,0 +1,160 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { formatDateTime, productNameById, slotStatusVariant, } from "@voyantjs/availability-react";
4
+ import { Badge, Button } from "@voyantjs/ui/components";
5
+ import { DataTableColumnHeader } from "@voyantjs/ui/components/data-table-column-header";
6
+ import { ExternalLink } from "lucide-react";
7
+ export function getSlotStatusLabel(status, messages) {
8
+ switch (status) {
9
+ case "open":
10
+ return messages.statusOpen;
11
+ case "closed":
12
+ return messages.statusClosed;
13
+ case "sold_out":
14
+ return messages.statusSoldOut;
15
+ case "cancelled":
16
+ return messages.statusCancelled;
17
+ }
18
+ }
19
+ function ViewButton({ label, onClick }) {
20
+ return (_jsxs(Button, { variant: "ghost", size: "sm", onClick: (event) => {
21
+ event.stopPropagation();
22
+ onClick();
23
+ }, children: [_jsx(ExternalLink, { className: "mr-2 h-4 w-4" }), label] }));
24
+ }
25
+ export const availabilityRuleColumns = (products, onView, messages) => [
26
+ {
27
+ accessorKey: "productId",
28
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.productLabel }),
29
+ cell: ({ row }) => productNameById(products, row.original.productId, row.original.productName),
30
+ },
31
+ {
32
+ accessorKey: "timezone",
33
+ header: ({ column }) => (_jsx(DataTableColumnHeader, { column: column, title: messages.timezoneLabel })),
34
+ },
35
+ {
36
+ accessorKey: "recurrenceRule",
37
+ header: ({ column }) => (_jsx(DataTableColumnHeader, { column: column, title: messages.recurrenceLabel })),
38
+ cell: ({ row }) => (_jsx("span", { className: "max-w-[380px] truncate font-mono text-xs", children: row.original.recurrenceRule })),
39
+ },
40
+ {
41
+ accessorKey: "maxCapacity",
42
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.maxPaxLabel }),
43
+ },
44
+ {
45
+ accessorKey: "active",
46
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.activeLabel }),
47
+ cell: ({ row }) => (_jsx(Badge, { variant: row.original.active ? "default" : "secondary", children: row.original.active ? messages.statusActive : messages.statusInactive })),
48
+ },
49
+ {
50
+ id: "view",
51
+ header: messages.viewLabel,
52
+ cell: ({ row }) => (_jsx(ViewButton, { label: messages.openLabel, onClick: () => onView(row.original.id) })),
53
+ },
54
+ ];
55
+ export const availabilityStartTimeColumns = (products, onView, messages) => [
56
+ {
57
+ accessorKey: "productId",
58
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.productLabel }),
59
+ cell: ({ row }) => productNameById(products, row.original.productId, row.original.productName),
60
+ },
61
+ {
62
+ accessorKey: "label",
63
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.labelLabel }),
64
+ cell: ({ row }) => row.original.label ?? messages.details.noValue,
65
+ },
66
+ {
67
+ accessorKey: "startTimeLocal",
68
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.startLabel }),
69
+ },
70
+ {
71
+ accessorKey: "durationMinutes",
72
+ header: ({ column }) => (_jsx(DataTableColumnHeader, { column: column, title: messages.durationLabel })),
73
+ cell: ({ row }) => row.original.durationMinutes == null
74
+ ? messages.details.noValue
75
+ : `${row.original.durationMinutes} min`,
76
+ },
77
+ {
78
+ accessorKey: "active",
79
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.statusLabel }),
80
+ cell: ({ row }) => (_jsx(Badge, { variant: row.original.active ? "default" : "secondary", children: row.original.active ? messages.statusActive : messages.statusInactive })),
81
+ },
82
+ {
83
+ id: "view",
84
+ header: messages.viewLabel,
85
+ cell: ({ row }) => (_jsx(ViewButton, { label: messages.openLabel, onClick: () => onView(row.original.id) })),
86
+ },
87
+ ];
88
+ export const availabilitySlotColumns = (products, onView, messages) => [
89
+ {
90
+ accessorKey: "productId",
91
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.productLabel }),
92
+ cell: ({ row }) => productNameById(products, row.original.productId, row.original.productName),
93
+ },
94
+ {
95
+ accessorKey: "dateLocal",
96
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.dateLabel }),
97
+ },
98
+ {
99
+ accessorKey: "startsAt",
100
+ header: ({ column }) => (_jsx(DataTableColumnHeader, { column: column, title: messages.startsAtLabel })),
101
+ cell: ({ row }) => formatDateTime(row.original.startsAt),
102
+ },
103
+ {
104
+ accessorKey: "remainingPax",
105
+ header: ({ column }) => (_jsx(DataTableColumnHeader, { column: column, title: messages.remainingPaxLabel })),
106
+ cell: ({ row }) => row.original.remainingPax ?? messages.details.noValue,
107
+ },
108
+ {
109
+ accessorKey: "status",
110
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.statusLabel }),
111
+ cell: ({ row }) => (_jsx(Badge, { variant: slotStatusVariant[row.original.status], className: "capitalize", children: getSlotStatusLabel(row.original.status, messages) })),
112
+ },
113
+ {
114
+ id: "view",
115
+ header: messages.viewLabel,
116
+ cell: ({ row }) => (_jsx(ViewButton, { label: messages.openLabel, onClick: () => onView(row.original.id) })),
117
+ },
118
+ ];
119
+ export const availabilityCloseoutColumns = (products, messages) => [
120
+ {
121
+ accessorKey: "productId",
122
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.productLabel }),
123
+ cell: ({ row }) => productNameById(products, row.original.productId, row.original.productName),
124
+ },
125
+ {
126
+ accessorKey: "dateLocal",
127
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.dateLabel }),
128
+ },
129
+ {
130
+ accessorKey: "slotId",
131
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.slotLabel }),
132
+ cell: ({ row }) => row.original.slotId ?? messages.productLevelLabel,
133
+ },
134
+ {
135
+ accessorKey: "reason",
136
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.reasonLabel }),
137
+ cell: ({ row }) => row.original.reason ?? messages.details.noValue,
138
+ },
139
+ ];
140
+ export const availabilityPickupPointColumns = (products, messages) => [
141
+ {
142
+ accessorKey: "productId",
143
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.productLabel }),
144
+ cell: ({ row }) => productNameById(products, row.original.productId, row.original.productName),
145
+ },
146
+ {
147
+ accessorKey: "name",
148
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.nameLabel }),
149
+ },
150
+ {
151
+ accessorKey: "locationText",
152
+ header: ({ column }) => (_jsx(DataTableColumnHeader, { column: column, title: messages.locationLabel })),
153
+ cell: ({ row }) => row.original.locationText ?? messages.details.noValue,
154
+ },
155
+ {
156
+ accessorKey: "active",
157
+ header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.statusLabel }),
158
+ cell: ({ row }) => (_jsx(Badge, { variant: row.original.active ? "default" : "secondary", children: row.original.active ? messages.statusActive : messages.statusInactive })),
159
+ },
160
+ ];
@@ -0,0 +1,236 @@
1
+ import type { AvailabilityCloseoutRow, AvailabilityPickupPointRow, AvailabilityRuleRow, AvailabilitySlotRow, AvailabilityStartTimeRow, ProductOption } from "@voyantjs/availability-react";
2
+ interface RuleDialogMessages {
3
+ validationProductRequired: string;
4
+ validationTimezoneRequired: string;
5
+ validationRecurrenceRequired: string;
6
+ editTitle: string;
7
+ newTitle: string;
8
+ productLabel: string;
9
+ selectProductPlaceholder: string;
10
+ timezoneLabel: string;
11
+ timezonePlaceholder: string;
12
+ maxCapacityLabel: string;
13
+ recurrenceRuleLabel: string;
14
+ recurrenceRulePlaceholder: string;
15
+ maxPickupCapacityLabel: string;
16
+ minimumTotalPaxLabel: string;
17
+ cutoffMinutesLabel: string;
18
+ earlyBookingLimitMinutesLabel: string;
19
+ activeTitle: string;
20
+ activeDescription: string;
21
+ cancel: string;
22
+ save: string;
23
+ create: string;
24
+ }
25
+ interface StartTimeDialogMessages {
26
+ validationProductRequired: string;
27
+ validationStartTimeRequired: string;
28
+ editTitle: string;
29
+ newTitle: string;
30
+ productLabel: string;
31
+ selectProductPlaceholder: string;
32
+ labelLabel: string;
33
+ labelPlaceholder: string;
34
+ startTimeLabel: string;
35
+ durationMinutesLabel: string;
36
+ sortOrderLabel: string;
37
+ activeTitle: string;
38
+ activeDescription: string;
39
+ cancel: string;
40
+ save: string;
41
+ create: string;
42
+ }
43
+ interface SlotDialogMessages {
44
+ validationProductRequired: string;
45
+ validationDateRequired: string;
46
+ validationStartsAtRequired: string;
47
+ validationTimezoneRequired: string;
48
+ editTitle: string;
49
+ newTitle: string;
50
+ productLabel: string;
51
+ selectProductPlaceholder: string;
52
+ ruleLabel: string;
53
+ optionalRulePlaceholder: string;
54
+ noRule: string;
55
+ startTimeLabel: string;
56
+ optionalStartTimePlaceholder: string;
57
+ noStartTime: string;
58
+ dateLabel: string;
59
+ timezoneLabel: string;
60
+ timezonePlaceholder: string;
61
+ startsAtLabel: string;
62
+ endsAtLabel: string;
63
+ statusLabel: string;
64
+ unlimitedLabel: string;
65
+ yes: string;
66
+ no: string;
67
+ initialPaxLabel: string;
68
+ remainingPaxLabel: string;
69
+ remainingResourcesLabel: string;
70
+ initialPickupsLabel: string;
71
+ remainingPickupsLabel: string;
72
+ pastCutoffTitle: string;
73
+ pastCutoffDescription: string;
74
+ tooEarlyTitle: string;
75
+ tooEarlyDescription: string;
76
+ notesLabel: string;
77
+ notesPlaceholder: string;
78
+ cancel: string;
79
+ save: string;
80
+ create: string;
81
+ }
82
+ interface CloseoutDialogMessages {
83
+ validationProductRequired: string;
84
+ validationDateRequired: string;
85
+ editTitle: string;
86
+ newTitle: string;
87
+ productLabel: string;
88
+ selectProductPlaceholder: string;
89
+ slotLabel: string;
90
+ optionalSlotPlaceholder: string;
91
+ productLevelOption: string;
92
+ dateLabel: string;
93
+ datePlaceholder: string;
94
+ reasonLabel: string;
95
+ reasonPlaceholder: string;
96
+ cancel: string;
97
+ save: string;
98
+ create: string;
99
+ }
100
+ interface PickupPointDialogMessages {
101
+ validationProductRequired: string;
102
+ validationNameRequired: string;
103
+ editTitle: string;
104
+ newTitle: string;
105
+ productLabel: string;
106
+ selectProductPlaceholder: string;
107
+ nameLabel: string;
108
+ namePlaceholder: string;
109
+ locationTextLabel: string;
110
+ locationTextPlaceholder: string;
111
+ descriptionLabel: string;
112
+ descriptionPlaceholder: string;
113
+ activeTitle: string;
114
+ activeDescription: string;
115
+ cancel: string;
116
+ save: string;
117
+ create: string;
118
+ }
119
+ export interface AvailabilityDialogMessages {
120
+ dialogs: {
121
+ rule: RuleDialogMessages;
122
+ startTime: StartTimeDialogMessages;
123
+ slot: SlotDialogMessages;
124
+ closeout: CloseoutDialogMessages;
125
+ pickupPoint: PickupPointDialogMessages;
126
+ };
127
+ statusOpen: string;
128
+ statusClosed: string;
129
+ statusSoldOut: string;
130
+ statusCancelled: string;
131
+ }
132
+ type SubmitContext = {
133
+ isEditing: boolean;
134
+ id?: string;
135
+ };
136
+ export type AvailabilityRuleSubmitPayload = {
137
+ productId: string;
138
+ timezone: string;
139
+ recurrenceRule: string;
140
+ maxCapacity: number;
141
+ maxPickupCapacity: number | null;
142
+ minTotalPax: number | null;
143
+ cutoffMinutes: number | null;
144
+ earlyBookingLimitMinutes: number | null;
145
+ active: boolean;
146
+ };
147
+ export type AvailabilityStartTimeSubmitPayload = {
148
+ productId: string;
149
+ label: string | null;
150
+ startTimeLocal: string;
151
+ durationMinutes: number | null;
152
+ sortOrder: number;
153
+ active: boolean;
154
+ };
155
+ export type AvailabilitySlotSubmitPayload = {
156
+ productId: string;
157
+ availabilityRuleId: string | null;
158
+ startTimeId: string | null;
159
+ dateLocal: string;
160
+ startsAt: string;
161
+ endsAt: string | null;
162
+ timezone: string;
163
+ status: AvailabilitySlotRow["status"];
164
+ unlimited: boolean;
165
+ initialPax: number | null;
166
+ remainingPax: number | null;
167
+ initialPickups: number | null;
168
+ remainingPickups: number | null;
169
+ remainingResources: number | null;
170
+ pastCutoff: boolean;
171
+ tooEarly: boolean;
172
+ notes: string | null;
173
+ };
174
+ export type AvailabilityCloseoutSubmitPayload = {
175
+ productId: string;
176
+ slotId: string | null;
177
+ dateLocal: string;
178
+ reason: string | null;
179
+ };
180
+ export type AvailabilityPickupPointSubmitPayload = {
181
+ productId: string;
182
+ name: string;
183
+ description: string | null;
184
+ locationText: string | null;
185
+ active: boolean;
186
+ };
187
+ export declare function AvailabilityRuleDialog(props: {
188
+ messages: AvailabilityDialogMessages;
189
+ open: boolean;
190
+ onOpenChange: (open: boolean) => void;
191
+ rule?: AvailabilityRuleRow;
192
+ products: ProductOption[];
193
+ onSubmit: (payload: AvailabilityRuleSubmitPayload, context: SubmitContext) => Promise<void>;
194
+ onSuccess: () => void;
195
+ }): import("react/jsx-runtime").JSX.Element;
196
+ export declare function AvailabilityStartTimeDialog(props: {
197
+ messages: AvailabilityDialogMessages;
198
+ open: boolean;
199
+ onOpenChange: (open: boolean) => void;
200
+ startTime?: AvailabilityStartTimeRow;
201
+ products: ProductOption[];
202
+ onSubmit: (payload: AvailabilityStartTimeSubmitPayload, context: SubmitContext) => Promise<void>;
203
+ onSuccess: () => void;
204
+ }): import("react/jsx-runtime").JSX.Element;
205
+ export declare function AvailabilitySlotDialog(props: {
206
+ messages: AvailabilityDialogMessages;
207
+ open: boolean;
208
+ onOpenChange: (open: boolean) => void;
209
+ slot?: AvailabilitySlotRow;
210
+ products: ProductOption[];
211
+ rules: AvailabilityRuleRow[];
212
+ startTimes: AvailabilityStartTimeRow[];
213
+ onSubmit: (payload: AvailabilitySlotSubmitPayload, context: SubmitContext) => Promise<void>;
214
+ onSuccess: () => void;
215
+ }): import("react/jsx-runtime").JSX.Element;
216
+ export declare function AvailabilityCloseoutDialog(props: {
217
+ messages: AvailabilityDialogMessages;
218
+ open: boolean;
219
+ onOpenChange: (open: boolean) => void;
220
+ closeout?: AvailabilityCloseoutRow;
221
+ products: ProductOption[];
222
+ slots: AvailabilitySlotRow[];
223
+ onSubmit: (payload: AvailabilityCloseoutSubmitPayload, context: SubmitContext) => Promise<void>;
224
+ onSuccess: () => void;
225
+ }): import("react/jsx-runtime").JSX.Element;
226
+ export declare function AvailabilityPickupPointDialog(props: {
227
+ messages: AvailabilityDialogMessages;
228
+ open: boolean;
229
+ onOpenChange: (open: boolean) => void;
230
+ pickupPoint?: AvailabilityPickupPointRow;
231
+ products: ProductOption[];
232
+ onSubmit: (payload: AvailabilityPickupPointSubmitPayload, context: SubmitContext) => Promise<void>;
233
+ onSuccess: () => void;
234
+ }): import("react/jsx-runtime").JSX.Element;
235
+ export {};
236
+ //# sourceMappingURL=availability-dialogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability-dialogs.d.ts","sourceRoot":"","sources":["../../src/components/availability-dialogs.tsx"],"names":[],"mappings":"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"}