@patientos/website-kit 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -2
- package/dist/booking-block-D-UOAPx3.d.ts +74 -0
- package/dist/cart-block-B-ytc9us.d.ts +20 -0
- package/dist/cart-button-BCLFittB.d.ts +24 -0
- package/dist/cart-storage.d.ts +110 -0
- package/dist/cart-storage.js +39 -0
- package/dist/checkout-block-BeXwpqYe.d.ts +24 -0
- package/dist/chunk-2CZFJOKK.js +79 -0
- package/dist/{chunk-ZYX4TXBN.js → chunk-3T7UWKAH.js} +4 -310
- package/dist/{chunk-7ZOQ6UKG.js → chunk-4GKSSM5N.js} +578 -3163
- package/dist/chunk-4NF7SSIX.js +367 -0
- package/dist/chunk-7BUDUYXN.js +80 -0
- package/dist/chunk-FZ4WKWIE.js +310 -0
- package/dist/{chunk-ZZFBTLR4.js → chunk-HTVKKLWI.js} +20 -5
- package/dist/chunk-IOC6QLB7.js +159 -0
- package/dist/chunk-S3ZQQOQT.js +2057 -0
- package/dist/chunk-UTAMB2SK.js +214 -0
- package/dist/chunk-WQSJ46TP.js +19 -0
- package/dist/chunk-ZNH6TSYP.js +167 -0
- package/dist/index.d.ts +12 -32
- package/dist/index.js +88 -26
- package/dist/islands-impl/cart-button.d.ts +19 -0
- package/dist/islands-impl/cart-button.js +13 -0
- package/dist/islands-impl/cart.d.ts +31 -0
- package/dist/islands-impl/cart.js +11 -0
- package/dist/islands-impl/checkout.d.ts +6 -0
- package/dist/islands-impl/checkout.js +13 -0
- package/dist/islands-impl/store.d.ts +30 -0
- package/dist/islands-impl/store.js +16 -0
- package/dist/islands-impl.d.ts +14 -10
- package/dist/islands-impl.js +22 -7
- package/dist/islands-registry.js +13 -4
- package/dist/{portal-account-8uQc_Ncx.d.ts → portal-account-DRJyr3nz.d.ts} +1 -82
- package/dist/{portal-account.client-BBe_q9yC.d.ts → portal-account.client-Bke4NsgW.d.ts} +2 -1
- package/dist/portal-booking-client.d.ts +3 -2
- package/dist/portal-booking-client.js +2 -1
- package/dist/portal-client-my3q5GME.d.ts +83 -0
- package/dist/store-block-CFxnsfKU.d.ts +37 -0
- package/dist/store-catalog-p7TFOpfk.d.ts +78 -0
- package/dist/store-catalog.d.ts +3 -0
- package/dist/store-catalog.js +11 -0
- package/dist/website-kit.css +193 -0
- package/package.json +31 -1
- package/dist/checkout-block-BdpPIuQ5.d.ts +0 -136
package/dist/website-kit.css
CHANGED
|
@@ -3583,3 +3583,196 @@ select.sk-identity__input[data-empty] {
|
|
|
3583
3583
|
color: #b3261e;
|
|
3584
3584
|
font-size: var(--sk-font-size-sm);
|
|
3585
3585
|
}
|
|
3586
|
+
|
|
3587
|
+
/* ── PAT-944: saved delivery addresses + fulfilment notices ──────────────────
|
|
3588
|
+
Appended at the END on purpose (a second agent owns the store blocks in this
|
|
3589
|
+
file's earlier sections). Scoped to the checkout island only. */
|
|
3590
|
+
.sk-checkout__addresses {
|
|
3591
|
+
display: flex;
|
|
3592
|
+
flex-direction: column;
|
|
3593
|
+
gap: calc(var(--sk-space, 0.5rem) * 0.75);
|
|
3594
|
+
}
|
|
3595
|
+
.sk-checkout__addresses-label {
|
|
3596
|
+
font-size: var(--sk-font-size-sm);
|
|
3597
|
+
opacity: 0.8;
|
|
3598
|
+
}
|
|
3599
|
+
.sk-checkout__addresses label {
|
|
3600
|
+
display: flex;
|
|
3601
|
+
align-items: flex-start;
|
|
3602
|
+
gap: calc(var(--sk-space, 0.5rem) * 0.75);
|
|
3603
|
+
overflow-wrap: anywhere;
|
|
3604
|
+
}
|
|
3605
|
+
.sk-checkout__address-actions {
|
|
3606
|
+
display: flex;
|
|
3607
|
+
gap: calc(var(--sk-space, 0.5rem) * 1.5);
|
|
3608
|
+
}
|
|
3609
|
+
.sk-checkout__link-button {
|
|
3610
|
+
align-self: flex-start;
|
|
3611
|
+
padding: 0;
|
|
3612
|
+
border: 0;
|
|
3613
|
+
background: transparent;
|
|
3614
|
+
color: var(--sk-primary, inherit);
|
|
3615
|
+
font: inherit;
|
|
3616
|
+
text-decoration: underline;
|
|
3617
|
+
cursor: pointer;
|
|
3618
|
+
}
|
|
3619
|
+
.sk-checkout__link-button[disabled] {
|
|
3620
|
+
opacity: 0.55;
|
|
3621
|
+
cursor: default;
|
|
3622
|
+
}
|
|
3623
|
+
.sk-checkout__notice {
|
|
3624
|
+
margin: 0;
|
|
3625
|
+
font-size: var(--sk-font-size-sm);
|
|
3626
|
+
}
|
|
3627
|
+
|
|
3628
|
+
/* ══════════════════════════════════════════════════════════════════════════════
|
|
3629
|
+
PAT-944 — store skeleton + the persistent header cart (badge + drawer)
|
|
3630
|
+
══════════════════════════════════════════════════════════════════════════════ */
|
|
3631
|
+
|
|
3632
|
+
/* ── store: the loading skeleton ───────────────────────────────────────────────
|
|
3633
|
+
A fixed-height grid of card-shaped placeholders. The old "Loading the shop…"
|
|
3634
|
+
line collapsed to one text row and then expanded into a grid — a full-page jump
|
|
3635
|
+
on every load. These cards are the same box the real ones occupy. */
|
|
3636
|
+
.sk-store__placeholder--sr {
|
|
3637
|
+
position: absolute;
|
|
3638
|
+
width: 1px;
|
|
3639
|
+
height: 1px;
|
|
3640
|
+
padding: 0;
|
|
3641
|
+
margin: -1px;
|
|
3642
|
+
overflow: hidden;
|
|
3643
|
+
clip-path: inset(50%);
|
|
3644
|
+
white-space: nowrap;
|
|
3645
|
+
border: 0;
|
|
3646
|
+
}
|
|
3647
|
+
.sk-store__card--skeleton {
|
|
3648
|
+
pointer-events: none;
|
|
3649
|
+
}
|
|
3650
|
+
.sk-store__skeleton-line,
|
|
3651
|
+
.sk-store__skeleton-button {
|
|
3652
|
+
display: block;
|
|
3653
|
+
border-radius: var(--sk-radius, 0.625rem);
|
|
3654
|
+
background: color-mix(in srgb, var(--sk-muted, #5b6b7a) 16%, transparent);
|
|
3655
|
+
}
|
|
3656
|
+
.sk-store__skeleton-line {
|
|
3657
|
+
height: 0.875rem;
|
|
3658
|
+
}
|
|
3659
|
+
.sk-store__skeleton-line--short {
|
|
3660
|
+
width: 45%;
|
|
3661
|
+
}
|
|
3662
|
+
.sk-store__skeleton-button {
|
|
3663
|
+
margin-top: auto;
|
|
3664
|
+
height: 2.5rem;
|
|
3665
|
+
}
|
|
3666
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
3667
|
+
.sk-store__card--skeleton .sk-store__image,
|
|
3668
|
+
.sk-store__skeleton-line,
|
|
3669
|
+
.sk-store__skeleton-button {
|
|
3670
|
+
animation: sk-skeleton-pulse 1.4s ease-in-out infinite;
|
|
3671
|
+
}
|
|
3672
|
+
}
|
|
3673
|
+
@keyframes sk-skeleton-pulse {
|
|
3674
|
+
0%,
|
|
3675
|
+
100% {
|
|
3676
|
+
opacity: 1;
|
|
3677
|
+
}
|
|
3678
|
+
50% {
|
|
3679
|
+
opacity: 0.55;
|
|
3680
|
+
}
|
|
3681
|
+
}
|
|
3682
|
+
|
|
3683
|
+
/* ── the header cart button ──────────────────────────────────────────────────── */
|
|
3684
|
+
.sk-cart-button {
|
|
3685
|
+
display: inline-flex;
|
|
3686
|
+
}
|
|
3687
|
+
.sk-cart-button__trigger {
|
|
3688
|
+
display: inline-flex;
|
|
3689
|
+
align-items: center;
|
|
3690
|
+
gap: calc(var(--sk-space, 0.5rem) * 1);
|
|
3691
|
+
padding: calc(var(--sk-space, 0.5rem) * 0.75) calc(var(--sk-space, 0.5rem) * 1.5);
|
|
3692
|
+
border: 1px solid color-mix(in srgb, var(--sk-muted, #5b6b7a) 30%, transparent);
|
|
3693
|
+
border-radius: var(--sk-radius, 0.625rem);
|
|
3694
|
+
background: transparent;
|
|
3695
|
+
color: inherit;
|
|
3696
|
+
font: inherit;
|
|
3697
|
+
font-weight: 600;
|
|
3698
|
+
text-decoration: none;
|
|
3699
|
+
cursor: pointer;
|
|
3700
|
+
}
|
|
3701
|
+
.sk-cart-button__trigger:hover {
|
|
3702
|
+
background: color-mix(in srgb, var(--sk-muted, #5b6b7a) 10%, transparent);
|
|
3703
|
+
}
|
|
3704
|
+
/* The badge is ABSENT at zero — the component never renders "0" — so this only ever
|
|
3705
|
+
paints once the client effect has read the shopper's own stored cart. */
|
|
3706
|
+
.sk-cart-button__badge {
|
|
3707
|
+
display: inline-flex;
|
|
3708
|
+
align-items: center;
|
|
3709
|
+
justify-content: center;
|
|
3710
|
+
min-width: 1.375rem;
|
|
3711
|
+
height: 1.375rem;
|
|
3712
|
+
padding: 0 0.3125rem;
|
|
3713
|
+
border-radius: 999px;
|
|
3714
|
+
background: var(--sk-brand, #1f6feb);
|
|
3715
|
+
color: var(--sk-brand-foreground, #fff);
|
|
3716
|
+
font-size: 0.75rem;
|
|
3717
|
+
font-weight: 700;
|
|
3718
|
+
font-variant-numeric: tabular-nums;
|
|
3719
|
+
line-height: 1;
|
|
3720
|
+
}
|
|
3721
|
+
|
|
3722
|
+
/* ── the cart drawer ──────────────────────────────────────────────────────────
|
|
3723
|
+
Rendered only while open, so a closed drawer costs no markup and — the point of
|
|
3724
|
+
the whole design — no network. */
|
|
3725
|
+
.sk-cart-drawer {
|
|
3726
|
+
position: fixed;
|
|
3727
|
+
inset: 0;
|
|
3728
|
+
z-index: 60;
|
|
3729
|
+
display: flex;
|
|
3730
|
+
justify-content: flex-end;
|
|
3731
|
+
}
|
|
3732
|
+
.sk-cart-drawer__scrim {
|
|
3733
|
+
position: absolute;
|
|
3734
|
+
inset: 0;
|
|
3735
|
+
background: rgb(0 0 0 / 0.4);
|
|
3736
|
+
}
|
|
3737
|
+
.sk-cart-drawer__panel {
|
|
3738
|
+
position: relative;
|
|
3739
|
+
display: flex;
|
|
3740
|
+
flex-direction: column;
|
|
3741
|
+
width: min(26rem, 100%);
|
|
3742
|
+
max-height: 100%;
|
|
3743
|
+
background: var(--sk-background, #fff);
|
|
3744
|
+
color: var(--sk-foreground, inherit);
|
|
3745
|
+
box-shadow: -12px 0 32px rgb(0 0 0 / 0.18);
|
|
3746
|
+
}
|
|
3747
|
+
.sk-cart-drawer__head,
|
|
3748
|
+
.sk-cart-drawer__foot {
|
|
3749
|
+
display: flex;
|
|
3750
|
+
align-items: center;
|
|
3751
|
+
justify-content: space-between;
|
|
3752
|
+
gap: calc(var(--sk-space, 0.5rem) * 2);
|
|
3753
|
+
padding: calc(var(--sk-space, 0.5rem) * 2);
|
|
3754
|
+
border-bottom: 1px solid color-mix(in srgb, var(--sk-muted, #5b6b7a) 20%, transparent);
|
|
3755
|
+
}
|
|
3756
|
+
.sk-cart-drawer__foot {
|
|
3757
|
+
border-bottom: 0;
|
|
3758
|
+
border-top: 1px solid color-mix(in srgb, var(--sk-muted, #5b6b7a) 20%, transparent);
|
|
3759
|
+
margin-top: auto;
|
|
3760
|
+
}
|
|
3761
|
+
.sk-cart-drawer__body {
|
|
3762
|
+
flex: 1 1 auto;
|
|
3763
|
+
overflow-y: auto;
|
|
3764
|
+
padding: calc(var(--sk-space, 0.5rem) * 2);
|
|
3765
|
+
}
|
|
3766
|
+
.sk-cart-drawer__close {
|
|
3767
|
+
border: 0;
|
|
3768
|
+
background: transparent;
|
|
3769
|
+
color: inherit;
|
|
3770
|
+
font: inherit;
|
|
3771
|
+
text-decoration: underline;
|
|
3772
|
+
cursor: pointer;
|
|
3773
|
+
}
|
|
3774
|
+
@media (max-width: 30rem) {
|
|
3775
|
+
.sk-cart-drawer__panel {
|
|
3776
|
+
width: 100%;
|
|
3777
|
+
}
|
|
3778
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patientos/website-kit",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "PatientOS clinic website components and patient-facing interactive islands.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": [
|
|
@@ -45,6 +45,36 @@
|
|
|
45
45
|
"types": "./dist/islands.d.ts",
|
|
46
46
|
"default": "./dist/islands.js"
|
|
47
47
|
},
|
|
48
|
+
"./islands-impl/store": {
|
|
49
|
+
"patientos-source": "./src/store-block.client.tsx",
|
|
50
|
+
"types": "./dist/islands-impl/store.d.ts",
|
|
51
|
+
"default": "./dist/islands-impl/store.js"
|
|
52
|
+
},
|
|
53
|
+
"./islands-impl/cart": {
|
|
54
|
+
"patientos-source": "./src/cart-block.client.tsx",
|
|
55
|
+
"types": "./dist/islands-impl/cart.d.ts",
|
|
56
|
+
"default": "./dist/islands-impl/cart.js"
|
|
57
|
+
},
|
|
58
|
+
"./islands-impl/cart-button": {
|
|
59
|
+
"patientos-source": "./src/cart-button.client.tsx",
|
|
60
|
+
"types": "./dist/islands-impl/cart-button.d.ts",
|
|
61
|
+
"default": "./dist/islands-impl/cart-button.js"
|
|
62
|
+
},
|
|
63
|
+
"./islands-impl/checkout": {
|
|
64
|
+
"patientos-source": "./src/checkout-block.client.tsx",
|
|
65
|
+
"types": "./dist/islands-impl/checkout.d.ts",
|
|
66
|
+
"default": "./dist/islands-impl/checkout.js"
|
|
67
|
+
},
|
|
68
|
+
"./cart-storage": {
|
|
69
|
+
"patientos-source": "./src/cart-storage.ts",
|
|
70
|
+
"types": "./dist/cart-storage.d.ts",
|
|
71
|
+
"default": "./dist/cart-storage.js"
|
|
72
|
+
},
|
|
73
|
+
"./store-catalog": {
|
|
74
|
+
"patientos-source": "./src/store-catalog.ts",
|
|
75
|
+
"types": "./dist/store-catalog.d.ts",
|
|
76
|
+
"default": "./dist/store-catalog.js"
|
|
77
|
+
},
|
|
48
78
|
"./islands-registry": {
|
|
49
79
|
"patientos-source": "./src/islands-registry.tsx",
|
|
50
80
|
"types": "./dist/islands-registry.d.ts",
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
/** A service as the funnel offers it. */
|
|
4
|
-
interface FunnelServiceOption {
|
|
5
|
-
key: string;
|
|
6
|
-
label: string;
|
|
7
|
-
}
|
|
8
|
-
/** How the runtime half reaches the API — the snapshot's `publicApi`, serialised. */
|
|
9
|
-
interface FunnelPublicApi {
|
|
10
|
-
publishableKey: string;
|
|
11
|
-
apiBase: string;
|
|
12
|
-
turnstileSiteKey?: string;
|
|
13
|
-
portalUrl?: string;
|
|
14
|
-
portalOrigin?: string;
|
|
15
|
-
portalApiOrigin?: string;
|
|
16
|
-
}
|
|
17
|
-
/** JSON-safe island configuration. Crosses the build→runtime boundary — see `./islands`. */
|
|
18
|
-
type CertificateFunnelProps = {
|
|
19
|
-
/** Start on ONE service, skipping the picker. */
|
|
20
|
-
serviceKey?: string;
|
|
21
|
-
/** Heading above the funnel. */
|
|
22
|
-
heading?: string;
|
|
23
|
-
publicApi?: FunnelPublicApi;
|
|
24
|
-
services?: FunnelServiceOption[];
|
|
25
|
-
clinicName?: string;
|
|
26
|
-
clinicPhone?: string;
|
|
27
|
-
};
|
|
28
|
-
/** Marker-only props: what a clinic page actually writes. */
|
|
29
|
-
type CertificateFunnelMarkerProps = {
|
|
30
|
-
/**
|
|
31
|
-
* Offer only these services, in this order. Omitted ⇒ every certificate service the
|
|
32
|
-
* clinic has published.
|
|
33
|
-
*/
|
|
34
|
-
serviceKeys?: string[];
|
|
35
|
-
/** Start on ONE service, skipping the picker. */
|
|
36
|
-
serviceKey?: string;
|
|
37
|
-
/** Per-service copy overriding the configured label, keyed by service key. */
|
|
38
|
-
serviceCopy?: Record<string, string>;
|
|
39
|
-
heading?: string;
|
|
40
|
-
className?: string;
|
|
41
|
-
};
|
|
42
|
-
declare function CertificateFunnel({ serviceKeys, serviceKey, serviceCopy, heading, className, }: CertificateFunnelMarkerProps): React.ReactElement;
|
|
43
|
-
|
|
44
|
-
/** An appointment type as the block offers it. */
|
|
45
|
-
interface BookingTypeOption {
|
|
46
|
-
id: string;
|
|
47
|
-
label: string;
|
|
48
|
-
durationMinutes: number;
|
|
49
|
-
modality: 'in_person' | 'telehealth';
|
|
50
|
-
}
|
|
51
|
-
/** JSON-safe island configuration. Crosses the build→runtime boundary — see `./islands`. */
|
|
52
|
-
type BookingBlockProps = {
|
|
53
|
-
/** Pre-select ONE appointment type, skipping the picker. */
|
|
54
|
-
appointmentTypeId?: string;
|
|
55
|
-
/** Pre-select a practitioner (availability is then filtered to them). */
|
|
56
|
-
practitionerId?: string;
|
|
57
|
-
heading?: string;
|
|
58
|
-
publicApi?: FunnelPublicApi;
|
|
59
|
-
appointmentTypes?: BookingTypeOption[];
|
|
60
|
-
clinicName?: string;
|
|
61
|
-
clinicPhone?: string;
|
|
62
|
-
};
|
|
63
|
-
/** Marker-only props: what a clinic page actually writes. */
|
|
64
|
-
type BookingBlockMarkerProps = {
|
|
65
|
-
appointmentTypeId?: string;
|
|
66
|
-
practitionerId?: string;
|
|
67
|
-
/** Offer only these appointment types, by id, in this order. */
|
|
68
|
-
appointmentTypeIds?: string[];
|
|
69
|
-
heading?: string;
|
|
70
|
-
className?: string;
|
|
71
|
-
};
|
|
72
|
-
declare function BookingBlock({ appointmentTypeId, practitionerId, appointmentTypeIds, heading, className, }: BookingBlockMarkerProps): React.ReactElement;
|
|
73
|
-
|
|
74
|
-
/** JSON-safe island configuration. Crosses the build→runtime boundary — see `./islands`. */
|
|
75
|
-
type StoreProps = {
|
|
76
|
-
/** Show one category only. Omitted ⇒ the whole published catalogue. */
|
|
77
|
-
categoryHandle?: string;
|
|
78
|
-
/** Show exactly one product by its stable handle. Takes precedence over category. */
|
|
79
|
-
productHandle?: string;
|
|
80
|
-
/** PatientOS patient/API origin. Omitted keeps the original same-origin contract. */
|
|
81
|
-
storeApiOrigin?: string;
|
|
82
|
-
/** Heading rendered above the grid. */
|
|
83
|
-
title?: string;
|
|
84
|
-
/** Grid columns at the widest breakpoint. */
|
|
85
|
-
columns?: number;
|
|
86
|
-
};
|
|
87
|
-
/** Marker-only props: the island config plus presentation the page controls. */
|
|
88
|
-
type StoreMarkerProps = StoreProps & {
|
|
89
|
-
className?: string;
|
|
90
|
-
};
|
|
91
|
-
/**
|
|
92
|
-
* BUILD-TIME marker. Emits the mount point plus a static no-JS fallback — the catalogue
|
|
93
|
-
* itself is fetched at runtime (prices and stock must not be baked into a cached static
|
|
94
|
-
* artifact), so the fallback is a prompt, not a product list.
|
|
95
|
-
*/
|
|
96
|
-
declare function Store({ categoryHandle, productHandle, storeApiOrigin, title, columns, className, }: StoreMarkerProps): React.ReactElement;
|
|
97
|
-
|
|
98
|
-
/** JSON-safe island configuration. Crosses the build→runtime boundary — see `./islands`. */
|
|
99
|
-
type CartProps = {
|
|
100
|
-
/** PatientOS patient/API origin. Omitted keeps the original same-origin contract. */
|
|
101
|
-
storeApiOrigin?: string;
|
|
102
|
-
};
|
|
103
|
-
/** Marker-only props: runtime config plus presentation the page controls. */
|
|
104
|
-
type CartMarkerProps = CartProps & {
|
|
105
|
-
className?: string;
|
|
106
|
-
};
|
|
107
|
-
/**
|
|
108
|
-
* BUILD-TIME marker. Emits the mount point plus a static no-JS fallback.
|
|
109
|
-
*
|
|
110
|
-
* The fallback shows NO line items — the static artifact is served to every visitor and
|
|
111
|
-
* is edge-cacheable, so it must never carry a patient's cart.
|
|
112
|
-
*/
|
|
113
|
-
declare function Cart({ storeApiOrigin, className }: CartMarkerProps): React.ReactElement;
|
|
114
|
-
|
|
115
|
-
/** JSON-safe island configuration. Crosses the build→runtime boundary — see `./islands`. */
|
|
116
|
-
type CheckoutProps = {
|
|
117
|
-
/** PatientOS patient/API origin. Omitted keeps the original same-origin contract. */
|
|
118
|
-
storeApiOrigin?: string;
|
|
119
|
-
/** Shopper-facing order history on the hosting site. */
|
|
120
|
-
ordersHref?: string;
|
|
121
|
-
/** Same-origin order confirmation route on the hosting clinic site. */
|
|
122
|
-
completionHref?: string;
|
|
123
|
-
};
|
|
124
|
-
/** Marker-only props: runtime config plus presentation the page controls. */
|
|
125
|
-
type CheckoutMarkerProps = CheckoutProps & {
|
|
126
|
-
className?: string;
|
|
127
|
-
};
|
|
128
|
-
/**
|
|
129
|
-
* BUILD-TIME marker. Emits the mount point plus a static no-JS fallback.
|
|
130
|
-
*
|
|
131
|
-
* The fallback carries no order, no amount and no payment field: this document is a
|
|
132
|
-
* static artifact served to every visitor.
|
|
133
|
-
*/
|
|
134
|
-
declare function Checkout({ storeApiOrigin, ordersHref, completionHref, className, }: CheckoutMarkerProps): React.ReactElement;
|
|
135
|
-
|
|
136
|
-
export { BookingBlock as B, Cart as C, type FunnelPublicApi as F, Store as S, type BookingBlockMarkerProps as a, type BookingBlockProps as b, type BookingTypeOption as c, type CartMarkerProps as d, type CartProps as e, CertificateFunnel as f, type CertificateFunnelMarkerProps as g, type CertificateFunnelProps as h, Checkout as i, type CheckoutMarkerProps as j, type CheckoutProps as k, type FunnelServiceOption as l, type StoreMarkerProps as m, type StoreProps as n };
|