@riverbankcms/sdk 0.67.0 → 0.68.0

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 (88) hide show
  1. package/README.md +21 -11
  2. package/dist/_dts/api/src/aiPlayground.d.ts +62 -14
  3. package/dist/_dts/api/src/billing.d.ts +7 -40
  4. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -1
  5. package/dist/_dts/api/src/bookingOperations.d.ts +32 -1
  6. package/dist/_dts/api/src/endpoints.d.ts +7 -0
  7. package/dist/_dts/api/src/public/types.d.ts +1 -1
  8. package/dist/_dts/billing/src/components/index.d.ts +426 -0
  9. package/dist/_dts/blocks/src/PageRenderer.d.ts +4 -0
  10. package/dist/_dts/blocks/src/client.d.ts +6 -0
  11. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableDates.d.ts +1 -0
  12. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableSlots.d.ts +3 -1
  13. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +140 -0
  14. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +2 -0
  15. package/dist/_dts/blocks/src/system/runtime/hooks/useVisibleTabPolling.d.ts +10 -0
  16. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.default-ui.d.ts +8 -0
  17. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +484 -0
  18. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +5 -2
  19. package/dist/_dts/sdk/src/bookings/index.d.ts +5 -2
  20. package/dist/_dts/sdk/src/bookings/types.d.ts +2 -0
  21. package/dist/_dts/sdk/src/cli/commands/push/scopes/commandBackedDatedOfferingScope.d.ts +32 -0
  22. package/dist/_dts/sdk/src/cli/commands/push/scopes/types.d.ts +5 -1
  23. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +41 -11
  24. package/dist/_dts/sdk/src/cli/site-commands/commandRuntimeCompat.d.ts +21 -0
  25. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +27 -0
  26. package/dist/_dts/sdk/src/cli/site-commands/datedOfferingCommands.d.ts +56 -0
  27. package/dist/_dts/sdk/src/cli/site-commands/entryCommands.d.ts +3 -1
  28. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +7 -1
  29. package/dist/_dts/sdk/src/cli/site-commands/formCommands.d.ts +4 -8
  30. package/dist/_dts/sdk/src/cli/site-commands/index.d.ts +1 -0
  31. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +4 -8
  32. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +4 -8
  33. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +14 -68
  34. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionPlan.d.ts +8 -0
  35. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionTypes.d.ts +97 -0
  36. package/dist/_dts/sdk/src/cli/site-commands/residualSettingsTrimming.d.ts +15 -0
  37. package/dist/_dts/sdk/src/cli/sync/index.d.ts +1 -0
  38. package/dist/_dts/sdk/src/cli/sync/syncResultAggregation.d.ts +4 -0
  39. package/dist/_dts/sdk/src/rendering/overrides.d.ts +2 -0
  40. package/dist/_dts/sdk/src/theme-bridge/ThemeBridgeProvider.d.ts +4 -4
  41. package/dist/_dts/sdk/src/theme-bridge/generateCssVars.d.ts +4 -12
  42. package/dist/_dts/sdk/src/theme-bridge/index.d.ts +1 -1
  43. package/dist/_dts/sdk/src/theme-bridge/types.d.ts +17 -9
  44. package/dist/_dts/sdk/src/version.d.ts +1 -1
  45. package/dist/_dts/site-commands/src/commands.d.ts +228 -1
  46. package/dist/_dts/site-commands/src/domain.d.ts +1 -1
  47. package/dist/_dts/site-commands/src/index.d.ts +1 -0
  48. package/dist/_dts/site-commands/src/metadata.d.ts +66 -1
  49. package/dist/_dts/site-commands/src/refContributions.d.ts +1 -0
  50. package/dist/_dts/site-commands/src/refs.d.ts +7 -1
  51. package/dist/_dts/{sdk/src/cli/merge-remote → site-commands/src}/stableJson.d.ts +2 -0
  52. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  53. package/dist/_dts/theme-core/src/index.d.ts +1 -1
  54. package/dist/_dts/theme-core/src/runtime/buildThemeRuntimeFromBridge.d.ts +30 -23
  55. package/dist/cli/index.mjs +1699 -766
  56. package/dist/client/bookings.mjs +5107 -3348
  57. package/dist/client/client.mjs +4004 -3522
  58. package/dist/client/hooks.mjs +14 -0
  59. package/dist/client/rendering/client.mjs +4185 -3721
  60. package/dist/client/rendering/islands.mjs +4317 -3853
  61. package/dist/client/rendering.mjs +4076 -3592
  62. package/dist/preview-next/before-render.mjs +14 -0
  63. package/dist/preview-next/client/runtime.mjs +2770 -2268
  64. package/dist/preview-next/middleware.mjs +14 -0
  65. package/dist/server/components.mjs +172 -58
  66. package/dist/server/config-validation.mjs +14 -0
  67. package/dist/server/config.mjs +14 -0
  68. package/dist/server/data.mjs +14 -0
  69. package/dist/server/index.mjs +15 -1
  70. package/dist/server/next.mjs +166 -52
  71. package/dist/server/prebuild.mjs +1 -1
  72. package/dist/server/rendering/server.mjs +174 -58
  73. package/dist/server/rendering.mjs +174 -58
  74. package/dist/server/routing.mjs +14 -0
  75. package/dist/server/server.mjs +15 -1
  76. package/dist/server/theme-bridge.mjs +1247 -4825
  77. package/dist/styles/index.css +38 -38
  78. package/package.json +1 -1
  79. package/dist/_dts/blocks/src/system/runtime/components/booking/DateTimeSelectionStep.d.ts +0 -18
  80. package/dist/_dts/blocks/src/system/runtime/components/booking/PaymentOptionSelectionStep.d.ts +0 -9
  81. package/dist/_dts/blocks/src/system/runtime/components/booking/ServiceResourceSelector.d.ts +0 -44
  82. package/dist/_dts/blocks/src/system/runtime/components/booking/ServiceResourceSelector.state.d.ts +0 -23
  83. package/dist/_dts/blocks/src/system/runtime/components/booking/ServiceSelectionStep.d.ts +0 -18
  84. package/dist/_dts/blocks/src/system/runtime/components/booking/slotDisplay.d.ts +0 -2
  85. package/dist/_dts/blocks/src/system/runtime/components/multi-step/MultiStepForm.d.ts +0 -21
  86. package/dist/_dts/blocks/src/system/runtime/components/multi-step/useMultiStep.d.ts +0 -15
  87. package/dist/_dts/blocks/src/system/runtime/components/multi-step/useMultiStep.state.d.ts +0 -51
  88. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingSteps.d.ts +0 -22
