@idkwebsites/components 0.1.15 → 0.1.17
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/index.cjs +1241 -1168
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +137 -2
- package/dist/index.d.ts +137 -2
- package/dist/index.js +1216 -1144
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/index.d.cts
CHANGED
|
@@ -201,6 +201,141 @@ declare function useCancelBooking(): _tanstack_react_query.UseMutationResult<{
|
|
|
201
201
|
}, Error, BookingCancelInput, unknown>;
|
|
202
202
|
declare function useBookingLookup(uid?: string, enabled?: boolean): _tanstack_react_query.UseQueryResult<BookingLookup, Error>;
|
|
203
203
|
|
|
204
|
+
type Step = "service" | "staff" | "time" | "details" | "done";
|
|
205
|
+
interface UseBookingWidgetOptions {
|
|
206
|
+
/** Pre-fetched services — skips the API call when provided. */
|
|
207
|
+
services?: Service[];
|
|
208
|
+
/** Query params forwarded to `useServices` when services are not pre-fetched. */
|
|
209
|
+
servicesQuery?: ServicesQueryParams;
|
|
210
|
+
/** Query params forwarded to `useTeam`. */
|
|
211
|
+
teamQuery?: TeamQueryParams;
|
|
212
|
+
/** Client-side filter applied to the services list. */
|
|
213
|
+
serviceFilter?: (service: Service) => boolean;
|
|
214
|
+
/** Client-side filter applied to the staff list. */
|
|
215
|
+
teamFilter?: (member: StaffMember) => boolean;
|
|
216
|
+
/** Enable the staff-selection step. Default `true`. */
|
|
217
|
+
showStaffSelection?: boolean;
|
|
218
|
+
/** Automatically advance when user selects a card. Default `false`. */
|
|
219
|
+
autoAdvanceOnSelect?: boolean;
|
|
220
|
+
/** Scroll the widget container into view on step change. Default `true`. */
|
|
221
|
+
scrollToStep?: boolean;
|
|
222
|
+
/** Pixel offset for scroll-into-view. Default `96`. */
|
|
223
|
+
scrollOffset?: number;
|
|
224
|
+
/** Ref to the widget container element. Used for scroll-to-top. */
|
|
225
|
+
widgetRef?: React.RefObject<HTMLElement | null>;
|
|
226
|
+
/** Called after a booking is created successfully. */
|
|
227
|
+
onSuccess?: (booking: unknown) => void;
|
|
228
|
+
/** Number of days to fetch at a time in list date picker. Default `7`. */
|
|
229
|
+
availabilityDays?: number;
|
|
230
|
+
/** Enable prev/next date paging. Default `true`. */
|
|
231
|
+
enableDatePaging?: boolean;
|
|
232
|
+
/** Date picker mode: `"list"` or `"calendar"`. Default `"list"`. */
|
|
233
|
+
datePickerMode?: "list" | "calendar";
|
|
234
|
+
/** Calendar variant. Default `"default"`. */
|
|
235
|
+
calendarVariant?: "default" | "compact";
|
|
236
|
+
/** Max months in advance. Default `3`. */
|
|
237
|
+
maxAdvanceMonths?: number;
|
|
238
|
+
/** Weekday numbers (0-6) to disable. Default `[]`. */
|
|
239
|
+
disabledWeekdays?: number[];
|
|
240
|
+
/** Show "Fully booked" labels on calendar days. Default `true`. */
|
|
241
|
+
showFullyBookedLabel?: boolean;
|
|
242
|
+
/** Enable search input for service filtering. Default `true`. */
|
|
243
|
+
enableServiceSearch?: boolean;
|
|
244
|
+
/** Enable category filter dropdown. Default `false`. */
|
|
245
|
+
enableCategoryFilter?: boolean;
|
|
246
|
+
/** Max items per page for services before "show more". Default `10`. */
|
|
247
|
+
servicePageSize?: number;
|
|
248
|
+
/** Max items per page for staff before "show more". Default `8`. */
|
|
249
|
+
staffPageSize?: number;
|
|
250
|
+
/** Show "Any Available" option for staff. Default `true`. */
|
|
251
|
+
showAnyStaffOption?: boolean;
|
|
252
|
+
}
|
|
253
|
+
interface UseBookingWidgetReturn {
|
|
254
|
+
step: Step;
|
|
255
|
+
/** 1-based step number for progress display. */
|
|
256
|
+
stepNumber: number;
|
|
257
|
+
totalSteps: number;
|
|
258
|
+
selectedService: Service | null;
|
|
259
|
+
selectedStaff: StaffMember | null;
|
|
260
|
+
selectedDate: string | null;
|
|
261
|
+
selectedTime: string | null;
|
|
262
|
+
selectedEndTime: string | null;
|
|
263
|
+
details: {
|
|
264
|
+
name: string;
|
|
265
|
+
email: string;
|
|
266
|
+
phone: string;
|
|
267
|
+
notes: string;
|
|
268
|
+
};
|
|
269
|
+
servicesList: Service[];
|
|
270
|
+
filteredServices: Service[];
|
|
271
|
+
pagedServices: Service[];
|
|
272
|
+
hasMoreServices: boolean;
|
|
273
|
+
categories: string[];
|
|
274
|
+
staffOptions: StaffMember[];
|
|
275
|
+
pagedStaff: StaffMember[];
|
|
276
|
+
hasMoreStaff: boolean;
|
|
277
|
+
availabilityDates: AvailabilityDate[];
|
|
278
|
+
availabilityByDate: Map<string, AvailabilityDate>;
|
|
279
|
+
timeZone: string;
|
|
280
|
+
timeZoneLabel: string;
|
|
281
|
+
calendarMonth: Date;
|
|
282
|
+
calendarDays: Array<{
|
|
283
|
+
date: string;
|
|
284
|
+
isCurrentMonth: boolean;
|
|
285
|
+
}>;
|
|
286
|
+
hasBlockedInCalendarView: boolean;
|
|
287
|
+
maxAdvanceDate: Date | null;
|
|
288
|
+
maxAdvanceMonthStart: Date | null;
|
|
289
|
+
monthOptions: Array<{
|
|
290
|
+
value: string;
|
|
291
|
+
label: string;
|
|
292
|
+
date: Date;
|
|
293
|
+
}>;
|
|
294
|
+
isServicesLoading: boolean;
|
|
295
|
+
isAvailabilityLoading: boolean;
|
|
296
|
+
isSubmitting: boolean;
|
|
297
|
+
bookingError: string | null;
|
|
298
|
+
requiresStaff: boolean;
|
|
299
|
+
canSkipStaff: boolean;
|
|
300
|
+
serviceSearch: string;
|
|
301
|
+
categoryFilter: string;
|
|
302
|
+
servicePage: number;
|
|
303
|
+
staffPage: number;
|
|
304
|
+
availabilityStartDate: string;
|
|
305
|
+
formatDateLabel: (date: string) => string;
|
|
306
|
+
formatDateHeading: (date: string) => string;
|
|
307
|
+
formatTimeLabel: (iso: string) => string;
|
|
308
|
+
formatDuration: (minutes: number) => string;
|
|
309
|
+
setServiceSearch: (value: string) => void;
|
|
310
|
+
setCategoryFilter: (value: string) => void;
|
|
311
|
+
loadMoreServices: () => void;
|
|
312
|
+
loadMoreStaff: () => void;
|
|
313
|
+
selectService: (service: Service) => void;
|
|
314
|
+
selectStaff: (staff: StaffMember | null) => void;
|
|
315
|
+
selectDate: (date: string) => void;
|
|
316
|
+
selectTime: (time: string, endTime: string) => void;
|
|
317
|
+
setDetails: React.Dispatch<React.SetStateAction<{
|
|
318
|
+
name: string;
|
|
319
|
+
email: string;
|
|
320
|
+
phone: string;
|
|
321
|
+
notes: string;
|
|
322
|
+
}>>;
|
|
323
|
+
goToServiceStep: () => void;
|
|
324
|
+
continueFromService: () => void;
|
|
325
|
+
continueFromStaff: () => void;
|
|
326
|
+
continueFromTime: () => void;
|
|
327
|
+
submitBooking: (event?: React.FormEvent) => Promise<void>;
|
|
328
|
+
goBack: () => void;
|
|
329
|
+
reset: () => void;
|
|
330
|
+
scrollToTop: () => void;
|
|
331
|
+
handlePrevDates: () => void;
|
|
332
|
+
handleNextDates: () => void;
|
|
333
|
+
handlePrevMonth: () => void;
|
|
334
|
+
handleNextMonth: () => void;
|
|
335
|
+
handleMonthSelect: (value: string) => void;
|
|
336
|
+
}
|
|
337
|
+
declare function useBookingWidget(options?: UseBookingWidgetOptions): UseBookingWidgetReturn;
|
|
338
|
+
|
|
204
339
|
interface ServicesListProps {
|
|
205
340
|
layout?: 'grid' | 'list';
|
|
206
341
|
columns?: number;
|
|
@@ -304,7 +439,7 @@ interface BookingWidgetProps {
|
|
|
304
439
|
disabledWeekdays?: number[];
|
|
305
440
|
showFullyBookedLabel?: boolean;
|
|
306
441
|
}
|
|
307
|
-
declare function BookingWidget({ className,
|
|
442
|
+
declare function BookingWidget({ className, title, subtitle, serviceSearchPlaceholder, categoryLabel, serviceListMaxHeight, serviceLayout, serviceColumns, showServicePagination, staffLayout, staffColumns, showStaffPagination, timeLayout, showFullyBookedLabel, calendarVariant, enableServiceSearch, enableCategoryFilter, enableDatePaging, disabledWeekdays, ...hookProps }: BookingWidgetProps): react_jsx_runtime.JSX.Element;
|
|
308
443
|
|
|
309
444
|
interface AvailabilityPickerProps {
|
|
310
445
|
serviceId: string;
|
|
@@ -352,4 +487,4 @@ interface TimePickerProps {
|
|
|
352
487
|
}
|
|
353
488
|
declare function TimePicker({ slots, selectedTime, onSelect, className, }: TimePickerProps): react_jsx_runtime.JSX.Element;
|
|
354
489
|
|
|
355
|
-
export { AvailabilityPicker, type AvailabilityResult, type BookingCancelInput, type BookingCreateInput, type BookingLookup, BookingWidget, ContactForm, type ContactSubmissionInput, DatePicker, PlatformProvider, type Service, ServiceCard, ServicePicker, ServicesList, type ServicesQueryParams, type StaffMember, StaffPicker, TeamGrid, TeamMember, type TeamQueryParams, type TenantInfo, TimePicker, useAvailability, useBookingLookup, useCancelBooking, useCreateBooking, useServices, useTeam, useTenant };
|
|
490
|
+
export { AvailabilityPicker, type AvailabilityResult, type BookingCancelInput, type BookingCreateInput, type BookingLookup, BookingWidget, ContactForm, type ContactSubmissionInput, DatePicker, PlatformProvider, type Service, ServiceCard, ServicePicker, ServicesList, type ServicesQueryParams, type StaffMember, StaffPicker, TeamGrid, TeamMember, type TeamQueryParams, type TenantInfo, TimePicker, type UseBookingWidgetOptions, type UseBookingWidgetReturn, useAvailability, useBookingLookup, useBookingWidget, useCancelBooking, useCreateBooking, useServices, useTeam, useTenant };
|
package/dist/index.d.ts
CHANGED
|
@@ -201,6 +201,141 @@ declare function useCancelBooking(): _tanstack_react_query.UseMutationResult<{
|
|
|
201
201
|
}, Error, BookingCancelInput, unknown>;
|
|
202
202
|
declare function useBookingLookup(uid?: string, enabled?: boolean): _tanstack_react_query.UseQueryResult<BookingLookup, Error>;
|
|
203
203
|
|
|
204
|
+
type Step = "service" | "staff" | "time" | "details" | "done";
|
|
205
|
+
interface UseBookingWidgetOptions {
|
|
206
|
+
/** Pre-fetched services — skips the API call when provided. */
|
|
207
|
+
services?: Service[];
|
|
208
|
+
/** Query params forwarded to `useServices` when services are not pre-fetched. */
|
|
209
|
+
servicesQuery?: ServicesQueryParams;
|
|
210
|
+
/** Query params forwarded to `useTeam`. */
|
|
211
|
+
teamQuery?: TeamQueryParams;
|
|
212
|
+
/** Client-side filter applied to the services list. */
|
|
213
|
+
serviceFilter?: (service: Service) => boolean;
|
|
214
|
+
/** Client-side filter applied to the staff list. */
|
|
215
|
+
teamFilter?: (member: StaffMember) => boolean;
|
|
216
|
+
/** Enable the staff-selection step. Default `true`. */
|
|
217
|
+
showStaffSelection?: boolean;
|
|
218
|
+
/** Automatically advance when user selects a card. Default `false`. */
|
|
219
|
+
autoAdvanceOnSelect?: boolean;
|
|
220
|
+
/** Scroll the widget container into view on step change. Default `true`. */
|
|
221
|
+
scrollToStep?: boolean;
|
|
222
|
+
/** Pixel offset for scroll-into-view. Default `96`. */
|
|
223
|
+
scrollOffset?: number;
|
|
224
|
+
/** Ref to the widget container element. Used for scroll-to-top. */
|
|
225
|
+
widgetRef?: React.RefObject<HTMLElement | null>;
|
|
226
|
+
/** Called after a booking is created successfully. */
|
|
227
|
+
onSuccess?: (booking: unknown) => void;
|
|
228
|
+
/** Number of days to fetch at a time in list date picker. Default `7`. */
|
|
229
|
+
availabilityDays?: number;
|
|
230
|
+
/** Enable prev/next date paging. Default `true`. */
|
|
231
|
+
enableDatePaging?: boolean;
|
|
232
|
+
/** Date picker mode: `"list"` or `"calendar"`. Default `"list"`. */
|
|
233
|
+
datePickerMode?: "list" | "calendar";
|
|
234
|
+
/** Calendar variant. Default `"default"`. */
|
|
235
|
+
calendarVariant?: "default" | "compact";
|
|
236
|
+
/** Max months in advance. Default `3`. */
|
|
237
|
+
maxAdvanceMonths?: number;
|
|
238
|
+
/** Weekday numbers (0-6) to disable. Default `[]`. */
|
|
239
|
+
disabledWeekdays?: number[];
|
|
240
|
+
/** Show "Fully booked" labels on calendar days. Default `true`. */
|
|
241
|
+
showFullyBookedLabel?: boolean;
|
|
242
|
+
/** Enable search input for service filtering. Default `true`. */
|
|
243
|
+
enableServiceSearch?: boolean;
|
|
244
|
+
/** Enable category filter dropdown. Default `false`. */
|
|
245
|
+
enableCategoryFilter?: boolean;
|
|
246
|
+
/** Max items per page for services before "show more". Default `10`. */
|
|
247
|
+
servicePageSize?: number;
|
|
248
|
+
/** Max items per page for staff before "show more". Default `8`. */
|
|
249
|
+
staffPageSize?: number;
|
|
250
|
+
/** Show "Any Available" option for staff. Default `true`. */
|
|
251
|
+
showAnyStaffOption?: boolean;
|
|
252
|
+
}
|
|
253
|
+
interface UseBookingWidgetReturn {
|
|
254
|
+
step: Step;
|
|
255
|
+
/** 1-based step number for progress display. */
|
|
256
|
+
stepNumber: number;
|
|
257
|
+
totalSteps: number;
|
|
258
|
+
selectedService: Service | null;
|
|
259
|
+
selectedStaff: StaffMember | null;
|
|
260
|
+
selectedDate: string | null;
|
|
261
|
+
selectedTime: string | null;
|
|
262
|
+
selectedEndTime: string | null;
|
|
263
|
+
details: {
|
|
264
|
+
name: string;
|
|
265
|
+
email: string;
|
|
266
|
+
phone: string;
|
|
267
|
+
notes: string;
|
|
268
|
+
};
|
|
269
|
+
servicesList: Service[];
|
|
270
|
+
filteredServices: Service[];
|
|
271
|
+
pagedServices: Service[];
|
|
272
|
+
hasMoreServices: boolean;
|
|
273
|
+
categories: string[];
|
|
274
|
+
staffOptions: StaffMember[];
|
|
275
|
+
pagedStaff: StaffMember[];
|
|
276
|
+
hasMoreStaff: boolean;
|
|
277
|
+
availabilityDates: AvailabilityDate[];
|
|
278
|
+
availabilityByDate: Map<string, AvailabilityDate>;
|
|
279
|
+
timeZone: string;
|
|
280
|
+
timeZoneLabel: string;
|
|
281
|
+
calendarMonth: Date;
|
|
282
|
+
calendarDays: Array<{
|
|
283
|
+
date: string;
|
|
284
|
+
isCurrentMonth: boolean;
|
|
285
|
+
}>;
|
|
286
|
+
hasBlockedInCalendarView: boolean;
|
|
287
|
+
maxAdvanceDate: Date | null;
|
|
288
|
+
maxAdvanceMonthStart: Date | null;
|
|
289
|
+
monthOptions: Array<{
|
|
290
|
+
value: string;
|
|
291
|
+
label: string;
|
|
292
|
+
date: Date;
|
|
293
|
+
}>;
|
|
294
|
+
isServicesLoading: boolean;
|
|
295
|
+
isAvailabilityLoading: boolean;
|
|
296
|
+
isSubmitting: boolean;
|
|
297
|
+
bookingError: string | null;
|
|
298
|
+
requiresStaff: boolean;
|
|
299
|
+
canSkipStaff: boolean;
|
|
300
|
+
serviceSearch: string;
|
|
301
|
+
categoryFilter: string;
|
|
302
|
+
servicePage: number;
|
|
303
|
+
staffPage: number;
|
|
304
|
+
availabilityStartDate: string;
|
|
305
|
+
formatDateLabel: (date: string) => string;
|
|
306
|
+
formatDateHeading: (date: string) => string;
|
|
307
|
+
formatTimeLabel: (iso: string) => string;
|
|
308
|
+
formatDuration: (minutes: number) => string;
|
|
309
|
+
setServiceSearch: (value: string) => void;
|
|
310
|
+
setCategoryFilter: (value: string) => void;
|
|
311
|
+
loadMoreServices: () => void;
|
|
312
|
+
loadMoreStaff: () => void;
|
|
313
|
+
selectService: (service: Service) => void;
|
|
314
|
+
selectStaff: (staff: StaffMember | null) => void;
|
|
315
|
+
selectDate: (date: string) => void;
|
|
316
|
+
selectTime: (time: string, endTime: string) => void;
|
|
317
|
+
setDetails: React.Dispatch<React.SetStateAction<{
|
|
318
|
+
name: string;
|
|
319
|
+
email: string;
|
|
320
|
+
phone: string;
|
|
321
|
+
notes: string;
|
|
322
|
+
}>>;
|
|
323
|
+
goToServiceStep: () => void;
|
|
324
|
+
continueFromService: () => void;
|
|
325
|
+
continueFromStaff: () => void;
|
|
326
|
+
continueFromTime: () => void;
|
|
327
|
+
submitBooking: (event?: React.FormEvent) => Promise<void>;
|
|
328
|
+
goBack: () => void;
|
|
329
|
+
reset: () => void;
|
|
330
|
+
scrollToTop: () => void;
|
|
331
|
+
handlePrevDates: () => void;
|
|
332
|
+
handleNextDates: () => void;
|
|
333
|
+
handlePrevMonth: () => void;
|
|
334
|
+
handleNextMonth: () => void;
|
|
335
|
+
handleMonthSelect: (value: string) => void;
|
|
336
|
+
}
|
|
337
|
+
declare function useBookingWidget(options?: UseBookingWidgetOptions): UseBookingWidgetReturn;
|
|
338
|
+
|
|
204
339
|
interface ServicesListProps {
|
|
205
340
|
layout?: 'grid' | 'list';
|
|
206
341
|
columns?: number;
|
|
@@ -304,7 +439,7 @@ interface BookingWidgetProps {
|
|
|
304
439
|
disabledWeekdays?: number[];
|
|
305
440
|
showFullyBookedLabel?: boolean;
|
|
306
441
|
}
|
|
307
|
-
declare function BookingWidget({ className,
|
|
442
|
+
declare function BookingWidget({ className, title, subtitle, serviceSearchPlaceholder, categoryLabel, serviceListMaxHeight, serviceLayout, serviceColumns, showServicePagination, staffLayout, staffColumns, showStaffPagination, timeLayout, showFullyBookedLabel, calendarVariant, enableServiceSearch, enableCategoryFilter, enableDatePaging, disabledWeekdays, ...hookProps }: BookingWidgetProps): react_jsx_runtime.JSX.Element;
|
|
308
443
|
|
|
309
444
|
interface AvailabilityPickerProps {
|
|
310
445
|
serviceId: string;
|
|
@@ -352,4 +487,4 @@ interface TimePickerProps {
|
|
|
352
487
|
}
|
|
353
488
|
declare function TimePicker({ slots, selectedTime, onSelect, className, }: TimePickerProps): react_jsx_runtime.JSX.Element;
|
|
354
489
|
|
|
355
|
-
export { AvailabilityPicker, type AvailabilityResult, type BookingCancelInput, type BookingCreateInput, type BookingLookup, BookingWidget, ContactForm, type ContactSubmissionInput, DatePicker, PlatformProvider, type Service, ServiceCard, ServicePicker, ServicesList, type ServicesQueryParams, type StaffMember, StaffPicker, TeamGrid, TeamMember, type TeamQueryParams, type TenantInfo, TimePicker, useAvailability, useBookingLookup, useCancelBooking, useCreateBooking, useServices, useTeam, useTenant };
|
|
490
|
+
export { AvailabilityPicker, type AvailabilityResult, type BookingCancelInput, type BookingCreateInput, type BookingLookup, BookingWidget, ContactForm, type ContactSubmissionInput, DatePicker, PlatformProvider, type Service, ServiceCard, ServicePicker, ServicesList, type ServicesQueryParams, type StaffMember, StaffPicker, TeamGrid, TeamMember, type TeamQueryParams, type TenantInfo, TimePicker, type UseBookingWidgetOptions, type UseBookingWidgetReturn, useAvailability, useBookingLookup, useBookingWidget, useCancelBooking, useCreateBooking, useServices, useTeam, useTenant };
|