feat(leads): implement Stripe payment component for exhibit licenses

Full implementation of ae_comp__exhibit_payment.svelte (was a 9-line stub).
Reads Stripe config from $ae_loc.site_cfg_json per-event. License tier
selector (1/3/6/10 users) uses {#key} remount pattern to work around
stripe-buy-button web component ignoring attribute changes after mount.
Three states: paid confirmation (priority=true), not-configured hint, payment
form. client_reference_id=exhibit_id ties payments to booth records.
TypeScript declaration for stripe-buy-button added to app.d.ts via
svelte/elements augmentation. exhibit_id prop wired in +page.svelte and
ae_tab__manage.svelte.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Scott Idem
2026-03-27 18:29:12 -04:00
parent a8e9bd6694
commit d89218be15
6 changed files with 206 additions and 11 deletions

12
src/app.d.ts vendored
View File

@@ -22,3 +22,15 @@ declare global {
// eslint-disable-next-line no-var
var native_app: any;
}
// Stripe Buy Button web component — needed so Svelte templates accept the element without TS errors.
declare module 'svelte/elements' {
interface IntrinsicElements {
'stripe-buy-button': {
'buy-button-id': string;
'publishable-key': string;
'client-reference-id'?: string;
[attr: string]: any;
};
}
}