@@ -5593,32 +5593,32 @@
5593
5593
  }
5594
5594
 
5595
5595
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text--muted {
5596
- opacity: var(--ab-text-muted-opacity);
5596
+ opacity: var(--ab-text-muted-opacity, 0.6);
5597
5597
  }
5598
5598
 
5599
5599
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text--faint {
5600
- opacity: var(--ab-text-faint-opacity);
5600
+ opacity: var(--ab-text-faint-opacity, 0.4);
5601
5601
  }
5602
5602
 
5603
5603
  /* Selection cards (service, resource, time slot) */
5604
5604
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-card {
5605
5605
  position: relative;
5606
5606
  padding: 1rem;
5607
- border: 2px solid var(--ab-card-border);
5608
- border-radius: var(--rb-block-radius);
5607
+ border: 2px solid var(--ab-card-border, rgb(var(--tb-border, 226 232 240)));
5608
+ border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
5609
5609
  text-align: left;
5610
5610
  background: transparent;
5611
5611
  cursor: pointer;
5612
- transition: border-color var(--rb-block-transition) ease, background-color var(--rb-block-transition) ease;
5612
+ transition: border-color var(--rb-block-transition, 150ms) ease, background-color var(--rb-block-transition, 150ms) ease;
5613
5613
  }
5614
5614
 
