@wix/headless-bookings 0.0.10 → 0.0.11
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/cjs/dist/api/index.d.ts +10 -1
- package/cjs/dist/api/index.js +10 -1
- package/cjs/dist/api/query-services/index.d.ts +78 -0
- package/cjs/dist/api/query-services/index.js +137 -0
- package/cjs/dist/react/core/location/Location.d.ts +44 -0
- package/cjs/dist/react/core/location/Location.js +78 -0
- package/cjs/dist/react/core/service/Service.d.ts +160 -17
- package/cjs/dist/react/core/service/Service.js +211 -13
- package/cjs/dist/react/core/service-list/ServiceList.d.ts +75 -0
- package/cjs/dist/react/core/service-list/ServiceList.js +58 -0
- package/cjs/dist/react/index.d.ts +2 -0
- package/cjs/dist/react/index.js +2 -0
- package/cjs/dist/react/location/Location.d.ts +77 -0
- package/cjs/dist/react/location/Location.js +89 -0
- package/cjs/dist/react/service/Service.d.ts +1036 -31
- package/cjs/dist/react/service/Service.js +1060 -47
- package/cjs/dist/react/service-list/ServiceList.d.ts +185 -0
- package/cjs/dist/react/service-list/ServiceList.js +184 -0
- package/cjs/dist/services/index.d.ts +2 -1
- package/cjs/dist/services/index.js +2 -1
- package/cjs/dist/services/service/service.d.ts +71 -18
- package/cjs/dist/services/service/service.js +186 -50
- package/cjs/dist/services/service-list/service-list.d.ts +157 -0
- package/cjs/dist/services/service-list/service-list.js +274 -0
- package/cjs/dist/utils/dateAndTime.d.ts +2 -0
- package/cjs/dist/utils/dateAndTime.js +18 -0
- package/cjs/dist/utils/money.d.ts +21 -0
- package/cjs/dist/utils/money.js +34 -0
- package/dist/api/index.d.ts +10 -1
- package/dist/api/index.js +10 -1
- package/dist/api/query-services/index.d.ts +78 -0
- package/dist/api/query-services/index.js +137 -0
- package/dist/react/core/location/Location.d.ts +44 -0
- package/dist/react/core/location/Location.js +78 -0
- package/dist/react/core/service/Service.d.ts +160 -17
- package/dist/react/core/service/Service.js +211 -13
- package/dist/react/core/service-list/ServiceList.d.ts +75 -0
- package/dist/react/core/service-list/ServiceList.js +58 -0
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.js +2 -0
- package/dist/react/location/Location.d.ts +77 -0
- package/dist/react/location/Location.js +89 -0
- package/dist/react/service/Service.d.ts +1036 -31
- package/dist/react/service/Service.js +1060 -47
- package/dist/react/service-list/ServiceList.d.ts +185 -0
- package/dist/react/service-list/ServiceList.js +184 -0
- package/dist/services/index.d.ts +2 -1
- package/dist/services/index.js +2 -1
- package/dist/services/service/service.d.ts +71 -18
- package/dist/services/service/service.js +186 -50
- package/dist/services/service-list/service-list.d.ts +157 -0
- package/dist/services/service-list/service-list.js +274 -0
- package/dist/utils/dateAndTime.d.ts +2 -0
- package/dist/utils/dateAndTime.js +18 -0
- package/dist/utils/money.d.ts +21 -0
- package/dist/utils/money.js +34 -0
- package/package.json +2 -2
- package/cjs/dist/api/query-service/index.d.ts +0 -23
- package/cjs/dist/api/query-service/index.js +0 -41
- package/dist/api/query-service/index.d.ts +0 -23
- package/dist/api/query-service/index.js +0 -41
|
@@ -4,13 +4,18 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import { AsChildChildren } from '@wix/headless-utils/react';
|
|
7
|
-
import
|
|
7
|
+
import { MoneyData } from '@wix/headless-components/react';
|
|
8
|
+
import { services } from '@wix/bookings';
|
|
8
9
|
/**
|
|
9
10
|
* Props for Service.Root component
|
|
10
11
|
*/
|
|
11
12
|
export interface ServiceRootProps {
|
|
12
|
-
children
|
|
13
|
+
children?: React.ReactNode | AsChildChildren<{
|
|
14
|
+
selected: boolean;
|
|
15
|
+
bookable: boolean;
|
|
16
|
+
}>;
|
|
13
17
|
service: services.Service;
|
|
18
|
+
appId?: string;
|
|
14
19
|
asChild?: boolean;
|
|
15
20
|
className?: string;
|
|
16
21
|
}
|
|
@@ -95,6 +100,647 @@ export interface DescriptionProps {
|
|
|
95
100
|
* ```
|
|
96
101
|
*/
|
|
97
102
|
export declare const Description: React.ForwardRefExoticComponent<DescriptionProps & React.RefAttributes<HTMLElement>>;
|
|
103
|
+
/**
|
|
104
|
+
* Props for Service Price component
|
|
105
|
+
*/
|
|
106
|
+
export interface PriceProps {
|
|
107
|
+
asChild?: boolean;
|
|
108
|
+
children?: AsChildChildren<{
|
|
109
|
+
servicePayment: services.Payment | undefined;
|
|
110
|
+
rateType: services.Payment['rateType'] | undefined;
|
|
111
|
+
money: MoneyData | null;
|
|
112
|
+
minPrice: MoneyData | null;
|
|
113
|
+
maxPrice: MoneyData | null;
|
|
114
|
+
priceDescription: string | null;
|
|
115
|
+
hasAddOns: boolean;
|
|
116
|
+
hasPricingPlans: boolean;
|
|
117
|
+
}>;
|
|
118
|
+
className?: string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Displays the service price using the Money component with customizable rendering.
|
|
122
|
+
* Renders different defaults based on rate type:
|
|
123
|
+
* - FIXED: Shows formatted price (e.g., '$50.00')
|
|
124
|
+
* - VARIED: Shows price range (e.g., '$30.00 - $50.00')
|
|
125
|
+
* - CUSTOM: Shows custom description text
|
|
126
|
+
* - NO_FEE: Shows zero price (e.g., '$0.00')
|
|
127
|
+
*
|
|
128
|
+
* @component
|
|
129
|
+
* @example
|
|
130
|
+
* ```tsx
|
|
131
|
+
* // Default usage - renders based on rate type
|
|
132
|
+
* <Service.Price className="text-3xl font-bold" />
|
|
133
|
+
*
|
|
134
|
+
* // Custom rendering with full price data
|
|
135
|
+
* <Service.Price asChild>
|
|
136
|
+
* {({ rateType, money, minPrice, maxPrice, priceDescription, hasAddOns, hasPricingPlans }) => (
|
|
137
|
+
* <div>
|
|
138
|
+
* {rateType === 'FIXED' && money && <Money money={money} />}
|
|
139
|
+
* {rateType === 'VARIED' && minPrice && maxPrice && (
|
|
140
|
+
* <span><Money money={minPrice} /> - <Money money={maxPrice} /></span>
|
|
141
|
+
* )}
|
|
142
|
+
* {rateType === 'CUSTOM' && priceDescription && <span>{priceDescription}</span>}
|
|
143
|
+
* {rateType === 'NO_FEE' && money && <Money money={money} />}
|
|
144
|
+
* {hasPricingPlans && <span>Pricing plans available</span>}
|
|
145
|
+
* </div>
|
|
146
|
+
* )}
|
|
147
|
+
* </Service.Price>
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
export declare const Price: React.ForwardRefExoticComponent<PriceProps & React.RefAttributes<HTMLElement>>;
|
|
151
|
+
/**
|
|
152
|
+
* Props for Service Tagline component
|
|
153
|
+
*/
|
|
154
|
+
export interface TaglineProps {
|
|
155
|
+
asChild?: boolean;
|
|
156
|
+
children?: AsChildChildren<{
|
|
157
|
+
tagline: string;
|
|
158
|
+
}>;
|
|
159
|
+
className?: string;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Displays the service tagline with customizable rendering.
|
|
163
|
+
*
|
|
164
|
+
* @component
|
|
165
|
+
* @example
|
|
166
|
+
* ```tsx
|
|
167
|
+
* // Default usage
|
|
168
|
+
* <Service.Tagline className="text-lg text-secondary-foreground" />
|
|
169
|
+
* ```
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```tsx
|
|
173
|
+
* // asChild with primitive element
|
|
174
|
+
* <Service.Tagline asChild>
|
|
175
|
+
* <p className="italic text-secondary-foreground" />
|
|
176
|
+
* </Service.Tagline>
|
|
177
|
+
* ```
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```tsx
|
|
181
|
+
* // asChild with custom component accessing tagline data
|
|
182
|
+
* <Service.Tagline asChild>
|
|
183
|
+
* {React.forwardRef(({tagline, ...props}, ref) => (
|
|
184
|
+
* <blockquote ref={ref} {...props} className="border-l-4 pl-4">
|
|
185
|
+
* "{tagline}"
|
|
186
|
+
* </blockquote>
|
|
187
|
+
* ))}
|
|
188
|
+
* </Service.Tagline>
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
export declare const Tagline: React.ForwardRefExoticComponent<TaglineProps & React.RefAttributes<HTMLElement>>;
|
|
192
|
+
/**
|
|
193
|
+
* Props for Service DurationInMinutes component
|
|
194
|
+
*/
|
|
195
|
+
export interface DurationInMinutesProps {
|
|
196
|
+
asChild?: boolean;
|
|
197
|
+
children?: AsChildChildren<{
|
|
198
|
+
duration: number;
|
|
199
|
+
}>;
|
|
200
|
+
className?: string;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Displays the service duration in minutes (raw number) with customizable rendering.
|
|
204
|
+
* Returns the duration as a numeric value representing minutes.
|
|
205
|
+
*
|
|
206
|
+
* @component
|
|
207
|
+
* @example
|
|
208
|
+
* ```tsx
|
|
209
|
+
* // Default usage - displays raw minutes
|
|
210
|
+
* <Service.DurationInMinutes className="text-base text-secondary-foreground" />
|
|
211
|
+
* ```
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```tsx
|
|
215
|
+
* // asChild with primitive element
|
|
216
|
+
* <Service.DurationInMinutes asChild>
|
|
217
|
+
* <span className="font-semibold" />
|
|
218
|
+
* </Service.DurationInMinutes>
|
|
219
|
+
* ```
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```tsx
|
|
223
|
+
* // asChild with custom component to format duration
|
|
224
|
+
* <Service.DurationInMinutes asChild>
|
|
225
|
+
* {React.forwardRef(({duration, ...props}, ref) => (
|
|
226
|
+
* <span ref={ref} {...props}>
|
|
227
|
+
* {duration} minutes
|
|
228
|
+
* </span>
|
|
229
|
+
* ))}
|
|
230
|
+
* </Service.DurationInMinutes>
|
|
231
|
+
* ```
|
|
232
|
+
*/
|
|
233
|
+
export declare const DurationInMinutes: React.ForwardRefExoticComponent<DurationInMinutesProps & React.RefAttributes<HTMLElement>>;
|
|
234
|
+
/**
|
|
235
|
+
* Props for Service Type component
|
|
236
|
+
*/
|
|
237
|
+
export interface TypeProps {
|
|
238
|
+
asChild?: boolean;
|
|
239
|
+
children?: AsChildChildren<{
|
|
240
|
+
type: string;
|
|
241
|
+
}>;
|
|
242
|
+
className?: string;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Displays the service type (APPOINTMENT, CLASS, COURSE, etc.) with customizable rendering.
|
|
246
|
+
*
|
|
247
|
+
* @component
|
|
248
|
+
* @example
|
|
249
|
+
* ```tsx
|
|
250
|
+
* // Default usage
|
|
251
|
+
* <Service.Type className="text-sm text-secondary-foreground uppercase" />
|
|
252
|
+
* ```
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```tsx
|
|
256
|
+
* // asChild with badge styling
|
|
257
|
+
* <Service.Type asChild>
|
|
258
|
+
* <span className="px-2 py-1 bg-secondary text-secondary-foreground rounded-full text-xs" />
|
|
259
|
+
* </Service.Type>
|
|
260
|
+
* ```
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```tsx
|
|
264
|
+
* // asChild with custom component to format type
|
|
265
|
+
* <Service.Type asChild>
|
|
266
|
+
* {React.forwardRef(({type, ...props}, ref) => {
|
|
267
|
+
* const label = {
|
|
268
|
+
* APPOINTMENT: '1-on-1',
|
|
269
|
+
* CLASS: 'Group Class',
|
|
270
|
+
* COURSE: 'Course',
|
|
271
|
+
* }[type] || type;
|
|
272
|
+
* return <span ref={ref} {...props}>{label}</span>;
|
|
273
|
+
* })}
|
|
274
|
+
* </Service.Type>
|
|
275
|
+
* ```
|
|
276
|
+
*/
|
|
277
|
+
export declare const Type: React.ForwardRefExoticComponent<TypeProps & React.RefAttributes<HTMLElement>>;
|
|
278
|
+
/**
|
|
279
|
+
* Props for Service Category component
|
|
280
|
+
*/
|
|
281
|
+
export interface CategoryProps {
|
|
282
|
+
asChild?: boolean;
|
|
283
|
+
children?: AsChildChildren<{
|
|
284
|
+
category: {
|
|
285
|
+
name?: string;
|
|
286
|
+
_id?: string;
|
|
287
|
+
};
|
|
288
|
+
}>;
|
|
289
|
+
className?: string;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Displays the service category with customizable rendering.
|
|
293
|
+
*
|
|
294
|
+
* @component
|
|
295
|
+
* @example
|
|
296
|
+
* ```tsx
|
|
297
|
+
* // Default usage
|
|
298
|
+
* <Service.Category className="text-sm text-secondary-foreground" />
|
|
299
|
+
* ```
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* ```tsx
|
|
303
|
+
* // asChild with link styling
|
|
304
|
+
* <Service.Category asChild>
|
|
305
|
+
* <a href="#" className="text-primary hover:underline" />
|
|
306
|
+
* </Service.Category>
|
|
307
|
+
* ```
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* ```tsx
|
|
311
|
+
* // asChild with custom component accessing category data
|
|
312
|
+
* <Service.Category asChild>
|
|
313
|
+
* {React.forwardRef(({category, ...props}, ref) => (
|
|
314
|
+
* <a
|
|
315
|
+
* ref={ref}
|
|
316
|
+
* {...props}
|
|
317
|
+
* href={`/category/${category._id}`}
|
|
318
|
+
* className="text-primary hover:underline"
|
|
319
|
+
* >
|
|
320
|
+
* {category.name}
|
|
321
|
+
* </a>
|
|
322
|
+
* ))}
|
|
323
|
+
* </Service.Category>
|
|
324
|
+
* ```
|
|
325
|
+
*/
|
|
326
|
+
export declare const Category: React.ForwardRefExoticComponent<CategoryProps & React.RefAttributes<HTMLElement>>;
|
|
327
|
+
/**
|
|
328
|
+
* Type for location
|
|
329
|
+
*/
|
|
330
|
+
type LocationType = NonNullable<services.Service['locations']>[number] & {
|
|
331
|
+
id: string;
|
|
332
|
+
};
|
|
333
|
+
/**
|
|
334
|
+
* Props for Service Locations component (Container Level)
|
|
335
|
+
*/
|
|
336
|
+
export interface LocationsProps {
|
|
337
|
+
asChild?: boolean;
|
|
338
|
+
children?: React.ReactNode;
|
|
339
|
+
className?: string;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Container for service locations list (Container Level).
|
|
343
|
+
* Follows the 3-level List/Options/Repeater pattern.
|
|
344
|
+
* Provides context and doesn't render when there are no locations.
|
|
345
|
+
*
|
|
346
|
+
* @component
|
|
347
|
+
* @example
|
|
348
|
+
* ```tsx
|
|
349
|
+
* // Basic usage with 3-level pattern
|
|
350
|
+
* <Service.Locations>
|
|
351
|
+
* <Service.Locations.List emptyState={<div>No locations available</div>}>
|
|
352
|
+
* <Service.Locations.LocationRepeater>
|
|
353
|
+
* {({ location }) => (
|
|
354
|
+
* <div>
|
|
355
|
+
* <span>{location.name}</span>
|
|
356
|
+
* <Address.Root address={location.address}>
|
|
357
|
+
* <Address.Formatted />
|
|
358
|
+
* </Address.Root>
|
|
359
|
+
* </div>
|
|
360
|
+
* )}
|
|
361
|
+
* </Service.Locations.LocationRepeater>
|
|
362
|
+
* </Service.Locations.List>
|
|
363
|
+
* </Service.Locations>
|
|
364
|
+
*
|
|
365
|
+
* // With asChild pattern for custom container
|
|
366
|
+
* <Service.Locations asChild>
|
|
367
|
+
* <ul className="locations-list">
|
|
368
|
+
* <Service.Locations.List>
|
|
369
|
+
* <Service.Locations.LocationRepeater>
|
|
370
|
+
* {({ location }) => <li>{location.name}</li>}
|
|
371
|
+
* </Service.Locations.LocationRepeater>
|
|
372
|
+
* </Service.Locations.List>
|
|
373
|
+
* </ul>
|
|
374
|
+
* </Service.Locations>
|
|
375
|
+
* ```
|
|
376
|
+
*/
|
|
377
|
+
declare const LocationsBase: React.ForwardRefExoticComponent<LocationsProps & React.RefAttributes<HTMLElement>>;
|
|
378
|
+
/**
|
|
379
|
+
* Props for Service Locations.List component (List Container Level)
|
|
380
|
+
*/
|
|
381
|
+
export interface LocationsListProps {
|
|
382
|
+
children?: React.ReactNode;
|
|
383
|
+
emptyState?: React.ReactNode;
|
|
384
|
+
className?: string;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* List container for locations with empty state support (List Container Level).
|
|
388
|
+
* Renders emptyState when no locations, otherwise renders children.
|
|
389
|
+
*
|
|
390
|
+
* @component
|
|
391
|
+
* @example
|
|
392
|
+
* ```tsx
|
|
393
|
+
* <Service.Locations.List emptyState={<div>No locations available</div>}>
|
|
394
|
+
* <Service.Locations.LocationRepeater />
|
|
395
|
+
* </Service.Locations.List>
|
|
396
|
+
* ```
|
|
397
|
+
*/
|
|
398
|
+
export declare const LocationsList: React.ForwardRefExoticComponent<LocationsListProps & React.RefAttributes<HTMLElement>>;
|
|
399
|
+
/**
|
|
400
|
+
* Render props for LocationRepeater asChild pattern
|
|
401
|
+
*/
|
|
402
|
+
export interface LocationRepeaterRenderProps {
|
|
403
|
+
items: LocationType[];
|
|
404
|
+
itemWrapper: (props: {
|
|
405
|
+
item: LocationType;
|
|
406
|
+
index: number;
|
|
407
|
+
children: React.ReactNode;
|
|
408
|
+
}) => React.ReactNode;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Props for Service Locations.LocationRepeater component
|
|
412
|
+
*/
|
|
413
|
+
export interface LocationRepeaterProps {
|
|
414
|
+
children?: React.ReactNode | ((props: LocationRepeaterRenderProps) => React.ReactNode);
|
|
415
|
+
asChild?: boolean;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Repeater component that renders Location.Root for each location.
|
|
419
|
+
* Supports asChild pattern for custom rendering.
|
|
420
|
+
*
|
|
421
|
+
* @component
|
|
422
|
+
* @example
|
|
423
|
+
* ```tsx
|
|
424
|
+
* // Standard usage - renders Location.Root for each location
|
|
425
|
+
* <Service.Locations.LocationRepeater>
|
|
426
|
+
* <span className="location-badge">📍</span>
|
|
427
|
+
* </Service.Locations.LocationRepeater>
|
|
428
|
+
*
|
|
429
|
+
* // AsChild usage with custom numbered list
|
|
430
|
+
* <Service.Locations.LocationRepeater asChild>
|
|
431
|
+
* {({ items, itemWrapper }) => (
|
|
432
|
+
* <ol>
|
|
433
|
+
* {items.map((item, index) => (
|
|
434
|
+
* <li key={item.id}>
|
|
435
|
+
* {index + 1}. {itemWrapper({ item, index, children: null })}
|
|
436
|
+
* </li>
|
|
437
|
+
* ))}
|
|
438
|
+
* </ol>
|
|
439
|
+
* )}
|
|
440
|
+
* </Service.Locations.LocationRepeater>
|
|
441
|
+
* ```
|
|
442
|
+
*/
|
|
443
|
+
export declare const LocationRepeater: React.ForwardRefExoticComponent<LocationRepeaterProps & React.RefAttributes<HTMLElement>>;
|
|
444
|
+
/**
|
|
445
|
+
* Type for staff member
|
|
446
|
+
*/
|
|
447
|
+
type StaffMemberType = {
|
|
448
|
+
name?: string;
|
|
449
|
+
_id?: string;
|
|
450
|
+
id: string;
|
|
451
|
+
};
|
|
452
|
+
/**
|
|
453
|
+
* Props for Service StaffMembers component (Container Level)
|
|
454
|
+
*/
|
|
455
|
+
export interface StaffMembersProps {
|
|
456
|
+
asChild?: boolean;
|
|
457
|
+
children?: React.ReactNode;
|
|
458
|
+
className?: string;
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Container for service staff members list (Container Level).
|
|
462
|
+
* Follows the 3-level List/Options/Repeater pattern.
|
|
463
|
+
* Provides context and doesn't render when there are no staff members.
|
|
464
|
+
*
|
|
465
|
+
* @component
|
|
466
|
+
* @example
|
|
467
|
+
* ```tsx
|
|
468
|
+
* // Basic usage with 3-level pattern
|
|
469
|
+
* <Service.StaffMembers>
|
|
470
|
+
* <Service.StaffMembers.List emptyState={<div>No staff assigned</div>}>
|
|
471
|
+
* <Service.StaffMembers.StaffMemberRepeater>
|
|
472
|
+
* {({ staffMember }) => (
|
|
473
|
+
* <div className="staff-card">
|
|
474
|
+
* <img src={staffMember.mainMedia?.image} alt={staffMember.name} />
|
|
475
|
+
* <span>{staffMember.name}</span>
|
|
476
|
+
* </div>
|
|
477
|
+
* )}
|
|
478
|
+
* </Service.StaffMembers.StaffMemberRepeater>
|
|
479
|
+
* </Service.StaffMembers.List>
|
|
480
|
+
* </Service.StaffMembers>
|
|
481
|
+
*
|
|
482
|
+
* // With asChild pattern for custom container
|
|
483
|
+
* <Service.StaffMembers asChild>
|
|
484
|
+
* <ul className="staff-list">
|
|
485
|
+
* <Service.StaffMembers.List>
|
|
486
|
+
* <Service.StaffMembers.StaffMemberRepeater>
|
|
487
|
+
* {({ staffMember }) => <li>{staffMember.name}</li>}
|
|
488
|
+
* </Service.StaffMembers.StaffMemberRepeater>
|
|
489
|
+
* </Service.StaffMembers.List>
|
|
490
|
+
* </ul>
|
|
491
|
+
* </Service.StaffMembers>
|
|
492
|
+
* ```
|
|
493
|
+
*/
|
|
494
|
+
export declare const StaffMembersBase: React.ForwardRefExoticComponent<StaffMembersProps & React.RefAttributes<HTMLElement>>;
|
|
495
|
+
/**
|
|
496
|
+
* Props for Service StaffMembers.List component (List Container Level)
|
|
497
|
+
*/
|
|
498
|
+
export interface StaffMembersListProps {
|
|
499
|
+
children?: React.ReactNode;
|
|
500
|
+
emptyState?: React.ReactNode;
|
|
501
|
+
className?: string;
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* List container for staff members with empty state support (List Container Level).
|
|
505
|
+
* Renders emptyState when no staff members, otherwise renders children.
|
|
506
|
+
*
|
|
507
|
+
* @component
|
|
508
|
+
* @example
|
|
509
|
+
* ```tsx
|
|
510
|
+
* <Service.StaffMembers.List emptyState={<div>No staff assigned</div>}>
|
|
511
|
+
* <Service.StaffMembers.StaffMemberRepeater />
|
|
512
|
+
* </Service.StaffMembers.List>
|
|
513
|
+
* ```
|
|
514
|
+
*/
|
|
515
|
+
export declare const StaffMembersList: React.ForwardRefExoticComponent<StaffMembersListProps & React.RefAttributes<HTMLElement>>;
|
|
516
|
+
/**
|
|
517
|
+
* Render props for StaffMemberRepeater asChild pattern
|
|
518
|
+
*/
|
|
519
|
+
export interface StaffMemberRepeaterRenderProps {
|
|
520
|
+
items: StaffMemberType[];
|
|
521
|
+
itemWrapper: (props: {
|
|
522
|
+
item: StaffMemberType;
|
|
523
|
+
index: number;
|
|
524
|
+
children: React.ReactNode;
|
|
525
|
+
}) => React.ReactNode;
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Props for Service StaffMembers.StaffMemberRepeater component
|
|
529
|
+
*/
|
|
530
|
+
export interface StaffMemberRepeaterProps {
|
|
531
|
+
children?: React.ReactNode | ((props: StaffMemberRepeaterRenderProps) => React.ReactNode);
|
|
532
|
+
asChild?: boolean;
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Repeater component that renders staff member name for each staff member.
|
|
536
|
+
* Supports asChild pattern for custom rendering.
|
|
537
|
+
*
|
|
538
|
+
* @component
|
|
539
|
+
* @example
|
|
540
|
+
* ```tsx
|
|
541
|
+
* // Standard usage - renders staff member names
|
|
542
|
+
* <Service.StaffMembers.StaffMemberRepeater>
|
|
543
|
+
* <span className="staff-badge">👤</span>
|
|
544
|
+
* </Service.StaffMembers.StaffMemberRepeater>
|
|
545
|
+
*
|
|
546
|
+
* // AsChild usage with custom numbered list
|
|
547
|
+
* <Service.StaffMembers.StaffMemberRepeater asChild>
|
|
548
|
+
* {({ items, itemWrapper }) => (
|
|
549
|
+
* <ol>
|
|
550
|
+
* {items.map((item, index) => (
|
|
551
|
+
* <li key={item.id}>
|
|
552
|
+
* {index + 1}. {itemWrapper({ item, index, children: null })}
|
|
553
|
+
* </li>
|
|
554
|
+
* ))}
|
|
555
|
+
* </ol>
|
|
556
|
+
* )}
|
|
557
|
+
* </Service.StaffMembers.StaffMemberRepeater>
|
|
558
|
+
* ```
|
|
559
|
+
*/
|
|
560
|
+
export declare const StaffMemberRepeater: React.ForwardRefExoticComponent<StaffMemberRepeaterProps & React.RefAttributes<HTMLElement>>;
|
|
561
|
+
/**
|
|
562
|
+
* Props for Service MainMedia component
|
|
563
|
+
*/
|
|
564
|
+
export interface MainMediaProps {
|
|
565
|
+
asChild?: boolean;
|
|
566
|
+
children?: AsChildChildren<{
|
|
567
|
+
media: {
|
|
568
|
+
image?: string;
|
|
569
|
+
};
|
|
570
|
+
}>;
|
|
571
|
+
className?: string;
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* Displays the service main media image using WixMediaImage.
|
|
575
|
+
*
|
|
576
|
+
* @component
|
|
577
|
+
* @example
|
|
578
|
+
* ```tsx
|
|
579
|
+
* // Default usage
|
|
580
|
+
* <Service.MainMedia className="w-full h-64 object-cover rounded-lg" />
|
|
581
|
+
* ```
|
|
582
|
+
*
|
|
583
|
+
* @example
|
|
584
|
+
* ```tsx
|
|
585
|
+
* // asChild with primitive img element
|
|
586
|
+
* <Service.MainMedia asChild>
|
|
587
|
+
* <img className="w-full h-64 object-cover shadow-lg" />
|
|
588
|
+
* </Service.MainMedia>
|
|
589
|
+
* ```
|
|
590
|
+
*
|
|
591
|
+
* @example
|
|
592
|
+
* ```tsx
|
|
593
|
+
* // asChild with custom component accessing media data
|
|
594
|
+
* <Service.MainMedia asChild>
|
|
595
|
+
* {React.forwardRef(({media, ...props}, ref) => (
|
|
596
|
+
* <div ref={ref} {...props} className="relative aspect-video">
|
|
597
|
+
* <WixMediaImage media={media} className="w-full h-full object-cover" />
|
|
598
|
+
* <div className="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/50 p-4">
|
|
599
|
+
* <Service.Name className="text-primary-foreground" />
|
|
600
|
+
* </div>
|
|
601
|
+
* </div>
|
|
602
|
+
* ))}
|
|
603
|
+
* </Service.MainMedia>
|
|
604
|
+
* ```
|
|
605
|
+
*/
|
|
606
|
+
export declare const MainMedia: React.ForwardRefExoticComponent<MainMediaProps & React.RefAttributes<HTMLImageElement>>;
|
|
607
|
+
/**
|
|
608
|
+
* Props for Service CoverMedia component
|
|
609
|
+
*/
|
|
610
|
+
export interface CoverMediaProps {
|
|
611
|
+
asChild?: boolean;
|
|
612
|
+
children?: AsChildChildren<{
|
|
613
|
+
media: {
|
|
614
|
+
image?: string;
|
|
615
|
+
};
|
|
616
|
+
}>;
|
|
617
|
+
className?: string;
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Displays the service cover media image using WixMediaImage.
|
|
621
|
+
* The cover media is typically used as a hero/banner image.
|
|
622
|
+
*
|
|
623
|
+
* @component
|
|
624
|
+
* @example
|
|
625
|
+
* ```tsx
|
|
626
|
+
* // Default usage
|
|
627
|
+
* <Service.CoverMedia className="w-full h-96 object-cover" />
|
|
628
|
+
* ```
|
|
629
|
+
*
|
|
630
|
+
* @example
|
|
631
|
+
* ```tsx
|
|
632
|
+
* // asChild as a background image container
|
|
633
|
+
* <Service.CoverMedia asChild>
|
|
634
|
+
* <div className="w-full h-96 bg-cover bg-center" />
|
|
635
|
+
* </Service.CoverMedia>
|
|
636
|
+
* ```
|
|
637
|
+
*
|
|
638
|
+
* @example
|
|
639
|
+
* ```tsx
|
|
640
|
+
* // asChild with custom component accessing media data
|
|
641
|
+
* <Service.CoverMedia asChild>
|
|
642
|
+
* {React.forwardRef(({media, ...props}, ref) => (
|
|
643
|
+
* <header ref={ref} {...props} className="relative h-96">
|
|
644
|
+
* <WixMediaImage media={media} className="w-full h-full object-cover" />
|
|
645
|
+
* <div className="absolute inset-0 bg-black/40 flex items-center justify-center">
|
|
646
|
+
* <h1 className="text-4xl font-bold text-primary-foreground">
|
|
647
|
+
* <Service.Name />
|
|
648
|
+
* </h1>
|
|
649
|
+
* </div>
|
|
650
|
+
* </header>
|
|
651
|
+
* ))}
|
|
652
|
+
* </Service.CoverMedia>
|
|
653
|
+
* ```
|
|
654
|
+
*/
|
|
655
|
+
export declare const CoverMedia: React.ForwardRefExoticComponent<CoverMediaProps & React.RefAttributes<HTMLImageElement>>;
|
|
656
|
+
/**
|
|
657
|
+
* Props for Service MediaItems component
|
|
658
|
+
*/
|
|
659
|
+
export interface MediaItemsProps {
|
|
660
|
+
children: React.ReactNode;
|
|
661
|
+
infinite?: boolean;
|
|
662
|
+
autoPlay?: {
|
|
663
|
+
direction?: 'forward' | 'backward';
|
|
664
|
+
intervalMs?: number;
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
/**
|
|
668
|
+
* Container for service media items gallery.
|
|
669
|
+
* Renders a MediaGallery.Root with the service media items.
|
|
670
|
+
* Supports autoPlay and infinite scroll options for carousel behavior.
|
|
671
|
+
*
|
|
672
|
+
* @component
|
|
673
|
+
* @example
|
|
674
|
+
* ```tsx
|
|
675
|
+
* // Basic usage with MediaGallery components
|
|
676
|
+
* <Service.MediaItems>
|
|
677
|
+
* <MediaGallery.Thumbnails>
|
|
678
|
+
* <MediaGallery.ThumbnailRepeater>
|
|
679
|
+
* {({ mediaItem, isActive }) => (
|
|
680
|
+
* <img
|
|
681
|
+
* src={mediaItem.url}
|
|
682
|
+
* alt={mediaItem.altText}
|
|
683
|
+
* className={isActive ? 'active' : ''}
|
|
684
|
+
* />
|
|
685
|
+
* )}
|
|
686
|
+
* </MediaGallery.ThumbnailRepeater>
|
|
687
|
+
* </MediaGallery.Thumbnails>
|
|
688
|
+
* </Service.MediaItems>
|
|
689
|
+
*
|
|
690
|
+
* // With autoPlay carousel
|
|
691
|
+
* <Service.MediaItems
|
|
692
|
+
* autoPlay={{ direction: 'forward', intervalMs: 3000 }}
|
|
693
|
+
* infinite
|
|
694
|
+
* >
|
|
695
|
+
* <MediaGallery.MainImage />
|
|
696
|
+
* <MediaGallery.Actions.Previous />
|
|
697
|
+
* <MediaGallery.Actions.Next />
|
|
698
|
+
* </Service.MediaItems>
|
|
699
|
+
*
|
|
700
|
+
* // Full gallery with thumbnails and navigation
|
|
701
|
+
* <Service.MediaItems infinite>
|
|
702
|
+
* <div className="gallery-container">
|
|
703
|
+
* <MediaGallery.MainImage className="main-image" />
|
|
704
|
+
* <div className="controls">
|
|
705
|
+
* <MediaGallery.Actions.Previous>Prev</MediaGallery.Actions.Previous>
|
|
706
|
+
* <MediaGallery.Actions.Next>Next</MediaGallery.Actions.Next>
|
|
707
|
+
* </div>
|
|
708
|
+
* <MediaGallery.Thumbnails className="thumbnails" />
|
|
709
|
+
* </div>
|
|
710
|
+
* </Service.MediaItems>
|
|
711
|
+
* ```
|
|
712
|
+
*/
|
|
713
|
+
export declare const MediaItems: React.ForwardRefExoticComponent<MediaItemsProps & React.RefAttributes<HTMLDivElement>>;
|
|
714
|
+
/**
|
|
715
|
+
* Props for Service Raw component
|
|
716
|
+
*/
|
|
717
|
+
export interface RawProps {
|
|
718
|
+
asChild?: boolean;
|
|
719
|
+
children?: AsChildChildren<{
|
|
720
|
+
service: services.Service;
|
|
721
|
+
isLoading: boolean;
|
|
722
|
+
error: string | null;
|
|
723
|
+
}>;
|
|
724
|
+
className?: string;
|
|
725
|
+
}
|
|
726
|
+
/**
|
|
727
|
+
* Provides direct access to service object. Should be used only in rare cases.
|
|
728
|
+
*
|
|
729
|
+
* @component
|
|
730
|
+
* @example
|
|
731
|
+
* ```tsx
|
|
732
|
+
* <Service.Raw>
|
|
733
|
+
* {({ service, isLoading, error }) => (
|
|
734
|
+
* <div>
|
|
735
|
+
* {isLoading && <div>Loading...</div>}
|
|
736
|
+
* {error && <div>Error: {error}</div>}
|
|
737
|
+
* {service && <pre>{JSON.stringify(service, null, 2)}</pre>}
|
|
738
|
+
* </div>
|
|
739
|
+
* )}
|
|
740
|
+
* </Service.Raw>
|
|
741
|
+
* ```
|
|
742
|
+
*/
|
|
743
|
+
export declare const Raw: React.ForwardRefExoticComponent<RawProps & React.RefAttributes<HTMLElement>>;
|
|
98
744
|
/**
|
|
99
745
|
* Actions namespace with individual action components
|
|
100
746
|
*/
|
|
@@ -104,10 +750,15 @@ export declare namespace Actions {
|
|
|
104
750
|
*/
|
|
105
751
|
interface SelectProps {
|
|
106
752
|
asChild?: boolean;
|
|
107
|
-
children?: React.ReactNode
|
|
753
|
+
children?: React.ReactNode | ((props: {
|
|
754
|
+
bookable: boolean;
|
|
755
|
+
selected: boolean;
|
|
756
|
+
requiresAvailability: boolean;
|
|
757
|
+
onClick: () => void;
|
|
758
|
+
service: services.Service;
|
|
759
|
+
}) => React.ReactNode);
|
|
108
760
|
className?: string;
|
|
109
761
|
label?: string;
|
|
110
|
-
onClicked?: (event: React.MouseEvent<HTMLButtonElement>, service: services.Service) => void;
|
|
111
762
|
}
|
|
112
763
|
/**
|
|
113
764
|
* Select action component - replaces selection with only this service.
|
|
@@ -123,14 +774,13 @@ export declare namespace Actions {
|
|
|
123
774
|
* <Button variant="primary">Select Service</Button>
|
|
124
775
|
* </Service.Actions.Select>
|
|
125
776
|
*
|
|
126
|
-
* //
|
|
127
|
-
* <Service.Actions.Select
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
* <Button variant="primary">Select Service</Button>
|
|
777
|
+
* // Using render prop pattern to access bookable state
|
|
778
|
+
* <Service.Actions.Select>
|
|
779
|
+
* {({ bookable, selected, onClick }) => (
|
|
780
|
+
* <button onClick={onClick} disabled={!bookable}>
|
|
781
|
+
* {selected ? 'Selected' : 'Select Service'}
|
|
782
|
+
* </button>
|
|
783
|
+
* )}
|
|
134
784
|
* </Service.Actions.Select>
|
|
135
785
|
* ```
|
|
136
786
|
*/
|
|
@@ -140,10 +790,15 @@ export declare namespace Actions {
|
|
|
140
790
|
*/
|
|
141
791
|
interface AddProps {
|
|
142
792
|
asChild?: boolean;
|
|
143
|
-
children?: React.ReactNode
|
|
793
|
+
children?: React.ReactNode | ((props: {
|
|
794
|
+
bookable: boolean;
|
|
795
|
+
selected: boolean;
|
|
796
|
+
requiresAvailability: boolean;
|
|
797
|
+
onClick: () => void;
|
|
798
|
+
service: services.Service;
|
|
799
|
+
}) => React.ReactNode);
|
|
144
800
|
className?: string;
|
|
145
801
|
label?: string;
|
|
146
|
-
onClicked?: (event: React.MouseEvent<HTMLButtonElement>, service: services.Service) => void;
|
|
147
802
|
}
|
|
148
803
|
/**
|
|
149
804
|
* Add action component - adds service to selection array.
|
|
@@ -159,13 +814,14 @@ export declare namespace Actions {
|
|
|
159
814
|
* <Button variant="secondary">Add Service</Button>
|
|
160
815
|
* </Service.Actions.Add>
|
|
161
816
|
*
|
|
162
|
-
* //
|
|
163
|
-
* <Service.Actions.Add
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
817
|
+
* // Using render prop pattern to access bookable state
|
|
818
|
+
* <Service.Actions.Add>
|
|
819
|
+
* {({ bookable, selected, onClick }) => (
|
|
820
|
+
* <button onClick={onClick} disabled={!bookable}>
|
|
821
|
+
* {selected ? 'Added' : 'Add to Booking'}
|
|
822
|
+
* </button>
|
|
823
|
+
* )}
|
|
824
|
+
* </Service.Actions.Add>
|
|
169
825
|
* ```
|
|
170
826
|
*/
|
|
171
827
|
const Add: React.ForwardRefExoticComponent<AddProps & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -174,10 +830,15 @@ export declare namespace Actions {
|
|
|
174
830
|
*/
|
|
175
831
|
interface RemoveProps {
|
|
176
832
|
asChild?: boolean;
|
|
177
|
-
children?: React.ReactNode
|
|
833
|
+
children?: React.ReactNode | ((props: {
|
|
834
|
+
bookable: boolean;
|
|
835
|
+
selected: boolean;
|
|
836
|
+
requiresAvailability: boolean;
|
|
837
|
+
onClick: () => void;
|
|
838
|
+
service: services.Service;
|
|
839
|
+
}) => React.ReactNode);
|
|
178
840
|
className?: string;
|
|
179
841
|
label?: string;
|
|
180
|
-
onClicked?: (event: React.MouseEvent<HTMLButtonElement>, service: services.Service) => void;
|
|
181
842
|
}
|
|
182
843
|
/**
|
|
183
844
|
* Remove action component - removes service from selection array.
|
|
@@ -193,16 +854,360 @@ export declare namespace Actions {
|
|
|
193
854
|
* <Button variant="destructive">Remove Service</Button>
|
|
194
855
|
* </Service.Actions.Remove>
|
|
195
856
|
*
|
|
196
|
-
* //
|
|
197
|
-
* <Service.Actions.Remove
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
* <IconButton icon="trash" />
|
|
857
|
+
* // Using render prop pattern to access bookable state
|
|
858
|
+
* <Service.Actions.Remove>
|
|
859
|
+
* {({ bookable, selected, onClick }) => (
|
|
860
|
+
* <button onClick={onClick} disabled={!bookable}>
|
|
861
|
+
* Remove Service
|
|
862
|
+
* </button>
|
|
863
|
+
* )}
|
|
204
864
|
* </Service.Actions.Remove>
|
|
205
865
|
* ```
|
|
206
866
|
*/
|
|
207
867
|
const Remove: React.ForwardRefExoticComponent<RemoveProps & React.RefAttributes<HTMLButtonElement>>;
|
|
208
868
|
}
|
|
869
|
+
/**
|
|
870
|
+
* Props for Service.Policy.LatestCancellationInMinutes component
|
|
871
|
+
*/
|
|
872
|
+
export interface PolicyLatestCancellationInMinutesProps {
|
|
873
|
+
asChild?: boolean;
|
|
874
|
+
children?: AsChildChildren<{
|
|
875
|
+
cancellationPolicyEnabled: boolean;
|
|
876
|
+
limitLatestCancellationEnabled: boolean;
|
|
877
|
+
latestCancellationInMinutes: number | undefined;
|
|
878
|
+
}>;
|
|
879
|
+
className?: string;
|
|
880
|
+
}
|
|
881
|
+
/**
|
|
882
|
+
* Displays latestCancellationInMinutes as a raw number.
|
|
883
|
+
* Headless component - contains zero formatting logic.
|
|
884
|
+
*
|
|
885
|
+
* Maps to: bookingPolicy.cancellationPolicy.latestCancellationInMinutes
|
|
886
|
+
*
|
|
887
|
+
* @component
|
|
888
|
+
* @example
|
|
889
|
+
* ```tsx
|
|
890
|
+
* // Default usage - displays raw number only (or null if disabled/undefined)
|
|
891
|
+
* <Service.Policy.LatestCancellationInMinutes className="text-foreground" />
|
|
892
|
+
* // Renders: <span>30</span> or null
|
|
893
|
+
* ```
|
|
894
|
+
*
|
|
895
|
+
* @example
|
|
896
|
+
* ```tsx
|
|
897
|
+
* // Consumer adds formatting logic via asChild
|
|
898
|
+
* <Service.Policy.LatestCancellationInMinutes asChild>
|
|
899
|
+
* {({ cancellationPolicyEnabled, limitLatestCancellationEnabled, latestCancellationInMinutes }) => (
|
|
900
|
+
* cancellationPolicyEnabled ? (
|
|
901
|
+
* <div className="policy-card">
|
|
902
|
+
* {limitLatestCancellationEnabled
|
|
903
|
+
* ? `Cancel up to ${latestCancellationInMinutes} minutes before`
|
|
904
|
+
* : 'Free cancellation anytime'
|
|
905
|
+
* }
|
|
906
|
+
* </div>
|
|
907
|
+
* ) : null
|
|
908
|
+
* )}
|
|
909
|
+
* </Service.Policy.LatestCancellationInMinutes>
|
|
910
|
+
* ```
|
|
911
|
+
*/
|
|
912
|
+
export declare const PolicyLatestCancellationInMinutes: React.ForwardRefExoticComponent<PolicyLatestCancellationInMinutesProps & React.RefAttributes<HTMLElement>>;
|
|
913
|
+
/**
|
|
914
|
+
* Props for Service.Policy.LatestBookingInMinutes component
|
|
915
|
+
*/
|
|
916
|
+
export interface PolicyLatestBookingInMinutesProps {
|
|
917
|
+
asChild?: boolean;
|
|
918
|
+
children?: AsChildChildren<{
|
|
919
|
+
latestBookingPolicyEnabled: boolean;
|
|
920
|
+
latestBookingInMinutes: number | undefined;
|
|
921
|
+
}>;
|
|
922
|
+
className?: string;
|
|
923
|
+
}
|
|
924
|
+
/**
|
|
925
|
+
* Displays latestBookingInMinutes as a raw number.
|
|
926
|
+
* Headless component - contains zero formatting logic.
|
|
927
|
+
*
|
|
928
|
+
* Maps to: bookingPolicy.limitLateBookingPolicy.latestBookingInMinutes
|
|
929
|
+
*
|
|
930
|
+
* @component
|
|
931
|
+
* @example
|
|
932
|
+
* ```tsx
|
|
933
|
+
* // Default usage
|
|
934
|
+
* <Service.Policy.LatestBookingInMinutes className="text-foreground" />
|
|
935
|
+
* ```
|
|
936
|
+
*/
|
|
937
|
+
export declare const PolicyLatestBookingInMinutes: React.ForwardRefExoticComponent<PolicyLatestBookingInMinutesProps & React.RefAttributes<HTMLElement>>;
|
|
938
|
+
/**
|
|
939
|
+
* Props for Service.Policy.EarliestBookingInMinutes component
|
|
940
|
+
*/
|
|
941
|
+
export interface PolicyEarliestBookingInMinutesProps {
|
|
942
|
+
asChild?: boolean;
|
|
943
|
+
children?: AsChildChildren<{
|
|
944
|
+
earliestBookingPolicyEnabled: boolean;
|
|
945
|
+
earliestBookingInMinutes: number | undefined;
|
|
946
|
+
}>;
|
|
947
|
+
className?: string;
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Displays earliestBookingInMinutes as a raw number.
|
|
951
|
+
* Headless component - contains zero formatting logic.
|
|
952
|
+
*
|
|
953
|
+
* Maps to: bookingPolicy.limitEarlyBookingPolicy.earliestBookingInMinutes
|
|
954
|
+
*
|
|
955
|
+
* @component
|
|
956
|
+
* @example
|
|
957
|
+
* ```tsx
|
|
958
|
+
* // Default usage
|
|
959
|
+
* <Service.Policy.EarliestBookingInMinutes className="text-foreground" />
|
|
960
|
+
* ```
|
|
961
|
+
*/
|
|
962
|
+
export declare const PolicyEarliestBookingInMinutes: React.ForwardRefExoticComponent<PolicyEarliestBookingInMinutesProps & React.RefAttributes<HTMLElement>>;
|
|
963
|
+
/**
|
|
964
|
+
* Props for Service.Policy.LatestRescheduleInMinutes component
|
|
965
|
+
*/
|
|
966
|
+
export interface PolicyLatestRescheduleInMinutesProps {
|
|
967
|
+
asChild?: boolean;
|
|
968
|
+
children?: AsChildChildren<{
|
|
969
|
+
reschedulePolicyEnabled: boolean;
|
|
970
|
+
limitLatestRescheduleEnabled: boolean;
|
|
971
|
+
latestRescheduleInMinutes: number | undefined;
|
|
972
|
+
}>;
|
|
973
|
+
className?: string;
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* Displays latestRescheduleInMinutes as a raw number.
|
|
977
|
+
* Headless component - contains zero formatting logic.
|
|
978
|
+
*
|
|
979
|
+
* Maps to: bookingPolicy.reschedulePolicy.latestRescheduleInMinutes
|
|
980
|
+
*
|
|
981
|
+
* @component
|
|
982
|
+
* @example
|
|
983
|
+
* ```tsx
|
|
984
|
+
* // Default usage
|
|
985
|
+
* <Service.Policy.LatestRescheduleInMinutes className="text-foreground" />
|
|
986
|
+
* ```
|
|
987
|
+
*/
|
|
988
|
+
export declare const PolicyLatestRescheduleInMinutes: React.ForwardRefExoticComponent<PolicyLatestRescheduleInMinutesProps & React.RefAttributes<HTMLElement>>;
|
|
989
|
+
/**
|
|
990
|
+
* Props for Service.Policy.WaitlistCapacity component
|
|
991
|
+
*/
|
|
992
|
+
export interface PolicyWaitlistCapacityProps {
|
|
993
|
+
asChild?: boolean;
|
|
994
|
+
children?: AsChildChildren<{
|
|
995
|
+
waitlistPolicyEnabled: boolean;
|
|
996
|
+
waitlistCapacity: number | undefined;
|
|
997
|
+
}>;
|
|
998
|
+
className?: string;
|
|
999
|
+
}
|
|
1000
|
+
/**
|
|
1001
|
+
* Displays waitlist capacity as a raw number.
|
|
1002
|
+
* Headless component - contains zero formatting logic.
|
|
1003
|
+
*
|
|
1004
|
+
* Maps to: bookingPolicy.waitlistPolicy.capacity
|
|
1005
|
+
*
|
|
1006
|
+
* @component
|
|
1007
|
+
* @example
|
|
1008
|
+
* ```tsx
|
|
1009
|
+
* // Default usage
|
|
1010
|
+
* <Service.Policy.WaitlistCapacity className="text-foreground" />
|
|
1011
|
+
* ```
|
|
1012
|
+
*/
|
|
1013
|
+
export declare const PolicyWaitlistCapacity: React.ForwardRefExoticComponent<PolicyWaitlistCapacityProps & React.RefAttributes<HTMLElement>>;
|
|
1014
|
+
/**
|
|
1015
|
+
* Props for Service.Policy.BookAfterStartEnabled component
|
|
1016
|
+
*/
|
|
1017
|
+
export interface PolicyBookAfterStartEnabledProps {
|
|
1018
|
+
asChild?: boolean;
|
|
1019
|
+
children?: AsChildChildren<{
|
|
1020
|
+
bookAfterStartEnabled: boolean;
|
|
1021
|
+
}>;
|
|
1022
|
+
className?: string;
|
|
1023
|
+
}
|
|
1024
|
+
/**
|
|
1025
|
+
* Displays whether booking after start is enabled.
|
|
1026
|
+
* Headless component - contains zero formatting logic.
|
|
1027
|
+
*
|
|
1028
|
+
* Maps to: bookingPolicy.bookAfterStartPolicy.enabled
|
|
1029
|
+
*
|
|
1030
|
+
* @component
|
|
1031
|
+
* @example
|
|
1032
|
+
* ```tsx
|
|
1033
|
+
* // Default usage
|
|
1034
|
+
* <Service.Policy.BookAfterStartEnabled className="text-foreground" />
|
|
1035
|
+
* ```
|
|
1036
|
+
*/
|
|
1037
|
+
export declare const PolicyBookAfterStartEnabled: React.ForwardRefExoticComponent<PolicyBookAfterStartEnabledProps & React.RefAttributes<HTMLElement>>;
|
|
1038
|
+
/**
|
|
1039
|
+
* Props for Service.Policy.MaxParticipantsPerBooking component
|
|
1040
|
+
*/
|
|
1041
|
+
export interface PolicyMaxParticipantsPerBookingProps {
|
|
1042
|
+
asChild?: boolean;
|
|
1043
|
+
children?: AsChildChildren<{
|
|
1044
|
+
maxParticipantsPerBooking: number | undefined;
|
|
1045
|
+
}>;
|
|
1046
|
+
className?: string;
|
|
1047
|
+
}
|
|
1048
|
+
/**
|
|
1049
|
+
* Displays maximum participants per booking as a raw number.
|
|
1050
|
+
* Headless component - contains zero formatting logic.
|
|
1051
|
+
*
|
|
1052
|
+
* Maps to: bookingPolicy.participantsPolicy.maxParticipantsPerBooking
|
|
1053
|
+
*
|
|
1054
|
+
* @component
|
|
1055
|
+
* @example
|
|
1056
|
+
* ```tsx
|
|
1057
|
+
* // Default usage
|
|
1058
|
+
* <Service.Policy.MaxParticipantsPerBooking className="text-foreground" />
|
|
1059
|
+
* ```
|
|
1060
|
+
*/
|
|
1061
|
+
export declare const PolicyMaxParticipantsPerBooking: React.ForwardRefExoticComponent<PolicyMaxParticipantsPerBookingProps & React.RefAttributes<HTMLElement>>;
|
|
1062
|
+
/**
|
|
1063
|
+
* Policy namespace containing all policy sub-components
|
|
1064
|
+
*/
|
|
1065
|
+
export declare namespace Policy {
|
|
1066
|
+
const LatestCancellationInMinutes: React.ForwardRefExoticComponent<PolicyLatestCancellationInMinutesProps & React.RefAttributes<HTMLElement>>;
|
|
1067
|
+
const LatestBookingInMinutes: React.ForwardRefExoticComponent<PolicyLatestBookingInMinutesProps & React.RefAttributes<HTMLElement>>;
|
|
1068
|
+
const EarliestBookingInMinutes: React.ForwardRefExoticComponent<PolicyEarliestBookingInMinutesProps & React.RefAttributes<HTMLElement>>;
|
|
1069
|
+
const LatestRescheduleInMinutes: React.ForwardRefExoticComponent<PolicyLatestRescheduleInMinutesProps & React.RefAttributes<HTMLElement>>;
|
|
1070
|
+
const WaitlistCapacity: React.ForwardRefExoticComponent<PolicyWaitlistCapacityProps & React.RefAttributes<HTMLElement>>;
|
|
1071
|
+
const BookAfterStartEnabled: React.ForwardRefExoticComponent<PolicyBookAfterStartEnabledProps & React.RefAttributes<HTMLElement>>;
|
|
1072
|
+
const MaxParticipantsPerBooking: React.ForwardRefExoticComponent<PolicyMaxParticipantsPerBookingProps & React.RefAttributes<HTMLElement>>;
|
|
1073
|
+
}
|
|
1074
|
+
/**
|
|
1075
|
+
* Props for Service.Schedule.FirstSessionStart component
|
|
1076
|
+
*/
|
|
1077
|
+
export interface ScheduleFirstSessionStartProps {
|
|
1078
|
+
asChild?: boolean;
|
|
1079
|
+
children?: AsChildChildren<{
|
|
1080
|
+
firstSessionStart: Date | undefined;
|
|
1081
|
+
}>;
|
|
1082
|
+
className?: string;
|
|
1083
|
+
}
|
|
1084
|
+
/**
|
|
1085
|
+
* Displays the first session start date as a raw Date value.
|
|
1086
|
+
* Headless component - contains zero formatting logic.
|
|
1087
|
+
*
|
|
1088
|
+
* @component
|
|
1089
|
+
* @example
|
|
1090
|
+
* ```tsx
|
|
1091
|
+
* // Default usage - displays ISO string
|
|
1092
|
+
* <Service.Schedule.FirstSessionStart className="text-foreground" />
|
|
1093
|
+
*
|
|
1094
|
+
* // With custom formatting
|
|
1095
|
+
* <Service.Schedule.FirstSessionStart asChild>
|
|
1096
|
+
* {({ firstSessionStart }) => (
|
|
1097
|
+
* firstSessionStart ? (
|
|
1098
|
+
* <span>Starts: {formatDate(firstSessionStart)}</span>
|
|
1099
|
+
* ) : null
|
|
1100
|
+
* )}
|
|
1101
|
+
* </Service.Schedule.FirstSessionStart>
|
|
1102
|
+
* ```
|
|
1103
|
+
*/
|
|
1104
|
+
export declare const ScheduleFirstSessionStart: React.ForwardRefExoticComponent<ScheduleFirstSessionStartProps & React.RefAttributes<HTMLElement>>;
|
|
1105
|
+
/**
|
|
1106
|
+
* Props for Service.Schedule.LastSessionEnd component
|
|
1107
|
+
*/
|
|
1108
|
+
export interface ScheduleLastSessionEndProps {
|
|
1109
|
+
asChild?: boolean;
|
|
1110
|
+
children?: AsChildChildren<{
|
|
1111
|
+
lastSessionEnd: Date | undefined;
|
|
1112
|
+
}>;
|
|
1113
|
+
className?: string;
|
|
1114
|
+
}
|
|
1115
|
+
/**
|
|
1116
|
+
* Displays the last session end date as a raw Date value.
|
|
1117
|
+
* Headless component - contains zero formatting logic.
|
|
1118
|
+
*
|
|
1119
|
+
* @component
|
|
1120
|
+
* @example
|
|
1121
|
+
* ```tsx
|
|
1122
|
+
* // Default usage - displays ISO string
|
|
1123
|
+
* <Service.Schedule.LastSessionEnd className="text-foreground" />
|
|
1124
|
+
*
|
|
1125
|
+
* // With custom formatting
|
|
1126
|
+
* <Service.Schedule.LastSessionEnd asChild>
|
|
1127
|
+
* {({ lastSessionEnd }) => (
|
|
1128
|
+
* lastSessionEnd ? (
|
|
1129
|
+
* <span>Ends: {formatDate(lastSessionEnd)}</span>
|
|
1130
|
+
* ) : null
|
|
1131
|
+
* )}
|
|
1132
|
+
* </Service.Schedule.LastSessionEnd>
|
|
1133
|
+
* ```
|
|
1134
|
+
*/
|
|
1135
|
+
export declare const ScheduleLastSessionEnd: React.ForwardRefExoticComponent<ScheduleLastSessionEndProps & React.RefAttributes<HTMLElement>>;
|
|
1136
|
+
/**
|
|
1137
|
+
* Props for Service.Schedule.SessionDuration component
|
|
1138
|
+
*/
|
|
1139
|
+
export interface ScheduleSessionDurationProps {
|
|
1140
|
+
asChild?: boolean;
|
|
1141
|
+
children?: AsChildChildren<{
|
|
1142
|
+
sessionDuration: number | undefined;
|
|
1143
|
+
}>;
|
|
1144
|
+
className?: string;
|
|
1145
|
+
}
|
|
1146
|
+
/**
|
|
1147
|
+
* Displays the session duration in minutes as a raw number.
|
|
1148
|
+
* Headless component - contains zero formatting logic.
|
|
1149
|
+
*
|
|
1150
|
+
* @component
|
|
1151
|
+
* @example
|
|
1152
|
+
* ```tsx
|
|
1153
|
+
* // Default usage - displays raw minutes
|
|
1154
|
+
* <Service.Schedule.SessionDuration className="text-foreground" />
|
|
1155
|
+
*
|
|
1156
|
+
* // With custom formatting
|
|
1157
|
+
* <Service.Schedule.SessionDuration asChild>
|
|
1158
|
+
* {({ sessionDuration }) => (
|
|
1159
|
+
* sessionDuration ? (
|
|
1160
|
+
* <span>{formatDuration(sessionDuration)}</span>
|
|
1161
|
+
* ) : null
|
|
1162
|
+
* )}
|
|
1163
|
+
* </Service.Schedule.SessionDuration>
|
|
1164
|
+
* ```
|
|
1165
|
+
*/
|
|
1166
|
+
export declare const ScheduleSessionDuration: React.ForwardRefExoticComponent<ScheduleSessionDurationProps & React.RefAttributes<HTMLElement>>;
|
|
1167
|
+
/**
|
|
1168
|
+
* Schedule namespace containing all schedule sub-components
|
|
1169
|
+
*/
|
|
1170
|
+
export declare namespace Schedule {
|
|
1171
|
+
const FirstSessionStart: React.ForwardRefExoticComponent<ScheduleFirstSessionStartProps & React.RefAttributes<HTMLElement>>;
|
|
1172
|
+
const LastSessionEnd: React.ForwardRefExoticComponent<ScheduleLastSessionEndProps & React.RefAttributes<HTMLElement>>;
|
|
1173
|
+
const SessionDuration: React.ForwardRefExoticComponent<ScheduleSessionDurationProps & React.RefAttributes<HTMLElement>>;
|
|
1174
|
+
}
|
|
1175
|
+
/**
|
|
1176
|
+
* Props for Service DefaultCapacity component
|
|
1177
|
+
*/
|
|
1178
|
+
export interface DefaultCapacityProps {
|
|
1179
|
+
asChild?: boolean;
|
|
1180
|
+
children?: AsChildChildren<{
|
|
1181
|
+
defaultCapacity: number;
|
|
1182
|
+
isClassOrCourse: boolean;
|
|
1183
|
+
}>;
|
|
1184
|
+
className?: string;
|
|
1185
|
+
}
|
|
1186
|
+
/**
|
|
1187
|
+
* Displays the service default capacity with customizable rendering.
|
|
1188
|
+
* Only renders for CLASS or COURSE service types.
|
|
1189
|
+
*
|
|
1190
|
+
* @component
|
|
1191
|
+
* @example
|
|
1192
|
+
* ```tsx
|
|
1193
|
+
* // Default usage
|
|
1194
|
+
* <Service.DefaultCapacity className="text-sm" />
|
|
1195
|
+
*
|
|
1196
|
+
* // asChild with custom component
|
|
1197
|
+
* <Service.DefaultCapacity asChild>
|
|
1198
|
+
* {({ defaultCapacity, isClassOrCourse }) => isClassOrCourse ? (
|
|
1199
|
+
* <span>Max participants: {defaultCapacity}</span>
|
|
1200
|
+
* ) : null}
|
|
1201
|
+
* </Service.DefaultCapacity>
|
|
1202
|
+
* ```
|
|
1203
|
+
*/
|
|
1204
|
+
export declare const DefaultCapacity: React.ForwardRefExoticComponent<DefaultCapacityProps & React.RefAttributes<HTMLElement>>;
|
|
1205
|
+
export declare const Locations: typeof LocationsBase & {
|
|
1206
|
+
List: typeof LocationsList;
|
|
1207
|
+
LocationRepeater: typeof LocationRepeater;
|
|
1208
|
+
};
|
|
1209
|
+
export declare const StaffMembers: typeof StaffMembersBase & {
|
|
1210
|
+
List: typeof StaffMembersList;
|
|
1211
|
+
StaffMemberRepeater: typeof StaffMemberRepeater;
|
|
1212
|
+
};
|
|
1213
|
+
export {};
|