5615
5615
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-card:hover {
5616
- border-color: var(--ab-card-border-hover);
5616
+ border-color: var(--ab-card-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
5617
5617
  }
5618
5618
 
5619
5619
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-card--selected {
5620
- border-color: var(--ab-card-border-selected);
5621
- background-color: var(--ab-card-bg-selected);
5620
+ border-color: var(--ab-card-border-selected, rgb(var(--tb-primary, 17 24 39)));
5621
+ background-color: var(--ab-card-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.05));
5622
5622
  }
5623
5623
 
5624
5624
  /* Checkmark indicator */
@@ -5627,7 +5627,7 @@
5627
5627
  width: 1.25rem;
5628
5628
  height: 1.25rem;
5629
5629
  border-radius: 50%;
5630
- background-color: var(--ab-check-bg);
5630
+ background-color: var(--ab-check-bg, rgb(var(--tb-primary, 17 24 39)));
5631
5631
  display: flex;
5632
5632
  align-items: center;
5633
5633
  justify-content: center;
@@ -5636,42 +5636,42 @@
5636
5636
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-check svg {
5637
5637
  width: 0.75rem;
5638
5638
  height: 0.75rem;
5639
- color: var(--ab-check-text);
5639
+ color: var(--ab-check-text, rgb(var(--tb-background, 255 255 255)));
5640
5640
  }
5641
5641
 
5642
5642
  /* Info box (service summary) */
5643
5643
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-info-box {
5644
5644
  padding: 1rem;
5645
- border: 1px solid var(--ab-card-border);
5646
- border-radius: var(--rb-block-radius);
5647
- background-color: var(--ab-muted-bg);
5645
+ border: 1px solid var(--ab-card-border, rgb(var(--tb-border, 226 232 240)));
5646
+ border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
5647
+ background-color: var(--ab-muted-bg, rgba(var(--tb-foreground, var(--tb-text, 15 23 42)), 0.05));
5648
5648
  }
5649
5649
 
5650
5650
  /* Alert states */
5651
5651
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert {
5652
5652
  padding: 0.75rem 1rem;
5653
- border-radius: var(--rb-block-radius);
5653
+ border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
5654
5654
  font-size: 0.875rem;
5655
5655
  }
5656
5656
 
5657
5657
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--success {
5658
- background-color: var(--ab-success-bg);
5659
- color: var(--ab-success-text);
5658
+ background-color: var(--ab-success-bg, rgba(var(--tb-success, 22 163 74), 0.1));
5659
+ color: var(--ab-success-text, rgb(var(--tb-success, 22 163 74)));
5660
5660
  }
5661
5661
 
5662
5662
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--error {
5663
- background-color: var(--ab-error-bg);
5664
- color: var(--ab-error-text);
5663
+ background-color: var(--ab-error-bg, rgba(var(--tb-destructive, 220 38 38), 0.1));
5664
+ color: var(--ab-error-text, rgb(var(--tb-destructive, 220 38 38)));
5665
5665
  }
5666
5666
 
5667
5667
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--warning {
5668
- background-color: var(--ab-warning-bg);
5669
- color: var(--ab-warning-text);
5668
+ background-color: var(--ab-warning-bg, rgba(var(--tb-warning, 245 158 11), 0.1));
5669
+ color: var(--ab-warning-text, rgb(var(--tb-warning, 245 158 11)));
5670
5670
  }
5671
5671
 
5672
5672
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--info {
5673
- background-color: var(--ab-info-bg);
5674
- color: var(--ab-info-text);
5673
+ background-color: var(--ab-info-bg, rgba(var(--tb-info, 14 165 233), 0.1));
5674
+ color: var(--ab-info-text, rgb(var(--tb-info, 14 165 233)));
5675
5675
  }
5676
5676
 
5677
5677
  /* Form elements */
@@ -5683,7 +5683,7 @@
5683
5683
  }
5684
5684
 
5685
5685
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-required {
5686
- color: var(--ab-error-text);
5686
+ color: var(--ab-error-text, rgb(var(--tb-destructive, 220 38 38)));
5687
5687
  margin-left: 0.125rem;
5688
5688
  }
5689
5689
 
@@ -5692,19 +5692,19 @@
5692
5692
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-textarea {
5693
5693
  width: 100%;
5694
5694
  padding: 0.5rem 0.75rem;
5695
- border: 1px solid var(--ab-input-border);
5696
- border-radius: var(--rb-block-radius);
5695
+ border: 1px solid var(--ab-input-border, rgb(var(--tb-border, 226 232 240)));
5696
+ border-radius: var(--ab-input-radius, var(--radius-control, var(--rb-block-radius, 1rem)));
5697
5697
  background: transparent;
5698
5698
  font-size: 0.875rem;
5699
- transition: border-color var(--rb-block-transition) ease, box-shadow var(--rb-block-transition) ease;
5699
+ transition: border-color var(--rb-block-transition, 150ms) ease, box-shadow var(--rb-block-transition, 150ms) ease;
5700
5700
  }
5701
5701
 
5702
5702
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-input:focus,
5703
5703
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-select:focus,
5704
5704
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-textarea:focus {
5705
5705
  outline: none;
5706
- border-color: var(--ab-card-border-selected);
5707
- box-shadow: 0 0 0 3px var(--ab-input-focus-ring);
5706
+ border-color: var(--ab-card-border-selected, rgb(var(--tb-primary, 17 24 39)));
5707
+ box-shadow: 0 0 0 3px var(--ab-input-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
5708
5708
  }
5709
5709
 
5710
5710
  /* Buttons */
@@ -5713,31 +5713,31 @@
5713
5713
  align-items: center;
5714
5714
  justify-content: center;
5715
5715
  padding: 0.5rem 1.5rem;
5716
- border-radius: var(--rb-block-radius);
5716
+ border-radius: var(--ab-button-radius, var(--rb-button-radius, var(--rb-block-radius, 1rem)));
5717
5717
  font-size: 0.875rem;
5718
5718
  font-weight: 500;
5719
5719
  cursor: pointer;
5720
- transition: background-color var(--rb-block-transition) ease, border-color var(--rb-block-transition) ease;
5720
+ transition: background-color var(--rb-block-transition, 150ms) ease, border-color var(--rb-block-transition, 150ms) ease;
5721
5721
  }
5722
5722
 
5723
5723
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--primary {
5724
5724
  flex: 1;
5725
- background-color: var(--ab-btn-primary-bg);
5726
- color: var(--ab-btn-primary-text);
5725
+ background-color: var(--ab-btn-primary-bg, rgb(var(--tb-primary, 17 24 39)));
5726
+ color: var(--ab-btn-primary-text, rgb(var(--tb-primaryForeground, 255 255 255)));
5727
5727
  border: none;
5728
5728
  }
5729
5729
 
5730
5730
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--primary:hover:not(:disabled) {
5731
- background-color: var(--ab-btn-primary-hover);
5731
+ background-color: var(--ab-btn-primary-hover, rgba(var(--tb-primary, 17 24 39), 0.9));
5732
5732
  }
5733
5733
 
5734
5734
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--secondary {
5735
5735
  background: transparent;
5736
- border: 1px solid var(--ab-btn-secondary-border);
5736
+ border: 1px solid var(--ab-btn-secondary-border, rgb(var(--tb-border, 226 232 240)));
5737
5737
  }
5738
5738
 
5739
5739
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--secondary:hover:not(:disabled) {
5740
- background-color: var(--ab-btn-secondary-hover);
5740
+ background-color: var(--ab-btn-secondary-hover, rgba(var(--tb-foreground, var(--tb-text, 15 23 42)), 0.05));
5741
5741
  }
5742
5742
 
5743
5743
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--link {
@@ -5767,8 +5767,8 @@
5767
5767
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-skeleton {
5768
5768
  height: 2.5rem;
5769
5769
  width: 100%;
5770
- background-color: var(--ab-muted-bg);
5771
- border-radius: var(--rb-block-radius);
5770
+ background-color: var(--ab-muted-bg, rgba(var(--tb-foreground, var(--tb-text, 15 23 42)), 0.05));
5771
+ border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
5772
5772
  animation: ab-pulse 1.5s ease-in-out infinite;
5773
5773
  }
5774
5774
 
@@ -5797,7 +5797,7 @@
5797
5797
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-link {
5798
5798
  display: inline;
5799
5799
  margin-left: 0.5rem;
5800
- color: rgb(var(--tb-primary));
5800
+ color: rgb(var(--tb-primary, 17 24 39));
5801
5801
  background: none;
5802
5802
  border: none;
5803
5803
  padding: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riverbankcms/sdk",
3
- "version": "0.67.0",
3
+ "version": "0.68.0",
4
4
  "description": "Riverbank CMS SDK for headless content consumption",
5
5
  "main": "./dist/server/index.mjs",
6
6
  "module": "./dist/server/index.mjs",
@@ -1,18 +0,0 @@
1
- import React from 'react';
2
- import type { BookingFormService } from '../../nodes/booking-form.state';
3
- interface DateTimeSelectionStepProps {
4
- siteId: string;
5
- preSelectedServiceId?: string;
6
- preSelectedResourceId?: string;
7
- /** When there's only one service, pass it here to display info and auto-select */
8
- singleService?: BookingFormService;
9
- }
10
- /**
11
- * DateTimeSelectionStep Component
12
- *
13
- * Step 2: Date and time slot selection
14
- * Integrates with multi-step context and fetches available slots.
15
- * Prefetches available dates to filter the date picker.
16
- */
17
- export declare function DateTimeSelectionStep({ siteId, preSelectedServiceId, preSelectedResourceId, singleService, }: DateTimeSelectionStepProps): React.ReactElement;
18
- export {};
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import { type BookingFormService } from '../../nodes/booking-form.state';
3
- type PaymentOptionSelectionStepProps = Readonly<{
4
- services: readonly BookingFormService[];
5
- defaultServiceId?: string;
6
- enableAppointmentPackages?: boolean;
7
- }>;
8
- export declare function PaymentOptionSelectionStep({ services, defaultServiceId, enableAppointmentPackages, }: PaymentOptionSelectionStepProps): React.ReactElement;
9
- export {};
@@ -1,44 +0,0 @@
1
- export interface Service {
2
- id: string;
3
- title: string;
4
- description?: string;
5
- durationMinutes?: number;
6
- }
7
- export interface Resource {
8
- id: string;
9
- displayName: string;
10
- title?: string;
11
- }
12
- export interface ServiceResourceSelectorProps {
13
- /** @deprecated Site ID is now provided by BlockApiProvider context */
14
- siteId?: string;
15
- services: readonly Service[];
16
- selectedServiceId?: string;
17
- selectedResourceId?: string;
18
- preSelectedServiceId?: string;
19
- preSelectedResourceId?: string;
20
- forceServiceSelection?: boolean;
21
- shouldAutoSelectSingleResource?: boolean;
22
- onSelect: (selection: {
23
- serviceId: string;
24
- resourceId?: string;
25
- }) => void;
26
- onBack?: () => void;
27
- heading?: string;
28
- description?: string;
29
- }
30
- /**
31
- * ServiceResourceSelector Component
32
- *
33
- * Handles Step 1 of the booking flow: service and resource selection.
34
- * Only shown when the booking form allows multiple services or when
35
- * resource selection is needed.
36
- *
37
- * Features:
38
- * - Service selection (if multiple services available)
39
- * - Resource selection (if multiple resources available for selected service)
40
- * - Auto-skips if only one option available
41
- * - Fetches resources dynamically when service is selected
42
- */
43
- export declare function ServiceResourceSelector({ siteId: _siteId, // Deprecated: siteId now comes from BlockApiProvider context
44
- services, selectedServiceId: controlledSelectedServiceId, selectedResourceId: controlledSelectedResourceId, preSelectedServiceId, preSelectedResourceId, forceServiceSelection, shouldAutoSelectSingleResource, onSelect, onBack, heading, description, }: ServiceResourceSelectorProps): React.ReactElement;
@@ -1,23 +0,0 @@
1
- import type { Resource, Service } from "./ServiceResourceSelector";
2
- export type InitialServiceSelection = Readonly<{
3
- serviceId: string;
4
- preserveResourceId?: string;
5
- }>;
6
- export declare function shouldShowServiceSelection(input: Readonly<{
7
- services: readonly Service[];
8
- forceServiceSelection: boolean;
9
- }>): boolean;
10
- export declare function resolveInitialServiceSelection(input: Readonly<{
11
- services: readonly Service[];
12
- selectedServiceId?: string;
13
- preSelectedServiceId?: string;
14
- preSelectedResourceId?: string;
15
- shouldAutoSelectSingleService?: boolean;
16
- hasLoadedInitialService: boolean;
17
- }>): InitialServiceSelection | null;
18
- export declare function resolveAutoSelectedResourceId(input: Readonly<{
19
- resources: readonly Resource[];
20
- preSelectedResourceId?: string;
21
- selectedResourceId?: string;
22
- shouldAutoSelectSingleResource: boolean;
23
- }>): string | null;
@@ -1,18 +0,0 @@
1
- import React from "react";
2
- import { type BookingFormService } from "../../nodes/booking-form.state";
3
- interface ServiceSelectionStepProps {
4
- siteId: string;
5
- services: readonly BookingFormService[];
6
- preSelectedServiceId?: string;
7
- preSelectedResourceId?: string;
8
- forceServiceSelection?: boolean;
9
- shouldAutoSelectSingleResource?: boolean;
10
- }
11
- /**
12
- * ServiceSelectionStep Component
13
- *
14
- * Step 1: Service and optionally resource selection
15
- * Uses multi-step context to update booking data
16
- */
17
- export declare function ServiceSelectionStep({ siteId, services, preSelectedServiceId, preSelectedResourceId, forceServiceSelection, shouldAutoSelectSingleResource, }: ServiceSelectionStepProps): React.ReactElement;
18
- export {};
@@ -1,2 +0,0 @@
1
- import type { TimeSlot } from "../../hooks/useAvailableSlots";
2
- export declare function collapseAnyAvailableSlotsForDisplay(slots: readonly TimeSlot[]): TimeSlot[];
@@ -1,21 +0,0 @@
1
- import React from "react";
2
- import type { MultiStepFormProps } from "./types";
3
- /**
4
- * MultiStepForm Component
5
- *
6
- * Generic orchestrator for multi-step forms. Handles step navigation,
7
- * data accumulation, validation, and progress indication.
8
- *
9
- * Usage:
10
- * ```tsx
11
- * <MultiStepForm
12
- * steps={[
13
- * { id: 'step1', title: 'Step 1', component: <Step1 /> },
14
- * { id: 'step2', title: 'Step 2', component: <Step2 /> },
15
- * ]}
16
- * onComplete={(data) => console.log('Done!', data)}
17
- * progressStyle="dots"
18
- * />
19
- * ```
20
- */
21
- export declare function MultiStepForm<TData = unknown>({ steps, initialData, onComplete, onStepChange, onDataChange, progressStyle, className, persistToUrl, allowSkip, }: MultiStepFormProps<TData>): React.ReactElement;
@@ -1,15 +0,0 @@
1
- import type { Step, MultiStepContextValue } from './types';
2
- /**
3
- * Core hook for multi-step form logic
4
- *
5
- * Manages step navigation, data accumulation, and validation.
6
- * This is the engine that powers the MultiStepForm component.
7
- */
8
- export declare function useMultiStep<TData = unknown>({ steps, initialData, onStepChange, onDataChange, onComplete, persistToUrl, }: {
9
- steps: Step<TData>[];
10
- initialData?: Partial<TData>;
11
- onStepChange?: (stepId: string, stepIndex: number) => void;
12
- onDataChange?: (data: Partial<TData>) => void;
13
- onComplete?: (data: TData) => void | Promise<void>;
14
- persistToUrl?: boolean;
15
- }): MultiStepContextValue<TData>;
@@ -1,51 +0,0 @@
1
- import type { Step } from './types';
2
- export type MultiStepWorkflowStatus = {
3
- tag: 'idle';
4
- } | {
5
- tag: 'validating';
6
- } | {
7
- tag: 'submitting';
8
- };
9
- export type MultiStepState<TData = unknown> = {
10
- data: Partial<TData>;
11
- currentStepIndex: number;
12
- errors: Record<string, string>;
13
- status: MultiStepWorkflowStatus;
14
- };
15
- export type MultiStepAction<TData = unknown> = {
16
- type: 'data-updated';
17
- updates: Partial<TData>;
18
- } | {
19
- type: 'step-changed';
20
- stepIndex: number;
21
- } | {
22
- type: 'validation-started';
23
- } | {
24
- type: 'validation-succeeded';
25
- } | {
26
- type: 'validation-failed';
27
- errors: Record<string, string>;
28
- } | {
29
- type: 'submission-started';
30
- } | {
31
- type: 'submission-succeeded';
32
- } | {
33
- type: 'submission-failed';
34
- message: string;
35
- } | {
36
- type: 'reset';
37
- initialData: Partial<TData>;
38
- };
39
- export declare function createInitialMultiStepState<TData = unknown>(initialData: Partial<TData>): MultiStepState<TData>;
40
- export declare function multiStepReducer<TData = unknown>(state: MultiStepState<TData>, action: MultiStepAction<TData>): MultiStepState<TData>;
41
- export declare function getVisibleSteps<TData = unknown>(steps: Step<TData>[], data: Partial<TData>): Step<TData>[];
42
- export declare function findStepIndexById<TData = unknown>(visibleSteps: Step<TData>[], stepId: string): number;
43
- export declare function getNextStepIndex(state: MultiStepState, visibleStepCount: number): number;
44
- export declare function getPreviousStepIndex(state: MultiStepState): number;
45
- export declare function getNavigableStepIndex(stepIndex: number, visibleStepCount: number): number | null;
46
- export declare function selectIsValidating(state: MultiStepState): boolean;
47
- export declare function selectIsSubmitting(state: MultiStepState): boolean;
48
- export declare function selectCanGoNext(state: MultiStepState): boolean;
49
- export declare function selectCanGoBack(state: MultiStepState): boolean;
50
- export declare function selectIsFirstStep(state: MultiStepState): boolean;
51
- export declare function selectIsLastStep(state: MultiStepState, visibleStepCount: number): boolean;
@@ -1,22 +0,0 @@
1
- /**
2
- * Hook to build multi-step booking flow
3
- */
4
- import type { Step } from "../components/multi-step/types";
5
- import { type BookingFormConfig, type BookingFormData, type BookingFormService } from "../nodes/booking-form.state";
6
- export type { BookingFormData };
7
- /**
8
- * Build the array of steps for the booking flow
9
- *
10
- * Steps are conditionally included based on form configuration:
11
- * - Service selection: Only if multiple services available
12
- * - Date/time selection: Always included
13
- * - Custom fields: Only if form has fields defined
14
- */
15
- export declare function useBookingSteps(siteId: string, formConfig: BookingFormConfig | null, services: readonly BookingFormService[], options?: Readonly<{
16
- serviceId?: string;
17
- resourceId?: string;
18
- requiresServiceSelection?: boolean;
19
- requiresResourceSelection?: boolean;
20
- shouldAutoSelectSingleResource?: boolean;
21
- enableAppointmentPackages?: boolean;
22
- }>): Step<BookingFormData>[];