@riverbankcms/sdk 0.7.0 → 0.7.3
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 +229 -0
- package/dist/cli/index.js +42 -95
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init-docs/content/agents-section.md +50 -0
- package/dist/cli/init-docs/content/cli-reference.md +574 -0
- package/dist/cli/init-docs/content/content-management.md +384 -0
- package/dist/cli/init-docs/content/context-brand.md +125 -0
- package/dist/cli/init-docs/content/context-brief.md +77 -0
- package/dist/cli/init-docs/content/context-knowledge.md +111 -0
- package/dist/cli/init-docs/content/getting-started.md +130 -0
- package/dist/cli/init-docs/content/site-workflows-readme.md +96 -0
- package/dist/cli/init-docs/content/workflow-add-block.md +228 -0
- package/dist/cli/init-docs/content/workflow-create-page.md +193 -0
- package/dist/cli/init-docs/content/workflow-publish.md +280 -0
- package/dist/client/bookings.d.mts +2 -0
- package/dist/client/bookings.d.ts +2 -0
- package/dist/client/bookings.js +2956 -104
- package/dist/client/bookings.js.map +1 -1
- package/dist/client/bookings.mjs +2929 -70
- package/dist/client/bookings.mjs.map +1 -1
- package/dist/client/client.d.mts +2 -2
- package/dist/client/client.d.ts +2 -2
- package/dist/client/client.js +602 -68
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +602 -68
- package/dist/client/client.mjs.map +1 -1
- package/dist/client/hooks.d.mts +2 -2
- package/dist/client/hooks.d.ts +2 -2
- package/dist/client/rendering/client.js +3070 -259
- package/dist/client/rendering/client.js.map +1 -1
- package/dist/client/rendering/client.mjs +3212 -395
- package/dist/client/rendering/client.mjs.map +1 -1
- package/dist/client/spam-protection.d.mts +55 -0
- package/dist/client/spam-protection.d.ts +55 -0
- package/dist/client/spam-protection.js +2915 -0
- package/dist/client/spam-protection.js.map +1 -0
- package/dist/client/spam-protection.mjs +2893 -0
- package/dist/client/spam-protection.mjs.map +1 -0
- package/dist/client/{usePage-BiOReg0_.d.ts → usePage-BYmJCCm1.d.ts} +132 -11
- package/dist/client/{usePage-BXjk8BhD.d.mts → usePage-DZtrWajy.d.mts} +132 -11
- package/dist/server/{Layout-wBtJLTVX.d.ts → Layout-Yluyb6sK.d.ts} +1 -1
- package/dist/server/{Layout-B7cvis7r.d.mts → Layout-qWLdVm5-.d.mts} +1 -1
- package/dist/server/chunk-2IZ6S225.js +122 -0
- package/dist/server/chunk-2IZ6S225.js.map +1 -0
- package/dist/server/chunk-4CV4JOE5.js +27 -0
- package/dist/server/chunk-4CV4JOE5.js.map +1 -0
- package/dist/server/chunk-5LRR64Y6.mjs +72 -0
- package/dist/server/chunk-5LRR64Y6.mjs.map +1 -0
- package/dist/server/chunk-NBTRDLCM.js +72 -0
- package/dist/server/chunk-NBTRDLCM.js.map +1 -0
- package/dist/server/chunk-NFEGQTCC.mjs +27 -0
- package/dist/server/{chunk-7FIJSGHU.mjs → chunk-NFQLH5IA.mjs} +856 -74
- package/dist/server/chunk-NFQLH5IA.mjs.map +1 -0
- package/dist/server/chunk-PPHZV6YD.mjs +122 -0
- package/dist/server/chunk-PPHZV6YD.mjs.map +1 -0
- package/dist/server/{chunk-P7UVAMK6.js → chunk-VLXTNB2C.js} +866 -84
- package/dist/server/chunk-VLXTNB2C.js.map +1 -0
- package/dist/server/{components-CMMwDXTW.d.mts → components-DNHfSCML.d.mts} +3 -3
- package/dist/server/{components-CICSJyp_.d.ts → components-Di5ME6He.d.ts} +3 -3
- package/dist/server/components.d.mts +5 -5
- package/dist/server/components.d.ts +5 -5
- package/dist/server/components.js +1 -1
- package/dist/server/components.mjs +1 -1
- package/dist/server/config-validation.js +1 -1
- package/dist/server/config-validation.mjs +1 -1
- package/dist/server/config.js +1 -1
- package/dist/server/config.mjs +1 -1
- package/dist/server/data.d.mts +2 -2
- package/dist/server/data.d.ts +2 -2
- package/dist/server/data.js +1 -1
- package/dist/server/data.mjs +1 -1
- package/dist/server/env.d.mts +109 -0
- package/dist/server/env.d.ts +109 -0
- package/dist/server/env.js +14 -0
- package/dist/server/env.js.map +1 -0
- package/dist/server/env.mjs +14 -0
- package/dist/server/{index-DI_qlYx3.d.mts → index--Oyunk_B.d.mts} +2 -2
- package/dist/server/{index-BTwWvSBu.d.ts → index-C9Ra8dza.d.ts} +2 -2
- package/dist/server/{index-Bucs6UqG.d.mts → index-Clm3skz_.d.mts} +1 -1
- package/dist/server/{index-Cp7tJuRt.d.ts → index-DLvNddi-.d.ts} +1 -1
- package/dist/server/index.d.mts +216 -5
- package/dist/server/index.d.ts +216 -5
- package/dist/server/index.js +301 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +301 -4
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/{loadContent-DmgpFcFC.d.ts → loadContent-D7LQwI0o.d.ts} +3 -3
- package/dist/server/{loadContent-C-YYUKQa.d.mts → loadContent-DVfuBLiZ.d.mts} +3 -3
- package/dist/server/{loadPage-IDGVDFBB.js → loadPage-AXNAERDS.js} +2 -2
- package/dist/server/{loadPage-IDGVDFBB.js.map → loadPage-AXNAERDS.js.map} +1 -1
- package/dist/server/{loadPage-DP3nrHBi.d.ts → loadPage-BmYJCe_V.d.ts} +2 -2
- package/dist/server/{loadPage-B8mQUUSo.d.mts → loadPage-BucnLHmE.d.mts} +2 -2
- package/dist/server/{loadPage-DNQTTRHL.mjs → loadPage-XR7ORQ2E.mjs} +2 -2
- package/dist/server/loadPage-XR7ORQ2E.mjs.map +1 -0
- package/dist/server/metadata.d.mts +4 -4
- package/dist/server/metadata.d.ts +4 -4
- package/dist/server/metadata.js +1 -1
- package/dist/server/metadata.mjs +1 -1
- package/dist/server/navigation.d.mts +2 -2
- package/dist/server/navigation.d.ts +2 -2
- package/dist/server/navigation.js +1 -1
- package/dist/server/navigation.mjs +1 -1
- package/dist/server/next/revalidate.d.mts +66 -0
- package/dist/server/next/revalidate.d.ts +66 -0
- package/dist/server/next/revalidate.js +60 -0
- package/dist/server/next/revalidate.js.map +1 -0
- package/dist/server/next/revalidate.mjs +60 -0
- package/dist/server/next/revalidate.mjs.map +1 -0
- package/dist/server/next/tags.d.mts +81 -0
- package/dist/server/next/tags.d.ts +81 -0
- package/dist/server/next/tags.js +36 -0
- package/dist/server/next/tags.js.map +1 -0
- package/dist/server/next/tags.mjs +36 -0
- package/dist/server/next/tags.mjs.map +1 -0
- package/dist/server/next.d.mts +164 -6
- package/dist/server/next.d.ts +164 -6
- package/dist/server/next.js +79 -11
- package/dist/server/next.js.map +1 -1
- package/dist/server/next.mjs +76 -8
- package/dist/server/next.mjs.map +1 -1
- package/dist/server/rendering/server.d.mts +4 -4
- package/dist/server/rendering/server.d.ts +4 -4
- package/dist/server/rendering/server.js +1 -1
- package/dist/server/rendering/server.mjs +1 -1
- package/dist/server/rendering.d.mts +7 -7
- package/dist/server/rendering.d.ts +7 -7
- package/dist/server/rendering.js +3 -3
- package/dist/server/rendering.js.map +1 -1
- package/dist/server/rendering.mjs +4 -4
- package/dist/server/routing.d.mts +3 -3
- package/dist/server/routing.d.ts +3 -3
- package/dist/server/routing.js +2 -2
- package/dist/server/routing.mjs +2 -2
- package/dist/server/server.d.mts +5 -5
- package/dist/server/server.d.ts +5 -5
- package/dist/server/server.js +5 -5
- package/dist/server/server.js.map +1 -1
- package/dist/server/server.mjs +5 -5
- package/dist/server/theme-bridge.js +1 -1
- package/dist/server/theme-bridge.mjs +1 -1
- package/dist/server/theme.js +1 -1
- package/dist/server/theme.mjs +1 -1
- package/dist/server/{types-BvcJU7zk.d.ts → types-BRQyLrQU.d.ts} +132 -11
- package/dist/server/{types-Dsu9wsUh.d.mts → types-BSV6Vc-P.d.mts} +2 -2
- package/dist/server/{types-1cLz0vnq.d.mts → types-C-LShyIg.d.mts} +132 -11
- package/dist/server/{types-CVykEqXN.d.ts → types-Dt98DeYa.d.ts} +2 -2
- package/dist/server/webhooks.d.mts +81 -0
- package/dist/server/webhooks.d.ts +81 -0
- package/dist/server/webhooks.js +12 -0
- package/dist/server/webhooks.js.map +1 -0
- package/dist/server/webhooks.mjs +12 -0
- package/dist/server/webhooks.mjs.map +1 -0
- package/package.json +29 -3
- package/dist/client/resolver-BhueZVxZ.d.mts +0 -61
- package/dist/client/resolver-BhueZVxZ.d.ts +0 -61
- package/dist/client/usePage--fGlyrgj.d.mts +0 -6439
- package/dist/client/usePage-BBcFCxOU.d.ts +0 -6297
- package/dist/client/usePage-BC8Q2E3t.d.mts +0 -6431
- package/dist/client/usePage-BTPnCuWC.d.mts +0 -6511
- package/dist/client/usePage-BafOS9UT.d.mts +0 -6512
- package/dist/client/usePage-BcjWPXvh.d.mts +0 -6388
- package/dist/client/usePage-Bnx-kA6x.d.mts +0 -6670
- package/dist/client/usePage-BvKAa3Zw.d.mts +0 -366
- package/dist/client/usePage-BvKAa3Zw.d.ts +0 -366
- package/dist/client/usePage-BydHcMYB.d.mts +0 -6297
- package/dist/client/usePage-C3ZKNwY7.d.mts +0 -6393
- package/dist/client/usePage-CE7X5NcN.d.ts +0 -6439
- package/dist/client/usePage-CHEybPMD.d.ts +0 -6429
- package/dist/client/usePage-CrKw1H6Y.d.ts +0 -6338
- package/dist/client/usePage-CyYpOJud.d.ts +0 -6388
- package/dist/client/usePage-D4fxZbRR.d.mts +0 -6429
- package/dist/client/usePage-DMI8ImsU.d.mts +0 -6338
- package/dist/client/usePage-DoPI6b8V.d.ts +0 -6511
- package/dist/client/usePage-DpRNZUtP.d.ts +0 -6431
- package/dist/client/usePage-QNWArrVO.d.ts +0 -6670
- package/dist/client/usePage-fBgPB6Oq.d.ts +0 -6512
- package/dist/client/usePage-gpVaeWDy.d.ts +0 -6393
- package/dist/server/chunk-7FIJSGHU.mjs.map +0 -1
- package/dist/server/chunk-BJTO5JO5.mjs +0 -11
- package/dist/server/chunk-DGUM43GV.js +0 -11
- package/dist/server/chunk-DGUM43GV.js.map +0 -1
- package/dist/server/chunk-P7UVAMK6.js.map +0 -1
- /package/dist/server/{chunk-BJTO5JO5.mjs.map → chunk-NFEGQTCC.mjs.map} +0 -0
- /package/dist/server/{loadPage-DNQTTRHL.mjs.map → env.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bookings/index.ts","../../../blocks/src/system/runtime/utils/api-url.ts","../../../blocks/src/system/runtime/nodes/booking-form.client.tsx","../../../blocks/src/system/runtime/components/multi-step/MultiStepForm.tsx","../../../blocks/src/system/runtime/components/multi-step/MultiStepContext.tsx","../../../blocks/src/system/runtime/components/multi-step/useMultiStep.ts","../../../blocks/src/system/runtime/components/booking/SuccessMessage.tsx","../../../blocks/src/system/runtime/hooks/useBookingSteps.ts","../../../blocks/src/system/runtime/components/booking/ServiceResourceSelector.tsx","../../../blocks/src/system/runtime/components/booking/ServiceSelectionStep.tsx","../../../blocks/src/system/runtime/components/booking/DateTimeSelectionStep.tsx","../../../blocks/src/utils/date-formatting.ts","../../../blocks/src/system/runtime/components/booking/DatePicker.tsx","../../../blocks/src/system/runtime/components/booking/TimeSlotSelector.tsx","../../../blocks/src/system/runtime/hooks/useAvailableSlots.ts","../../../blocks/src/system/runtime/hooks/useAvailableDates.ts","../../../blocks/src/system/runtime/components/multi-step/DynamicFormFields.tsx","../../../blocks/src/system/runtime/hooks/useBookingSubmission.ts","../../../blocks/src/system/runtime/hooks/useBookingFormConfig.ts"],"sourcesContent":["/**\n * Booking system exports for SDK consumers\n *\n * This module re-exports booking components and hooks from @riverbankcms/blocks.\n * SDK sites should use the same booking components as the main platform.\n *\n * @example Using the booking form\n * ```tsx\n * import { BookingFormClient, useBookingFormConfig } from '@riverbankcms/sdk/bookings';\n *\n * function BookingPage() {\n * const { formConfig, services, isLoading, error } = useBookingFormConfig(siteId, formId);\n *\n * if (isLoading) return <div>Loading...</div>;\n * if (error) return <div>Error: {error}</div>;\n *\n * return (\n * <BookingFormClient\n * siteId={siteId}\n * formId={formId}\n * form={formConfig}\n * services={services}\n * />\n * );\n * }\n * ```\n *\n * @packageDocumentation\n */\n\n// Re-export components and hooks from @riverbankcms/blocks\nexport {\n BookingFormClient,\n useBookingFormConfig,\n} from '@riverbankcms/blocks/client';\n\n// Re-export types from @riverbankcms/blocks\nexport type {\n BookingService,\n BookingFormConfig,\n} from '@riverbankcms/blocks/client';\n\n// Re-export SDK-specific types that may still be useful\nexport type {\n Service,\n TimeSlot,\n BookingFormSettings,\n BookingFormSchema,\n BookingFormField,\n BookingFormData,\n BookingSubmissionData,\n BookingSubmissionResult,\n} from './types';\n","/**\n * Resolve dashboard URL from multi-environment configuration\n *\n * Supports the RIVERBANK_ENV pattern for SDK sites with multiple environments:\n * - RIVERBANK_ENV=local → uses RIVERBANK_LOCAL_DASHBOARD_URL\n * - RIVERBANK_ENV=remote → uses RIVERBANK_REMOTE_DASHBOARD_URL\n *\n * @returns Dashboard URL if multi-env is configured, null otherwise\n */\nfunction resolveMultiEnvDashboardUrl(): string | null {\n const env = process.env.RIVERBANK_ENV\n if (!env) return null\n\n const envKey = `RIVERBANK_${env.toUpperCase()}_DASHBOARD_URL`\n const dashboardUrl = process.env[envKey]\n\n if (dashboardUrl) {\n return dashboardUrl.replace(/\\/$/, '')\n }\n\n return null\n}\n\n/**\n * Get the CMS API base URL\n *\n * Resolves the API URL from environment variables with the following priority:\n *\n * 1. Multi-environment pattern (server-only, for SDK sites):\n * - RIVERBANK_ENV=local → RIVERBANK_LOCAL_DASHBOARD_URL\n * - RIVERBANK_ENV=remote → RIVERBANK_REMOTE_DASHBOARD_URL\n *\n * 2. Explicit API URL (SDK sites):\n * - NEXT_PUBLIC_BUILDER_API_URL\n *\n * 3. Dashboard URL (frontend app):\n * - NEXT_PUBLIC_DASHBOARD_URL (appends /api)\n *\n * 4. Legacy fallback:\n * - NEXT_PUBLIC_CMS_API_URL\n *\n * @returns The base API URL (e.g., \"http://dashboard.local:4000/api\")\n * @throws Error if no valid URL is configured\n */\nexport function getCmsApiUrl(): string {\n // 1. Multi-environment pattern (server-only, for SDK sites)\n // Allows switching between local/remote with a single RIVERBANK_ENV toggle\n const multiEnvDashboard = resolveMultiEnvDashboardUrl()\n if (multiEnvDashboard) {\n return `${multiEnvDashboard}/api`\n }\n\n // 2. SDK sites use this (explicit API URL, no /api suffix needed)\n const builderApiUrl = process.env.NEXT_PUBLIC_BUILDER_API_URL\n if (builderApiUrl) {\n return builderApiUrl.replace(/\\/$/, '')\n }\n\n // 3. Frontend app uses this (dashboard URL, append /api)\n const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL\n if (dashboardUrl) {\n const base = dashboardUrl.replace(/\\/$/, '')\n return `${base}/api`\n }\n\n // 4. Legacy fallback\n const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL\n if (legacyApiUrl) {\n return legacyApiUrl.replace(/\\/$/, '')\n }\n\n throw new Error(\n 'Dashboard URL not configured. Either:\\n' +\n ' 1. Set RIVERBANK_ENV with RIVERBANK_LOCAL_DASHBOARD_URL / RIVERBANK_REMOTE_DASHBOARD_URL\\n' +\n ' 2. Set NEXT_PUBLIC_BUILDER_API_URL (SDK sites)\\n' +\n ' 3. Set NEXT_PUBLIC_DASHBOARD_URL (frontend app)'\n )\n}\n","\"use client\"\n\nimport React, { useState } from 'react';\nimport { MultiStepForm } from '../components/multi-step/MultiStepForm';\nimport { SuccessMessage } from '../components/booking/SuccessMessage';\nimport { useBookingSteps, type BookingFormData } from '../hooks/useBookingSteps';\nimport { useBookingSubmission } from '../hooks/useBookingSubmission';\n\nexport type Service = {\n id: string;\n siteId: string;\n title: string;\n description?: string;\n durationMinutes?: number;\n};\n\nexport type FormConfig = {\n id: string;\n siteId: string;\n userId: string;\n name: string;\n schemaJson?: any;\n settingsJson?: any;\n createdAt: string;\n updatedAt: string;\n};\n\ntype BookingFormProps = {\n siteId: string;\n formId: string;\n className?: string;\n // Data passed from server-side data loaders\n form?: FormConfig | null;\n services?: Service[];\n};\n\n/**\n * BookingFormClient Component\n *\n * Multi-step booking form that:\n * 1. Receives form configuration and services from server-side loaders\n * 2. Shows service/resource selection if needed\n * 3. Shows date/time slot selection (fetched dynamically based on user selection)\n * 4. Shows dynamic custom fields\n * 5. Submits booking\n */\nexport const BookingFormClient: React.FC<BookingFormProps> = ({\n siteId: siteIdProp,\n formId,\n className,\n form,\n services = [],\n}) => {\n const [isSuccess, setIsSuccess] = useState(false);\n\n // Fallback: if siteId isn't passed via binding, get it from form data\n const siteId = siteIdProp || form?.siteId || '';\n\n // Validate required props\n React.useEffect(() => {\n if (!siteId) {\n console.error('[BookingFormClient] ERROR: siteId is missing!');\n }\n if (!form) {\n console.warn('[BookingFormClient] Form data not loaded');\n }\n console.log('[BookingFormClient] Loaded with:', {\n siteId,\n formId,\n hasForm: !!form,\n servicesCount: Array.isArray(services) ? services.length : 'not an array',\n servicesData: services,\n });\n }, [siteId, formId, form, services]);\n\n // Normalize form config to expected shape\n const formConfig = form ? {\n id: form.id,\n name: form.name,\n slug: '', // Not needed for booking form\n settings: form.settingsJson,\n schema: form.schemaJson,\n } : null;\n\n // Normalize services to ensure it's always an array\n const normalizedServices = React.useMemo(() => {\n if (Array.isArray(services)) {\n return services;\n }\n if (services && typeof services === 'object') {\n // If it's an object with a services property, extract it\n if ('services' in services) {\n return (services as any).services || [];\n }\n // If it's an object with service objects as values, convert to array\n return Object.values(services);\n }\n return [];\n }, [services]);\n\n // Build step array based on configuration\n const steps = useBookingSteps(siteId, formConfig, normalizedServices);\n\n const { submit } = useBookingSubmission(siteId);\n\n // Show error if form data is missing\n if (!form) {\n return (\n <div className={`rounded-lg border border-destructive bg-destructive/10 p-4 ${className ?? ''}`}>\n <p className=\"text-sm text-destructive\">Booking form not found. Please check your configuration.</p>\n </div>\n );\n }\n\n const handleComplete = async (data: BookingFormData) => {\n try {\n // Extract booking data\n const serviceId = data.serviceId || formConfig?.settings?.serviceId;\n const resourceId = data.resourceId || formConfig?.settings?.resourceId;\n\n if (!serviceId || !data.selectedSlot) {\n throw new Error('Missing required booking information');\n }\n\n // Calculate endAt from service duration\n console.log('[BookingFormClient] Looking for service:', {\n serviceId,\n availableServices: normalizedServices,\n });\n const selectedService = normalizedServices.find((s: Service) => s.id === serviceId);\n console.log('[BookingFormClient] Selected service:', selectedService);\n\n if (!selectedService) {\n throw new Error(`Service not found: ${serviceId}`);\n }\n if (!selectedService.durationMinutes) {\n throw new Error(\n `Service \"${selectedService.title || serviceId}\" is missing duration. ` +\n `Please update the service in the dashboard to include a duration (e.g., 30 minutes).`\n );\n }\n\n // Calculate end time by adding duration to start time\n const startDate = new Date(data.selectedSlot);\n const endDate = new Date(startDate.getTime() + selectedService.durationMinutes * 60 * 1000);\n\n // Extract custom fields (everything except our known booking fields)\n const bookingFields = new Set(['serviceId', 'resourceId', 'selectedDate', 'selectedSlot']);\n const customFields: Record<string, any> = {};\n for (const [key, value] of Object.entries(data)) {\n if (!bookingFields.has(key)) {\n customFields[key] = value;\n }\n }\n\n // Submit booking with formId\n await submit({\n formId,\n serviceId,\n resourceId,\n startAt: data.selectedSlot,\n endAt: endDate.toISOString(),\n customFields,\n timezone: 'UTC', // TODO: Get from resource or user preference\n });\n\n setIsSuccess(true);\n } catch (err) {\n console.error('Booking submission failed:', err);\n throw err;\n }\n };\n\n // Success state\n if (isSuccess) {\n const successMessage = formConfig?.settings?.successMessage ||\n 'Your appointment has been booked! Check your email for confirmation.';\n return <SuccessMessage message={successMessage} className={className} />;\n }\n\n // Multi-step form\n return (\n <div className={className}>\n <MultiStepForm<BookingFormData>\n steps={steps}\n initialData={{\n serviceId: formConfig?.settings?.serviceId,\n resourceId: formConfig?.settings?.resourceId,\n }}\n onComplete={handleComplete}\n progressStyle=\"steps\"\n persistToUrl={false}\n allowSkip={false}\n />\n </div>\n );\n};\n","'use client';\n\nimport React, { cloneElement, isValidElement } from 'react';\nimport { MultiStepContext } from './MultiStepContext';\nimport { useMultiStep } from './useMultiStep';\nimport type { MultiStepFormProps } from './types';\n\n/**\n * MultiStepForm Component\n *\n * Generic orchestrator for multi-step forms. Handles step navigation,\n * data accumulation, validation, and progress indication.\n *\n * Usage:\n * ```tsx\n * <MultiStepForm\n * steps={[\n * { id: 'step1', title: 'Step 1', component: <Step1 /> },\n * { id: 'step2', title: 'Step 2', component: <Step2 /> },\n * ]}\n * onComplete={(data) => console.log('Done!', data)}\n * progressStyle=\"dots\"\n * />\n * ```\n */\nexport function MultiStepForm<TData = any>({\n steps,\n initialData,\n onComplete,\n onStepChange,\n onDataChange,\n progressStyle = 'dots',\n className = '',\n persistToUrl = false,\n allowSkip = false,\n}: MultiStepFormProps<TData>): React.ReactElement {\n const context = useMultiStep<TData>({\n steps,\n initialData,\n onStepChange,\n onDataChange,\n onComplete,\n persistToUrl,\n });\n\n const {\n visibleSteps,\n currentStepIndex,\n goToNext,\n goToPrevious,\n goToStep,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n errors,\n isValidating,\n isSubmitting,\n } = context;\n\n const currentStep = visibleSteps[currentStepIndex];\n\n if (!currentStep) {\n return (\n <div className=\"text-center py-12\">\n <p className=\"text-muted-foreground\">No steps available</p>\n </div>\n );\n }\n\n // Clone the step component and inject context if it's a React element\n const stepComponent = isValidElement(currentStep.component)\n ? cloneElement(currentStep.component as React.ReactElement<any>, {\n // Step components can access context via hooks, but we also pass key props\n stepId: currentStep.id,\n stepIndex: currentStepIndex,\n } as any) // Type assertion needed for dynamic props\n : currentStep.component;\n\n const showBackButton = !isFirstStep && !currentStep.hideBack && canGoBack;\n const showNextButton = !currentStep.isTerminal;\n const nextButtonLabel = isLastStep\n ? (currentStep.nextLabel || 'Complete')\n : (currentStep.nextLabel || 'Continue');\n const backButtonLabel = currentStep.backLabel || 'Back';\n\n return (\n <MultiStepContext.Provider value={context}>\n <div className={`multi-step-form ${className}`}>\n {/* Progress Indicator */}\n {progressStyle !== 'none' && (\n <div className=\"mb-8\">\n <ProgressIndicator\n steps={visibleSteps}\n currentIndex={currentStepIndex}\n style={progressStyle}\n onStepClick={allowSkip ? goToStep : undefined}\n />\n </div>\n )}\n\n {/* Step Content */}\n <div className=\"step-content\">{stepComponent}</div>\n\n {/* Error Display */}\n {Object.keys(errors).length > 0 && (\n <div className=\"mt-6 alert alert-error\">\n {errors._form && (\n <p className=\"text-sm font-medium\">{errors._form}</p>\n )}\n {Object.entries(errors)\n .filter(([key]) => key !== '_form')\n .map(([key, message]) => (\n <p key={key} className=\"text-sm\">\n {message}\n </p>\n ))}\n </div>\n )}\n\n {/* Navigation Buttons */}\n {(showBackButton || showNextButton) && (\n <div className=\"flex gap-3 mt-8\">\n {showBackButton && (\n <button\n type=\"button\"\n onClick={goToPrevious}\n disabled={!canGoBack}\n className=\"outline btn-md\"\n >\n {backButtonLabel}\n </button>\n )}\n\n {showNextButton && (\n <button\n type=\"button\"\n onClick={goToNext}\n disabled={!canGoNext}\n className=\"primary btn-md flex-1\"\n >\n {isValidating && (\n <span className=\"inline-block animate-spin rounded-full h-4 w-4 border-b-2 border-current\"></span>\n )}\n {isSubmitting && (\n <span className=\"inline-block animate-spin rounded-full h-4 w-4 border-b-2 border-current\"></span>\n )}\n {!isValidating && !isSubmitting && nextButtonLabel}\n {isValidating && 'Validating...'}\n {isSubmitting && 'Submitting...'}\n </button>\n )}\n </div>\n )}\n </div>\n </MultiStepContext.Provider>\n );\n}\n\n/**\n * ProgressIndicator Component\n *\n * Visual indicator of progress through the steps.\n * Supports dots, steps, and bar styles.\n */\nfunction ProgressIndicator({\n steps,\n currentIndex,\n style,\n onStepClick,\n}: {\n steps: Array<{ id: string; title: string }>;\n currentIndex: number;\n style: 'dots' | 'steps' | 'bar';\n onStepClick?: (index: number) => void;\n}) {\n if (style === 'dots') {\n return (\n <div className=\"flex items-center justify-center gap-2\">\n {steps.map((step, index) => {\n const isActive = index === currentIndex;\n const isCompleted = index < currentIndex;\n const isClickable = onStepClick && index <= currentIndex;\n\n return (\n <button\n key={step.id}\n type=\"button\"\n onClick={isClickable ? () => onStepClick(index) : undefined}\n disabled={!isClickable}\n className={`\n step-dot transition-all\n ${isActive ? 'step-dot-active' : ''}\n ${isCompleted ? 'step-dot-complete' : ''}\n ${isClickable ? 'cursor-pointer hover:scale-125' : 'cursor-default'}\n `}\n aria-label={step.title}\n />\n );\n })}\n </div>\n );\n }\n\n if (style === 'steps') {\n return (\n <div className=\"flex items-center justify-between\">\n {steps.map((step, index) => {\n const isActive = index === currentIndex;\n const isCompleted = index < currentIndex;\n const isClickable = onStepClick && index <= currentIndex;\n const isLast = index === steps.length - 1;\n\n return (\n <div key={step.id} className=\"flex items-center flex-1\">\n <button\n type=\"button\"\n onClick={isClickable ? () => onStepClick(index) : undefined}\n disabled={!isClickable}\n className={`\n flex items-center gap-2\n ${isClickable ? 'cursor-pointer' : 'cursor-default'}\n `}\n >\n <div\n className={`\n step-circle transition-colors\n ${isActive ? 'step-circle-active' : ''}\n ${isCompleted ? 'step-circle-complete' : ''}\n `}\n >\n {isCompleted ? '✓' : index + 1}\n </div>\n <span\n className={`\n text-sm hidden sm:inline\n ${isActive ? 'font-medium' : ''}\n ${isCompleted || !isActive ? 'status-muted' : ''}\n `}\n >\n {step.title}\n </span>\n </button>\n\n {!isLast && (\n <div className=\"step-connector mx-2 hidden sm:block\" />\n )}\n </div>\n );\n })}\n </div>\n );\n }\n\n // Bar style\n const progress = ((currentIndex + 1) / steps.length) * 100;\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm status-muted\">\n <span>\n Step {currentIndex + 1} of {steps.length}\n </span>\n <span>{Math.round(progress)}%</span>\n </div>\n <div className=\"progress-bar\">\n <div\n className=\"progress-fill\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { MultiStepContextValue } from './types';\n\n/**\n * React Context for Multi-Step Form State\n *\n * Provides step navigation, data management, and validation state\n * to all child components within a multi-step form.\n */\nexport const MultiStepContext = createContext<MultiStepContextValue | null>(null);\n\n/**\n * Hook to access multi-step form context\n *\n * Must be used within a MultiStepForm component.\n *\n * @throws Error if used outside of MultiStepForm\n * @returns The multi-step context value with full state and navigation\n */\nexport function useMultiStepContext<TData = any>(): MultiStepContextValue<TData> {\n const context = useContext(MultiStepContext);\n\n if (!context) {\n throw new Error(\n 'useMultiStepContext must be used within a MultiStepForm component. ' +\n 'Make sure your component is wrapped in <MultiStepForm>.'\n );\n }\n\n return context as MultiStepContextValue<TData>;\n}\n\n/**\n * Hook to access multi-step form data\n *\n * Convenience hook that returns just the data portion of the context.\n * Useful for components that only need to read/write data.\n *\n * @returns Object with data and updateData function\n */\nexport function useMultiStepData<TData = any>(): {\n data: Partial<TData>;\n updateData: (updates: Partial<TData>) => void;\n} {\n const { data, updateData } = useMultiStepContext<TData>();\n return { data, updateData };\n}\n\n/**\n * Hook to access multi-step navigation\n *\n * Convenience hook that returns just the navigation functions.\n * Useful for custom step components that need to control navigation.\n *\n * @returns Object with navigation functions and state\n */\nexport function useMultiStepNavigation(): {\n goToNext: () => Promise<void>;\n goToPrevious: () => void;\n goToStep: (stepIndex: number) => void;\n goToStepById: (stepId: string) => void;\n canGoNext: boolean;\n canGoBack: boolean;\n isFirstStep: boolean;\n isLastStep: boolean;\n currentStepIndex: number;\n currentStepId: string;\n} {\n const {\n goToNext,\n goToPrevious,\n goToStep,\n goToStepById,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n currentStepIndex,\n currentStepId,\n } = useMultiStepContext();\n\n return {\n goToNext,\n goToPrevious,\n goToStep,\n goToStepById,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n currentStepIndex,\n currentStepId,\n };\n}\n","'use client';\n\nimport { useState, useCallback, useMemo, useEffect } from 'react';\nimport type { Step, MultiStepContextValue, StepValidationResult } from './types';\n\n/**\n * Core hook for multi-step form logic\n *\n * Manages step navigation, data accumulation, and validation.\n * This is the engine that powers the MultiStepForm component.\n */\nexport function useMultiStep<TData = any>({\n steps,\n initialData = {},\n onStepChange,\n onDataChange,\n onComplete,\n persistToUrl = false,\n}: {\n steps: Step<TData>[];\n initialData?: Partial<TData>;\n onStepChange?: (stepId: string, stepIndex: number) => void;\n onDataChange?: (data: Partial<TData>) => void;\n onComplete?: (data: TData) => void | Promise<void>;\n persistToUrl?: boolean;\n}): MultiStepContextValue<TData> {\n // State\n const [data, setData] = useState<Partial<TData>>(initialData);\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isValidating, setIsValidating] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n // Filter steps based on conditions\n const visibleSteps = useMemo(() => {\n return steps.filter((step) => {\n if (!step.condition) return true;\n return step.condition(data);\n });\n }, [steps, data]);\n\n const currentStep = visibleSteps[currentStepIndex];\n const currentStepId = currentStep?.id || '';\n\n // Sync step to URL if enabled\n useEffect(() => {\n if (persistToUrl && currentStep) {\n const url = new URL(window.location.href);\n url.searchParams.set('step', currentStep.id);\n window.history.replaceState({}, '', url.toString());\n }\n }, [currentStepIndex, currentStep, persistToUrl]);\n\n // Read step from URL on mount\n useEffect(() => {\n if (persistToUrl) {\n const url = new URL(window.location.href);\n const stepId = url.searchParams.get('step');\n if (stepId) {\n const stepIndex = visibleSteps.findIndex((s) => s.id === stepId);\n if (stepIndex !== -1) {\n setCurrentStepIndex(stepIndex);\n }\n }\n }\n // Only run on mount - empty deps array is intentional\n }, []);\n\n // Notify on step change\n useEffect(() => {\n if (onStepChange && currentStep) {\n onStepChange(currentStep.id, currentStepIndex);\n }\n }, [currentStepIndex, currentStep, onStepChange]);\n\n // Update data\n const updateData = useCallback(\n (updates: Partial<TData>) => {\n setData((prev) => {\n const newData = { ...prev, ...updates };\n onDataChange?.(newData);\n return newData;\n });\n // Clear errors when data changes\n setErrors({});\n },\n [onDataChange]\n );\n\n // Validate current step\n const validateCurrentStep = useCallback(async (): Promise<boolean> => {\n if (!currentStep?.validate) return true;\n\n setIsValidating(true);\n setErrors({});\n\n try {\n const result: StepValidationResult = await currentStep.validate(data);\n\n if (result.valid) {\n return true;\n } else {\n setErrors(result.errors);\n return false;\n }\n } catch (error) {\n console.error('Step validation error:', error);\n setErrors({ _form: 'Validation failed. Please try again.' });\n return false;\n } finally {\n setIsValidating(false);\n }\n }, [currentStep, data]);\n\n // Navigate to next step\n const goToNext = useCallback(async () => {\n // Validate current step\n const isValid = await validateCurrentStep();\n if (!isValid) return;\n\n // Check if this is the last step\n if (currentStepIndex === visibleSteps.length - 1) {\n // Complete the form\n if (onComplete) {\n setIsSubmitting(true);\n try {\n await onComplete(data as TData);\n } catch (error) {\n console.error('Form submission error:', error);\n setErrors({ _form: 'Submission failed. Please try again.' });\n } finally {\n setIsSubmitting(false);\n }\n }\n return;\n }\n\n // Move to next step\n setCurrentStepIndex((prev) => Math.min(prev + 1, visibleSteps.length - 1));\n setErrors({});\n }, [currentStepIndex, visibleSteps.length, validateCurrentStep, onComplete, data]);\n\n // Navigate to previous step\n const goToPrevious = useCallback(() => {\n setCurrentStepIndex((prev) => Math.max(prev - 1, 0));\n setErrors({});\n }, []);\n\n // Navigate to specific step by index\n const goToStep = useCallback(\n (stepIndex: number) => {\n if (stepIndex >= 0 && stepIndex < visibleSteps.length) {\n setCurrentStepIndex(stepIndex);\n setErrors({});\n }\n },\n [visibleSteps.length]\n );\n\n // Navigate to specific step by ID\n const goToStepById = useCallback(\n (stepId: string) => {\n const stepIndex = visibleSteps.findIndex((s) => s.id === stepId);\n if (stepIndex !== -1) {\n goToStep(stepIndex);\n }\n },\n [visibleSteps, goToStep]\n );\n\n // Reset form\n const reset = useCallback(() => {\n setData(initialData);\n setCurrentStepIndex(0);\n setErrors({});\n setIsValidating(false);\n setIsSubmitting(false);\n }, [initialData]);\n\n // Computed properties\n const canGoNext = !isValidating && !isSubmitting;\n const canGoBack = currentStepIndex > 0 && !isValidating && !isSubmitting;\n const isFirstStep = currentStepIndex === 0;\n const isLastStep = currentStepIndex === visibleSteps.length - 1;\n\n return {\n currentStepIndex,\n currentStepId,\n visibleSteps,\n data,\n errors,\n isValidating,\n isSubmitting,\n goToNext,\n goToPrevious,\n goToStep,\n goToStepById,\n updateData,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n reset,\n };\n}\n","/**\n * SuccessMessage Component\n *\n * Displays success message after successful appointment booking.\n */\n\nimport React from 'react';\n\ntype SuccessMessageProps = {\n message: string;\n className?: string;\n};\n\nexport const SuccessMessage: React.FC<SuccessMessageProps> = ({ message, className }) => {\n return (\n <div\n className={`alert alert-success text-sm ${className ?? ''}`}\n role=\"alert\"\n aria-live=\"polite\"\n >\n {message}\n </div>\n );\n};\n","/**\n * Hook to build multi-step booking flow\n */\n\nimport React, { useMemo } from 'react';\nimport type { Step } from '../components/multi-step/types';\nimport type { BookingFormConfig, Service } from './useBookingFormConfig';\nimport { ServiceSelectionStep } from '../components/booking/ServiceSelectionStep';\nimport { DateTimeSelectionStep } from '../components/booking/DateTimeSelectionStep';\nimport { DynamicFormFields } from '../components/multi-step/DynamicFormFields';\n\nexport type BookingFormData = {\n serviceId?: string;\n resourceId?: string;\n selectedDate?: string;\n selectedSlot?: string;\n [key: string]: any; // Dynamic form fields\n};\n\n/**\n * Build the array of steps for the booking flow\n *\n * Steps are conditionally included based on form configuration:\n * - Service selection: Only if multiple services available\n * - Date/time selection: Always included\n * - Custom fields: Only if form has fields defined\n */\nexport function useBookingSteps(\n siteId: string,\n formConfig: BookingFormConfig | null,\n services: Service[]\n): Step<BookingFormData>[] {\n return useMemo<Step<BookingFormData>[]>(() => {\n if (!formConfig) return [];\n\n const stepsArray: Step<BookingFormData>[] = [];\n\n // Determine the service ID to use\n // Priority: form settings > single available service\n const effectiveServiceId = formConfig.settings?.serviceId ||\n (services.length === 1 ? services[0]?.id : undefined);\n\n // Step 1: Service/Resource Selection (conditional)\n const needsServiceSelection =\n (!formConfig.settings?.serviceId && services.length > 1) ||\n (formConfig.settings?.serviceIds && formConfig.settings.serviceIds.length > 1);\n\n if (needsServiceSelection) {\n stepsArray.push({\n id: 'service-selection',\n title: 'Select Service',\n component: React.createElement(ServiceSelectionStep, { siteId, services }),\n condition: () => needsServiceSelection,\n validate: (data) => {\n if (!data.serviceId) {\n return { valid: false, errors: { _form: 'Please select a service' } };\n }\n return { valid: true };\n },\n });\n }\n\n // Step 2: Date/Time Selection\n // Pass the single service info to display when there's only one service\n const singleService = services.length === 1 ? services[0] : undefined;\n stepsArray.push({\n id: 'datetime-selection',\n title: 'Select Date & Time',\n component: React.createElement(DateTimeSelectionStep, {\n siteId,\n preSelectedServiceId: effectiveServiceId,\n preSelectedResourceId: formConfig.settings?.resourceId,\n singleService,\n }),\n validate: (data) => {\n if (!data.selectedSlot) {\n return { valid: false, errors: { _form: 'Please select a date and time' } };\n }\n return { valid: true };\n },\n });\n\n // Step 3: Custom Fields (if any)\n if (formConfig.schema?.fields && formConfig.schema.fields.length > 0) {\n stepsArray.push({\n id: 'custom-fields',\n title: 'Your Information',\n component: React.createElement(DynamicFormFields, { fields: formConfig.schema.fields }),\n validate: (data) => {\n const errors: Record<string, string> = {};\n\n for (const field of formConfig.schema!.fields) {\n if (field.required && !data[field.id]) {\n errors[field.id] = `${field.label} is required`;\n }\n }\n\n if (Object.keys(errors).length > 0) {\n return { valid: false, errors };\n }\n\n return { valid: true };\n },\n });\n }\n\n return stepsArray;\n }, [formConfig, services, siteId]);\n}\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { getCmsApiUrl } from '../../utils/api-url';\n\nexport interface Service {\n id: string;\n title: string;\n description?: string;\n durationMinutes?: number;\n}\n\nexport interface Resource {\n id: string;\n displayName: string;\n title?: string;\n}\n\nexport interface ServiceResourceSelectorProps {\n siteId: string;\n services: Service[];\n preSelectedServiceId?: string;\n preSelectedResourceId?: string;\n onSelect: (selection: { serviceId: string; resourceId?: string }) => void;\n onBack?: () => void;\n heading?: string;\n description?: string;\n}\n\n/**\n * ServiceResourceSelector Component\n *\n * Handles Step 1 of the booking flow: service and resource selection.\n * Only shown when the booking form allows multiple services or when\n * resource selection is needed.\n *\n * Features:\n * - Service selection (if multiple services available)\n * - Resource selection (if multiple resources available for selected service)\n * - Auto-skips if only one option available\n * - Fetches resources dynamically when service is selected\n */\nexport function ServiceResourceSelector({\n siteId,\n services,\n preSelectedServiceId,\n preSelectedResourceId,\n onSelect,\n onBack,\n heading = 'Select Service',\n description = 'Choose the service you\\'d like to book',\n}: ServiceResourceSelectorProps): React.ReactElement {\n const [selectedServiceId, setSelectedServiceId] = useState<string | undefined>(\n preSelectedServiceId\n );\n const [selectedResourceId, setSelectedResourceId] = useState<string | undefined>(\n preSelectedResourceId\n );\n const [resources, setResources] = useState<Resource[]>([]);\n const [isLoadingResources, setIsLoadingResources] = useState(false);\n const [resourceError, setResourceError] = useState<string | null>(null);\n\n const showServiceSelect = !preSelectedServiceId && services.length > 1;\n const showResourceSelect = resources.length > 1 && !preSelectedResourceId;\n\n // Load resources when service is selected\n const handleServiceChange = useCallback(async (serviceId: string) => {\n setSelectedServiceId(serviceId);\n setSelectedResourceId(undefined);\n setResourceError(null);\n\n // Fetch resources for this service\n try {\n setIsLoadingResources(true);\n const apiUrl = getCmsApiUrl();\n const response = await fetch(\n `${apiUrl}/sites/${siteId}/bookings/resources/reference?serviceId=${serviceId}`\n );\n\n if (!response.ok) {\n throw new Error('Failed to load resources');\n }\n\n const data = await response.json();\n const loadedResources = data.options?.map((opt: any) => ({\n id: opt.id,\n displayName: opt.label,\n })) || [];\n\n setResources(loadedResources);\n } catch (err) {\n console.error('Failed to load resources:', err);\n setResourceError('Failed to load practitioners. Please try again.');\n setResources([]);\n } finally {\n setIsLoadingResources(false);\n }\n }, [siteId]);\n\n const handleContinue = () => {\n if (selectedServiceId) {\n onSelect({\n serviceId: selectedServiceId,\n resourceId: selectedResourceId === '__any__' ? undefined : selectedResourceId,\n });\n }\n };\n\n const canContinue = selectedServiceId && !isLoadingResources;\n\n // Auto-select if only one service\n useEffect(() => {\n if (services.length === 1 && services[0] && !selectedServiceId) {\n handleServiceChange(services[0].id);\n }\n }, [services, selectedServiceId, handleServiceChange]);\n\n return (\n <div className=\"space-y-6 max-w-2xl mx-auto\">\n {/* Header */}\n <div>\n <h2 className=\"text-2xl font-bold\">{heading}</h2>\n {description && <p className=\"text-muted-foreground mt-2\">{description}</p>}\n </div>\n\n {/* Service Selection */}\n {showServiceSelect && (\n <div className=\"space-y-3\">\n <label className=\"text-sm font-medium\">Service</label>\n <div className=\"grid gap-3\">\n {services.map((service) => (\n <button\n key={service.id}\n type=\"button\"\n onClick={() => handleServiceChange(service.id)}\n className={`\n relative p-4 rounded-lg border-2 text-left transition-all\n ${\n selectedServiceId === service.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50'\n }\n `}\n >\n <div className=\"flex items-start justify-between\">\n <div>\n <div className=\"font-medium\">{service.title}</div>\n {service.description && (\n <div className=\"text-sm text-muted-foreground mt-1\">\n {service.description}\n </div>\n )}\n {service.durationMinutes && (\n <div className=\"text-sm text-muted-foreground mt-1\">\n {service.durationMinutes} minutes\n </div>\n )}\n </div>\n {selectedServiceId === service.id && (\n <div className=\"flex-shrink-0 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\n <svg\n className=\"w-3 h-3 text-primary-foreground\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path d=\"M5 13l4 4L19 7\"></path>\n </svg>\n </div>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Resource Selection */}\n {showResourceSelect && selectedServiceId && !isLoadingResources && (\n <div className=\"space-y-3\">\n <label className=\"text-sm font-medium\">Practitioner (Optional)</label>\n <p className=\"text-sm text-muted-foreground\">\n Choose a specific practitioner or select \"Any Available\"\n </p>\n <div className=\"grid gap-3\">\n <button\n type=\"button\"\n onClick={() => setSelectedResourceId('__any__')}\n className={`\n relative p-4 rounded-lg border-2 text-left transition-all\n ${\n selectedResourceId === '__any__'\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50'\n }\n `}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"font-medium\">Any Available</div>\n {selectedResourceId === '__any__' && (\n <div className=\"flex-shrink-0 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\n <svg\n className=\"w-3 h-3 text-primary-foreground\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path d=\"M5 13l4 4L19 7\"></path>\n </svg>\n </div>\n )}\n </div>\n </button>\n {resources.map((resource) => (\n <button\n key={resource.id}\n type=\"button\"\n onClick={() => setSelectedResourceId(resource.id)}\n className={`\n relative p-4 rounded-lg border-2 text-left transition-all\n ${\n selectedResourceId === resource.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50'\n }\n `}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"font-medium\">{resource.displayName}</div>\n {selectedResourceId === resource.id && (\n <div className=\"flex-shrink-0 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\n <svg\n className=\"w-3 h-3 text-primary-foreground\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path d=\"M5 13l4 4L19 7\"></path>\n </svg>\n </div>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Loading State */}\n {isLoadingResources && (\n <div className=\"text-center py-8\">\n <div className=\"inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\n <p className=\"text-sm text-muted-foreground mt-2\">Loading practitioners...</p>\n </div>\n )}\n\n {/* Error State */}\n {resourceError && (\n <div className=\"alert alert-error text-sm\">\n {resourceError}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex gap-3\">\n {onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"px-6 py-2 rounded-lg border border-border hover:bg-muted transition-colors\"\n >\n Back\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleContinue}\n disabled={!canContinue}\n className=\"flex-1 px-6 py-2 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Continue to Date Selection\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { useMultiStepData } from '../multi-step/MultiStepContext';\nimport { ServiceResourceSelector } from './ServiceResourceSelector';\nimport type { Service } from '../../hooks/useBookingFormConfig';\n\ninterface ServiceSelectionStepProps {\n siteId: string;\n services: Service[];\n}\n\n/**\n * ServiceSelectionStep Component\n *\n * Step 1: Service and optionally resource selection\n * Uses multi-step context to update booking data\n */\nexport function ServiceSelectionStep({\n siteId,\n services,\n}: ServiceSelectionStepProps): React.ReactElement {\n const { updateData } = useMultiStepData();\n\n return (\n <ServiceResourceSelector\n siteId={siteId}\n services={services}\n onSelect={({ serviceId, resourceId }) => {\n updateData({ serviceId, resourceId });\n }}\n />\n );\n}\n","'use client';\n\nimport React, { useEffect, useMemo } from 'react';\nimport { useMultiStepData } from '../multi-step/MultiStepContext';\nimport { DatePicker } from './DatePicker';\nimport { TimeSlotSelector } from './TimeSlotSelector';\nimport { useAvailableSlots } from '../../hooks/useAvailableSlots';\nimport { useAvailableDates } from '../../hooks/useAvailableDates';\nimport type { BookingFormData } from '../../hooks/useBookingSteps';\nimport type { Service } from '../../hooks/useBookingFormConfig';\n\ninterface DateTimeSelectionStepProps {\n siteId: string;\n preSelectedServiceId?: string;\n preSelectedResourceId?: string;\n /** When there's only one service, pass it here to display info and auto-select */\n singleService?: Service;\n}\n\n/**\n * DateTimeSelectionStep Component\n *\n * Step 2: Date and time slot selection\n * Integrates with multi-step context and fetches available slots.\n * Prefetches available dates to filter the date picker.\n */\nexport function DateTimeSelectionStep({\n siteId,\n preSelectedServiceId,\n preSelectedResourceId,\n singleService,\n}: DateTimeSelectionStepProps): React.ReactElement {\n const { data, updateData } = useMultiStepData<BookingFormData>();\n\n // Get serviceId/resourceId from context if available, otherwise use preselected\n const serviceId = data.serviceId || preSelectedServiceId;\n const resourceId = data.resourceId || preSelectedResourceId;\n const selectedDate = data.selectedDate || '';\n const selectedSlot = data.selectedSlot || '';\n\n // Auto-populate serviceId in form data if we have a preselected service\n // This ensures the submission has the serviceId even when service selection step is skipped\n useEffect(() => {\n if (preSelectedServiceId && !data.serviceId) {\n updateData({ serviceId: preSelectedServiceId });\n }\n }, [preSelectedServiceId, data.serviceId, updateData]);\n\n // Prefetch available dates for filtering the date picker\n const {\n availableDates,\n isLoading: isLoadingDates,\n error: datesError,\n hasMore,\n loadMore,\n } = useAvailableDates({\n siteId,\n serviceId,\n resourceId,\n timezone: 'UTC',\n initialDays: 30,\n });\n\n // Fetch slots for the selected date\n const { slots, isLoading: isLoadingSlots, error: slotsError } = useAvailableSlots({\n siteId,\n serviceId,\n resourceId,\n selectedDate,\n timezone: 'UTC',\n });\n\n // Convert available dates Set to sorted array for DatePicker\n const filteredDateOptions = useMemo(() => {\n if (isLoadingDates || availableDates.size === 0) {\n return []; // Will show loading or empty state\n }\n return [...availableDates].sort();\n }, [availableDates, isLoadingDates]);\n\n const handleDateChange = (date: string) => {\n updateData({ selectedDate: date, selectedSlot: '' }); // Reset slot when date changes\n };\n\n const handleSlotChange = (slot: string) => {\n updateData({ selectedSlot: slot });\n };\n\n // Combine errors for display\n const error = datesError || slotsError;\n\n return (\n <div className=\"space-y-6\">\n {/* Show service info when there's only one service */}\n {singleService && (\n <div className=\"rounded-lg border border-border bg-muted/30 p-4\">\n <h3 className=\"font-medium text-foreground\">{singleService.title}</h3>\n {singleService.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{singleService.description}</p>\n )}\n {singleService.durationMinutes && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Duration: {singleService.durationMinutes} minutes\n </p>\n )}\n </div>\n )}\n\n {error && (\n <div className=\"alert alert-error text-sm\">\n {error}\n </div>\n )}\n\n <DatePicker\n value={selectedDate}\n onChange={handleDateChange}\n dateOptions={filteredDateOptions}\n isLoading={isLoadingDates}\n isEmpty={!isLoadingDates && filteredDateOptions.length === 0}\n hasMore={hasMore}\n onLoadMore={loadMore}\n />\n\n {selectedDate && (\n <TimeSlotSelector\n value={selectedSlot}\n onChange={handleSlotChange}\n slots={slots}\n isLoading={isLoadingSlots}\n />\n )}\n </div>\n );\n}\n","/**\n * Date and time formatting utilities for blocks\n */\n\n/**\n * Maximum number of days to show in booking date picker.\n * Supports 90+ day visibility with progressive loading.\n */\nexport const BOOKING_DATE_RANGE_DAYS = 90;\n\n/**\n * Number of days to fetch per chunk when loading available dates.\n * Used by useAvailableDates hook for pagination.\n */\nexport const BOOKING_FETCH_CHUNK_DAYS = 30;\n\n/**\n * Generates an array of ISO date strings (YYYY-MM-DD) starting from today\n * @param days - Number of days to generate\n * @returns Array of date strings\n */\nexport function generateDateRange(days: number): string[] {\n const dates: string[] = [];\n const today = new Date();\n\n for (let i = 0; i < days; i++) {\n const date = new Date(today);\n date.setDate(date.getDate() + i);\n dates.push(date.toISOString().split('T')[0] ?? '');\n }\n\n return dates;\n}\n\n/**\n * Formats an ISO date string (YYYY-MM-DD) to a human-readable format\n * @param dateStr - ISO date string (e.g., \"2025-03-15\")\n * @returns Formatted date (e.g., \"Friday, March 15, 2025\")\n */\nexport function formatDate(dateStr: string): string {\n const date = new Date(dateStr + 'T00:00:00');\n return date.toLocaleDateString(undefined, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n}\n\n/**\n * Formats an ISO datetime string to a human-readable time\n * @param isoString - ISO datetime string (e.g., \"2025-03-15T14:30:00Z\")\n * @returns Formatted time (e.g., \"2:30 PM EST\")\n */\nexport function formatTime(isoString: string): string {\n const date = new Date(isoString);\n return date.toLocaleTimeString(undefined, {\n hour: 'numeric',\n minute: '2-digit',\n timeZoneName: 'short',\n });\n}\n","/**\n * DatePicker Component\n *\n * Displays a dropdown for selecting an appointment date from available dates.\n * Supports loading states, empty states, and progressive loading.\n */\n\nimport React from 'react';\nimport { formatDate } from '../../../../utils/date-formatting';\n\ntype DatePickerProps = {\n value: string;\n onChange: (date: string) => void;\n dateOptions: string[];\n required?: boolean;\n isLoading?: boolean;\n isEmpty?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n};\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n value,\n onChange,\n dateOptions,\n required = true,\n isLoading = false,\n isEmpty = false,\n hasMore = false,\n onLoadMore,\n}) => {\n // Loading state - show skeleton\n if (isLoading) {\n return (\n <div className=\"space-y-2\">\n <label className=\"form-label\">\n Select Date{required && <span className=\"required-marker\">*</span>}\n </label>\n <div className=\"h-10 w-full animate-pulse rounded-control card-surface\" />\n <p className=\"text-xs status-muted\">Loading available dates...</p>\n </div>\n );\n }\n\n // Empty state - no dates available\n if (isEmpty) {\n return (\n <div className=\"space-y-2\">\n <label className=\"form-label\">\n Select Date{required && <span className=\"required-marker\">*</span>}\n </label>\n <div className=\"alert alert-warning\">\n <p className=\"text-sm\">\n No available dates in this period.\n {hasMore && onLoadMore && (\n <button\n type=\"button\"\n onClick={onLoadMore}\n className=\"ml-2 underline hover:no-underline\"\n >\n Check later dates\n </button>\n )}\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <label htmlFor=\"booking-date\" className=\"form-label\">\n Select Date{required && <span className=\"required-marker\">*</span>}\n </label>\n <select\n id=\"booking-date\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n className=\"form-select\"\n >\n <option value=\"\">Choose a date...</option>\n {dateOptions.map((date: string) => (\n <option key={date} value={date}>\n {formatDate(date)}\n </option>\n ))}\n </select>\n {hasMore && onLoadMore && (\n <button\n type=\"button\"\n onClick={onLoadMore}\n className=\"button-link text-sm\"\n >\n Load more dates →\n </button>\n )}\n </div>\n );\n};\n","/**\n * TimeSlotSelector Component\n *\n * Displays available time slots for the selected date with loading and empty states.\n */\n\nimport React from 'react';\nimport { formatTime } from '../../../../utils/date-formatting';\nimport type { TimeSlot } from '../../hooks/useAvailableSlots';\n\ntype TimeSlotSelectorProps = {\n value: string;\n onChange: (slotStartTime: string) => void;\n slots: TimeSlot[];\n isLoading: boolean;\n required?: boolean;\n};\n\nexport const TimeSlotSelector: React.FC<TimeSlotSelectorProps> = ({\n value,\n onChange,\n slots,\n isLoading,\n required = true,\n}) => {\n return (\n <div className=\"space-y-2\">\n <label htmlFor=\"booking-slot\" className=\"form-label\">\n Select Time{required && <span className=\"required-marker\">*</span>}\n </label>\n {isLoading ? (\n <div className=\"alert alert-info text-sm text-center\">\n Loading available times...\n </div>\n ) : slots.length === 0 ? (\n <div className=\"alert text-sm text-center status-muted\">\n No available times for this date\n </div>\n ) : (\n <select\n id=\"booking-slot\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n className=\"form-select\"\n >\n <option value=\"\">Choose a time...</option>\n {slots.map((slot) => (\n <option key={slot.startAt} value={slot.startAt}>\n {formatTime(slot.startAt)}\n </option>\n ))}\n </select>\n )}\n </div>\n );\n};\n","/**\n * Custom hook for fetching available appointment slots\n */\n\nimport { useState, useEffect } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\n\nexport type TimeSlot = {\n startAt: string;\n endAt: string;\n resourceId: string;\n};\n\ntype UseAvailableSlotsOptions = {\n siteId: string;\n serviceId: string | undefined;\n resourceId: string | undefined;\n selectedDate: string;\n timezone: string;\n};\n\ntype UseAvailableSlotsResult = {\n slots: TimeSlot[];\n isLoading: boolean;\n error: string | null;\n};\n\n/**\n * Fetches available appointment slots for a given date\n *\n * Automatically refetches when dependencies change.\n * Returns empty slots array until a date is selected.\n */\nexport function useAvailableSlots({\n siteId,\n serviceId,\n resourceId,\n selectedDate,\n timezone,\n}: UseAvailableSlotsOptions): UseAvailableSlotsResult {\n const [slots, setSlots] = useState<TimeSlot[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n // Don't fetch if required params are missing\n if (!selectedDate || !serviceId) {\n setSlots([]);\n return;\n }\n\n const fetchSlots = async () => {\n setIsLoading(true);\n setError(null);\n setSlots([]);\n\n try {\n const params = new URLSearchParams({\n siteId,\n serviceId,\n startDate: selectedDate,\n endDate: selectedDate,\n timezone,\n });\n\n if (resourceId) {\n params.append('resourceId', resourceId);\n }\n\n const apiUrl = getCmsApiUrl();\n // Use public endpoint - no authentication required\n const response = await fetch(`${apiUrl}/public/bookings/availability/slots?${params}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Failed to load available times');\n }\n\n const data = await response.json();\n setSlots(data.slots);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load available times');\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchSlots();\n }, [selectedDate, serviceId, resourceId, timezone, siteId]);\n\n return { slots, isLoading, error };\n}\n","/**\n * Custom hook for fetching dates with available appointment slots\n *\n * Prefetches available dates for a date range with support for progressive loading.\n * Returns a Set for O(1) lookup when filtering DatePicker options.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\nimport { BOOKING_FETCH_CHUNK_DAYS } from '../../../utils/date-formatting';\n\nexport type UseAvailableDatesOptions = {\n siteId: string;\n serviceId: string | undefined;\n resourceId?: string;\n timezone?: string;\n initialDays?: number; // Default: 30\n};\n\nexport type UseAvailableDatesResult = {\n availableDates: Set<string>; // O(1) lookup by date (YYYY-MM-DD)\n isLoading: boolean;\n error: string | null;\n hasMore: boolean;\n loadMore: () => void;\n loadedRange: { start: string; end: string } | null;\n};\n\n/**\n * Fetches dates with availability for a service\n *\n * On mount, fetches the first `initialDays` days.\n * Call `loadMore()` to fetch the next chunk of dates.\n * Uses requestId pattern to handle race conditions.\n */\nexport function useAvailableDates({\n siteId,\n serviceId,\n resourceId,\n timezone = 'UTC',\n initialDays = 30,\n}: UseAvailableDatesOptions): UseAvailableDatesResult {\n const [availableDates, setAvailableDates] = useState<Set<string>>(new Set());\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasMore, setHasMore] = useState(false);\n const [loadedRange, setLoadedRange] = useState<{ start: string; end: string } | null>(null);\n\n const nextStartDateRef = useRef<string | null>(null);\n const requestIdRef = useRef(0);\n\n const fetchDates = useCallback(\n async (startDate: string, endDate: string, append = false) => {\n if (!serviceId) {\n console.log('[useAvailableDates] No serviceId, skipping fetch');\n return;\n }\n\n const requestId = ++requestIdRef.current;\n setIsLoading(true);\n setError(null);\n\n try {\n const apiUrl = getCmsApiUrl();\n const params = new URLSearchParams({\n siteId,\n serviceId,\n startDate,\n endDate,\n timezone,\n });\n if (resourceId) {\n params.append('resourceId', resourceId);\n }\n\n const url = `${apiUrl}/public/bookings/availability/dates?${params}`;\n console.log('[useAvailableDates] Fetching:', url);\n\n const res = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n console.log('[useAvailableDates] Response status:', res.status);\n\n // Check for stale request\n if (requestId !== requestIdRef.current) return;\n\n if (!res.ok) {\n const errorData = await res.json().catch(() => ({}));\n console.log('[useAvailableDates] Error response:', errorData);\n throw new Error(errorData.error || 'Failed to fetch available dates');\n }\n\n const data = await res.json();\n console.log('[useAvailableDates] Received dates:', data);\n\n setAvailableDates((prev) => {\n const newSet = append ? new Set(prev) : new Set<string>();\n (data.dates as string[]).forEach((d) => newSet.add(d));\n console.log('[useAvailableDates] Updated availableDates Set size:', newSet.size);\n return newSet;\n });\n\n setHasMore(data.hasMore);\n nextStartDateRef.current = data.nextStartDate || null;\n setLoadedRange((prev) => ({\n start: append && prev ? prev.start : data.startDate,\n end: data.endDate,\n }));\n } catch (err) {\n // Check for stale request\n if (requestId !== requestIdRef.current) return;\n setError(err instanceof Error ? err.message : 'Failed to load available dates');\n } finally {\n // Check for stale request\n if (requestId === requestIdRef.current) {\n setIsLoading(false);\n }\n }\n },\n [siteId, serviceId, resourceId, timezone]\n );\n\n // Initial fetch when serviceId becomes available\n useEffect(() => {\n if (!serviceId) {\n // Reset state when serviceId is cleared\n setAvailableDates(new Set());\n setLoadedRange(null);\n setHasMore(false);\n return;\n }\n\n const today = new Date().toISOString().split('T')[0] ?? '';\n const endDate = new Date(Date.now() + initialDays * 24 * 60 * 60 * 1000)\n .toISOString()\n .split('T')[0] ?? '';\n\n fetchDates(today, endDate, false);\n }, [serviceId, fetchDates, initialDays]);\n\n const loadMore = useCallback(() => {\n if (!nextStartDateRef.current || isLoading) return;\n\n const start = nextStartDateRef.current;\n const msPerDay = 24 * 60 * 60 * 1000;\n const end = new Date(new Date(start).getTime() + BOOKING_FETCH_CHUNK_DAYS * msPerDay)\n .toISOString()\n .split('T')[0] ?? '';\n\n fetchDates(start, end, true);\n }, [fetchDates, isLoading]);\n\n return {\n availableDates,\n isLoading,\n error,\n hasMore,\n loadMore,\n loadedRange,\n };\n}\n","'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport { useMultiStepData } from './MultiStepContext';\n\n/**\n * Form field option\n */\nexport interface FormFieldOption {\n value: string;\n label: string;\n}\n\n/**\n * Form field definition (matches packages/db/src/schemas/forms.ts)\n */\nexport interface FormField {\n id: string;\n label: string;\n type:\n | 'text'\n | 'email'\n | 'textarea'\n | 'select'\n | 'radio'\n | 'checkbox'\n | 'consent'\n | 'tel'\n | 'url'\n | 'number'\n | 'date'\n | 'time';\n required?: boolean;\n placeholder?: string;\n helpText?: string;\n options?: FormFieldOption[];\n multiple?: boolean;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n min?: number;\n max?: number;\n}\n\n/**\n * DynamicFormFields Component Props\n */\nexport interface DynamicFormFieldsProps {\n fields: FormField[];\n showLabels?: boolean;\n className?: string;\n}\n\n/**\n * DynamicFormFields Component\n *\n * Renders form fields dynamically based on FormField definitions.\n * Integrates with multi-step context for data management.\n *\n * Features:\n * - Supports all field types from form schema\n * - Client-side validation\n * - Accessible form controls\n * - Integrates with multi-step context\n *\n * Usage:\n * ```tsx\n * <DynamicFormFields\n * fields={formSchema.fields}\n * showLabels={true}\n * />\n * ```\n */\nexport function DynamicFormFields({\n fields,\n showLabels = true,\n className = '',\n}: DynamicFormFieldsProps): React.ReactElement {\n const { data, updateData } = useMultiStepData<Record<string, any>>();\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const handleChange = useCallback(\n (fieldId: string, value: any) => {\n updateData({ [fieldId]: value });\n },\n [updateData]\n );\n\n const handleBlur = useCallback((fieldId: string) => {\n setTouched((prev) => ({ ...prev, [fieldId]: true }));\n }, []);\n\n const getFieldError = useCallback(\n (field: FormField): string | null => {\n const value = data[field.id];\n const isTouched = touched[field.id];\n\n if (!isTouched) return null;\n\n // Required validation\n if (field.required && !value) {\n return `${field.label} is required`;\n }\n\n // Type-specific validation\n if (value) {\n switch (field.type) {\n case 'email':\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n return 'Please enter a valid email address';\n }\n break;\n case 'url':\n try {\n new URL(value);\n } catch {\n return 'Please enter a valid URL';\n }\n break;\n case 'tel':\n if (!/^[+\\d\\s\\-()]+$/.test(value)) {\n return 'Please enter a valid phone number';\n }\n break;\n case 'number':\n const num = Number(value);\n if (isNaN(num)) {\n return 'Please enter a valid number';\n }\n if (field.min !== undefined && num < field.min) {\n return `Value must be at least ${field.min}`;\n }\n if (field.max !== undefined && num > field.max) {\n return `Value must be at most ${field.max}`;\n }\n break;\n }\n\n // Length validation\n if (typeof value === 'string') {\n if (field.minLength && value.length < field.minLength) {\n return `Must be at least ${field.minLength} characters`;\n }\n if (field.maxLength && value.length > field.maxLength) {\n return `Must be at most ${field.maxLength} characters`;\n }\n }\n\n // Pattern validation\n if (field.pattern && typeof value === 'string') {\n const regex = new RegExp(field.pattern);\n if (!regex.test(value)) {\n return 'Please match the required format';\n }\n }\n }\n\n return null;\n },\n [data, touched]\n );\n\n return (\n <div className={`space-y-6 ${className}`}>\n {fields.map((field) => {\n const error = getFieldError(field);\n const value = data[field.id] ?? '';\n\n return (\n <div key={field.id} className=\"space-y-2\">\n {showLabels && (\n <label htmlFor={field.id} className=\"form-label\">\n {field.label}\n {field.required && <span className=\"required-marker\">*</span>}\n </label>\n )}\n\n {field.helpText && (\n <p className=\"text-sm status-muted\">{field.helpText}</p>\n )}\n\n <FieldInput\n field={field}\n value={value}\n onChange={(val) => handleChange(field.id, val)}\n onBlur={() => handleBlur(field.id)}\n error={error}\n />\n\n {error && <p className=\"text-sm status-error\">{error}</p>}\n </div>\n );\n })}\n </div>\n );\n}\n\n/**\n * FieldInput Component\n *\n * Renders the appropriate input component based on field type\n */\nfunction FieldInput({\n field,\n value,\n onChange,\n onBlur,\n error,\n}: {\n field: FormField;\n value: any;\n onChange: (value: any) => void;\n onBlur: () => void;\n error: string | null;\n}) {\n // Use generated form classes from theme\n // Error state is handled via aria-invalid attribute in the generated CSS\n const inputClass = 'form-input';\n const textareaClass = 'form-textarea';\n const selectClass = 'form-select';\n const checkboxClass = 'form-checkbox';\n const radioClass = 'form-radio';\n\n switch (field.type) {\n case 'textarea':\n return (\n <textarea\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={field.placeholder}\n required={field.required}\n minLength={field.minLength}\n maxLength={field.maxLength}\n rows={4}\n aria-invalid={error ? 'true' : undefined}\n className={textareaClass}\n />\n );\n\n case 'select':\n if (field.multiple) {\n return (\n <select\n id={field.id}\n name={field.id}\n value={Array.isArray(value) ? value : []}\n onChange={(e) => {\n const selected = Array.from(e.target.selectedOptions, (opt) => opt.value);\n onChange(selected);\n }}\n onBlur={onBlur}\n required={field.required}\n multiple\n aria-invalid={error ? 'true' : undefined}\n className={`${selectClass} h-32`}\n >\n {field.options?.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <select\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n aria-invalid={error ? 'true' : undefined}\n className={selectClass}\n >\n <option value=\"\">Select an option...</option>\n {field.options?.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n\n case 'radio':\n return (\n <div className=\"space-y-2\">\n {field.options?.map((opt) => (\n <label key={opt.value} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={field.id}\n value={opt.value}\n checked={value === opt.value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n className={radioClass}\n />\n <span className=\"text-sm\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n\n case 'checkbox':\n if (field.options && field.options.length > 1) {\n // Multiple checkboxes\n const checkedValues = Array.isArray(value) ? value : [];\n return (\n <div className=\"space-y-2\">\n {field.options.map((opt) => (\n <label key={opt.value} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n name={field.id}\n value={opt.value}\n checked={checkedValues.includes(opt.value)}\n onChange={(e) => {\n const newValues = e.target.checked\n ? [...checkedValues, opt.value]\n : checkedValues.filter((v) => v !== opt.value);\n onChange(newValues);\n }}\n onBlur={onBlur}\n className={checkboxClass}\n />\n <span className=\"text-sm\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n }\n\n // Single checkbox\n return (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n id={field.id}\n name={field.id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n required={field.required}\n className={checkboxClass}\n />\n <span className=\"text-sm\">{field.placeholder || field.label}</span>\n </label>\n );\n\n case 'consent':\n return (\n <label className=\"flex items-start gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n id={field.id}\n name={field.id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n required={field.required}\n className={`${checkboxClass} mt-0.5`}\n />\n <span className=\"text-sm\">{field.placeholder || field.label}</span>\n </label>\n );\n\n case 'number':\n return (\n <input\n type=\"number\"\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={field.placeholder}\n required={field.required}\n min={field.min}\n max={field.max}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n\n case 'date':\n return (\n <input\n type=\"date\"\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n min={field.min ? String(field.min) : undefined}\n max={field.max ? String(field.max) : undefined}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n\n case 'time':\n return (\n <input\n type=\"time\"\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n\n // text, email, tel, url\n default:\n return (\n <input\n type={field.type}\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={field.placeholder}\n required={field.required}\n minLength={field.minLength}\n maxLength={field.maxLength}\n pattern={field.pattern}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n }\n}\n","/**\n * Custom hook for submitting appointment bookings\n */\n\nimport { useState } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\n\nexport type BookingSubmissionData = {\n formId: string; // NEW - references the booking form\n serviceId: string;\n resourceId?: string; // Optional - may be undefined if \"any available\"\n startAt: string;\n endAt: string;\n customFields: Record<string, any>; // NEW - dynamic fields from form schema\n timezone: string;\n};\n\ntype UseBookingSubmissionResult = {\n submit: (data: BookingSubmissionData) => Promise<void>;\n isSubmitting: boolean;\n error: string | null;\n isSuccess: boolean;\n};\n\n/**\n * Hook for submitting appointment bookings\n *\n * Handles API call, loading state, and error handling.\n * Returns isSuccess=true after successful submission.\n *\n * @param _siteId - Site ID (currently unused; site context is derived from formId).\n * Kept for API consistency and potential future use.\n */\nexport function useBookingSubmission(_siteId: string): UseBookingSubmissionResult {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const submit = async (data: BookingSubmissionData) => {\n setIsSubmitting(true);\n setError(null);\n\n try {\n const apiUrl = getCmsApiUrl();\n // Use public endpoint - no authentication required\n const response = await fetch(`${apiUrl}/public/bookings/appointments`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n formId: data.formId,\n serviceId: data.serviceId,\n resourceId: data.resourceId || null,\n startAt: data.startAt,\n endAt: data.endAt,\n customFields: data.customFields,\n timezone: data.timezone,\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Failed to book appointment');\n }\n\n setIsSuccess(true);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to book appointment');\n throw err; // Re-throw so caller can handle if needed\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return { submit, isSubmitting, error, isSuccess };\n}\n","/**\n * Hook to load booking form configuration and services\n */\n\nimport { useState, useEffect } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\n\nexport interface Service {\n id: string;\n title: string;\n description?: string;\n durationMinutes?: number;\n}\n\nexport interface BookingFormConfig {\n id: string;\n name: string;\n slug: string;\n settings?: {\n type: 'booking';\n serviceId?: string;\n serviceIds?: string[];\n resourceId?: string;\n requiresApproval?: boolean;\n successMessage?: string;\n };\n schema?: {\n version: string;\n fields: any[];\n };\n}\n\ninterface UseBookingFormConfigResult {\n formConfig: BookingFormConfig | null;\n services: Service[];\n isLoading: boolean;\n error: string | null;\n}\n\n// UUID regex pattern\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Load booking form configuration and associated services\n *\n * Fetches the form definition and determines which services to load based on:\n * - Single service (serviceId)\n * - Multiple services (serviceIds array)\n * - All site services (no serviceId/serviceIds)\n *\n * Supports both UUID and slug for formId. When using a slug, siteId is required.\n */\nexport function useBookingFormConfig(\n siteId: string,\n formId: string\n): UseBookingFormConfigResult {\n const [formConfig, setFormConfig] = useState<BookingFormConfig | null>(null);\n const [services, setServices] = useState<Service[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let mounted = true;\n\n async function loadFormAndServices() {\n try {\n setIsLoading(true);\n setError(null);\n\n const apiUrl = getCmsApiUrl();\n // Support both UUID and slug lookup\n // For slug lookup, pass siteId as query param (required by API)\n const isUUID = UUID_REGEX.test(formId);\n const formUrl = isUUID\n ? `${apiUrl}/public/forms/${formId}`\n : `${apiUrl}/public/forms/${formId}?siteId=${encodeURIComponent(siteId)}`;\n const response = await fetch(formUrl);\n\n if (!response.ok) {\n throw new Error('Failed to load booking form');\n }\n\n const { form: rawData } = await response.json();\n\n if (!mounted) return;\n\n // Normalize API response to match BookingFormConfig interface\n const normalizedForm: BookingFormConfig = {\n id: rawData.id,\n name: rawData.name,\n slug: rawData.slug,\n settings: rawData.settingsJson ?? rawData.settings,\n schema: rawData.schemaJson ?? rawData.schema,\n };\n\n setFormConfig(normalizedForm);\n\n // Load services based on form configuration\n // Use public endpoints (no authentication required)\n if (!normalizedForm.settings?.serviceId && !normalizedForm.settings?.serviceIds) {\n // Load all services for the site\n const servicesResponse = await fetch(\n `${apiUrl}/public/bookings/services?siteId=${encodeURIComponent(siteId)}`\n );\n if (servicesResponse.ok) {\n const servicesData = await servicesResponse.json();\n if (mounted) {\n setServices(servicesData.services || []);\n }\n }\n } else if (normalizedForm.settings?.serviceIds && normalizedForm.settings.serviceIds.length > 0) {\n // Load specific services\n const servicesResponse = await fetch(\n `${apiUrl}/public/bookings/services?siteId=${encodeURIComponent(siteId)}&ids=${normalizedForm.settings.serviceIds.join(',')}`\n );\n if (servicesResponse.ok) {\n const servicesData = await servicesResponse.json();\n if (mounted) {\n setServices(servicesData.services || []);\n }\n }\n } else if (normalizedForm.settings?.serviceId) {\n // Single service - load it\n const serviceResponse = await fetch(\n `${apiUrl}/public/bookings/services/${normalizedForm.settings.serviceId}?siteId=${encodeURIComponent(siteId)}`\n );\n if (serviceResponse.ok) {\n const serviceData = await serviceResponse.json();\n if (mounted) {\n setServices([serviceData.service || serviceData]);\n }\n }\n }\n } catch (err) {\n console.error('Failed to load form:', err);\n if (mounted) {\n setError('Failed to load booking form. Please try again later.');\n }\n } finally {\n if (mounted) {\n setIsLoading(false);\n }\n }\n }\n\n loadFormAndServices();\n\n return () => {\n mounted = false;\n };\n }, [siteId, formId]);\n\n return { formConfig, services, isLoading, error };\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/.pnpm/altcha@1.5.1/node_modules/altcha/dist/altcha.js","../../src/bookings/index.ts","../../../blocks/src/system/runtime/utils/api-url.ts","../../../altcha/dist/client.mjs","../../../../node_modules/.pnpm/altcha-lib@1.4.1/node_modules/altcha-lib/dist/helpers.js","../../../altcha/dist/index.mjs","../../../blocks/src/system/runtime/nodes/booking-form.client.tsx","../../../blocks/src/system/runtime/components/multi-step/MultiStepForm.tsx","../../../blocks/src/system/runtime/components/multi-step/MultiStepContext.tsx","../../../blocks/src/system/runtime/components/multi-step/useMultiStep.ts","../../../blocks/src/system/runtime/components/booking/SuccessMessage.tsx","../../../blocks/src/system/runtime/hooks/useBookingSteps.ts","../../../blocks/src/system/runtime/components/booking/ServiceResourceSelector.tsx","../../../blocks/src/system/runtime/components/booking/ServiceSelectionStep.tsx","../../../blocks/src/system/runtime/components/booking/DateTimeSelectionStep.tsx","../../../blocks/src/utils/date-formatting.ts","../../../blocks/src/system/runtime/components/booking/DatePicker.tsx","../../../blocks/src/system/runtime/components/booking/TimeSlotSelector.tsx","../../../blocks/src/system/runtime/hooks/useAvailableSlots.ts","../../../blocks/src/system/runtime/hooks/useAvailableDates.ts","../../../blocks/src/system/runtime/components/multi-step/DynamicFormFields.tsx","../../../blocks/src/system/runtime/hooks/useBookingSubmission.ts","../../../blocks/src/system/runtime/hooks/useBookingFormConfig.ts"],"sourcesContent":["var Ri = Object.defineProperty;\nvar Vr = (e) => {\n throw TypeError(e);\n};\nvar Ii = (e, t, r) => t in e ? Ri(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;\nvar le = (e, t, r) => Ii(e, typeof t != \"symbol\" ? t + \"\" : t, r), Br = (e, t, r) => t.has(e) || Vr(\"Cannot \" + r);\nvar G = (e, t, r) => (Br(e, t, \"read from private field\"), r ? r.call(e) : t.get(e)), Vt = (e, t, r) => t.has(e) ? Vr(\"Cannot add the same private member more than once\") : t instanceof WeakSet ? t.add(e) : t.set(e, r), Bt = (e, t, r, i) => (Br(e, t, \"write to private field\"), i ? i.call(e, r) : t.set(e, r), r);\nconst ln = `(function(){\"use strict\";const d=new TextEncoder;function p(e){return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,\"0\")).join(\"\")}async function b(e,t,r){if(typeof crypto>\"u\"||!(\"subtle\"in crypto)||!(\"digest\"in crypto.subtle))throw new Error(\"Web Crypto is not available. Secure context is required (https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts).\");return p(await crypto.subtle.digest(r.toUpperCase(),d.encode(e+t)))}function w(e,t,r=\"SHA-256\",n=1e6,s=0){const o=new AbortController,a=Date.now();return{promise:(async()=>{for(let c=s;c<=n;c+=1){if(o.signal.aborted)return null;if(await b(t,c,r)===e)return{number:c,took:Date.now()-a}}return null})(),controller:o}}function h(e){const t=atob(e),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function g(e,t=12){const r=new Uint8Array(t);for(let n=0;n<t;n++)r[n]=e%256,e=Math.floor(e/256);return r}async function m(e,t=\"\",r=1e6,n=0){const s=\"AES-GCM\",o=new AbortController,a=Date.now(),l=async()=>{for(let u=n;u<=r;u+=1){if(o.signal.aborted||!c||!y)return null;try{const f=await crypto.subtle.decrypt({name:s,iv:g(u)},c,y);if(f)return{clearText:new TextDecoder().decode(f),took:Date.now()-a}}catch{}}return null};let c=null,y=null;try{y=h(e);const u=await crypto.subtle.digest(\"SHA-256\",d.encode(t));c=await crypto.subtle.importKey(\"raw\",u,s,!1,[\"decrypt\"])}catch{return{promise:Promise.reject(),controller:o}}return{promise:l(),controller:o}}let i;onmessage=async e=>{const{type:t,payload:r,start:n,max:s}=e.data;let o=null;if(t===\"abort\")i==null||i.abort(),i=void 0;else if(t===\"work\"){if(\"obfuscated\"in r){const{key:a,obfuscated:l}=r||{};o=await m(l,a,s,n)}else{const{algorithm:a,challenge:l,salt:c}=r||{};o=w(l,c,a,s,n)}i=o.controller,o.promise.then(a=>{self.postMessage(a&&{...a,worker:!0})})}}})();\n`, qr = typeof self < \"u\" && self.Blob && new Blob([ln], { type: \"text/javascript;charset=utf-8\" });\nfunction Si(e) {\n let t;\n try {\n if (t = qr && (self.URL || self.webkitURL).createObjectURL(qr), !t) throw \"\";\n const r = new Worker(t, {\n name: e == null ? void 0 : e.name\n });\n return r.addEventListener(\"error\", () => {\n (self.URL || self.webkitURL).revokeObjectURL(t);\n }), r;\n } catch {\n return new Worker(\n \"data:text/javascript;charset=utf-8,\" + encodeURIComponent(ln),\n {\n name: e == null ? void 0 : e.name\n }\n );\n } finally {\n t && (self.URL || self.webkitURL).revokeObjectURL(t);\n }\n}\nconst Ti = \"5\";\nvar an;\ntypeof window < \"u\" && ((an = window.__svelte ?? (window.__svelte = {})).v ?? (an.v = /* @__PURE__ */ new Set())).add(Ti);\nconst Ni = 1, Li = 4, Di = 8, Pi = 16, Oi = 1, Fi = 2, zt = \"[\", sn = \"[!\", fn = \"]\", Je = {}, Z = Symbol(), Mi = \"http://www.w3.org/1999/xhtml\", Hr = !1;\nfunction un(e) {\n throw new Error(\"https://svelte.dev/e/lifecycle_outside_component\");\n}\nvar cn = Array.isArray, Ui = Array.prototype.indexOf, ji = Array.from, yt = Object.keys, Et = Object.defineProperty, Oe = Object.getOwnPropertyDescriptor, Vi = Object.getOwnPropertyDescriptors, Bi = Object.prototype, qi = Array.prototype, dn = Object.getPrototypeOf, Wr = Object.isExtensible;\nfunction hn(e) {\n for (var t = 0; t < e.length; t++)\n e[t]();\n}\nconst fe = 2, vn = 4, It = 8, Xt = 16, be = 32, Me = 64, xt = 128, ee = 256, $t = 512, K = 1024, he = 2048, Ue = 4096, Ke = 8192, St = 16384, Hi = 32768, Qt = 65536, Wi = 1 << 19, gn = 1 << 20, Ht = 1 << 21, ut = Symbol(\"$state\"), _n = Symbol(\"legacy props\"), Yi = Symbol(\"\");\nfunction Gi(e) {\n throw new Error(\"https://svelte.dev/e/effect_in_teardown\");\n}\nfunction Zi() {\n throw new Error(\"https://svelte.dev/e/effect_in_unowned_derived\");\n}\nfunction Ji(e) {\n throw new Error(\"https://svelte.dev/e/effect_orphan\");\n}\nfunction Ki() {\n throw new Error(\"https://svelte.dev/e/effect_update_depth_exceeded\");\n}\nfunction zi() {\n throw new Error(\"https://svelte.dev/e/hydration_failed\");\n}\nfunction Xi(e) {\n throw new Error(\"https://svelte.dev/e/props_invalid_value\");\n}\nfunction Qi() {\n throw new Error(\"https://svelte.dev/e/state_descriptors_fixed\");\n}\nfunction eo() {\n throw new Error(\"https://svelte.dev/e/state_prototype_fixed\");\n}\nfunction to() {\n throw new Error(\"https://svelte.dev/e/state_unsafe_mutation\");\n}\nfunction Tt(e) {\n console.warn(\"https://svelte.dev/e/hydration_mismatch\");\n}\nlet L = !1;\nfunction Ze(e) {\n L = e;\n}\nlet P;\nfunction Re(e) {\n if (e === null)\n throw Tt(), Je;\n return P = e;\n}\nfunction ze() {\n return Re(\n /** @type {TemplateNode} */\n /* @__PURE__ */ Te(P)\n );\n}\nfunction z(e) {\n if (L) {\n if (/* @__PURE__ */ Te(P) !== null)\n throw Tt(), Je;\n P = e;\n }\n}\nfunction ro() {\n for (var e = 0, t = P; ; ) {\n if (t.nodeType === 8) {\n var r = (\n /** @type {Comment} */\n t.data\n );\n if (r === fn) {\n if (e === 0) return t;\n e -= 1;\n } else (r === zt || r === sn) && (e += 1);\n }\n var i = (\n /** @type {TemplateNode} */\n /* @__PURE__ */ Te(t)\n );\n t.remove(), t = i;\n }\n}\nlet no = !1;\nfunction ke(e) {\n if (typeof e != \"object\" || e === null || ut in e)\n return e;\n const t = dn(e);\n if (t !== Bi && t !== qi)\n return e;\n var r = /* @__PURE__ */ new Map(), i = cn(e), o = /* @__PURE__ */ J(0), a = R, l = (s) => {\n var f = R;\n ve(a);\n var d = s();\n return ve(f), d;\n };\n return i && r.set(\"length\", /* @__PURE__ */ J(\n /** @type {any[]} */\n e.length\n )), new Proxy(\n /** @type {any} */\n e,\n {\n defineProperty(s, f, d) {\n (!(\"value\" in d) || d.configurable === !1 || d.enumerable === !1 || d.writable === !1) && Qi();\n var v = r.get(f);\n return v === void 0 ? (v = l(() => /* @__PURE__ */ J(d.value)), r.set(f, v)) : D(\n v,\n l(() => ke(d.value))\n ), !0;\n },\n deleteProperty(s, f) {\n var d = r.get(f);\n if (d === void 0)\n f in s && (r.set(\n f,\n l(() => /* @__PURE__ */ J(Z))\n ), qt(o));\n else {\n if (i && typeof f == \"string\") {\n var v = (\n /** @type {Source<number>} */\n r.get(\"length\")\n ), h = Number(f);\n Number.isInteger(h) && h < v.v && D(v, h);\n }\n D(d, Z), qt(o);\n }\n return !0;\n },\n get(s, f, d) {\n var m;\n if (f === ut)\n return e;\n var v = r.get(f), h = f in s;\n if (v === void 0 && (!h || (m = Oe(s, f)) != null && m.writable) && (v = l(() => /* @__PURE__ */ J(ke(h ? s[f] : Z))), r.set(f, v)), v !== void 0) {\n var g = c(v);\n return g === Z ? void 0 : g;\n }\n return Reflect.get(s, f, d);\n },\n getOwnPropertyDescriptor(s, f) {\n var d = Reflect.getOwnPropertyDescriptor(s, f);\n if (d && \"value\" in d) {\n var v = r.get(f);\n v && (d.value = c(v));\n } else if (d === void 0) {\n var h = r.get(f), g = h == null ? void 0 : h.v;\n if (h !== void 0 && g !== Z)\n return {\n enumerable: !0,\n configurable: !0,\n value: g,\n writable: !0\n };\n }\n return d;\n },\n has(s, f) {\n var g;\n if (f === ut)\n return !0;\n var d = r.get(f), v = d !== void 0 && d.v !== Z || Reflect.has(s, f);\n if (d !== void 0 || I !== null && (!v || (g = Oe(s, f)) != null && g.writable)) {\n d === void 0 && (d = l(() => /* @__PURE__ */ J(v ? ke(s[f]) : Z)), r.set(f, d));\n var h = c(d);\n if (h === Z)\n return !1;\n }\n return v;\n },\n set(s, f, d, v) {\n var U;\n var h = r.get(f), g = f in s;\n if (i && f === \"length\")\n for (var m = d; m < /** @type {Source<number>} */\n h.v; m += 1) {\n var k = r.get(m + \"\");\n k !== void 0 ? D(k, Z) : m in s && (k = l(() => /* @__PURE__ */ J(Z)), r.set(m + \"\", k));\n }\n h === void 0 ? (!g || (U = Oe(s, f)) != null && U.writable) && (h = l(() => /* @__PURE__ */ J(void 0)), D(\n h,\n l(() => ke(d))\n ), r.set(f, h)) : (g = h.v !== Z, D(\n h,\n l(() => ke(d))\n ));\n var N = Reflect.getOwnPropertyDescriptor(s, f);\n if (N != null && N.set && N.set.call(v, d), !g) {\n if (i && typeof f == \"string\") {\n var F = (\n /** @type {Source<number>} */\n r.get(\"length\")\n ), V = Number(f);\n Number.isInteger(V) && V >= F.v && D(F, V + 1);\n }\n qt(o);\n }\n return !0;\n },\n ownKeys(s) {\n c(o);\n var f = Reflect.ownKeys(s).filter((h) => {\n var g = r.get(h);\n return g === void 0 || g.v !== Z;\n });\n for (var [d, v] of r)\n v.v !== Z && !(d in s) && f.push(d);\n return f;\n },\n setPrototypeOf() {\n eo();\n }\n }\n );\n}\nfunction qt(e, t = 1) {\n D(e, e.v + t);\n}\nvar Yr, mn, wn, pn;\nfunction Wt() {\n if (Yr === void 0) {\n Yr = window, mn = /Firefox/.test(navigator.userAgent);\n var e = Element.prototype, t = Node.prototype, r = Text.prototype;\n wn = Oe(t, \"firstChild\").get, pn = Oe(t, \"nextSibling\").get, Wr(e) && (e.__click = void 0, e.__className = void 0, e.__attributes = null, e.__style = void 0, e.__e = void 0), Wr(r) && (r.__t = void 0);\n }\n}\nfunction er(e = \"\") {\n return document.createTextNode(e);\n}\n// @__NO_SIDE_EFFECTS__\nfunction ae(e) {\n return wn.call(e);\n}\n// @__NO_SIDE_EFFECTS__\nfunction Te(e) {\n return pn.call(e);\n}\nfunction X(e, t) {\n if (!L)\n return /* @__PURE__ */ ae(e);\n var r = (\n /** @type {TemplateNode} */\n /* @__PURE__ */ ae(P)\n );\n return r === null && (r = P.appendChild(er())), Re(r), r;\n}\nfunction Gr(e, t) {\n if (!L) {\n var r = (\n /** @type {DocumentFragment} */\n /* @__PURE__ */ ae(\n /** @type {Node} */\n e\n )\n );\n return r instanceof Comment && r.data === \"\" ? /* @__PURE__ */ Te(r) : r;\n }\n return P;\n}\nfunction we(e, t = 1, r = !1) {\n let i = L ? P : e;\n for (var o; t--; )\n o = i, i = /** @type {TemplateNode} */\n /* @__PURE__ */ Te(i);\n if (!L)\n return i;\n var a = i == null ? void 0 : i.nodeType;\n if (r && a !== 3) {\n var l = er();\n return i === null ? o == null || o.after(l) : i.before(l), Re(l), l;\n }\n return Re(i), /** @type {TemplateNode} */\n i;\n}\nfunction io(e) {\n e.textContent = \"\";\n}\nfunction bn(e) {\n return e === this.v;\n}\nfunction oo(e, t) {\n return e != e ? t == t : e !== t || e !== null && typeof e == \"object\" || typeof e == \"function\";\n}\nfunction yn(e) {\n return !oo(e, this.v);\n}\n// @__NO_SIDE_EFFECTS__\nfunction tr(e) {\n var t = fe | he, r = R !== null && (R.f & fe) !== 0 ? (\n /** @type {Derived} */\n R\n ) : null;\n return I === null || r !== null && (r.f & ee) !== 0 ? t |= ee : I.f |= gn, {\n ctx: W,\n deps: null,\n effects: null,\n equals: bn,\n f: t,\n fn: e,\n reactions: null,\n rv: 0,\n v: (\n /** @type {V} */\n null\n ),\n wv: 0,\n parent: r ?? I\n };\n}\n// @__NO_SIDE_EFFECTS__\nfunction st(e) {\n const t = /* @__PURE__ */ tr(e);\n return On(t), t;\n}\nfunction En(e) {\n var t = e.effects;\n if (t !== null) {\n e.effects = null;\n for (var r = 0; r < t.length; r += 1)\n Ie(\n /** @type {Effect} */\n t[r]\n );\n }\n}\nfunction ao(e) {\n for (var t = e.parent; t !== null; ) {\n if ((t.f & fe) === 0)\n return (\n /** @type {Effect} */\n t\n );\n t = t.parent;\n }\n return null;\n}\nfunction xn(e) {\n var t, r = I;\n Se(ao(e));\n try {\n En(e), t = jn(e);\n } finally {\n Se(r);\n }\n return t;\n}\nfunction $n(e) {\n var t = xn(e), r = (Ce || (e.f & ee) !== 0) && e.deps !== null ? Ue : K;\n ue(e, r), e.equals(t) || (e.v = t, e.wv = Mn());\n}\nfunction lo(e) {\n I === null && R === null && Ji(), R !== null && (R.f & ee) !== 0 && I === null && Zi(), gt && Gi();\n}\nfunction so(e, t) {\n var r = t.last;\n r === null ? t.last = t.first = e : (r.next = e, e.prev = r, t.last = e);\n}\nfunction je(e, t, r, i = !0) {\n var o = I, a = {\n ctx: W,\n deps: null,\n nodes_start: null,\n nodes_end: null,\n f: e | he,\n first: null,\n fn: t,\n last: null,\n next: null,\n parent: o,\n prev: null,\n teardown: null,\n transitions: null,\n wv: 0\n };\n if (r)\n try {\n ir(a), a.f |= Hi;\n } catch (f) {\n throw Ie(a), f;\n }\n else t !== null && Lt(a);\n var l = r && a.deps === null && a.first === null && a.nodes_start === null && a.teardown === null && (a.f & (gn | xt)) === 0;\n if (!l && i && (o !== null && so(a, o), R !== null && (R.f & fe) !== 0)) {\n var s = (\n /** @type {Derived} */\n R\n );\n (s.effects ?? (s.effects = [])).push(a);\n }\n return a;\n}\nfunction kn(e) {\n const t = je(It, null, !1);\n return ue(t, K), t.teardown = e, t;\n}\nfunction Yt(e) {\n lo();\n var t = I !== null && (I.f & be) !== 0 && W !== null && !W.m;\n if (t) {\n var r = (\n /** @type {ComponentContext} */\n W\n );\n (r.e ?? (r.e = [])).push({\n fn: e,\n effect: I,\n reaction: R\n });\n } else {\n var i = rr(e);\n return i;\n }\n}\nfunction fo(e) {\n const t = je(Me, e, !0);\n return () => {\n Ie(t);\n };\n}\nfunction uo(e) {\n const t = je(Me, e, !0);\n return (r = {}) => new Promise((i) => {\n r.outro ? Zt(t, () => {\n Ie(t), i(void 0);\n }) : (Ie(t), i(void 0));\n });\n}\nfunction rr(e) {\n return je(vn, e, !1);\n}\nfunction nr(e) {\n return je(It, e, !0);\n}\nfunction Pe(e, t = [], r = tr) {\n const i = t.map(r);\n return Cn(() => e(...i.map(c)));\n}\nfunction Cn(e, t = 0) {\n return je(It | Xt | t, e, !0);\n}\nfunction Gt(e, t = !0) {\n return je(It | be, e, !0, t);\n}\nfunction An(e) {\n var t = e.teardown;\n if (t !== null) {\n const r = gt, i = R;\n Jr(!0), ve(null);\n try {\n t.call(null);\n } finally {\n Jr(r), ve(i);\n }\n }\n}\nfunction Rn(e, t = !1) {\n var r = e.first;\n for (e.first = e.last = null; r !== null; ) {\n var i = r.next;\n (r.f & Me) !== 0 ? r.parent = null : Ie(r, t), r = i;\n }\n}\nfunction co(e) {\n for (var t = e.first; t !== null; ) {\n var r = t.next;\n (t.f & be) === 0 && Ie(t), t = r;\n }\n}\nfunction Ie(e, t = !0) {\n var r = !1;\n (t || (e.f & Wi) !== 0) && e.nodes_start !== null && (In(\n e.nodes_start,\n /** @type {TemplateNode} */\n e.nodes_end\n ), r = !0), Rn(e, t && !r), Rt(e, 0), ue(e, St);\n var i = e.transitions;\n if (i !== null)\n for (const a of i)\n a.stop();\n An(e);\n var o = e.parent;\n o !== null && o.first !== null && Sn(e), e.next = e.prev = e.teardown = e.ctx = e.deps = e.fn = e.nodes_start = e.nodes_end = null;\n}\nfunction In(e, t) {\n for (; e !== null; ) {\n var r = e === t ? null : (\n /** @type {TemplateNode} */\n /* @__PURE__ */ Te(e)\n );\n e.remove(), e = r;\n }\n}\nfunction Sn(e) {\n var t = e.parent, r = e.prev, i = e.next;\n r !== null && (r.next = i), i !== null && (i.prev = r), t !== null && (t.first === e && (t.first = i), t.last === e && (t.last = r));\n}\nfunction Zt(e, t) {\n var r = [];\n Tn(e, r, !0), ho(r, () => {\n Ie(e), t && t();\n });\n}\nfunction ho(e, t) {\n var r = e.length;\n if (r > 0) {\n var i = () => --r || t();\n for (var o of e)\n o.out(i);\n } else\n t();\n}\nfunction Tn(e, t, r) {\n if ((e.f & Ke) === 0) {\n if (e.f ^= Ke, e.transitions !== null)\n for (const l of e.transitions)\n (l.is_global || r) && t.push(l);\n for (var i = e.first; i !== null; ) {\n var o = i.next, a = (i.f & Qt) !== 0 || (i.f & be) !== 0;\n Tn(i, t, a ? r : !1), i = o;\n }\n }\n}\nfunction Zr(e) {\n Nn(e, !0);\n}\nfunction Nn(e, t) {\n if ((e.f & Ke) !== 0) {\n e.f ^= Ke, (e.f & K) === 0 && (e.f ^= K), _t(e) && (ue(e, he), Lt(e));\n for (var r = e.first; r !== null; ) {\n var i = r.next, o = (r.f & Qt) !== 0 || (r.f & be) !== 0;\n Nn(r, o ? t : !1), r = i;\n }\n if (e.transitions !== null)\n for (const a of e.transitions)\n (a.is_global || t) && a.in();\n }\n}\nconst vo = typeof requestIdleCallback > \"u\" ? (e) => setTimeout(e, 1) : requestIdleCallback;\nlet dt = [], ht = [];\nfunction Ln() {\n var e = dt;\n dt = [], hn(e);\n}\nfunction Dn() {\n var e = ht;\n ht = [], hn(e);\n}\nfunction Pn(e) {\n dt.length === 0 && queueMicrotask(Ln), dt.push(e);\n}\nfunction go(e) {\n ht.length === 0 && vo(Dn), ht.push(e);\n}\nfunction _o() {\n dt.length > 0 && Ln(), ht.length > 0 && Dn();\n}\nlet pt = !1, kt = !1, Ct = null, Fe = !1, gt = !1;\nfunction Jr(e) {\n gt = e;\n}\nlet ct = [];\nlet R = null, de = !1;\nfunction ve(e) {\n R = e;\n}\nlet I = null;\nfunction Se(e) {\n I = e;\n}\nlet H = null;\nfunction On(e) {\n R !== null && R.f & Ht && (H === null ? H = [e] : H.push(e));\n}\nlet q = null, Q = 0, ie = null;\nfunction mo(e) {\n ie = e;\n}\nlet Fn = 1, At = 0, Ce = !1;\nfunction Mn() {\n return ++Fn;\n}\nfunction _t(e) {\n var h;\n var t = e.f;\n if ((t & he) !== 0)\n return !0;\n if ((t & Ue) !== 0) {\n var r = e.deps, i = (t & ee) !== 0;\n if (r !== null) {\n var o, a, l = (t & $t) !== 0, s = i && I !== null && !Ce, f = r.length;\n if (l || s) {\n var d = (\n /** @type {Derived} */\n e\n ), v = d.parent;\n for (o = 0; o < f; o++)\n a = r[o], (l || !((h = a == null ? void 0 : a.reactions) != null && h.includes(d))) && (a.reactions ?? (a.reactions = [])).push(d);\n l && (d.f ^= $t), s && v !== null && (v.f & ee) === 0 && (d.f ^= ee);\n }\n for (o = 0; o < f; o++)\n if (a = r[o], _t(\n /** @type {Derived} */\n a\n ) && $n(\n /** @type {Derived} */\n a\n ), a.wv > e.wv)\n return !0;\n }\n (!i || I !== null && !Ce) && ue(e, K);\n }\n return !1;\n}\nfunction wo(e, t) {\n for (var r = t; r !== null; ) {\n if ((r.f & xt) !== 0)\n try {\n r.fn(e);\n return;\n } catch {\n r.f ^= xt;\n }\n r = r.parent;\n }\n throw pt = !1, e;\n}\nfunction Kr(e) {\n return (e.f & St) === 0 && (e.parent === null || (e.parent.f & xt) === 0);\n}\nfunction Nt(e, t, r, i) {\n if (pt) {\n if (r === null && (pt = !1), Kr(t))\n throw e;\n return;\n }\n if (r !== null && (pt = !0), wo(e, t), Kr(t))\n throw e;\n}\nfunction Un(e, t, r = !0) {\n var i = e.reactions;\n if (i !== null)\n for (var o = 0; o < i.length; o++) {\n var a = i[o];\n H != null && H.includes(e) || ((a.f & fe) !== 0 ? Un(\n /** @type {Derived} */\n a,\n t,\n !1\n ) : t === a && (r ? ue(a, he) : (a.f & K) !== 0 && ue(a, Ue), Lt(\n /** @type {Effect} */\n a\n )));\n }\n}\nfunction jn(e) {\n var m;\n var t = q, r = Q, i = ie, o = R, a = Ce, l = H, s = W, f = de, d = e.f;\n q = /** @type {null | Value[]} */\n null, Q = 0, ie = null, Ce = (d & ee) !== 0 && (de || !Fe || R === null), R = (d & (be | Me)) === 0 ? e : null, H = null, zr(e.ctx), de = !1, At++, e.f |= Ht;\n try {\n var v = (\n /** @type {Function} */\n (0, e.fn)()\n ), h = e.deps;\n if (q !== null) {\n var g;\n if (Rt(e, Q), h !== null && Q > 0)\n for (h.length = Q + q.length, g = 0; g < q.length; g++)\n h[Q + g] = q[g];\n else\n e.deps = h = q;\n if (!Ce)\n for (g = Q; g < h.length; g++)\n ((m = h[g]).reactions ?? (m.reactions = [])).push(e);\n } else h !== null && Q < h.length && (Rt(e, Q), h.length = Q);\n if (Gn() && ie !== null && !de && h !== null && (e.f & (fe | Ue | he)) === 0)\n for (g = 0; g < /** @type {Source[]} */\n ie.length; g++)\n Un(\n ie[g],\n /** @type {Effect} */\n e\n );\n return o !== null && o !== e && (At++, ie !== null && (i === null ? i = ie : i.push(.../** @type {Source[]} */\n ie))), v;\n } finally {\n q = t, Q = r, ie = i, R = o, Ce = a, H = l, zr(s), de = f, e.f ^= Ht;\n }\n}\nfunction po(e, t) {\n let r = t.reactions;\n if (r !== null) {\n var i = Ui.call(r, e);\n if (i !== -1) {\n var o = r.length - 1;\n o === 0 ? r = t.reactions = null : (r[i] = r[o], r.pop());\n }\n }\n r === null && (t.f & fe) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear\n // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n // allows us to skip the expensive work of disconnecting and immediately reconnecting it\n (q === null || !q.includes(t)) && (ue(t, Ue), (t.f & (ee | $t)) === 0 && (t.f ^= $t), En(\n /** @type {Derived} **/\n t\n ), Rt(\n /** @type {Derived} **/\n t,\n 0\n ));\n}\nfunction Rt(e, t) {\n var r = e.deps;\n if (r !== null)\n for (var i = t; i < r.length; i++)\n po(e, r[i]);\n}\nfunction ir(e) {\n var t = e.f;\n if ((t & St) === 0) {\n ue(e, K);\n var r = I, i = W, o = Fe;\n I = e, Fe = !0;\n try {\n (t & Xt) !== 0 ? co(e) : Rn(e), An(e);\n var a = jn(e);\n e.teardown = typeof a == \"function\" ? a : null, e.wv = Fn;\n var l = e.deps, s;\n Hr && no && e.f & he;\n } catch (f) {\n Nt(f, e, r, i || e.ctx);\n } finally {\n Fe = o, I = r;\n }\n }\n}\nfunction bo() {\n try {\n Ki();\n } catch (e) {\n if (Ct !== null)\n Nt(e, Ct, null);\n else\n throw e;\n }\n}\nfunction Vn() {\n var e = Fe;\n try {\n var t = 0;\n for (Fe = !0; ct.length > 0; ) {\n t++ > 1e3 && bo();\n var r = ct, i = r.length;\n ct = [];\n for (var o = 0; o < i; o++) {\n var a = Eo(r[o]);\n yo(a);\n }\n vt.clear();\n }\n } finally {\n kt = !1, Fe = e, Ct = null;\n }\n}\nfunction yo(e) {\n var t = e.length;\n if (t !== 0)\n for (var r = 0; r < t; r++) {\n var i = e[r];\n if ((i.f & (St | Ke)) === 0)\n try {\n _t(i) && (ir(i), i.deps === null && i.first === null && i.nodes_start === null && (i.teardown === null ? Sn(i) : i.fn = null));\n } catch (o) {\n Nt(o, i, null, i.ctx);\n }\n }\n}\nfunction Lt(e) {\n kt || (kt = !0, queueMicrotask(Vn));\n for (var t = Ct = e; t.parent !== null; ) {\n t = t.parent;\n var r = t.f;\n if ((r & (Me | be)) !== 0) {\n if ((r & K) === 0) return;\n t.f ^= K;\n }\n }\n ct.push(t);\n}\nfunction Eo(e) {\n for (var t = [], r = e; r !== null; ) {\n var i = r.f, o = (i & (be | Me)) !== 0, a = o && (i & K) !== 0;\n if (!a && (i & Ke) === 0) {\n if ((i & vn) !== 0)\n t.push(r);\n else if (o)\n r.f ^= K;\n else\n try {\n _t(r) && ir(r);\n } catch (f) {\n Nt(f, r, null, r.ctx);\n }\n var l = r.first;\n if (l !== null) {\n r = l;\n continue;\n }\n }\n var s = r.parent;\n for (r = r.next; r === null && s !== null; )\n r = s.next, s = s.parent;\n }\n return t;\n}\nfunction $(e) {\n for (var t; ; ) {\n if (_o(), ct.length === 0)\n return (\n /** @type {T} */\n t\n );\n kt = !0, Vn();\n }\n}\nasync function xo() {\n await Promise.resolve(), $();\n}\nfunction c(e) {\n var t = e.f, r = (t & fe) !== 0;\n if (R !== null && !de) {\n if (!(H != null && H.includes(e))) {\n var i = R.deps;\n e.rv < At && (e.rv = At, q === null && i !== null && i[Q] === e ? Q++ : q === null ? q = [e] : (!Ce || !q.includes(e)) && q.push(e));\n }\n } else if (r && /** @type {Derived} */\n e.deps === null && /** @type {Derived} */\n e.effects === null) {\n var o = (\n /** @type {Derived} */\n e\n ), a = o.parent;\n a !== null && (a.f & ee) === 0 && (o.f ^= ee);\n }\n return r && (o = /** @type {Derived} */\n e, _t(o) && $n(o)), gt && vt.has(e) ? vt.get(e) : e.v;\n}\nfunction Xe(e) {\n var t = de;\n try {\n return de = !0, e();\n } finally {\n de = t;\n }\n}\nconst $o = -7169;\nfunction ue(e, t) {\n e.f = e.f & $o | t;\n}\nconst vt = /* @__PURE__ */ new Map();\nfunction Bn(e, t) {\n var r = {\n f: 0,\n // TODO ideally we could skip this altogether, but it causes type errors\n v: e,\n reactions: null,\n equals: bn,\n rv: 0,\n wv: 0\n };\n return r;\n}\n// @__NO_SIDE_EFFECTS__\nfunction J(e, t) {\n const r = Bn(e);\n return On(r), r;\n}\n// @__NO_SIDE_EFFECTS__\nfunction qn(e, t = !1) {\n const r = Bn(e);\n return t || (r.equals = yn), r;\n}\nfunction D(e, t, r = !1) {\n R !== null && !de && Gn() && (R.f & (fe | Xt)) !== 0 && !(H != null && H.includes(e)) && to();\n let i = r ? ke(t) : t;\n return ko(e, i);\n}\nfunction ko(e, t) {\n if (!e.equals(t)) {\n var r = e.v;\n gt ? vt.set(e, t) : vt.set(e, r), e.v = t, (e.f & fe) !== 0 && ((e.f & he) !== 0 && xn(\n /** @type {Derived} */\n e\n ), ue(e, (e.f & ee) === 0 ? K : Ue)), e.wv = Mn(), Hn(e, he), I !== null && (I.f & K) !== 0 && (I.f & (be | Me)) === 0 && (ie === null ? mo([e]) : ie.push(e));\n }\n return t;\n}\nfunction Hn(e, t) {\n var r = e.reactions;\n if (r !== null)\n for (var i = r.length, o = 0; o < i; o++) {\n var a = r[o], l = a.f;\n (l & he) === 0 && (ue(a, t), (l & (K | ee)) !== 0 && ((l & fe) !== 0 ? Hn(\n /** @type {Derived} */\n a,\n Ue\n ) : Lt(\n /** @type {Effect} */\n a\n )));\n }\n}\nlet W = null;\nfunction zr(e) {\n W = e;\n}\nfunction Wn(e, t = !1, r) {\n var i = W = {\n p: W,\n c: null,\n d: !1,\n e: null,\n m: !1,\n s: e,\n x: null,\n l: null\n };\n kn(() => {\n i.d = !0;\n });\n}\nfunction Yn(e) {\n const t = W;\n if (t !== null) {\n e !== void 0 && (t.x = e);\n const l = t.e;\n if (l !== null) {\n var r = I, i = R;\n t.e = null;\n try {\n for (var o = 0; o < l.length; o++) {\n var a = l[o];\n Se(a.effect), ve(a.reaction), rr(a.fn);\n }\n } finally {\n Se(r), ve(i);\n }\n }\n W = t.p, t.m = !0;\n }\n return e || /** @type {T} */\n {};\n}\nfunction Gn() {\n return !0;\n}\nconst Co = [\"touchstart\", \"touchmove\"];\nfunction Ao(e) {\n return Co.includes(e);\n}\nlet Xr = !1;\nfunction Zn() {\n Xr || (Xr = !0, document.addEventListener(\n \"reset\",\n (e) => {\n Promise.resolve().then(() => {\n var t;\n if (!e.defaultPrevented)\n for (\n const r of\n /**@type {HTMLFormElement} */\n e.target.elements\n )\n (t = r.__on_r) == null || t.call(r);\n });\n },\n // In the capture phase to guarantee we get noticed of it (no possiblity of stopPropagation)\n { capture: !0 }\n ));\n}\nfunction Jn(e) {\n var t = R, r = I;\n ve(null), Se(null);\n try {\n return e();\n } finally {\n ve(t), Se(r);\n }\n}\nfunction Ro(e, t, r, i = r) {\n e.addEventListener(t, () => Jn(r));\n const o = e.__on_r;\n o ? e.__on_r = () => {\n o(), i(!0);\n } : e.__on_r = () => i(!0), Zn();\n}\nconst Kn = /* @__PURE__ */ new Set(), Jt = /* @__PURE__ */ new Set();\nfunction Io(e, t, r, i = {}) {\n function o(a) {\n if (i.capture || ft.call(t, a), !a.cancelBubble)\n return Jn(() => r == null ? void 0 : r.call(this, a));\n }\n return e.startsWith(\"pointer\") || e.startsWith(\"touch\") || e === \"wheel\" ? Pn(() => {\n t.addEventListener(e, o, i);\n }) : t.addEventListener(e, o, i), o;\n}\nfunction So(e, t, r, i, o) {\n var a = { capture: i, passive: o }, l = Io(e, t, r, a);\n (t === document.body || t === window || t === document) && kn(() => {\n t.removeEventListener(e, l, a);\n });\n}\nfunction To(e) {\n for (var t = 0; t < e.length; t++)\n Kn.add(e[t]);\n for (var r of Jt)\n r(e);\n}\nfunction ft(e) {\n var U;\n var t = this, r = (\n /** @type {Node} */\n t.ownerDocument\n ), i = e.type, o = ((U = e.composedPath) == null ? void 0 : U.call(e)) || [], a = (\n /** @type {null | Element} */\n o[0] || e.target\n ), l = 0, s = e.__root;\n if (s) {\n var f = o.indexOf(s);\n if (f !== -1 && (t === document || t === /** @type {any} */\n window)) {\n e.__root = t;\n return;\n }\n var d = o.indexOf(t);\n if (d === -1)\n return;\n f <= d && (l = f);\n }\n if (a = /** @type {Element} */\n o[l] || e.target, a !== t) {\n Et(e, \"currentTarget\", {\n configurable: !0,\n get() {\n return a || r;\n }\n });\n var v = R, h = I;\n ve(null), Se(null);\n try {\n for (var g, m = []; a !== null; ) {\n var k = a.assignedSlot || a.parentNode || /** @type {any} */\n a.host || null;\n try {\n var N = a[\"__\" + i];\n if (N != null && (!/** @type {any} */\n a.disabled || // DOM could've been updated already by the time this is reached, so we check this as well\n // -> the target could not have been disabled because it emits the event in the first place\n e.target === a))\n if (cn(N)) {\n var [F, ...V] = N;\n F.apply(a, [e, ...V]);\n } else\n N.call(a, e);\n } catch (Y) {\n g ? m.push(Y) : g = Y;\n }\n if (e.cancelBubble || k === t || k === null)\n break;\n a = k;\n }\n if (g) {\n for (let Y of m)\n queueMicrotask(() => {\n throw Y;\n });\n throw g;\n }\n } finally {\n e.__root = t, delete e.currentTarget, ve(v), Se(h);\n }\n }\n}\nfunction or(e) {\n var t = document.createElement(\"template\");\n return t.innerHTML = e, t.content;\n}\nfunction Ae(e, t) {\n var r = (\n /** @type {Effect} */\n I\n );\n r.nodes_start === null && (r.nodes_start = e, r.nodes_end = t);\n}\n// @__NO_SIDE_EFFECTS__\nfunction ge(e, t) {\n var r = (t & Oi) !== 0, i = (t & Fi) !== 0, o, a = !e.startsWith(\"<!>\");\n return () => {\n if (L)\n return Ae(P, null), P;\n o === void 0 && (o = or(a ? e : \"<!>\" + e), r || (o = /** @type {Node} */\n /* @__PURE__ */ ae(o)));\n var l = (\n /** @type {TemplateNode} */\n i || mn ? document.importNode(o, !0) : o.cloneNode(!0)\n );\n if (r) {\n var s = (\n /** @type {TemplateNode} */\n /* @__PURE__ */ ae(l)\n ), f = (\n /** @type {TemplateNode} */\n l.lastChild\n );\n Ae(s, f);\n } else\n Ae(l, l);\n return l;\n };\n}\n// @__NO_SIDE_EFFECTS__\nfunction No(e, t, r = \"svg\") {\n var i = !e.startsWith(\"<!>\"), o = `<${r}>${i ? e : \"<!>\" + e}</${r}>`, a;\n return () => {\n if (L)\n return Ae(P, null), P;\n if (!a) {\n var l = (\n /** @type {DocumentFragment} */\n or(o)\n ), s = (\n /** @type {Element} */\n /* @__PURE__ */ ae(l)\n );\n a = /** @type {Element} */\n /* @__PURE__ */ ae(s);\n }\n var f = (\n /** @type {TemplateNode} */\n a.cloneNode(!0)\n );\n return Ae(f, f), f;\n };\n}\nfunction ne(e, t) {\n if (L) {\n I.nodes_end = P, ze();\n return;\n }\n e !== null && e.before(\n /** @type {Node} */\n t\n );\n}\nfunction zn(e, t) {\n return Xn(e, t);\n}\nfunction Lo(e, t) {\n Wt(), t.intro = t.intro ?? !1;\n const r = t.target, i = L, o = P;\n try {\n for (var a = (\n /** @type {TemplateNode} */\n /* @__PURE__ */ ae(r)\n ); a && (a.nodeType !== 8 || /** @type {Comment} */\n a.data !== zt); )\n a = /** @type {TemplateNode} */\n /* @__PURE__ */ Te(a);\n if (!a)\n throw Je;\n Ze(!0), Re(\n /** @type {Comment} */\n a\n ), ze();\n const l = Xn(e, { ...t, anchor: a });\n if (P === null || P.nodeType !== 8 || /** @type {Comment} */\n P.data !== fn)\n throw Tt(), Je;\n return Ze(!1), /** @type {Exports} */\n l;\n } catch (l) {\n if (l === Je)\n return t.recover === !1 && zi(), Wt(), io(r), Ze(!1), zn(e, t);\n throw l;\n } finally {\n Ze(i), Re(o);\n }\n}\nconst Ye = /* @__PURE__ */ new Map();\nfunction Xn(e, { target: t, anchor: r, props: i = {}, events: o, context: a, intro: l = !0 }) {\n Wt();\n var s = /* @__PURE__ */ new Set(), f = (h) => {\n for (var g = 0; g < h.length; g++) {\n var m = h[g];\n if (!s.has(m)) {\n s.add(m);\n var k = Ao(m);\n t.addEventListener(m, ft, { passive: k });\n var N = Ye.get(m);\n N === void 0 ? (document.addEventListener(m, ft, { passive: k }), Ye.set(m, 1)) : Ye.set(m, N + 1);\n }\n }\n };\n f(ji(Kn)), Jt.add(f);\n var d = void 0, v = uo(() => {\n var h = r ?? t.appendChild(er());\n return Gt(() => {\n if (a) {\n Wn({});\n var g = (\n /** @type {ComponentContext} */\n W\n );\n g.c = a;\n }\n o && (i.$$events = o), L && Ae(\n /** @type {TemplateNode} */\n h,\n null\n ), d = e(h, i) || {}, L && (I.nodes_end = P), a && Yn();\n }), () => {\n var k;\n for (var g of s) {\n t.removeEventListener(g, ft);\n var m = (\n /** @type {number} */\n Ye.get(g)\n );\n --m === 0 ? (document.removeEventListener(g, ft), Ye.delete(g)) : Ye.set(g, m);\n }\n Jt.delete(f), h !== r && ((k = h.parentNode) == null || k.removeChild(h));\n };\n });\n return Kt.set(d, v), d;\n}\nlet Kt = /* @__PURE__ */ new WeakMap();\nfunction Do(e, t) {\n const r = Kt.get(e);\n return r ? (Kt.delete(e), r(t)) : Promise.resolve();\n}\nfunction $e(e, t, [r, i] = [0, 0]) {\n L && r === 0 && ze();\n var o = e, a = null, l = null, s = Z, f = r > 0 ? Qt : 0, d = !1;\n const v = (g, m = !0) => {\n d = !0, h(m, g);\n }, h = (g, m) => {\n if (s === (s = g)) return;\n let k = !1;\n if (L && i !== -1) {\n if (r === 0) {\n const F = (\n /** @type {Comment} */\n o.data\n );\n F === zt ? i = 0 : F === sn ? i = 1 / 0 : (i = parseInt(F.substring(1)), i !== i && (i = s ? 1 / 0 : -1));\n }\n const N = i > r;\n !!s === N && (o = ro(), Re(o), Ze(!1), k = !0, i = -1);\n }\n s ? (a ? Zr(a) : m && (a = Gt(() => m(o))), l && Zt(l, () => {\n l = null;\n })) : (l ? Zr(l) : m && (l = Gt(() => m(o, [r + 1, i]))), a && Zt(a, () => {\n a = null;\n })), k && Ze(!0);\n };\n Cn(() => {\n d = !1, t(v), d || h(null, null);\n }, f), L && (o = P);\n}\nfunction Ge(e, t, r = !1, i = !1, o = !1) {\n var a = e, l = \"\";\n Pe(() => {\n var s = (\n /** @type {Effect} */\n I\n );\n if (l === (l = t() ?? \"\")) {\n L && ze();\n return;\n }\n if (s.nodes_start !== null && (In(\n s.nodes_start,\n /** @type {TemplateNode} */\n s.nodes_end\n ), s.nodes_start = s.nodes_end = null), l !== \"\") {\n if (L) {\n P.data;\n for (var f = ze(), d = f; f !== null && (f.nodeType !== 8 || /** @type {Comment} */\n f.data !== \"\"); )\n d = f, f = /** @type {TemplateNode} */\n /* @__PURE__ */ Te(f);\n if (f === null)\n throw Tt(), Je;\n Ae(P, d), a = Re(f);\n return;\n }\n var v = l + \"\";\n r ? v = `<svg>${v}</svg>` : i && (v = `<math>${v}</math>`);\n var h = or(v);\n if ((r || i) && (h = /** @type {Element} */\n /* @__PURE__ */ ae(h)), Ae(\n /** @type {TemplateNode} */\n /* @__PURE__ */ ae(h),\n /** @type {TemplateNode} */\n h.lastChild\n ), r || i)\n for (; /* @__PURE__ */ ae(h); )\n a.before(\n /** @type {Node} */\n /* @__PURE__ */ ae(h)\n );\n else\n a.before(h);\n }\n });\n}\nfunction Po(e, t, r, i, o) {\n var s;\n L && ze();\n var a = (s = t.$$slots) == null ? void 0 : s[r], l = !1;\n a === !0 && (a = t.children, l = !0), a === void 0 || a(e, l ? () => i : i);\n}\nconst Qr = [...` \t\n\\r\\f \\v\\uFEFF`];\nfunction Oo(e, t, r) {\n var i = \"\" + e;\n if (r) {\n for (var o in r)\n if (r[o])\n i = i ? i + \" \" + o : o;\n else if (i.length)\n for (var a = o.length, l = 0; (l = i.indexOf(o, l)) >= 0; ) {\n var s = l + a;\n (l === 0 || Qr.includes(i[l - 1])) && (s === i.length || Qr.includes(i[s])) ? i = (l === 0 ? \"\" : i.substring(0, l)) + i.substring(s + 1) : l = s;\n }\n }\n return i === \"\" ? null : i;\n}\nfunction Fo(e, t, r, i, o, a) {\n var l = e.__className;\n if (L || l !== r || l === void 0) {\n var s = Oo(r, i, a);\n (!L || s !== e.getAttribute(\"class\")) && (s == null ? e.removeAttribute(\"class\") : e.className = s), e.__className = r;\n } else if (a && o !== a)\n for (var f in a) {\n var d = !!a[f];\n (o == null || d !== !!o[f]) && e.classList.toggle(f, d);\n }\n return a;\n}\nconst Mo = Symbol(\"is custom element\"), Uo = Symbol(\"is html\");\nfunction en(e) {\n if (L) {\n var t = !1, r = () => {\n if (!t) {\n if (t = !0, e.hasAttribute(\"value\")) {\n var i = e.value;\n se(e, \"value\", null), e.value = i;\n }\n if (e.hasAttribute(\"checked\")) {\n var o = e.checked;\n se(e, \"checked\", null), e.checked = o;\n }\n }\n };\n e.__on_r = r, go(r), Zn();\n }\n}\nfunction jo(e, t) {\n var r = Qn(e);\n r.value === (r.value = // treat null and undefined the same for the initial value\n t ?? void 0) || // @ts-expect-error\n // `progress` elements always need their value set when it's `0`\n e.value === t && (t !== 0 || e.nodeName !== \"PROGRESS\") || (e.value = t ?? \"\");\n}\nfunction se(e, t, r, i) {\n var o = Qn(e);\n L && (o[t] = e.getAttribute(t), t === \"src\" || t === \"srcset\" || t === \"href\" && e.nodeName === \"LINK\") || o[t] !== (o[t] = r) && (t === \"loading\" && (e[Yi] = r), r == null ? e.removeAttribute(t) : typeof r != \"string\" && Vo(e).includes(t) ? e[t] = r : e.setAttribute(t, r));\n}\nfunction Qn(e) {\n return (\n /** @type {Record<string | symbol, unknown>} **/\n // @ts-expect-error\n e.__attributes ?? (e.__attributes = {\n [Mo]: e.nodeName.includes(\"-\"),\n [Uo]: e.namespaceURI === Mi\n })\n );\n}\nvar tn = /* @__PURE__ */ new Map();\nfunction Vo(e) {\n var t = tn.get(e.nodeName);\n if (t) return t;\n tn.set(e.nodeName, t = []);\n for (var r, i = e, o = Element.prototype; o !== i; ) {\n r = Vi(i);\n for (var a in r)\n r[a].set && t.push(a);\n i = dn(i);\n }\n return t;\n}\nfunction Bo(e, t, r = t) {\n Ro(e, \"change\", (i) => {\n var o = i ? e.defaultChecked : e.checked;\n r(o);\n }), // If we are hydrating and the value has since changed,\n // then use the update value from the input instead.\n (L && e.defaultChecked !== e.checked || // If defaultChecked is set, then checked == defaultChecked\n Xe(t) == null) && r(e.checked), nr(() => {\n var i = t();\n e.checked = !!i;\n });\n}\nfunction rn(e, t) {\n return e === t || (e == null ? void 0 : e[ut]) === t;\n}\nfunction nn(e = {}, t, r, i) {\n return rr(() => {\n var o, a;\n return nr(() => {\n o = a, a = [], Xe(() => {\n e !== r(...a) && (t(e, ...a), o && rn(r(...o), e) && t(null, ...o));\n });\n }), () => {\n Pn(() => {\n a && rn(r(...a), e) && t(null, ...a);\n });\n };\n }), e;\n}\nfunction ei(e) {\n W === null && un(), Yt(() => {\n const t = Xe(e);\n if (typeof t == \"function\") return (\n /** @type {() => void} */\n t\n );\n });\n}\nfunction qo(e) {\n W === null && un(), ei(() => () => Xe(e));\n}\nlet wt = !1;\nfunction Ho(e) {\n var t = wt;\n try {\n return wt = !1, [e(), wt];\n } finally {\n wt = t;\n }\n}\nfunction on(e) {\n var t;\n return ((t = e.ctx) == null ? void 0 : t.d) ?? !1;\n}\nfunction A(e, t, r, i) {\n var Ne;\n var o = (r & Ni) !== 0, a = !0, l = (r & Di) !== 0, s = (r & Pi) !== 0, f = !1, d;\n l ? [d, f] = Ho(() => (\n /** @type {V} */\n e[t]\n )) : d = /** @type {V} */\n e[t];\n var v = ut in e || _n in e, h = l && (((Ne = Oe(e, t)) == null ? void 0 : Ne.set) ?? (v && t in e && ((O) => e[t] = O))) || void 0, g = (\n /** @type {V} */\n i\n ), m = !0, k = !1, N = () => (k = !0, m && (m = !1, s ? g = Xe(\n /** @type {() => V} */\n i\n ) : g = /** @type {V} */\n i), g);\n d === void 0 && i !== void 0 && (h && a && Xi(), d = N(), h && h(d));\n var F;\n if (F = () => {\n var O = (\n /** @type {V} */\n e[t]\n );\n return O === void 0 ? N() : (m = !0, k = !1, O);\n }, (r & Li) === 0)\n return F;\n if (h) {\n var V = e.$$legacy;\n return function(O, j) {\n return arguments.length > 0 ? ((!j || V || f) && h(j ? F() : O), O) : F();\n };\n }\n var U = !1, Y = /* @__PURE__ */ qn(d), M = /* @__PURE__ */ tr(() => {\n var O = F(), j = c(Y);\n return U ? (U = !1, j) : Y.v = O;\n });\n return l && c(M), o || (M.equals = yn), function(O, j) {\n if (arguments.length > 0) {\n const _e = j ? c(M) : l ? ke(O) : O;\n if (!M.equals(_e)) {\n if (U = !0, D(Y, _e), k && g !== void 0 && (g = _e), on(M))\n return O;\n Xe(() => c(M));\n }\n return O;\n }\n return on(M) ? M.v : c(M);\n };\n}\nfunction Wo(e) {\n return new Yo(e);\n}\nvar pe, oe;\nclass Yo {\n /**\n * @param {ComponentConstructorOptions & {\n * component: any;\n * }} options\n */\n constructor(t) {\n /** @type {any} */\n Vt(this, pe);\n /** @type {Record<string, any>} */\n Vt(this, oe);\n var a;\n var r = /* @__PURE__ */ new Map(), i = (l, s) => {\n var f = /* @__PURE__ */ qn(s);\n return r.set(l, f), f;\n };\n const o = new Proxy(\n { ...t.props || {}, $$events: {} },\n {\n get(l, s) {\n return c(r.get(s) ?? i(s, Reflect.get(l, s)));\n },\n has(l, s) {\n return s === _n ? !0 : (c(r.get(s) ?? i(s, Reflect.get(l, s))), Reflect.has(l, s));\n },\n set(l, s, f) {\n return D(r.get(s) ?? i(s, f), f), Reflect.set(l, s, f);\n }\n }\n );\n Bt(this, oe, (t.hydrate ? Lo : zn)(t.component, {\n target: t.target,\n anchor: t.anchor,\n props: o,\n context: t.context,\n intro: t.intro ?? !1,\n recover: t.recover\n })), (!((a = t == null ? void 0 : t.props) != null && a.$$host) || t.sync === !1) && $(), Bt(this, pe, o.$$events);\n for (const l of Object.keys(G(this, oe)))\n l === \"$set\" || l === \"$destroy\" || l === \"$on\" || Et(this, l, {\n get() {\n return G(this, oe)[l];\n },\n /** @param {any} value */\n set(s) {\n G(this, oe)[l] = s;\n },\n enumerable: !0\n });\n G(this, oe).$set = /** @param {Record<string, any>} next */\n (l) => {\n Object.assign(o, l);\n }, G(this, oe).$destroy = () => {\n Do(G(this, oe));\n };\n }\n /** @param {Record<string, any>} props */\n $set(t) {\n G(this, oe).$set(t);\n }\n /**\n * @param {string} event\n * @param {(...args: any[]) => any} callback\n * @returns {any}\n */\n $on(t, r) {\n G(this, pe)[t] = G(this, pe)[t] || [];\n const i = (...o) => r.call(this, ...o);\n return G(this, pe)[t].push(i), () => {\n G(this, pe)[t] = G(this, pe)[t].filter(\n /** @param {any} fn */\n (o) => o !== i\n );\n };\n }\n $destroy() {\n G(this, oe).$destroy();\n }\n}\npe = new WeakMap(), oe = new WeakMap();\nlet ti;\ntypeof HTMLElement == \"function\" && (ti = class extends HTMLElement {\n /**\n * @param {*} $$componentCtor\n * @param {*} $$slots\n * @param {*} use_shadow_dom\n */\n constructor(t, r, i) {\n super();\n /** The Svelte component constructor */\n le(this, \"$$ctor\");\n /** Slots */\n le(this, \"$$s\");\n /** @type {any} The Svelte component instance */\n le(this, \"$$c\");\n /** Whether or not the custom element is connected */\n le(this, \"$$cn\", !1);\n /** @type {Record<string, any>} Component props data */\n le(this, \"$$d\", {});\n /** `true` if currently in the process of reflecting component props back to attributes */\n le(this, \"$$r\", !1);\n /** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n le(this, \"$$p_d\", {});\n /** @type {Record<string, EventListenerOrEventListenerObject[]>} Event listeners */\n le(this, \"$$l\", {});\n /** @type {Map<EventListenerOrEventListenerObject, Function>} Event listener unsubscribe functions */\n le(this, \"$$l_u\", /* @__PURE__ */ new Map());\n /** @type {any} The managed render effect for reflecting attributes */\n le(this, \"$$me\");\n this.$$ctor = t, this.$$s = r, i && this.attachShadow({ mode: \"open\" });\n }\n /**\n * @param {string} type\n * @param {EventListenerOrEventListenerObject} listener\n * @param {boolean | AddEventListenerOptions} [options]\n */\n addEventListener(t, r, i) {\n if (this.$$l[t] = this.$$l[t] || [], this.$$l[t].push(r), this.$$c) {\n const o = this.$$c.$on(t, r);\n this.$$l_u.set(r, o);\n }\n super.addEventListener(t, r, i);\n }\n /**\n * @param {string} type\n * @param {EventListenerOrEventListenerObject} listener\n * @param {boolean | AddEventListenerOptions} [options]\n */\n removeEventListener(t, r, i) {\n if (super.removeEventListener(t, r, i), this.$$c) {\n const o = this.$$l_u.get(r);\n o && (o(), this.$$l_u.delete(r));\n }\n }\n async connectedCallback() {\n if (this.$$cn = !0, !this.$$c) {\n let t = function(o) {\n return (a) => {\n const l = document.createElement(\"slot\");\n o !== \"default\" && (l.name = o), ne(a, l);\n };\n };\n if (await Promise.resolve(), !this.$$cn || this.$$c)\n return;\n const r = {}, i = Go(this);\n for (const o of this.$$s)\n o in i && (o === \"default\" && !this.$$d.children ? (this.$$d.children = t(o), r.default = !0) : r[o] = t(o));\n for (const o of this.attributes) {\n const a = this.$$g_p(o.name);\n a in this.$$d || (this.$$d[a] = bt(a, o.value, this.$$p_d, \"toProp\"));\n }\n for (const o in this.$$p_d)\n !(o in this.$$d) && this[o] !== void 0 && (this.$$d[o] = this[o], delete this[o]);\n this.$$c = Wo({\n component: this.$$ctor,\n target: this.shadowRoot || this,\n props: {\n ...this.$$d,\n $$slots: r,\n $$host: this\n }\n }), this.$$me = fo(() => {\n nr(() => {\n var o;\n this.$$r = !0;\n for (const a of yt(this.$$c)) {\n if (!((o = this.$$p_d[a]) != null && o.reflect)) continue;\n this.$$d[a] = this.$$c[a];\n const l = bt(\n a,\n this.$$d[a],\n this.$$p_d,\n \"toAttribute\"\n );\n l == null ? this.removeAttribute(this.$$p_d[a].attribute || a) : this.setAttribute(this.$$p_d[a].attribute || a, l);\n }\n this.$$r = !1;\n });\n });\n for (const o in this.$$l)\n for (const a of this.$$l[o]) {\n const l = this.$$c.$on(o, a);\n this.$$l_u.set(a, l);\n }\n this.$$l = {};\n }\n }\n // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n // and setting attributes through setAttribute etc, this is helpful\n /**\n * @param {string} attr\n * @param {string} _oldValue\n * @param {string} newValue\n */\n attributeChangedCallback(t, r, i) {\n var o;\n this.$$r || (t = this.$$g_p(t), this.$$d[t] = bt(t, i, this.$$p_d, \"toProp\"), (o = this.$$c) == null || o.$set({ [t]: this.$$d[t] }));\n }\n disconnectedCallback() {\n this.$$cn = !1, Promise.resolve().then(() => {\n !this.$$cn && this.$$c && (this.$$c.$destroy(), this.$$me(), this.$$c = void 0);\n });\n }\n /**\n * @param {string} attribute_name\n */\n $$g_p(t) {\n return yt(this.$$p_d).find(\n (r) => this.$$p_d[r].attribute === t || !this.$$p_d[r].attribute && r.toLowerCase() === t\n ) || t;\n }\n});\nfunction bt(e, t, r, i) {\n var a;\n const o = (a = r[e]) == null ? void 0 : a.type;\n if (t = o === \"Boolean\" && typeof t != \"boolean\" ? t != null : t, !i || !r[e])\n return t;\n if (i === \"toAttribute\")\n switch (o) {\n case \"Object\":\n case \"Array\":\n return t == null ? null : JSON.stringify(t);\n case \"Boolean\":\n return t ? \"\" : null;\n case \"Number\":\n return t ?? null;\n default:\n return t;\n }\n else\n switch (o) {\n case \"Object\":\n case \"Array\":\n return t && JSON.parse(t);\n case \"Boolean\":\n return t;\n // conversion already handled above\n case \"Number\":\n return t != null ? +t : t;\n default:\n return t;\n }\n}\nfunction Go(e) {\n const t = {};\n return e.childNodes.forEach((r) => {\n t[\n /** @type {Element} node */\n r.slot || \"default\"\n ] = !0;\n }), t;\n}\nfunction Zo(e, t, r, i, o, a) {\n let l = class extends ti {\n constructor() {\n super(e, r, o), this.$$p_d = t;\n }\n static get observedAttributes() {\n return yt(t).map(\n (s) => (t[s].attribute || s).toLowerCase()\n );\n }\n };\n return yt(t).forEach((s) => {\n Et(l.prototype, s, {\n get() {\n return this.$$c && s in this.$$c ? this.$$c[s] : this.$$d[s];\n },\n set(f) {\n var h;\n f = bt(s, f, t), this.$$d[s] = f;\n var d = this.$$c;\n if (d) {\n var v = (h = Oe(d, s)) == null ? void 0 : h.get;\n v ? d[s] = f : d.$set({ [s]: f });\n }\n }\n });\n }), i.forEach((s) => {\n Et(l.prototype, s, {\n get() {\n var f;\n return (f = this.$$c) == null ? void 0 : f[s];\n }\n });\n }), e.element = /** @type {any} */\n l, l;\n}\nconst ri = new TextEncoder();\nfunction Jo(e) {\n return [...new Uint8Array(e)].map((t) => t.toString(16).padStart(2, \"0\")).join(\"\");\n}\nasync function Ko(e, t = \"SHA-256\", r = 1e5) {\n const i = Date.now().toString(16);\n e || (e = Math.round(Math.random() * r));\n const o = await ni(i, e, t);\n return {\n algorithm: t,\n challenge: o,\n salt: i,\n signature: \"\"\n };\n}\nasync function ni(e, t, r) {\n if (typeof crypto > \"u\" || !(\"subtle\" in crypto) || !(\"digest\" in crypto.subtle))\n throw new Error(\"Web Crypto is not available. Secure context is required (https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts).\");\n return Jo(\n await crypto.subtle.digest(\n r.toUpperCase(),\n ri.encode(e + t)\n )\n );\n}\nfunction zo(e, t, r = \"SHA-256\", i = 1e6, o = 0) {\n const a = new AbortController(), l = Date.now();\n return {\n promise: (async () => {\n for (let f = o; f <= i; f += 1) {\n if (a.signal.aborted)\n return null;\n if (await ni(t, f, r) === e)\n return {\n number: f,\n took: Date.now() - l\n };\n }\n return null;\n })(),\n controller: a\n };\n}\nfunction Xo() {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch {\n }\n}\nfunction Qo(e) {\n const t = atob(e), r = new Uint8Array(t.length);\n for (let i = 0; i < t.length; i++)\n r[i] = t.charCodeAt(i);\n return r;\n}\nfunction ea(e, t = 12) {\n const r = new Uint8Array(t);\n for (let i = 0; i < t; i++)\n r[i] = e % 256, e = Math.floor(e / 256);\n return r;\n}\nasync function ta(e, t = \"\", r = 1e6, i = 0) {\n const o = \"AES-GCM\", a = new AbortController(), l = Date.now(), s = async () => {\n for (let v = i; v <= r; v += 1) {\n if (a.signal.aborted || !f || !d)\n return null;\n try {\n const h = await crypto.subtle.decrypt(\n {\n name: o,\n iv: ea(v)\n },\n f,\n d\n );\n if (h)\n return {\n clearText: new TextDecoder().decode(h),\n took: Date.now() - l\n };\n } catch {\n }\n }\n return null;\n };\n let f = null, d = null;\n try {\n d = Qo(e);\n const v = await crypto.subtle.digest(\n \"SHA-256\",\n ri.encode(t)\n );\n f = await crypto.subtle.importKey(\n \"raw\",\n v,\n o,\n !1,\n [\"decrypt\"]\n );\n } catch {\n return {\n promise: Promise.reject(),\n controller: a\n };\n }\n return {\n promise: s(),\n controller: a\n };\n}\nvar b = /* @__PURE__ */ ((e) => (e.ERROR = \"error\", e.VERIFIED = \"verified\", e.VERIFYING = \"verifying\", e.UNVERIFIED = \"unverified\", e.EXPIRED = \"expired\", e))(b || {}), ra = /* @__PURE__ */ No('<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\" fill=\"currentColor\" opacity=\".25\"></path><path d=\"M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z\" fill=\"currentColor\" class=\"altcha-spinner\"></path></svg>'), na = /* @__PURE__ */ ge('<span role=\"status\" aria-live=\"polite\"><!></span> <input type=\"hidden\">', 1), ia = /* @__PURE__ */ ge('<span role=\"status\" aria-live=\"polite\"><!></span>'), oa = /* @__PURE__ */ ge(\"<label><!></label>\"), aa = /* @__PURE__ */ ge('<div><a target=\"_blank\" class=\"altcha-logo\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z\" fill=\"currentColor\"></path><path d=\"M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z\" fill=\"currentColor\"></path><path d=\"M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z\" fill=\"currentColor\"></path></svg></a></div>'), la = /* @__PURE__ */ ge(\"<div><!></div>\"), sa = /* @__PURE__ */ ge(\"<div><!></div>\"), fa = /* @__PURE__ */ ge('<div class=\"altcha-error\"><svg width=\"14\" height=\"14\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\"></path></svg> <!></div>'), ua = /* @__PURE__ */ ge('<div class=\"altcha-footer\"><div><!></div></div>'), ca = /* @__PURE__ */ ge('<div class=\"altcha-anchor-arrow\"></div>'), da = /* @__PURE__ */ ge('<!> <div class=\"altcha\"><div class=\"altcha-main\"><!> <div><input type=\"checkbox\"></div> <div class=\"altcha-label\"><!></div> <!></div> <!> <!> <!></div>', 1);\nfunction ha(e, t) {\n var Mr, Ur;\n Wn(t, !0);\n let r = A(t, \"auto\", 7, void 0), i = A(t, \"blockspam\", 7, void 0), o = A(t, \"challengeurl\", 7, void 0), a = A(t, \"challengejson\", 7, void 0), l = A(t, \"customfetch\", 7, void 0), s = A(t, \"debug\", 7, !1), f = A(t, \"delay\", 7, 0), d = A(t, \"expire\", 7, void 0), v = A(t, \"floating\", 7, void 0), h = A(t, \"floatinganchor\", 7, void 0), g = A(t, \"floatingoffset\", 7, void 0), m = A(t, \"floatingpersist\", 7, !1), k = A(t, \"hidefooter\", 7, !1), N = A(t, \"hidelogo\", 7, !1), F = A(t, \"id\", 7, void 0), V = A(t, \"name\", 7, \"altcha\"), U = A(t, \"maxnumber\", 7, 1e6), Y = A(t, \"mockerror\", 7, !1), M = A(t, \"obfuscated\", 7, void 0), Ne = A(t, \"plugins\", 7, void 0), O = A(t, \"refetchonexpire\", 7, !0), j = A(t, \"spamfilter\", 7, !1), _e = A(t, \"strings\", 7, void 0), te = A(t, \"test\", 7, !1), ye = A(t, \"verifyurl\", 7, void 0), Ve = A(t, \"workers\", 23, () => Math.min(16, navigator.hardwareConcurrency || 8)), Qe = A(t, \"workerurl\", 7, void 0);\n const ar = [\"SHA-256\", \"SHA-384\", \"SHA-512\"], lr = \"Visit Altcha.org\", sr = \"https://altcha.org/\", et = (n, u) => {\n t.$$host.dispatchEvent(new CustomEvent(n, { detail: u }));\n }, fr = (Ur = (Mr = document.documentElement.lang) == null ? void 0 : Mr.split(\"-\")) == null ? void 0 : Ur[0], Dt = /* @__PURE__ */ st(() => {\n var n;\n return o() && new URL(o(), location.origin).host.endsWith(\".altcha.org\") && !!((n = o()) != null && n.includes(\"apiKey=ckey_\"));\n }), Pt = /* @__PURE__ */ st(() => a() ? Er(a()) : void 0), ur = /* @__PURE__ */ st(() => _e() ? Er(_e()) : {}), re = /* @__PURE__ */ st(() => {\n var n;\n return {\n ariaLinkLabel: lr,\n error: \"Verification failed. Try again later.\",\n expired: \"Verification expired. Try again.\",\n footer: `Protected by <a href=\"${sr}\" target=\"_blank\" aria-label=\"${((n = c(ur)) == null ? void 0 : n.ariaLinkLabel) || lr}\">ALTCHA</a>`,\n label: \"I'm not a robot\",\n verified: \"Verified\",\n verifying: \"Verifying...\",\n waitAlert: \"Verifying... please wait.\",\n ...c(ur)\n };\n }), cr = /* @__PURE__ */ st(() => `${F() || V()}_checkbox`);\n let Be = /* @__PURE__ */ J(!1), C = /* @__PURE__ */ J(ke(b.UNVERIFIED)), B = /* @__PURE__ */ J(void 0), tt = /* @__PURE__ */ J(null), qe = null, w = null, He = /* @__PURE__ */ J(null), ce = null, Ee = [], Le = /* @__PURE__ */ J(null);\n Yt(() => {\n ci(c(He));\n }), Yt(() => {\n di(c(C));\n }), qo(() => {\n ii(), w && (w.removeEventListener(\"submit\", wr), w.removeEventListener(\"reset\", pr), w.removeEventListener(\"focusin\", mr), w = null), ce && (clearTimeout(ce), ce = null), document.removeEventListener(\"click\", gr), document.removeEventListener(\"scroll\", _r), window.removeEventListener(\"resize\", yr);\n }), ei(() => {\n var n;\n S(\"mounted\", \"1.5.1\"), S(\"workers\", Ve()), fi(), S(\"plugins\", Ee.length ? Ee.map((u) => u.constructor.pluginName).join(\", \") : \"none\"), te() && S(\"using test mode\"), d() && Ot(d()), r() !== void 0 && S(\"auto\", r()), v() !== void 0 && xr(v()), w = (n = c(B)) == null ? void 0 : n.closest(\"form\"), w && (w.addEventListener(\"submit\", wr, { capture: !0 }), w.addEventListener(\"reset\", pr), (r() === \"onfocus\" || m() === \"focus\") && w.addEventListener(\"focusin\", mr)), r() === \"onload\" && (M() ? rt() : xe()), c(Dt) && (k() || N()) && S(\"Attributes hidefooter and hidelogo ignored because usage with free API Keys requires attribution.\"), requestAnimationFrame(() => {\n et(\"load\");\n });\n });\n function dr(n, u) {\n return btoa(JSON.stringify({\n algorithm: n.algorithm,\n challenge: n.challenge,\n number: u.number,\n salt: n.salt,\n signature: n.signature,\n test: te() ? !0 : void 0,\n took: u.took\n }));\n }\n function ii() {\n for (const n of Ee)\n n.destroy();\n }\n function hr() {\n o() && O() && c(C) === b.VERIFIED ? xe() : it(b.EXPIRED, c(re).expired);\n }\n async function oi() {\n var n;\n if (Y())\n throw S(\"mocking error\"), new Error(\"Mocked error.\");\n if (c(Pt))\n return S(\"using provided json data\"), c(Pt);\n if (te())\n return S(\"generating test challenge\", { test: te() }), Ko(typeof te() != \"boolean\" ? +te() : void 0);\n {\n if (!o() && w) {\n const x = w.getAttribute(\"action\");\n x != null && x.includes(\"/form/\") && o(x + \"/altcha\");\n }\n if (!o())\n throw new Error(\"Attribute challengeurl not set.\");\n S(\"fetching challenge from\", o());\n const u = {\n headers: j() !== !1 ? { \"x-altcha-spam-filter\": \"1\" } : {}\n }, _ = await vr()(o(), u);\n if (!_ || !(_ instanceof Response))\n throw new Error(\"Fetch function did not return a response.\");\n if (_.status !== 200)\n throw new Error(`Server responded with ${_.status}.`);\n const y = _.headers.get(\"X-Altcha-Config\"), T = await _.json(), E = new URLSearchParams((n = T.salt.split(\"?\")) == null ? void 0 : n[1]), p = E.get(\"expires\") || E.get(\"expire\");\n if (p) {\n const x = new Date(+p * 1e3), me = isNaN(x.getTime()) ? 0 : x.getTime() - Date.now();\n me > 0 && Ot(me);\n }\n if (y)\n try {\n const x = JSON.parse(y);\n x && typeof x == \"object\" && (\"sentinel\" in x ? alert(\"This version of the widget is not compatible with Sentinel. Upgrade to version 2.x.x.\") : (x.verifyurl && (x.verifyurl = new URL(x.verifyurl, new URL(o())).toString()), Cr(x)));\n } catch (x) {\n S(\"unable to configure from X-Altcha-Config\", x);\n }\n return T;\n }\n }\n function ai(n) {\n var _;\n const u = w == null ? void 0 : w.querySelector(typeof n == \"string\" ? `input[name=\"${n}\"]` : 'input[type=\"email\"]:not([data-no-spamfilter])');\n return ((_ = u == null ? void 0 : u.value) == null ? void 0 : _.slice(u.value.indexOf(\"@\"))) || void 0;\n }\n function vr() {\n let n = fetch;\n if (l())\n if (S(\"using customfetch\"), typeof l() == \"string\") {\n if (n = globalThis[l()] || null, !n)\n throw new Error(`Custom fetch function not found: ${l()}`);\n } else\n n = l();\n return n;\n }\n function li() {\n return j() === \"ipAddress\" ? {\n blockedCountries: void 0,\n classifier: void 0,\n disableRules: void 0,\n email: !1,\n expectedCountries: void 0,\n expectedLanguages: void 0,\n fields: !1,\n ipAddress: void 0,\n text: void 0,\n timeZone: void 0\n } : typeof j() == \"object\" ? j() : {\n blockedCountries: void 0,\n classifier: void 0,\n disableRules: void 0,\n email: void 0,\n expectedCountries: void 0,\n expectedLanguages: void 0,\n fields: void 0,\n ipAddress: void 0,\n text: void 0,\n timeZone: void 0\n };\n }\n function si(n) {\n return [\n ...(w == null ? void 0 : w.querySelectorAll(n != null && n.length ? n.map((_) => `input[name=\"${_}\"]`).join(\", \") : 'input[type=\"text\"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])')) || []\n ].reduce(\n (_, y) => {\n const T = y.name, E = y.value;\n return T && E && (_[T] = /\\n/.test(E) ? E.replace(new RegExp(\"(?<!\\\\r)\\\\n\", \"g\"), `\\r\n`) : E), _;\n },\n {}\n );\n }\n function fi() {\n const n = Ne() !== void 0 ? Ne().split(\",\") : void 0;\n for (const u of globalThis.altchaPlugins)\n (!n || n.includes(u.pluginName)) && Ee.push(new u({\n el: c(B),\n clarify: rt,\n dispatch: et,\n getConfiguration: Ar,\n getFloatingAnchor: Rr,\n getState: Ir,\n log: S,\n reset: it,\n solve: kr,\n setState: De,\n setFloatingAnchor: Tr,\n verify: xe\n }));\n }\n function S(...n) {\n (s() || n.some((u) => u instanceof Error)) && console[n[0] instanceof Error ? \"error\" : \"log\"](\"ALTCHA\", `[name=${V()}]`, ...n);\n }\n function ui() {\n [b.UNVERIFIED, b.ERROR, b.EXPIRED].includes(c(C)) ? j() !== !1 && (w == null ? void 0 : w.reportValidity()) === !1 ? D(Be, !1) : M() ? rt() : xe() : D(Be, !0);\n }\n function gr(n) {\n const u = n.target;\n v() && u && !c(B).contains(u) && (c(C) === b.VERIFIED && m() === !1 || c(C) === b.VERIFIED && m() === \"focus\" && !(w != null && w.matches(\":focus-within\")) || r() === \"off\" && c(C) === b.UNVERIFIED) && Sr();\n }\n function _r() {\n v() && c(C) !== b.UNVERIFIED && nt();\n }\n function ci(n) {\n for (const u of Ee)\n typeof u.onErrorChange == \"function\" && u.onErrorChange(c(He));\n }\n function mr(n) {\n c(C) === b.UNVERIFIED ? xe() : v() && m() === \"focus\" && c(C) === b.VERIFIED && Ft();\n }\n function wr(n) {\n w && r() === \"onsubmit\" ? c(C) === b.UNVERIFIED ? (n.preventDefault(), n.stopPropagation(), xe().then(() => {\n vi();\n })) : c(C) !== b.VERIFIED && (n.preventDefault(), n.stopPropagation(), c(C) === b.VERIFYING && br()) : w && v() && r() === \"off\" && c(C) === b.UNVERIFIED && (n.preventDefault(), n.stopPropagation(), Ft());\n }\n function pr() {\n it();\n }\n function br() {\n c(C) === b.VERIFYING && c(re).waitAlert && alert(c(re).waitAlert);\n }\n function di(n) {\n for (const u of Ee)\n typeof u.onStateChange == \"function\" && u.onStateChange(c(C));\n v() && c(C) !== b.UNVERIFIED && requestAnimationFrame(() => {\n nt();\n }), D(Be, c(C) === b.VERIFIED);\n }\n function yr() {\n v() && nt();\n }\n function Er(n) {\n return JSON.parse(n);\n }\n async function hi(n) {\n if (!ye())\n throw new Error(\"Attribute verifyurl not set.\");\n S(\"requesting server verification from\", ye());\n const u = { payload: n };\n if (j() !== !1) {\n const {\n blockedCountries: T,\n classifier: E,\n disableRules: p,\n email: x,\n expectedLanguages: me,\n expectedCountries: jt,\n fields: at,\n ipAddress: lt,\n text: Ai,\n timeZone: jr\n } = li();\n u.blockedCountries = T, u.classifier = E, u.disableRules = p, u.email = x === !1 ? void 0 : ai(x), u.expectedCountries = jt, u.expectedLanguages = me || (fr ? [fr] : void 0), u.fields = at === !1 ? void 0 : si(at), u.ipAddress = lt === !1 ? void 0 : lt || \"auto\", u.text = Ai, u.timeZone = jr === !1 ? void 0 : jr || Xo();\n }\n const _ = await vr()(ye(), {\n body: JSON.stringify(u),\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\"\n });\n if (!_ || !(_ instanceof Response))\n throw new Error(\"Fetch function did not return a response.\");\n if (_.status !== 200)\n throw new Error(`Server responded with ${_.status}.`);\n const y = await _.json();\n if (y != null && y.payload && D(Le, y.payload, !0), et(\"serververification\", y), i() && y.classification === \"BAD\")\n throw new Error(\"SpamFilter returned negative classification.\");\n }\n function vi() {\n w && \"requestSubmit\" in w ? w.requestSubmit() : w != null && w.reportValidity() && w.submit();\n }\n function Ot(n) {\n S(\"expire\", n), ce && (clearTimeout(ce), ce = null), n < 1 ? hr() : ce = setTimeout(hr, n);\n }\n function xr(n) {\n S(\"floating\", n), v() !== n && (c(B).style.left = \"\", c(B).style.top = \"\"), v(n === !0 || n === \"\" ? \"auto\" : n === !1 || n === \"false\" ? void 0 : v()), v() ? (r() || r(\"onsubmit\"), document.addEventListener(\"scroll\", _r), document.addEventListener(\"click\", gr), window.addEventListener(\"resize\", yr)) : r() === \"onsubmit\" && r(void 0);\n }\n function $r(n) {\n if (!n.algorithm)\n throw new Error(\"Invalid challenge. Property algorithm is missing.\");\n if (n.signature === void 0)\n throw new Error(\"Invalid challenge. Property signature is missing.\");\n if (!ar.includes(n.algorithm.toUpperCase()))\n throw new Error(`Unknown algorithm value. Allowed values: ${ar.join(\", \")}`);\n if (!n.challenge || n.challenge.length < 40)\n throw new Error(\"Challenge is too short. Min. 40 chars.\");\n if (!n.salt || n.salt.length < 10)\n throw new Error(\"Salt is too short. Min. 10 chars.\");\n }\n async function kr(n) {\n let u = null;\n if (\"Worker\" in window) {\n try {\n u = await gi(n, n.maxNumber || n.maxnumber || U());\n } catch (_) {\n S(_);\n }\n if ((u == null ? void 0 : u.number) !== void 0 || \"obfuscated\" in n)\n return { data: n, solution: u };\n }\n if (\"obfuscated\" in n) {\n const _ = await ta(n.obfuscated, n.key, n.maxNumber || n.maxnumber);\n return { data: n, solution: await _.promise };\n }\n return {\n data: n,\n solution: await zo(n.challenge, n.salt, n.algorithm, n.maxNumber || n.maxnumber || U()).promise\n };\n }\n async function gi(n, u = typeof te() == \"number\" ? te() : n.maxNumber || n.maxnumber || U(), _ = Math.ceil(Ve())) {\n const y = [];\n _ = Math.min(16, u, Math.max(1, _));\n for (let p = 0; p < _; p++)\n y.push(altchaCreateWorker(Qe()));\n const T = Math.ceil(u / _), E = await Promise.all(y.map((p, x) => {\n const me = x * T;\n return new Promise((jt) => {\n p.addEventListener(\"message\", (at) => {\n if (at.data)\n for (const lt of y)\n lt !== p && lt.postMessage({ type: \"abort\" });\n jt(at.data);\n }), p.postMessage({\n payload: n,\n max: me + T,\n start: me,\n type: \"work\"\n });\n });\n }));\n for (const p of y)\n p.terminate();\n return E.find((p) => !!p) || null;\n }\n async function rt() {\n if (!M()) {\n De(b.ERROR);\n return;\n }\n const n = Ee.find((u) => u.constructor.pluginName === \"obfuscation\");\n if (!n || !(\"clarify\" in n)) {\n De(b.ERROR), S(\"Plugin `obfuscation` not found. Import `altcha/plugins/obfuscation` to load it.\");\n return;\n }\n if (\"clarify\" in n && typeof n.clarify == \"function\")\n return n.clarify();\n }\n function Cr(n) {\n n.obfuscated !== void 0 && M(n.obfuscated), n.auto !== void 0 && (r(n.auto), r() === \"onload\" && (M() ? rt() : xe())), n.blockspam !== void 0 && i(!!n.blockspam), n.customfetch !== void 0 && l(n.customfetch), n.floatinganchor !== void 0 && h(n.floatinganchor), n.delay !== void 0 && f(n.delay), n.floatingoffset !== void 0 && g(n.floatingoffset), n.floating !== void 0 && xr(n.floating), n.expire !== void 0 && (Ot(n.expire), d(n.expire)), n.challenge && (a(typeof n.challenge == \"string\" ? n.challenge : JSON.stringify(n.challenge)), $r(c(Pt))), n.challengeurl !== void 0 && o(n.challengeurl), n.debug !== void 0 && s(!!n.debug), n.hidefooter !== void 0 && k(!!n.hidefooter), n.hidelogo !== void 0 && N(!!n.hidelogo), n.maxnumber !== void 0 && U(+n.maxnumber), n.mockerror !== void 0 && Y(!!n.mockerror), n.name !== void 0 && V(n.name), n.refetchonexpire !== void 0 && O(!!n.refetchonexpire), n.spamfilter !== void 0 && j(typeof n.spamfilter == \"object\" ? n.spamfilter : !!n.spamfilter), n.strings && _e(typeof n.strings == \"string\" ? n.strings : JSON.stringify(n.strings)), n.test !== void 0 && te(typeof n.test == \"number\" ? n.test : !!n.test), n.verifyurl !== void 0 && ye(n.verifyurl), n.workers !== void 0 && Ve(+n.workers), n.workerurl !== void 0 && Qe(n.workerurl);\n }\n function Ar() {\n return {\n auto: r(),\n blockspam: i(),\n challengeurl: o(),\n debug: s(),\n delay: f(),\n expire: d(),\n floating: v(),\n floatinganchor: h(),\n floatingoffset: g(),\n hidefooter: k(),\n hidelogo: N(),\n name: V(),\n maxnumber: U(),\n mockerror: Y(),\n obfuscated: M(),\n refetchonexpire: O(),\n spamfilter: j(),\n strings: c(re),\n test: te(),\n verifyurl: ye(),\n workers: Ve(),\n workerurl: Qe()\n };\n }\n function Rr() {\n return qe;\n }\n function _i(n) {\n return Ee.find((u) => u.constructor.pluginName === n);\n }\n function Ir() {\n return c(C);\n }\n function Sr() {\n c(B).style.display = \"none\";\n }\n function nt(n = 20) {\n if (c(B))\n if (qe || (qe = (h() ? document.querySelector(h()) : w == null ? void 0 : w.querySelector('input[type=\"submit\"], button[type=\"submit\"], button:not([type=\"button\"]):not([type=\"reset\"])')) || w), qe) {\n const u = parseInt(g(), 10) || 12, _ = qe.getBoundingClientRect(), y = c(B).getBoundingClientRect(), T = document.documentElement.clientHeight, E = document.documentElement.clientWidth, p = v() === \"auto\" ? _.bottom + y.height + u + n > T : v() === \"top\", x = Math.max(n, Math.min(E - n - y.width, _.left + _.width / 2 - y.width / 2));\n if (p ? c(B).style.top = `${_.top - (y.height + u)}px` : c(B).style.top = `${_.bottom + u}px`, c(B).style.left = `${x}px`, c(B).setAttribute(\"data-floating\", p ? \"top\" : \"bottom\"), c(tt)) {\n const me = c(tt).getBoundingClientRect();\n c(tt).style.left = _.left - x + _.width / 2 - me.width / 2 + \"px\";\n }\n } else\n S(\"unable to find floating anchor element\");\n }\n function it(n = b.UNVERIFIED, u = null) {\n ce && (clearTimeout(ce), ce = null), D(Be, !1), D(Le, null), De(n, u);\n }\n function Tr(n) {\n qe = n;\n }\n function De(n, u = null) {\n D(C, n, !0), D(He, u, !0), et(\"statechange\", {\n payload: c(Le),\n state: c(C)\n });\n }\n function Ft() {\n c(B).style.display = \"block\", v() && nt();\n }\n async function xe() {\n return it(b.VERIFYING), await new Promise((n) => setTimeout(n, f() || 0)), oi().then((n) => ($r(n), S(\"challenge\", n), kr(n))).then(({ data: n, solution: u }) => {\n if (S(\"solution\", u), !u || n && \"challenge\" in n && !(\"clearText\" in u))\n if ((u == null ? void 0 : u.number) !== void 0 && \"challenge\" in n) {\n if (ye())\n return hi(dr(n, u));\n D(Le, dr(n, u), !0), S(\"payload\", c(Le));\n } else\n throw S(\"Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number.\"), new Error(\"Unexpected result returned.\");\n }).then(() => {\n De(b.VERIFIED), S(\"verified\"), xo().then(() => {\n et(\"verified\", { payload: c(Le) });\n });\n }).catch((n) => {\n S(n), De(b.ERROR, n.message);\n });\n }\n var Nr = da(), Lr = Gr(Nr);\n Po(Lr, t, \"default\", {});\n var ot = we(Lr, 2), Mt = X(ot), Dr = X(Mt);\n {\n var mi = (n) => {\n var u = ra();\n ne(n, u);\n };\n $e(Dr, (n) => {\n c(C) === b.VERIFYING && n(mi);\n });\n }\n var mt = we(Dr, 2);\n let Pr;\n var We = X(mt);\n en(We), We.__change = ui, z(mt);\n var Ut = we(mt, 2), wi = X(Ut);\n {\n var pi = (n) => {\n var u = na(), _ = Gr(u), y = X(_);\n Ge(y, () => c(re).verified), z(_);\n var T = we(_, 2);\n en(T), Pe(() => {\n se(T, \"name\", V()), jo(T, c(Le));\n }), ne(n, u);\n }, bi = (n, u) => {\n {\n var _ = (T) => {\n var E = ia(), p = X(E);\n Ge(p, () => c(re).verifying), z(E), ne(T, E);\n }, y = (T) => {\n var E = oa(), p = X(E);\n Ge(p, () => c(re).label), z(E), Pe(() => se(E, \"for\", c(cr))), ne(T, E);\n };\n $e(\n n,\n (T) => {\n c(C) === b.VERIFYING ? T(_) : T(y, !1);\n },\n u\n );\n }\n };\n $e(wi, (n) => {\n c(C) === b.VERIFIED ? n(pi) : n(bi, !1);\n });\n }\n z(Ut);\n var yi = we(Ut, 2);\n {\n var Ei = (n) => {\n var u = aa(), _ = X(u);\n se(_, \"href\", sr), z(u), Pe(() => se(_, \"aria-label\", c(re).ariaLinkLabel)), ne(n, u);\n };\n $e(yi, (n) => {\n (N() !== !0 || c(Dt)) && n(Ei);\n });\n }\n z(Mt);\n var Or = we(Mt, 2);\n {\n var xi = (n) => {\n var u = fa(), _ = we(X(u), 2);\n {\n var y = (E) => {\n var p = la(), x = X(p);\n Ge(x, () => c(re).expired), z(p), Pe(() => se(p, \"title\", c(He))), ne(E, p);\n }, T = (E) => {\n var p = sa(), x = X(p);\n Ge(x, () => c(re).error), z(p), Pe(() => se(p, \"title\", c(He))), ne(E, p);\n };\n $e(_, (E) => {\n c(C) === b.EXPIRED ? E(y) : E(T, !1);\n });\n }\n z(u), ne(n, u);\n };\n $e(Or, (n) => {\n (c(He) || c(C) === b.EXPIRED) && n(xi);\n });\n }\n var Fr = we(Or, 2);\n {\n var $i = (n) => {\n var u = ua(), _ = X(u), y = X(_);\n Ge(y, () => c(re).footer), z(_), z(u), ne(n, u);\n };\n $e(Fr, (n) => {\n c(re).footer && (k() !== !0 || c(Dt)) && n($i);\n });\n }\n var ki = we(Fr, 2);\n {\n var Ci = (n) => {\n var u = ca();\n nn(u, (_) => D(tt, _), () => c(tt)), ne(n, u);\n };\n $e(ki, (n) => {\n v() && n(Ci);\n });\n }\n return z(ot), nn(ot, (n) => D(B, n), () => c(B)), Pe(\n (n) => {\n se(ot, \"data-state\", c(C)), se(ot, \"data-floating\", v()), Pr = Fo(mt, 1, \"altcha-checkbox\", null, Pr, n), se(We, \"id\", c(cr)), We.required = r() !== \"onsubmit\" && (!v() || r() !== \"off\");\n },\n [\n () => ({\n \"altcha-hidden\": c(C) === b.VERIFYING\n })\n ]\n ), So(\"invalid\", We, br), Bo(We, () => c(Be), (n) => D(Be, n)), ne(e, Nr), Yn({\n clarify: rt,\n configure: Cr,\n getConfiguration: Ar,\n getFloatingAnchor: Rr,\n getPlugin: _i,\n getState: Ir,\n hide: Sr,\n repositionFloating: nt,\n reset: it,\n setFloatingAnchor: Tr,\n setState: De,\n show: Ft,\n verify: xe,\n get auto() {\n return r();\n },\n set auto(n = void 0) {\n r(n), $();\n },\n get blockspam() {\n return i();\n },\n set blockspam(n = void 0) {\n i(n), $();\n },\n get challengeurl() {\n return o();\n },\n set challengeurl(n = void 0) {\n o(n), $();\n },\n get challengejson() {\n return a();\n },\n set challengejson(n = void 0) {\n a(n), $();\n },\n get customfetch() {\n return l();\n },\n set customfetch(n = void 0) {\n l(n), $();\n },\n get debug() {\n return s();\n },\n set debug(n = !1) {\n s(n), $();\n },\n get delay() {\n return f();\n },\n set delay(n = 0) {\n f(n), $();\n },\n get expire() {\n return d();\n },\n set expire(n = void 0) {\n d(n), $();\n },\n get floating() {\n return v();\n },\n set floating(n = void 0) {\n v(n), $();\n },\n get floatinganchor() {\n return h();\n },\n set floatinganchor(n = void 0) {\n h(n), $();\n },\n get floatingoffset() {\n return g();\n },\n set floatingoffset(n = void 0) {\n g(n), $();\n },\n get floatingpersist() {\n return m();\n },\n set floatingpersist(n = !1) {\n m(n), $();\n },\n get hidefooter() {\n return k();\n },\n set hidefooter(n = !1) {\n k(n), $();\n },\n get hidelogo() {\n return N();\n },\n set hidelogo(n = !1) {\n N(n), $();\n },\n get id() {\n return F();\n },\n set id(n = void 0) {\n F(n), $();\n },\n get name() {\n return V();\n },\n set name(n = \"altcha\") {\n V(n), $();\n },\n get maxnumber() {\n return U();\n },\n set maxnumber(n = 1e6) {\n U(n), $();\n },\n get mockerror() {\n return Y();\n },\n set mockerror(n = !1) {\n Y(n), $();\n },\n get obfuscated() {\n return M();\n },\n set obfuscated(n = void 0) {\n M(n), $();\n },\n get plugins() {\n return Ne();\n },\n set plugins(n = void 0) {\n Ne(n), $();\n },\n get refetchonexpire() {\n return O();\n },\n set refetchonexpire(n = !0) {\n O(n), $();\n },\n get spamfilter() {\n return j();\n },\n set spamfilter(n = !1) {\n j(n), $();\n },\n get strings() {\n return _e();\n },\n set strings(n = void 0) {\n _e(n), $();\n },\n get test() {\n return te();\n },\n set test(n = !1) {\n te(n), $();\n },\n get verifyurl() {\n return ye();\n },\n set verifyurl(n = void 0) {\n ye(n), $();\n },\n get workers() {\n return Ve();\n },\n set workers(n = Math.min(16, navigator.hardwareConcurrency || 8)) {\n Ve(n), $();\n },\n get workerurl() {\n return Qe();\n },\n set workerurl(n = void 0) {\n Qe(n), $();\n }\n });\n}\nTo([\"change\"]);\ncustomElements.define(\"altcha-widget\", Zo(\n ha,\n {\n blockspam: { type: \"Boolean\" },\n debug: { type: \"Boolean\" },\n delay: { type: \"Number\" },\n expire: { type: \"Number\" },\n floatingoffset: { type: \"Number\" },\n hidefooter: { type: \"Boolean\" },\n hidelogo: { type: \"Boolean\" },\n maxnumber: { type: \"Number\" },\n mockerror: { type: \"Boolean\" },\n refetchonexpire: { type: \"Boolean\" },\n test: { type: \"Boolean\" },\n workers: { type: \"Number\" },\n auto: {},\n challengeurl: {},\n challengejson: {},\n customfetch: {},\n floating: {},\n floatinganchor: {},\n floatingpersist: {},\n id: {},\n name: {},\n obfuscated: {},\n plugins: {},\n spamfilter: {},\n strings: {},\n verifyurl: {},\n workerurl: {}\n },\n [\"default\"],\n [\n \"clarify\",\n \"configure\",\n \"getConfiguration\",\n \"getFloatingAnchor\",\n \"getPlugin\",\n \"getState\",\n \"hide\",\n \"repositionFloating\",\n \"reset\",\n \"setFloatingAnchor\",\n \"setState\",\n \"show\",\n \"verify\"\n ],\n !1\n));\nconst va = '@keyframes altcha-spinner{to{transform:rotate(360deg)}}.altcha{background:var(--altcha-color-base, transparent);border:var(--altcha-border-width, 1px) solid var(--altcha-color-border, #a0a0a0);border-radius:var(--altcha-border-radius, 3px);color:var(--altcha-color-text, currentColor);display:flex;flex-direction:column;max-width:var(--altcha-max-width, 260px);position:relative;text-align:left}.altcha:focus-within{border-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating]{background:var(--altcha-color-base, white);display:none;filter:drop-shadow(3px 3px 6px rgba(0,0,0,.2));left:-100%;position:fixed;top:-100%;width:var(--altcha-max-width, 260px);z-index:999999}.altcha[data-floating=top] .altcha-anchor-arrow{border-bottom-color:transparent;border-top-color:var(--altcha-color-border, #a0a0a0);bottom:-12px;top:auto}.altcha[data-floating=bottom]:focus-within::after{border-bottom-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating=top]:focus-within::after{border-top-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating]:not([data-state=unverified]){display:block}.altcha-anchor-arrow{border:6px solid transparent;border-bottom-color:var(--altcha-color-border, #a0a0a0);content:\"\";height:0;left:12px;position:absolute;top:-12px;width:0}.altcha-main{align-items:center;display:flex;gap:.4rem;padding:.7rem}.altcha-label{flex-grow:1}.altcha-label label{cursor:pointer}.altcha-logo{color:currentColor;opacity:.3}.altcha-footer:hover,.altcha-logo:hover{opacity:1}.altcha-error{color:var(--altcha-color-error-text, #f23939);display:flex;font-size:.85rem;gap:.3rem;padding:0 .7rem .7rem}.altcha-footer{align-items:center;background-color:var(--altcha-color-footer-bg, transparent);display:flex;font-size:.75rem;opacity:.4;padding:.2rem .7rem;text-align:right}.altcha-footer>:first-child{flex-grow:1}.altcha-footer a{color:currentColor}.altcha-checkbox{display:flex;align-items:center;height:24px;width:24px}.altcha-checkbox input{width:18px;height:18px;margin:0}.altcha-hidden{display:none}.altcha-spinner{animation:altcha-spinner .75s infinite linear;transform-origin:center}';\nfunction ga(e, t = \"__altcha-css\") {\n if (!document.getElementById(t)) {\n const r = document.createElement(\"style\");\n r.id = t, r.textContent = e, document.head.appendChild(r);\n }\n}\nglobalThis.altchaCreateWorker = (e) => e ? new Worker(new URL(e)) : new Si();\nglobalThis.altchaPlugins = globalThis.altchaPlugins || [];\nga(va);\nexport {\n ha as Altcha\n};\n","/**\n * Booking system exports for SDK consumers\n *\n * This module re-exports booking components and hooks from @riverbankcms/blocks.\n * SDK sites should use the same booking components as the main platform.\n *\n * @example Using the booking form\n * ```tsx\n * import { BookingFormClient, useBookingFormConfig } from '@riverbankcms/sdk/bookings';\n *\n * function BookingPage() {\n * const { formConfig, services, isLoading, error } = useBookingFormConfig(siteId, formId);\n *\n * if (isLoading) return <div>Loading...</div>;\n * if (error) return <div>Error: {error}</div>;\n *\n * return (\n * <BookingFormClient\n * siteId={siteId}\n * formId={formId}\n * form={formConfig}\n * services={services}\n * />\n * );\n * }\n * ```\n *\n * @packageDocumentation\n */\n\n// Re-export components and hooks from @riverbankcms/blocks\nexport {\n BookingFormClient,\n useBookingFormConfig,\n} from '@riverbankcms/blocks/client';\n\n// Re-export types from @riverbankcms/blocks\nexport type {\n BookingService,\n BookingFormConfig,\n} from '@riverbankcms/blocks/client';\n\n// Re-export SDK-specific types that may still be useful\nexport type {\n Service,\n TimeSlot,\n BookingFormSettings,\n BookingFormSchema,\n BookingFormField,\n BookingFormData,\n BookingSubmissionData,\n BookingSubmissionResult,\n} from './types';\n","/**\n * Resolve dashboard URL from multi-environment configuration\n *\n * Supports the RIVERBANK_ENV pattern for SDK sites with multiple environments:\n * - RIVERBANK_ENV=local → uses RIVERBANK_LOCAL_DASHBOARD_URL\n * - RIVERBANK_ENV=remote → uses RIVERBANK_REMOTE_DASHBOARD_URL\n *\n * @returns Dashboard URL if multi-env is configured, null otherwise\n */\nfunction resolveMultiEnvDashboardUrl(): string | null {\n const env = process.env.RIVERBANK_ENV\n if (!env) return null\n\n const envKey = `RIVERBANK_${env.toUpperCase()}_DASHBOARD_URL`\n const dashboardUrl = process.env[envKey]\n\n if (dashboardUrl) {\n return dashboardUrl.replace(/\\/$/, '')\n }\n\n return null\n}\n\n/**\n * Get the CMS API base URL\n *\n * Resolves the API URL from environment variables with the following priority:\n *\n * 1. Multi-environment pattern (server-only, for SDK sites):\n * - RIVERBANK_ENV=local → RIVERBANK_LOCAL_DASHBOARD_URL\n * - RIVERBANK_ENV=remote → RIVERBANK_REMOTE_DASHBOARD_URL\n *\n * 2. Explicit API URL (SDK sites):\n * - NEXT_PUBLIC_BUILDER_API_URL\n *\n * 3. Dashboard URL (frontend app):\n * - NEXT_PUBLIC_DASHBOARD_URL (appends /api)\n *\n * 4. Legacy fallback:\n * - NEXT_PUBLIC_CMS_API_URL\n *\n * @returns The base API URL (e.g., \"http://dashboard.local:4000/api\")\n * @throws Error if no valid URL is configured\n */\nexport function getCmsApiUrl(): string {\n // 1. Multi-environment pattern (server-only, for SDK sites)\n // Allows switching between local/remote with a single RIVERBANK_ENV toggle\n const multiEnvDashboard = resolveMultiEnvDashboardUrl()\n if (multiEnvDashboard) {\n return `${multiEnvDashboard}/api`\n }\n\n // 2. SDK sites use this (explicit API URL, no /api suffix needed)\n const builderApiUrl = process.env.NEXT_PUBLIC_BUILDER_API_URL\n if (builderApiUrl) {\n return builderApiUrl.replace(/\\/$/, '')\n }\n\n // 3. Frontend app uses this (dashboard URL, append /api)\n const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL\n if (dashboardUrl) {\n const base = dashboardUrl.replace(/\\/$/, '')\n return `${base}/api`\n }\n\n // 4. Legacy fallback\n const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL\n if (legacyApiUrl) {\n return legacyApiUrl.replace(/\\/$/, '')\n }\n\n throw new Error(\n 'Dashboard URL not configured. Either:\\n' +\n ' 1. Set RIVERBANK_ENV with RIVERBANK_LOCAL_DASHBOARD_URL / RIVERBANK_REMOTE_DASHBOARD_URL\\n' +\n ' 2. Set NEXT_PUBLIC_BUILDER_API_URL (SDK sites)\\n' +\n ' 3. Set NEXT_PUBLIC_DASHBOARD_URL (frontend app)'\n )\n}\n","\"use client\";\n\n// src/AltchaWidget.tsx\nimport { useEffect, useRef, useState } from \"react\";\nfunction AltchaWidget({\n challengeUrl,\n onSolutionChange,\n auto = true,\n hidelogo = false,\n className\n}) {\n const containerRef = useRef(null);\n const [isLoaded, setIsLoaded] = useState(false);\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n let widget = null;\n import(\"altcha\").then(() => {\n if (!containerRef.current) return;\n widget = document.createElement(\"altcha-widget\");\n widget.setAttribute(\"challengeurl\", challengeUrl);\n if (auto) {\n widget.setAttribute(\"auto\", \"onload\");\n }\n if (hidelogo) {\n widget.setAttribute(\"hidelogo\", \"true\");\n }\n widget.setAttribute(\"hidefooter\", \"true\");\n if (className) {\n widget.className = className;\n }\n widget.addEventListener(\"statechange\", ((event) => {\n const { state, payload } = event.detail;\n if (state === \"verified\" && payload) {\n onSolutionChange?.(payload);\n } else if (state === \"error\" || state === \"expired\") {\n onSolutionChange?.(null);\n }\n }));\n containerRef.current.appendChild(widget);\n setIsLoaded(true);\n }).catch((err) => {\n console.error(\"Failed to load ALTCHA widget:\", err);\n });\n return () => {\n if (widget && containerRef.current) {\n containerRef.current.removeChild(widget);\n }\n };\n }, [challengeUrl, auto, hidelogo, className, onSolutionChange]);\n return /* @__PURE__ */ React.createElement(\"div\", { ref: containerRef });\n}\n\n// src/client.ts\nfunction isSpamProtectionEnabled() {\n return process.env.NEXT_PUBLIC_SPAM_PROTECTION_ENABLED === \"true\";\n}\nexport {\n AltchaWidget,\n isSpamProtectionEnabled\n};\n","// Create a TextEncoder instance to convert strings to UTF-8 byte arrays.\nexport const encoder = new TextEncoder();\n/**\n * Converts an ArrayBuffer or Uint8Array to a hexadecimal string.\n *\n * @param ab - The ArrayBuffer or Uint8Array to convert.\n * @returns The hexadecimal string representation of the input.\n */\nexport function ab2hex(ab) {\n return [...new Uint8Array(ab)]\n .map((x) => x.toString(16).padStart(2, '0'))\n .join('');\n}\n/**\n * Generates a cryptographic hash using the specified algorithm.\n *\n * @param algorithm - The cryptographic hash algorithm to use (e.g., 'SHA-256').\n * @param data - The data to hash, either as a string or ArrayBuffer.\n * @returns A Promise that resolves to the computed hash as an ArrayBuffer.\n */\nexport async function hash(algorithm, data) {\n return crypto.subtle.digest(algorithm.toUpperCase(), typeof data === 'string' ? encoder.encode(data) : new Uint8Array(data));\n}\n/**\n * Generates a cryptographic hash using the specified algorithm and returns it as a hexadecimal string.\n *\n * @param algorithm - The cryptographic hash algorithm to use (e.g., 'SHA-256').\n * @param data - The data to hash, either as a string or ArrayBuffer.\n * @returns A Promise that resolves to the computed hash as a hexadecimal string.\n */\nexport async function hashHex(algorithm, data) {\n return ab2hex(await hash(algorithm, data));\n}\n/**\n * Generates an HMAC using the specified algorithm and secret key.\n *\n * @param algorithm - The cryptographic hash algorithm to use for HMAC (e.g., 'SHA-256').\n * @param data - The data to sign, either as a string or ArrayBuffer.\n * @param secret - The secret key to use for HMAC.\n * @returns A Promise that resolves to the computed HMAC as an ArrayBuffer.\n */\nexport async function hmac(algorithm, data, secret) {\n const key = await crypto.subtle.importKey('raw', encoder.encode(secret), {\n name: 'HMAC',\n hash: algorithm,\n }, false, ['sign', 'verify']);\n return crypto.subtle.sign('HMAC', key, typeof data === 'string' ? encoder.encode(data) : new Uint8Array(data));\n}\n/**\n * Generates an HMAC using the specified algorithm and secret key, and returns it as a hexadecimal string.\n *\n * @param algorithm - The cryptographic hash algorithm to use for HMAC (e.g., 'SHA-256').\n * @param data - The data to sign, either as a string or ArrayBuffer.\n * @param secret - The secret key to use for HMAC.\n * @returns A Promise that resolves to the computed HMAC as a hexadecimal string.\n */\nexport async function hmacHex(algorithm, data, secret) {\n return ab2hex(await hmac(algorithm, data, secret));\n}\n/**\n * Generates a random sequence of bytes of the specified length.\n *\n * @param length - The number of random bytes to generate.\n * @returns A Uint8Array containing the random bytes.\n */\nexport function randomBytes(length) {\n const ab = new Uint8Array(length);\n crypto.getRandomValues(ab);\n return ab;\n}\n/**\n * Generates a random integer between 1 and the specified maximum value (inclusive).\n *\n * @param max - The maximum value for the random integer.\n * @returns A random integer between 1 and the specified max value.\n */\nexport function randomInt(max) {\n const ab = new Uint32Array(1);\n crypto.getRandomValues(ab);\n const randomNumber = ab[0] / (0xffffffff + 1);\n return Math.floor(randomNumber * max + 1);\n}\n","// src/index.ts\nimport { createChallenge, verifySolution as altchaVerifySolution } from \"altcha-lib\";\nfunction getHmacKey() {\n const key = process.env.ALTCHA_HMAC_KEY;\n return key && key.trim().length > 0 ? key : null;\n}\nfunction hasSpamProtection() {\n return getHmacKey() !== null;\n}\nfunction getCmsApiUrl() {\n const env = process.env.RIVERBANK_ENV;\n if (env) {\n const envKey = `RIVERBANK_${env.toUpperCase()}_DASHBOARD_URL`;\n const dashboardUrl2 = process.env[envKey];\n if (dashboardUrl2) {\n return `${dashboardUrl2.replace(/\\/$/, \"\")}/api`;\n }\n }\n const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;\n if (dashboardUrl) {\n return `${dashboardUrl.replace(/\\/$/, \"\")}/api`;\n }\n const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;\n if (legacyApiUrl) {\n return legacyApiUrl.replace(/\\/$/, \"\");\n }\n throw new Error(\"Dashboard URL not configured. Set NEXT_PUBLIC_DASHBOARD_URL\");\n}\nfunction getChallengeUrl() {\n return `${getCmsApiUrl()}/public/challenge`;\n}\nasync function createAltchaChallenge(opts = {}) {\n const hmacKey = getHmacKey();\n if (!hmacKey) {\n throw new Error(\"ALTCHA_HMAC_KEY is not configured\");\n }\n const maxNumber = opts.maxNumber ?? 5e4;\n const expires = opts.expires ?? new Date(Date.now() + 5 * 60 * 1e3);\n const challenge = await createChallenge({\n hmacKey,\n maxNumber,\n expires\n });\n return JSON.stringify(challenge);\n}\nasync function verifySolution(payload) {\n const hmacKey = getHmacKey();\n if (!hmacKey) {\n return true;\n }\n if (!payload || payload.trim().length === 0) {\n return false;\n }\n try {\n const isValid = await altchaVerifySolution(payload, hmacKey, true);\n return isValid;\n } catch {\n return false;\n }\n}\nexport {\n createAltchaChallenge,\n getChallengeUrl,\n hasSpamProtection,\n verifySolution\n};\n","\"use client\"\n\nimport React, { useState } from 'react';\nimport { MultiStepForm } from '../components/multi-step/MultiStepForm';\nimport { SuccessMessage } from '../components/booking/SuccessMessage';\nimport { useBookingSteps, type BookingFormData } from '../hooks/useBookingSteps';\nimport { useBookingSubmission } from '../hooks/useBookingSubmission';\nimport { AltchaWidget, isSpamProtectionEnabled } from '@riverbankcms/altcha/client';\nimport { getChallengeUrl } from '@riverbankcms/altcha';\n\nexport type Service = {\n id: string;\n siteId: string;\n title: string;\n description?: string;\n durationMinutes?: number;\n};\n\nexport type FormConfig = {\n id: string;\n siteId: string;\n userId: string;\n name: string;\n schemaJson?: any;\n settingsJson?: any;\n createdAt: string;\n updatedAt: string;\n};\n\ntype BookingFormProps = {\n siteId: string;\n formId: string;\n className?: string;\n // Data passed from server-side data loaders\n form?: FormConfig | null;\n services?: Service[];\n /** Server-passed spam protection flag. Falls back to NEXT_PUBLIC_SPAM_PROTECTION_ENABLED. */\n spamProtectionEnabled?: boolean;\n};\n\n/**\n * BookingFormClient Component\n *\n * Multi-step booking form that:\n * 1. Receives form configuration and services from server-side loaders\n * 2. Shows service/resource selection if needed\n * 3. Shows date/time slot selection (fetched dynamically based on user selection)\n * 4. Shows dynamic custom fields\n * 5. Submits booking\n */\nexport const BookingFormClient: React.FC<BookingFormProps> = ({\n siteId: siteIdProp,\n formId,\n className,\n form,\n services = [],\n spamProtectionEnabled,\n}) => {\n const [isSuccess, setIsSuccess] = useState(false);\n const [altchaSolution, setAltchaSolution] = useState<string | null>(null);\n // Use server-passed prop if provided, otherwise check client-safe env var\n const showSpamProtection = spamProtectionEnabled ?? isSpamProtectionEnabled();\n\n // Fallback: if siteId isn't passed via binding, get it from form data\n const siteId = siteIdProp || form?.siteId || '';\n\n // Validate required props\n React.useEffect(() => {\n if (!siteId) {\n console.error('[BookingFormClient] ERROR: siteId is missing!');\n }\n if (!form) {\n console.warn('[BookingFormClient] Form data not loaded');\n }\n console.log('[BookingFormClient] Loaded with:', {\n siteId,\n formId,\n hasForm: !!form,\n servicesCount: Array.isArray(services) ? services.length : 'not an array',\n servicesData: services,\n });\n }, [siteId, formId, form, services]);\n\n // Normalize form config to expected shape\n const formConfig = form ? {\n id: form.id,\n name: form.name,\n slug: '', // Not needed for booking form\n settings: form.settingsJson,\n schema: form.schemaJson,\n } : null;\n\n // Normalize services to ensure it's always an array\n const normalizedServices = React.useMemo(() => {\n if (Array.isArray(services)) {\n return services;\n }\n if (services && typeof services === 'object') {\n // If it's an object with a services property, extract it\n if ('services' in services) {\n return (services as any).services || [];\n }\n // If it's an object with service objects as values, convert to array\n return Object.values(services);\n }\n return [];\n }, [services]);\n\n // Build step array based on configuration\n const steps = useBookingSteps(siteId, formConfig, normalizedServices);\n\n const { submit } = useBookingSubmission(siteId);\n\n // Show error if form data is missing\n if (!form) {\n return (\n <div className={`rounded-lg border border-destructive bg-destructive/10 p-4 ${className ?? ''}`}>\n <p className=\"text-sm text-destructive\">Booking form not found. Please check your configuration.</p>\n </div>\n );\n }\n\n const handleComplete = async (data: BookingFormData) => {\n try {\n // Extract booking data\n const serviceId = data.serviceId || formConfig?.settings?.serviceId;\n const resourceId = data.resourceId || formConfig?.settings?.resourceId;\n\n if (!serviceId || !data.selectedSlot) {\n throw new Error('Missing required booking information');\n }\n\n // Calculate endAt from service duration\n console.log('[BookingFormClient] Looking for service:', {\n serviceId,\n availableServices: normalizedServices,\n });\n const selectedService = normalizedServices.find((s: Service) => s.id === serviceId);\n console.log('[BookingFormClient] Selected service:', selectedService);\n\n if (!selectedService) {\n throw new Error(`Service not found: ${serviceId}`);\n }\n if (!selectedService.durationMinutes) {\n throw new Error(\n `Service \"${selectedService.title || serviceId}\" is missing duration. ` +\n `Please update the service in the dashboard to include a duration (e.g., 30 minutes).`\n );\n }\n\n // Calculate end time by adding duration to start time\n const startDate = new Date(data.selectedSlot);\n const endDate = new Date(startDate.getTime() + selectedService.durationMinutes * 60 * 1000);\n\n // Extract custom fields (everything except our known booking fields)\n const bookingFields = new Set(['serviceId', 'resourceId', 'selectedDate', 'selectedSlot']);\n const customFields: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (!bookingFields.has(key)) {\n customFields[key] = value;\n }\n }\n\n // Submit booking with formId\n await submit({\n formId,\n serviceId,\n resourceId,\n startAt: data.selectedSlot,\n endAt: endDate.toISOString(),\n customFields,\n timezone: 'UTC', // TODO: Get from resource or user preference\n altchaSolution,\n });\n\n setIsSuccess(true);\n } catch (err) {\n console.error('Booking submission failed:', err);\n throw err;\n }\n };\n\n // Success state\n if (isSuccess) {\n const successMessage = formConfig?.settings?.successMessage ||\n 'Your appointment has been booked! Check your email for confirmation.';\n return <SuccessMessage message={successMessage} className={className} />;\n }\n\n // Multi-step form\n return (\n <div className={className}>\n <MultiStepForm<BookingFormData>\n steps={steps}\n initialData={{\n serviceId: formConfig?.settings?.serviceId,\n resourceId: formConfig?.settings?.resourceId,\n }}\n onComplete={handleComplete}\n progressStyle=\"steps\"\n persistToUrl={false}\n allowSkip={false}\n />\n {/* Widget placed outside MultiStepForm since the abstraction doesn't support\n injecting content into specific steps. User can solve challenge while\n filling out the form. TODO: Consider adding beforeSubmit slot to MultiStepForm. */}\n {showSpamProtection && (\n <div className=\"mt-4\">\n <AltchaWidget\n challengeUrl={getChallengeUrl()}\n onSolutionChange={setAltchaSolution}\n />\n </div>\n )}\n </div>\n );\n};\n","'use client';\n\nimport React, { cloneElement, isValidElement } from 'react';\nimport { MultiStepContext } from './MultiStepContext';\nimport { useMultiStep } from './useMultiStep';\nimport type { MultiStepFormProps } from './types';\n\n/**\n * MultiStepForm Component\n *\n * Generic orchestrator for multi-step forms. Handles step navigation,\n * data accumulation, validation, and progress indication.\n *\n * Usage:\n * ```tsx\n * <MultiStepForm\n * steps={[\n * { id: 'step1', title: 'Step 1', component: <Step1 /> },\n * { id: 'step2', title: 'Step 2', component: <Step2 /> },\n * ]}\n * onComplete={(data) => console.log('Done!', data)}\n * progressStyle=\"dots\"\n * />\n * ```\n */\nexport function MultiStepForm<TData = any>({\n steps,\n initialData,\n onComplete,\n onStepChange,\n onDataChange,\n progressStyle = 'dots',\n className = '',\n persistToUrl = false,\n allowSkip = false,\n}: MultiStepFormProps<TData>): React.ReactElement {\n const context = useMultiStep<TData>({\n steps,\n initialData,\n onStepChange,\n onDataChange,\n onComplete,\n persistToUrl,\n });\n\n const {\n visibleSteps,\n currentStepIndex,\n goToNext,\n goToPrevious,\n goToStep,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n errors,\n isValidating,\n isSubmitting,\n } = context;\n\n const currentStep = visibleSteps[currentStepIndex];\n\n if (!currentStep) {\n return (\n <div className=\"text-center py-12\">\n <p className=\"text-muted-foreground\">No steps available</p>\n </div>\n );\n }\n\n // Clone the step component and inject context if it's a React element\n const stepComponent = isValidElement(currentStep.component)\n ? cloneElement(currentStep.component as React.ReactElement<any>, {\n // Step components can access context via hooks, but we also pass key props\n stepId: currentStep.id,\n stepIndex: currentStepIndex,\n } as any) // Type assertion needed for dynamic props\n : currentStep.component;\n\n const showBackButton = !isFirstStep && !currentStep.hideBack && canGoBack;\n const showNextButton = !currentStep.isTerminal;\n const nextButtonLabel = isLastStep\n ? (currentStep.nextLabel || 'Complete')\n : (currentStep.nextLabel || 'Continue');\n const backButtonLabel = currentStep.backLabel || 'Back';\n\n return (\n <MultiStepContext.Provider value={context}>\n <div className={`multi-step-form ${className}`}>\n {/* Progress Indicator */}\n {progressStyle !== 'none' && (\n <div className=\"mb-8\">\n <ProgressIndicator\n steps={visibleSteps}\n currentIndex={currentStepIndex}\n style={progressStyle}\n onStepClick={allowSkip ? goToStep : undefined}\n />\n </div>\n )}\n\n {/* Step Content */}\n <div className=\"step-content\">{stepComponent}</div>\n\n {/* Error Display */}\n {Object.keys(errors).length > 0 && (\n <div className=\"mt-6 alert alert-error\">\n {errors._form && (\n <p className=\"text-sm font-medium\">{errors._form}</p>\n )}\n {Object.entries(errors)\n .filter(([key]) => key !== '_form')\n .map(([key, message]) => (\n <p key={key} className=\"text-sm\">\n {message}\n </p>\n ))}\n </div>\n )}\n\n {/* Navigation Buttons */}\n {(showBackButton || showNextButton) && (\n <div className=\"flex gap-3 mt-8\">\n {showBackButton && (\n <button\n type=\"button\"\n onClick={goToPrevious}\n disabled={!canGoBack}\n className=\"outline btn-md\"\n >\n {backButtonLabel}\n </button>\n )}\n\n {showNextButton && (\n <button\n type=\"button\"\n onClick={goToNext}\n disabled={!canGoNext}\n className=\"primary btn-md flex-1\"\n >\n {isValidating && (\n <span className=\"inline-block animate-spin rounded-full h-4 w-4 border-b-2 border-current\"></span>\n )}\n {isSubmitting && (\n <span className=\"inline-block animate-spin rounded-full h-4 w-4 border-b-2 border-current\"></span>\n )}\n {!isValidating && !isSubmitting && nextButtonLabel}\n {isValidating && 'Validating...'}\n {isSubmitting && 'Submitting...'}\n </button>\n )}\n </div>\n )}\n </div>\n </MultiStepContext.Provider>\n );\n}\n\n/**\n * ProgressIndicator Component\n *\n * Visual indicator of progress through the steps.\n * Supports dots, steps, and bar styles.\n */\nfunction ProgressIndicator({\n steps,\n currentIndex,\n style,\n onStepClick,\n}: {\n steps: Array<{ id: string; title: string }>;\n currentIndex: number;\n style: 'dots' | 'steps' | 'bar';\n onStepClick?: (index: number) => void;\n}) {\n if (style === 'dots') {\n return (\n <div className=\"flex items-center justify-center gap-2\">\n {steps.map((step, index) => {\n const isActive = index === currentIndex;\n const isCompleted = index < currentIndex;\n const isClickable = onStepClick && index <= currentIndex;\n\n return (\n <button\n key={step.id}\n type=\"button\"\n onClick={isClickable ? () => onStepClick(index) : undefined}\n disabled={!isClickable}\n className={`\n step-dot transition-all\n ${isActive ? 'step-dot-active' : ''}\n ${isCompleted ? 'step-dot-complete' : ''}\n ${isClickable ? 'cursor-pointer hover:scale-125' : 'cursor-default'}\n `}\n aria-label={step.title}\n />\n );\n })}\n </div>\n );\n }\n\n if (style === 'steps') {\n return (\n <div className=\"flex items-center justify-between\">\n {steps.map((step, index) => {\n const isActive = index === currentIndex;\n const isCompleted = index < currentIndex;\n const isClickable = onStepClick && index <= currentIndex;\n const isLast = index === steps.length - 1;\n\n return (\n <div key={step.id} className=\"flex items-center flex-1\">\n <button\n type=\"button\"\n onClick={isClickable ? () => onStepClick(index) : undefined}\n disabled={!isClickable}\n className={`\n flex items-center gap-2\n ${isClickable ? 'cursor-pointer' : 'cursor-default'}\n `}\n >\n <div\n className={`\n step-circle transition-colors\n ${isActive ? 'step-circle-active' : ''}\n ${isCompleted ? 'step-circle-complete' : ''}\n `}\n >\n {isCompleted ? '✓' : index + 1}\n </div>\n <span\n className={`\n text-sm hidden sm:inline\n ${isActive ? 'font-medium' : ''}\n ${isCompleted || !isActive ? 'status-muted' : ''}\n `}\n >\n {step.title}\n </span>\n </button>\n\n {!isLast && (\n <div className=\"step-connector mx-2 hidden sm:block\" />\n )}\n </div>\n );\n })}\n </div>\n );\n }\n\n // Bar style\n const progress = ((currentIndex + 1) / steps.length) * 100;\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm status-muted\">\n <span>\n Step {currentIndex + 1} of {steps.length}\n </span>\n <span>{Math.round(progress)}%</span>\n </div>\n <div className=\"progress-bar\">\n <div\n className=\"progress-fill\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { MultiStepContextValue } from './types';\n\n/**\n * React Context for Multi-Step Form State\n *\n * Provides step navigation, data management, and validation state\n * to all child components within a multi-step form.\n */\nexport const MultiStepContext = createContext<MultiStepContextValue | null>(null);\n\n/**\n * Hook to access multi-step form context\n *\n * Must be used within a MultiStepForm component.\n *\n * @throws Error if used outside of MultiStepForm\n * @returns The multi-step context value with full state and navigation\n */\nexport function useMultiStepContext<TData = any>(): MultiStepContextValue<TData> {\n const context = useContext(MultiStepContext);\n\n if (!context) {\n throw new Error(\n 'useMultiStepContext must be used within a MultiStepForm component. ' +\n 'Make sure your component is wrapped in <MultiStepForm>.'\n );\n }\n\n return context as MultiStepContextValue<TData>;\n}\n\n/**\n * Hook to access multi-step form data\n *\n * Convenience hook that returns just the data portion of the context.\n * Useful for components that only need to read/write data.\n *\n * @returns Object with data and updateData function\n */\nexport function useMultiStepData<TData = any>(): {\n data: Partial<TData>;\n updateData: (updates: Partial<TData>) => void;\n} {\n const { data, updateData } = useMultiStepContext<TData>();\n return { data, updateData };\n}\n\n/**\n * Hook to access multi-step navigation\n *\n * Convenience hook that returns just the navigation functions.\n * Useful for custom step components that need to control navigation.\n *\n * @returns Object with navigation functions and state\n */\nexport function useMultiStepNavigation(): {\n goToNext: () => Promise<void>;\n goToPrevious: () => void;\n goToStep: (stepIndex: number) => void;\n goToStepById: (stepId: string) => void;\n canGoNext: boolean;\n canGoBack: boolean;\n isFirstStep: boolean;\n isLastStep: boolean;\n currentStepIndex: number;\n currentStepId: string;\n} {\n const {\n goToNext,\n goToPrevious,\n goToStep,\n goToStepById,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n currentStepIndex,\n currentStepId,\n } = useMultiStepContext();\n\n return {\n goToNext,\n goToPrevious,\n goToStep,\n goToStepById,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n currentStepIndex,\n currentStepId,\n };\n}\n","'use client';\n\nimport { useState, useCallback, useMemo, useEffect } from 'react';\nimport type { Step, MultiStepContextValue, StepValidationResult } from './types';\n\n/**\n * Core hook for multi-step form logic\n *\n * Manages step navigation, data accumulation, and validation.\n * This is the engine that powers the MultiStepForm component.\n */\nexport function useMultiStep<TData = any>({\n steps,\n initialData = {},\n onStepChange,\n onDataChange,\n onComplete,\n persistToUrl = false,\n}: {\n steps: Step<TData>[];\n initialData?: Partial<TData>;\n onStepChange?: (stepId: string, stepIndex: number) => void;\n onDataChange?: (data: Partial<TData>) => void;\n onComplete?: (data: TData) => void | Promise<void>;\n persistToUrl?: boolean;\n}): MultiStepContextValue<TData> {\n // State\n const [data, setData] = useState<Partial<TData>>(initialData);\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isValidating, setIsValidating] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n // Filter steps based on conditions\n const visibleSteps = useMemo(() => {\n return steps.filter((step) => {\n if (!step.condition) return true;\n return step.condition(data);\n });\n }, [steps, data]);\n\n const currentStep = visibleSteps[currentStepIndex];\n const currentStepId = currentStep?.id || '';\n\n // Sync step to URL if enabled\n useEffect(() => {\n if (persistToUrl && currentStep) {\n const url = new URL(window.location.href);\n url.searchParams.set('step', currentStep.id);\n window.history.replaceState({}, '', url.toString());\n }\n }, [currentStepIndex, currentStep, persistToUrl]);\n\n // Read step from URL on mount\n useEffect(() => {\n if (persistToUrl) {\n const url = new URL(window.location.href);\n const stepId = url.searchParams.get('step');\n if (stepId) {\n const stepIndex = visibleSteps.findIndex((s) => s.id === stepId);\n if (stepIndex !== -1) {\n setCurrentStepIndex(stepIndex);\n }\n }\n }\n // Only run on mount - empty deps array is intentional\n }, []);\n\n // Notify on step change\n useEffect(() => {\n if (onStepChange && currentStep) {\n onStepChange(currentStep.id, currentStepIndex);\n }\n }, [currentStepIndex, currentStep, onStepChange]);\n\n // Update data\n const updateData = useCallback(\n (updates: Partial<TData>) => {\n setData((prev) => {\n const newData = { ...prev, ...updates };\n onDataChange?.(newData);\n return newData;\n });\n // Clear errors when data changes\n setErrors({});\n },\n [onDataChange]\n );\n\n // Validate current step\n const validateCurrentStep = useCallback(async (): Promise<boolean> => {\n if (!currentStep?.validate) return true;\n\n setIsValidating(true);\n setErrors({});\n\n try {\n const result: StepValidationResult = await currentStep.validate(data);\n\n if (result.valid) {\n return true;\n } else {\n setErrors(result.errors);\n return false;\n }\n } catch (error) {\n console.error('Step validation error:', error);\n setErrors({ _form: 'Validation failed. Please try again.' });\n return false;\n } finally {\n setIsValidating(false);\n }\n }, [currentStep, data]);\n\n // Navigate to next step\n const goToNext = useCallback(async () => {\n // Validate current step\n const isValid = await validateCurrentStep();\n if (!isValid) return;\n\n // Check if this is the last step\n if (currentStepIndex === visibleSteps.length - 1) {\n // Complete the form\n if (onComplete) {\n setIsSubmitting(true);\n try {\n await onComplete(data as TData);\n } catch (error) {\n console.error('Form submission error:', error);\n setErrors({ _form: 'Submission failed. Please try again.' });\n } finally {\n setIsSubmitting(false);\n }\n }\n return;\n }\n\n // Move to next step\n setCurrentStepIndex((prev) => Math.min(prev + 1, visibleSteps.length - 1));\n setErrors({});\n }, [currentStepIndex, visibleSteps.length, validateCurrentStep, onComplete, data]);\n\n // Navigate to previous step\n const goToPrevious = useCallback(() => {\n setCurrentStepIndex((prev) => Math.max(prev - 1, 0));\n setErrors({});\n }, []);\n\n // Navigate to specific step by index\n const goToStep = useCallback(\n (stepIndex: number) => {\n if (stepIndex >= 0 && stepIndex < visibleSteps.length) {\n setCurrentStepIndex(stepIndex);\n setErrors({});\n }\n },\n [visibleSteps.length]\n );\n\n // Navigate to specific step by ID\n const goToStepById = useCallback(\n (stepId: string) => {\n const stepIndex = visibleSteps.findIndex((s) => s.id === stepId);\n if (stepIndex !== -1) {\n goToStep(stepIndex);\n }\n },\n [visibleSteps, goToStep]\n );\n\n // Reset form\n const reset = useCallback(() => {\n setData(initialData);\n setCurrentStepIndex(0);\n setErrors({});\n setIsValidating(false);\n setIsSubmitting(false);\n }, [initialData]);\n\n // Computed properties\n const canGoNext = !isValidating && !isSubmitting;\n const canGoBack = currentStepIndex > 0 && !isValidating && !isSubmitting;\n const isFirstStep = currentStepIndex === 0;\n const isLastStep = currentStepIndex === visibleSteps.length - 1;\n\n return {\n currentStepIndex,\n currentStepId,\n visibleSteps,\n data,\n errors,\n isValidating,\n isSubmitting,\n goToNext,\n goToPrevious,\n goToStep,\n goToStepById,\n updateData,\n canGoNext,\n canGoBack,\n isFirstStep,\n isLastStep,\n reset,\n };\n}\n","/**\n * SuccessMessage Component\n *\n * Displays success message after successful appointment booking.\n */\n\nimport React from 'react';\n\ntype SuccessMessageProps = {\n message: string;\n className?: string;\n};\n\nexport const SuccessMessage: React.FC<SuccessMessageProps> = ({ message, className }) => {\n return (\n <div\n className={`alert alert-success text-sm ${className ?? ''}`}\n role=\"alert\"\n aria-live=\"polite\"\n >\n {message}\n </div>\n );\n};\n","/**\n * Hook to build multi-step booking flow\n */\n\nimport React, { useMemo } from 'react';\nimport type { Step } from '../components/multi-step/types';\nimport type { BookingFormConfig, Service } from './useBookingFormConfig';\nimport { ServiceSelectionStep } from '../components/booking/ServiceSelectionStep';\nimport { DateTimeSelectionStep } from '../components/booking/DateTimeSelectionStep';\nimport { DynamicFormFields } from '../components/multi-step/DynamicFormFields';\n\nexport type BookingFormData = {\n serviceId?: string;\n resourceId?: string;\n selectedDate?: string;\n selectedSlot?: string;\n [key: string]: any; // Dynamic form fields\n};\n\n/**\n * Build the array of steps for the booking flow\n *\n * Steps are conditionally included based on form configuration:\n * - Service selection: Only if multiple services available\n * - Date/time selection: Always included\n * - Custom fields: Only if form has fields defined\n */\nexport function useBookingSteps(\n siteId: string,\n formConfig: BookingFormConfig | null,\n services: Service[]\n): Step<BookingFormData>[] {\n return useMemo<Step<BookingFormData>[]>(() => {\n if (!formConfig) return [];\n\n const stepsArray: Step<BookingFormData>[] = [];\n\n // Determine the service ID to use\n // Priority: form settings > single available service\n const effectiveServiceId = formConfig.settings?.serviceId ||\n (services.length === 1 ? services[0]?.id : undefined);\n\n // Step 1: Service/Resource Selection (conditional)\n const needsServiceSelection =\n (!formConfig.settings?.serviceId && services.length > 1) ||\n (formConfig.settings?.serviceIds && formConfig.settings.serviceIds.length > 1);\n\n if (needsServiceSelection) {\n stepsArray.push({\n id: 'service-selection',\n title: 'Select Service',\n component: React.createElement(ServiceSelectionStep, { siteId, services }),\n condition: () => needsServiceSelection,\n validate: (data) => {\n if (!data.serviceId) {\n return { valid: false, errors: { _form: 'Please select a service' } };\n }\n return { valid: true };\n },\n });\n }\n\n // Step 2: Date/Time Selection\n // Pass the single service info to display when there's only one service\n const singleService = services.length === 1 ? services[0] : undefined;\n stepsArray.push({\n id: 'datetime-selection',\n title: 'Select Date & Time',\n component: React.createElement(DateTimeSelectionStep, {\n siteId,\n preSelectedServiceId: effectiveServiceId,\n preSelectedResourceId: formConfig.settings?.resourceId,\n singleService,\n }),\n validate: (data) => {\n if (!data.selectedSlot) {\n return { valid: false, errors: { _form: 'Please select a date and time' } };\n }\n return { valid: true };\n },\n });\n\n // Step 3: Custom Fields (if any)\n if (formConfig.schema?.fields && formConfig.schema.fields.length > 0) {\n stepsArray.push({\n id: 'custom-fields',\n title: 'Your Information',\n component: React.createElement(DynamicFormFields, { fields: formConfig.schema.fields }),\n validate: (data) => {\n const errors: Record<string, string> = {};\n\n for (const field of formConfig.schema!.fields) {\n if (field.required && !data[field.id]) {\n errors[field.id] = `${field.label} is required`;\n }\n }\n\n if (Object.keys(errors).length > 0) {\n return { valid: false, errors };\n }\n\n return { valid: true };\n },\n });\n }\n\n return stepsArray;\n }, [formConfig, services, siteId]);\n}\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { getCmsApiUrl } from '../../utils/api-url';\n\nexport interface Service {\n id: string;\n title: string;\n description?: string;\n durationMinutes?: number;\n}\n\nexport interface Resource {\n id: string;\n displayName: string;\n title?: string;\n}\n\nexport interface ServiceResourceSelectorProps {\n siteId: string;\n services: Service[];\n preSelectedServiceId?: string;\n preSelectedResourceId?: string;\n onSelect: (selection: { serviceId: string; resourceId?: string }) => void;\n onBack?: () => void;\n heading?: string;\n description?: string;\n}\n\n/**\n * ServiceResourceSelector Component\n *\n * Handles Step 1 of the booking flow: service and resource selection.\n * Only shown when the booking form allows multiple services or when\n * resource selection is needed.\n *\n * Features:\n * - Service selection (if multiple services available)\n * - Resource selection (if multiple resources available for selected service)\n * - Auto-skips if only one option available\n * - Fetches resources dynamically when service is selected\n */\nexport function ServiceResourceSelector({\n siteId,\n services,\n preSelectedServiceId,\n preSelectedResourceId,\n onSelect,\n onBack,\n heading = 'Select Service',\n description = 'Choose the service you\\'d like to book',\n}: ServiceResourceSelectorProps): React.ReactElement {\n const [selectedServiceId, setSelectedServiceId] = useState<string | undefined>(\n preSelectedServiceId\n );\n const [selectedResourceId, setSelectedResourceId] = useState<string | undefined>(\n preSelectedResourceId\n );\n const [resources, setResources] = useState<Resource[]>([]);\n const [isLoadingResources, setIsLoadingResources] = useState(false);\n const [resourceError, setResourceError] = useState<string | null>(null);\n\n const showServiceSelect = !preSelectedServiceId && services.length > 1;\n const showResourceSelect = resources.length > 1 && !preSelectedResourceId;\n\n // Load resources when service is selected\n const handleServiceChange = useCallback(async (serviceId: string) => {\n setSelectedServiceId(serviceId);\n setSelectedResourceId(undefined);\n setResourceError(null);\n\n // Fetch resources for this service\n try {\n setIsLoadingResources(true);\n const apiUrl = getCmsApiUrl();\n const response = await fetch(\n `${apiUrl}/sites/${siteId}/bookings/resources/reference?serviceId=${serviceId}`\n );\n\n if (!response.ok) {\n throw new Error('Failed to load resources');\n }\n\n const data = await response.json();\n const loadedResources = data.options?.map((opt: any) => ({\n id: opt.id,\n displayName: opt.label,\n })) || [];\n\n setResources(loadedResources);\n } catch (err) {\n console.error('Failed to load resources:', err);\n setResourceError('Failed to load practitioners. Please try again.');\n setResources([]);\n } finally {\n setIsLoadingResources(false);\n }\n }, [siteId]);\n\n const handleContinue = () => {\n if (selectedServiceId) {\n onSelect({\n serviceId: selectedServiceId,\n resourceId: selectedResourceId === '__any__' ? undefined : selectedResourceId,\n });\n }\n };\n\n const canContinue = selectedServiceId && !isLoadingResources;\n\n // Auto-select if only one service\n useEffect(() => {\n if (services.length === 1 && services[0] && !selectedServiceId) {\n handleServiceChange(services[0].id);\n }\n }, [services, selectedServiceId, handleServiceChange]);\n\n return (\n <div className=\"space-y-6 max-w-2xl mx-auto\">\n {/* Header */}\n <div>\n <h2 className=\"text-2xl font-bold\">{heading}</h2>\n {description && <p className=\"text-muted-foreground mt-2\">{description}</p>}\n </div>\n\n {/* Service Selection */}\n {showServiceSelect && (\n <div className=\"space-y-3\">\n <label className=\"text-sm font-medium\">Service</label>\n <div className=\"grid gap-3\">\n {services.map((service) => (\n <button\n key={service.id}\n type=\"button\"\n onClick={() => handleServiceChange(service.id)}\n className={`\n relative p-4 rounded-lg border-2 text-left transition-all\n ${\n selectedServiceId === service.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50'\n }\n `}\n >\n <div className=\"flex items-start justify-between\">\n <div>\n <div className=\"font-medium\">{service.title}</div>\n {service.description && (\n <div className=\"text-sm text-muted-foreground mt-1\">\n {service.description}\n </div>\n )}\n {service.durationMinutes && (\n <div className=\"text-sm text-muted-foreground mt-1\">\n {service.durationMinutes} minutes\n </div>\n )}\n </div>\n {selectedServiceId === service.id && (\n <div className=\"flex-shrink-0 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\n <svg\n className=\"w-3 h-3 text-primary-foreground\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path d=\"M5 13l4 4L19 7\"></path>\n </svg>\n </div>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Resource Selection */}\n {showResourceSelect && selectedServiceId && !isLoadingResources && (\n <div className=\"space-y-3\">\n <label className=\"text-sm font-medium\">Practitioner (Optional)</label>\n <p className=\"text-sm text-muted-foreground\">\n Choose a specific practitioner or select \"Any Available\"\n </p>\n <div className=\"grid gap-3\">\n <button\n type=\"button\"\n onClick={() => setSelectedResourceId('__any__')}\n className={`\n relative p-4 rounded-lg border-2 text-left transition-all\n ${\n selectedResourceId === '__any__'\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50'\n }\n `}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"font-medium\">Any Available</div>\n {selectedResourceId === '__any__' && (\n <div className=\"flex-shrink-0 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\n <svg\n className=\"w-3 h-3 text-primary-foreground\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path d=\"M5 13l4 4L19 7\"></path>\n </svg>\n </div>\n )}\n </div>\n </button>\n {resources.map((resource) => (\n <button\n key={resource.id}\n type=\"button\"\n onClick={() => setSelectedResourceId(resource.id)}\n className={`\n relative p-4 rounded-lg border-2 text-left transition-all\n ${\n selectedResourceId === resource.id\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50'\n }\n `}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"font-medium\">{resource.displayName}</div>\n {selectedResourceId === resource.id && (\n <div className=\"flex-shrink-0 w-5 h-5 rounded-full bg-primary flex items-center justify-center\">\n <svg\n className=\"w-3 h-3 text-primary-foreground\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path d=\"M5 13l4 4L19 7\"></path>\n </svg>\n </div>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Loading State */}\n {isLoadingResources && (\n <div className=\"text-center py-8\">\n <div className=\"inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\n <p className=\"text-sm text-muted-foreground mt-2\">Loading practitioners...</p>\n </div>\n )}\n\n {/* Error State */}\n {resourceError && (\n <div className=\"alert alert-error text-sm\">\n {resourceError}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex gap-3\">\n {onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"px-6 py-2 rounded-lg border border-border hover:bg-muted transition-colors\"\n >\n Back\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleContinue}\n disabled={!canContinue}\n className=\"flex-1 px-6 py-2 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n Continue to Date Selection\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { useMultiStepData } from '../multi-step/MultiStepContext';\nimport { ServiceResourceSelector } from './ServiceResourceSelector';\nimport type { Service } from '../../hooks/useBookingFormConfig';\n\ninterface ServiceSelectionStepProps {\n siteId: string;\n services: Service[];\n}\n\n/**\n * ServiceSelectionStep Component\n *\n * Step 1: Service and optionally resource selection\n * Uses multi-step context to update booking data\n */\nexport function ServiceSelectionStep({\n siteId,\n services,\n}: ServiceSelectionStepProps): React.ReactElement {\n const { updateData } = useMultiStepData();\n\n return (\n <ServiceResourceSelector\n siteId={siteId}\n services={services}\n onSelect={({ serviceId, resourceId }) => {\n updateData({ serviceId, resourceId });\n }}\n />\n );\n}\n","'use client';\n\nimport React, { useEffect, useMemo } from 'react';\nimport { useMultiStepData } from '../multi-step/MultiStepContext';\nimport { DatePicker } from './DatePicker';\nimport { TimeSlotSelector } from './TimeSlotSelector';\nimport { useAvailableSlots } from '../../hooks/useAvailableSlots';\nimport { useAvailableDates } from '../../hooks/useAvailableDates';\nimport type { BookingFormData } from '../../hooks/useBookingSteps';\nimport type { Service } from '../../hooks/useBookingFormConfig';\n\ninterface DateTimeSelectionStepProps {\n siteId: string;\n preSelectedServiceId?: string;\n preSelectedResourceId?: string;\n /** When there's only one service, pass it here to display info and auto-select */\n singleService?: Service;\n}\n\n/**\n * DateTimeSelectionStep Component\n *\n * Step 2: Date and time slot selection\n * Integrates with multi-step context and fetches available slots.\n * Prefetches available dates to filter the date picker.\n */\nexport function DateTimeSelectionStep({\n siteId,\n preSelectedServiceId,\n preSelectedResourceId,\n singleService,\n}: DateTimeSelectionStepProps): React.ReactElement {\n const { data, updateData } = useMultiStepData<BookingFormData>();\n\n // Get serviceId/resourceId from context if available, otherwise use preselected\n const serviceId = data.serviceId || preSelectedServiceId;\n const resourceId = data.resourceId || preSelectedResourceId;\n const selectedDate = data.selectedDate || '';\n const selectedSlot = data.selectedSlot || '';\n\n // Auto-populate serviceId in form data if we have a preselected service\n // This ensures the submission has the serviceId even when service selection step is skipped\n useEffect(() => {\n if (preSelectedServiceId && !data.serviceId) {\n updateData({ serviceId: preSelectedServiceId });\n }\n }, [preSelectedServiceId, data.serviceId, updateData]);\n\n // Prefetch available dates for filtering the date picker\n const {\n availableDates,\n isLoading: isLoadingDates,\n error: datesError,\n hasMore,\n loadMore,\n } = useAvailableDates({\n siteId,\n serviceId,\n resourceId,\n timezone: 'UTC',\n initialDays: 30,\n });\n\n // Fetch slots for the selected date\n const { slots, isLoading: isLoadingSlots, error: slotsError } = useAvailableSlots({\n siteId,\n serviceId,\n resourceId,\n selectedDate,\n timezone: 'UTC',\n });\n\n // Convert available dates Set to sorted array for DatePicker\n const filteredDateOptions = useMemo(() => {\n if (isLoadingDates || availableDates.size === 0) {\n return []; // Will show loading or empty state\n }\n return [...availableDates].sort();\n }, [availableDates, isLoadingDates]);\n\n const handleDateChange = (date: string) => {\n updateData({ selectedDate: date, selectedSlot: '' }); // Reset slot when date changes\n };\n\n const handleSlotChange = (slot: string) => {\n updateData({ selectedSlot: slot });\n };\n\n // Combine errors for display\n const error = datesError || slotsError;\n\n return (\n <div className=\"space-y-6\">\n {/* Show service info when there's only one service */}\n {singleService && (\n <div className=\"rounded-lg border border-border bg-muted/30 p-4\">\n <h3 className=\"font-medium text-foreground\">{singleService.title}</h3>\n {singleService.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{singleService.description}</p>\n )}\n {singleService.durationMinutes && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n Duration: {singleService.durationMinutes} minutes\n </p>\n )}\n </div>\n )}\n\n {error && (\n <div className=\"alert alert-error text-sm\">\n {error}\n </div>\n )}\n\n <DatePicker\n value={selectedDate}\n onChange={handleDateChange}\n dateOptions={filteredDateOptions}\n isLoading={isLoadingDates}\n isEmpty={!isLoadingDates && filteredDateOptions.length === 0}\n hasMore={hasMore}\n onLoadMore={loadMore}\n />\n\n {selectedDate && (\n <TimeSlotSelector\n value={selectedSlot}\n onChange={handleSlotChange}\n slots={slots}\n isLoading={isLoadingSlots}\n />\n )}\n </div>\n );\n}\n","/**\n * Date and time formatting utilities for blocks\n */\n\n/**\n * Maximum number of days to show in booking date picker.\n * Supports 90+ day visibility with progressive loading.\n */\nexport const BOOKING_DATE_RANGE_DAYS = 90;\n\n/**\n * Number of days to fetch per chunk when loading available dates.\n * Used by useAvailableDates hook for pagination.\n */\nexport const BOOKING_FETCH_CHUNK_DAYS = 30;\n\n/**\n * Generates an array of ISO date strings (YYYY-MM-DD) starting from today\n * @param days - Number of days to generate\n * @returns Array of date strings\n */\nexport function generateDateRange(days: number): string[] {\n const dates: string[] = [];\n const today = new Date();\n\n for (let i = 0; i < days; i++) {\n const date = new Date(today);\n date.setDate(date.getDate() + i);\n dates.push(date.toISOString().split('T')[0] ?? '');\n }\n\n return dates;\n}\n\n/**\n * Formats an ISO date string (YYYY-MM-DD) to a human-readable format\n * @param dateStr - ISO date string (e.g., \"2025-03-15\")\n * @returns Formatted date (e.g., \"Friday, March 15, 2025\")\n */\nexport function formatDate(dateStr: string): string {\n const date = new Date(dateStr + 'T00:00:00');\n return date.toLocaleDateString(undefined, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n}\n\n/**\n * Formats an ISO datetime string to a human-readable time\n * @param isoString - ISO datetime string (e.g., \"2025-03-15T14:30:00Z\")\n * @returns Formatted time (e.g., \"2:30 PM EST\")\n */\nexport function formatTime(isoString: string): string {\n const date = new Date(isoString);\n return date.toLocaleTimeString(undefined, {\n hour: 'numeric',\n minute: '2-digit',\n timeZoneName: 'short',\n });\n}\n","/**\n * DatePicker Component\n *\n * Displays a dropdown for selecting an appointment date from available dates.\n * Supports loading states, empty states, and progressive loading.\n */\n\nimport React from 'react';\nimport { formatDate } from '../../../../utils/date-formatting';\n\ntype DatePickerProps = {\n value: string;\n onChange: (date: string) => void;\n dateOptions: string[];\n required?: boolean;\n isLoading?: boolean;\n isEmpty?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n};\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n value,\n onChange,\n dateOptions,\n required = true,\n isLoading = false,\n isEmpty = false,\n hasMore = false,\n onLoadMore,\n}) => {\n // Loading state - show skeleton\n if (isLoading) {\n return (\n <div className=\"space-y-2\">\n <label className=\"form-label\">\n Select Date{required && <span className=\"required-marker\">*</span>}\n </label>\n <div className=\"h-10 w-full animate-pulse rounded-control card-surface\" />\n <p className=\"text-xs status-muted\">Loading available dates...</p>\n </div>\n );\n }\n\n // Empty state - no dates available\n if (isEmpty) {\n return (\n <div className=\"space-y-2\">\n <label className=\"form-label\">\n Select Date{required && <span className=\"required-marker\">*</span>}\n </label>\n <div className=\"alert alert-warning\">\n <p className=\"text-sm\">\n No available dates in this period.\n {hasMore && onLoadMore && (\n <button\n type=\"button\"\n onClick={onLoadMore}\n className=\"ml-2 underline hover:no-underline\"\n >\n Check later dates\n </button>\n )}\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <label htmlFor=\"booking-date\" className=\"form-label\">\n Select Date{required && <span className=\"required-marker\">*</span>}\n </label>\n <select\n id=\"booking-date\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n className=\"form-select\"\n >\n <option value=\"\">Choose a date...</option>\n {dateOptions.map((date: string) => (\n <option key={date} value={date}>\n {formatDate(date)}\n </option>\n ))}\n </select>\n {hasMore && onLoadMore && (\n <button\n type=\"button\"\n onClick={onLoadMore}\n className=\"button-link text-sm\"\n >\n Load more dates →\n </button>\n )}\n </div>\n );\n};\n","/**\n * TimeSlotSelector Component\n *\n * Displays available time slots for the selected date with loading and empty states.\n */\n\nimport React from 'react';\nimport { formatTime } from '../../../../utils/date-formatting';\nimport type { TimeSlot } from '../../hooks/useAvailableSlots';\n\ntype TimeSlotSelectorProps = {\n value: string;\n onChange: (slotStartTime: string) => void;\n slots: TimeSlot[];\n isLoading: boolean;\n required?: boolean;\n};\n\nexport const TimeSlotSelector: React.FC<TimeSlotSelectorProps> = ({\n value,\n onChange,\n slots,\n isLoading,\n required = true,\n}) => {\n return (\n <div className=\"space-y-2\">\n <label htmlFor=\"booking-slot\" className=\"form-label\">\n Select Time{required && <span className=\"required-marker\">*</span>}\n </label>\n {isLoading ? (\n <div className=\"alert alert-info text-sm text-center\">\n Loading available times...\n </div>\n ) : slots.length === 0 ? (\n <div className=\"alert text-sm text-center status-muted\">\n No available times for this date\n </div>\n ) : (\n <select\n id=\"booking-slot\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n required={required}\n className=\"form-select\"\n >\n <option value=\"\">Choose a time...</option>\n {slots.map((slot) => (\n <option key={slot.startAt} value={slot.startAt}>\n {formatTime(slot.startAt)}\n </option>\n ))}\n </select>\n )}\n </div>\n );\n};\n","/**\n * Custom hook for fetching available appointment slots\n */\n\nimport { useState, useEffect } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\n\nexport type TimeSlot = {\n startAt: string;\n endAt: string;\n resourceId: string;\n};\n\ntype UseAvailableSlotsOptions = {\n siteId: string;\n serviceId: string | undefined;\n resourceId: string | undefined;\n selectedDate: string;\n timezone: string;\n};\n\ntype UseAvailableSlotsResult = {\n slots: TimeSlot[];\n isLoading: boolean;\n error: string | null;\n};\n\n/**\n * Fetches available appointment slots for a given date\n *\n * Automatically refetches when dependencies change.\n * Returns empty slots array until a date is selected.\n */\nexport function useAvailableSlots({\n siteId,\n serviceId,\n resourceId,\n selectedDate,\n timezone,\n}: UseAvailableSlotsOptions): UseAvailableSlotsResult {\n const [slots, setSlots] = useState<TimeSlot[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n // Don't fetch if required params are missing\n if (!selectedDate || !serviceId) {\n setSlots([]);\n return;\n }\n\n const fetchSlots = async () => {\n setIsLoading(true);\n setError(null);\n setSlots([]);\n\n try {\n const params = new URLSearchParams({\n siteId,\n serviceId,\n startDate: selectedDate,\n endDate: selectedDate,\n timezone,\n });\n\n if (resourceId) {\n params.append('resourceId', resourceId);\n }\n\n const apiUrl = getCmsApiUrl();\n // Use public endpoint - no authentication required\n const response = await fetch(`${apiUrl}/public/bookings/availability/slots?${params}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Failed to load available times');\n }\n\n const data = await response.json();\n setSlots(data.slots);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load available times');\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchSlots();\n }, [selectedDate, serviceId, resourceId, timezone, siteId]);\n\n return { slots, isLoading, error };\n}\n","/**\n * Custom hook for fetching dates with available appointment slots\n *\n * Prefetches available dates for a date range with support for progressive loading.\n * Returns a Set for O(1) lookup when filtering DatePicker options.\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\nimport { BOOKING_FETCH_CHUNK_DAYS } from '../../../utils/date-formatting';\n\nexport type UseAvailableDatesOptions = {\n siteId: string;\n serviceId: string | undefined;\n resourceId?: string;\n timezone?: string;\n initialDays?: number; // Default: 30\n};\n\nexport type UseAvailableDatesResult = {\n availableDates: Set<string>; // O(1) lookup by date (YYYY-MM-DD)\n isLoading: boolean;\n error: string | null;\n hasMore: boolean;\n loadMore: () => void;\n loadedRange: { start: string; end: string } | null;\n};\n\n/**\n * Fetches dates with availability for a service\n *\n * On mount, fetches the first `initialDays` days.\n * Call `loadMore()` to fetch the next chunk of dates.\n * Uses requestId pattern to handle race conditions.\n */\nexport function useAvailableDates({\n siteId,\n serviceId,\n resourceId,\n timezone = 'UTC',\n initialDays = 30,\n}: UseAvailableDatesOptions): UseAvailableDatesResult {\n const [availableDates, setAvailableDates] = useState<Set<string>>(new Set());\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasMore, setHasMore] = useState(false);\n const [loadedRange, setLoadedRange] = useState<{ start: string; end: string } | null>(null);\n\n const nextStartDateRef = useRef<string | null>(null);\n const requestIdRef = useRef(0);\n\n const fetchDates = useCallback(\n async (startDate: string, endDate: string, append = false) => {\n if (!serviceId) {\n console.log('[useAvailableDates] No serviceId, skipping fetch');\n return;\n }\n\n const requestId = ++requestIdRef.current;\n setIsLoading(true);\n setError(null);\n\n try {\n const apiUrl = getCmsApiUrl();\n const params = new URLSearchParams({\n siteId,\n serviceId,\n startDate,\n endDate,\n timezone,\n });\n if (resourceId) {\n params.append('resourceId', resourceId);\n }\n\n const url = `${apiUrl}/public/bookings/availability/dates?${params}`;\n console.log('[useAvailableDates] Fetching:', url);\n\n const res = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n console.log('[useAvailableDates] Response status:', res.status);\n\n // Check for stale request\n if (requestId !== requestIdRef.current) return;\n\n if (!res.ok) {\n const errorData = await res.json().catch(() => ({}));\n console.log('[useAvailableDates] Error response:', errorData);\n throw new Error(errorData.error || 'Failed to fetch available dates');\n }\n\n const data = await res.json();\n console.log('[useAvailableDates] Received dates:', data);\n\n setAvailableDates((prev) => {\n const newSet = append ? new Set(prev) : new Set<string>();\n (data.dates as string[]).forEach((d) => newSet.add(d));\n console.log('[useAvailableDates] Updated availableDates Set size:', newSet.size);\n return newSet;\n });\n\n setHasMore(data.hasMore);\n nextStartDateRef.current = data.nextStartDate || null;\n setLoadedRange((prev) => ({\n start: append && prev ? prev.start : data.startDate,\n end: data.endDate,\n }));\n } catch (err) {\n // Check for stale request\n if (requestId !== requestIdRef.current) return;\n setError(err instanceof Error ? err.message : 'Failed to load available dates');\n } finally {\n // Check for stale request\n if (requestId === requestIdRef.current) {\n setIsLoading(false);\n }\n }\n },\n [siteId, serviceId, resourceId, timezone]\n );\n\n // Initial fetch when serviceId becomes available\n useEffect(() => {\n if (!serviceId) {\n // Reset state when serviceId is cleared\n setAvailableDates(new Set());\n setLoadedRange(null);\n setHasMore(false);\n return;\n }\n\n const today = new Date().toISOString().split('T')[0] ?? '';\n const endDate = new Date(Date.now() + initialDays * 24 * 60 * 60 * 1000)\n .toISOString()\n .split('T')[0] ?? '';\n\n fetchDates(today, endDate, false);\n }, [serviceId, fetchDates, initialDays]);\n\n const loadMore = useCallback(() => {\n if (!nextStartDateRef.current || isLoading) return;\n\n const start = nextStartDateRef.current;\n const msPerDay = 24 * 60 * 60 * 1000;\n const end = new Date(new Date(start).getTime() + BOOKING_FETCH_CHUNK_DAYS * msPerDay)\n .toISOString()\n .split('T')[0] ?? '';\n\n fetchDates(start, end, true);\n }, [fetchDates, isLoading]);\n\n return {\n availableDates,\n isLoading,\n error,\n hasMore,\n loadMore,\n loadedRange,\n };\n}\n","'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport { useMultiStepData } from './MultiStepContext';\n\n/**\n * Form field option\n */\nexport interface FormFieldOption {\n value: string;\n label: string;\n}\n\n/**\n * Form field definition (matches packages/db/src/schemas/forms.ts)\n */\nexport interface FormField {\n id: string;\n label: string;\n type:\n | 'text'\n | 'email'\n | 'textarea'\n | 'select'\n | 'radio'\n | 'checkbox'\n | 'consent'\n | 'tel'\n | 'url'\n | 'number'\n | 'date'\n | 'time';\n required?: boolean;\n placeholder?: string;\n helpText?: string;\n options?: FormFieldOption[];\n multiple?: boolean;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n min?: number;\n max?: number;\n}\n\n/**\n * DynamicFormFields Component Props\n */\nexport interface DynamicFormFieldsProps {\n fields: FormField[];\n showLabels?: boolean;\n className?: string;\n}\n\n/**\n * DynamicFormFields Component\n *\n * Renders form fields dynamically based on FormField definitions.\n * Integrates with multi-step context for data management.\n *\n * Features:\n * - Supports all field types from form schema\n * - Client-side validation\n * - Accessible form controls\n * - Integrates with multi-step context\n *\n * Usage:\n * ```tsx\n * <DynamicFormFields\n * fields={formSchema.fields}\n * showLabels={true}\n * />\n * ```\n */\nexport function DynamicFormFields({\n fields,\n showLabels = true,\n className = '',\n}: DynamicFormFieldsProps): React.ReactElement {\n const { data, updateData } = useMultiStepData<Record<string, any>>();\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const handleChange = useCallback(\n (fieldId: string, value: any) => {\n updateData({ [fieldId]: value });\n },\n [updateData]\n );\n\n const handleBlur = useCallback((fieldId: string) => {\n setTouched((prev) => ({ ...prev, [fieldId]: true }));\n }, []);\n\n const getFieldError = useCallback(\n (field: FormField): string | null => {\n const value = data[field.id];\n const isTouched = touched[field.id];\n\n if (!isTouched) return null;\n\n // Required validation\n if (field.required && !value) {\n return `${field.label} is required`;\n }\n\n // Type-specific validation\n if (value) {\n switch (field.type) {\n case 'email':\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n return 'Please enter a valid email address';\n }\n break;\n case 'url':\n try {\n new URL(value);\n } catch {\n return 'Please enter a valid URL';\n }\n break;\n case 'tel':\n if (!/^[+\\d\\s\\-()]+$/.test(value)) {\n return 'Please enter a valid phone number';\n }\n break;\n case 'number':\n const num = Number(value);\n if (isNaN(num)) {\n return 'Please enter a valid number';\n }\n if (field.min !== undefined && num < field.min) {\n return `Value must be at least ${field.min}`;\n }\n if (field.max !== undefined && num > field.max) {\n return `Value must be at most ${field.max}`;\n }\n break;\n }\n\n // Length validation\n if (typeof value === 'string') {\n if (field.minLength && value.length < field.minLength) {\n return `Must be at least ${field.minLength} characters`;\n }\n if (field.maxLength && value.length > field.maxLength) {\n return `Must be at most ${field.maxLength} characters`;\n }\n }\n\n // Pattern validation\n if (field.pattern && typeof value === 'string') {\n const regex = new RegExp(field.pattern);\n if (!regex.test(value)) {\n return 'Please match the required format';\n }\n }\n }\n\n return null;\n },\n [data, touched]\n );\n\n return (\n <div className={`space-y-6 ${className}`}>\n {fields.map((field) => {\n const error = getFieldError(field);\n const value = data[field.id] ?? '';\n\n return (\n <div key={field.id} className=\"space-y-2\">\n {showLabels && (\n <label htmlFor={field.id} className=\"form-label\">\n {field.label}\n {field.required && <span className=\"required-marker\">*</span>}\n </label>\n )}\n\n {field.helpText && (\n <p className=\"text-sm status-muted\">{field.helpText}</p>\n )}\n\n <FieldInput\n field={field}\n value={value}\n onChange={(val) => handleChange(field.id, val)}\n onBlur={() => handleBlur(field.id)}\n error={error}\n />\n\n {error && <p className=\"text-sm status-error\">{error}</p>}\n </div>\n );\n })}\n </div>\n );\n}\n\n/**\n * FieldInput Component\n *\n * Renders the appropriate input component based on field type\n */\nfunction FieldInput({\n field,\n value,\n onChange,\n onBlur,\n error,\n}: {\n field: FormField;\n value: any;\n onChange: (value: any) => void;\n onBlur: () => void;\n error: string | null;\n}) {\n // Use generated form classes from theme\n // Error state is handled via aria-invalid attribute in the generated CSS\n const inputClass = 'form-input';\n const textareaClass = 'form-textarea';\n const selectClass = 'form-select';\n const checkboxClass = 'form-checkbox';\n const radioClass = 'form-radio';\n\n switch (field.type) {\n case 'textarea':\n return (\n <textarea\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={field.placeholder}\n required={field.required}\n minLength={field.minLength}\n maxLength={field.maxLength}\n rows={4}\n aria-invalid={error ? 'true' : undefined}\n className={textareaClass}\n />\n );\n\n case 'select':\n if (field.multiple) {\n return (\n <select\n id={field.id}\n name={field.id}\n value={Array.isArray(value) ? value : []}\n onChange={(e) => {\n const selected = Array.from(e.target.selectedOptions, (opt) => opt.value);\n onChange(selected);\n }}\n onBlur={onBlur}\n required={field.required}\n multiple\n aria-invalid={error ? 'true' : undefined}\n className={`${selectClass} h-32`}\n >\n {field.options?.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <select\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n aria-invalid={error ? 'true' : undefined}\n className={selectClass}\n >\n <option value=\"\">Select an option...</option>\n {field.options?.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n\n case 'radio':\n return (\n <div className=\"space-y-2\">\n {field.options?.map((opt) => (\n <label key={opt.value} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={field.id}\n value={opt.value}\n checked={value === opt.value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n className={radioClass}\n />\n <span className=\"text-sm\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n\n case 'checkbox':\n if (field.options && field.options.length > 1) {\n // Multiple checkboxes\n const checkedValues = Array.isArray(value) ? value : [];\n return (\n <div className=\"space-y-2\">\n {field.options.map((opt) => (\n <label key={opt.value} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n name={field.id}\n value={opt.value}\n checked={checkedValues.includes(opt.value)}\n onChange={(e) => {\n const newValues = e.target.checked\n ? [...checkedValues, opt.value]\n : checkedValues.filter((v) => v !== opt.value);\n onChange(newValues);\n }}\n onBlur={onBlur}\n className={checkboxClass}\n />\n <span className=\"text-sm\">{opt.label}</span>\n </label>\n ))}\n </div>\n );\n }\n\n // Single checkbox\n return (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n id={field.id}\n name={field.id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n required={field.required}\n className={checkboxClass}\n />\n <span className=\"text-sm\">{field.placeholder || field.label}</span>\n </label>\n );\n\n case 'consent':\n return (\n <label className=\"flex items-start gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n id={field.id}\n name={field.id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n required={field.required}\n className={`${checkboxClass} mt-0.5`}\n />\n <span className=\"text-sm\">{field.placeholder || field.label}</span>\n </label>\n );\n\n case 'number':\n return (\n <input\n type=\"number\"\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={field.placeholder}\n required={field.required}\n min={field.min}\n max={field.max}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n\n case 'date':\n return (\n <input\n type=\"date\"\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n min={field.min ? String(field.min) : undefined}\n max={field.max ? String(field.max) : undefined}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n\n case 'time':\n return (\n <input\n type=\"time\"\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n required={field.required}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n\n // text, email, tel, url\n default:\n return (\n <input\n type={field.type}\n id={field.id}\n name={field.id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n placeholder={field.placeholder}\n required={field.required}\n minLength={field.minLength}\n maxLength={field.maxLength}\n pattern={field.pattern}\n aria-invalid={error ? 'true' : undefined}\n className={inputClass}\n />\n );\n }\n}\n","/**\n * Custom hook for submitting appointment bookings\n */\n\nimport { useState } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\n\nexport type BookingSubmissionData = {\n formId: string; // NEW - references the booking form\n serviceId: string;\n resourceId?: string; // Optional - may be undefined if \"any available\"\n startAt: string;\n endAt: string;\n customFields: Record<string, unknown>; // NEW - dynamic fields from form schema\n timezone: string;\n altchaSolution?: string | null; // Spam protection solution\n};\n\ntype UseBookingSubmissionResult = {\n submit: (data: BookingSubmissionData) => Promise<void>;\n isSubmitting: boolean;\n error: string | null;\n isSuccess: boolean;\n};\n\n/**\n * Hook for submitting appointment bookings\n *\n * Handles API call, loading state, and error handling.\n * Returns isSuccess=true after successful submission.\n *\n * @param _siteId - Site ID (currently unused; site context is derived from formId).\n * Kept for API consistency and potential future use.\n */\nexport function useBookingSubmission(_siteId: string): UseBookingSubmissionResult {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const submit = async (data: BookingSubmissionData) => {\n setIsSubmitting(true);\n setError(null);\n\n try {\n const apiUrl = getCmsApiUrl();\n // Use public endpoint - no authentication required\n const response = await fetch(`${apiUrl}/public/bookings/appointments`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n formId: data.formId,\n serviceId: data.serviceId,\n resourceId: data.resourceId || null,\n startAt: data.startAt,\n endAt: data.endAt,\n customFields: data.customFields,\n timezone: data.timezone,\n altchaSolution: data.altchaSolution ?? null,\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Failed to book appointment');\n }\n\n setIsSuccess(true);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to book appointment');\n throw err; // Re-throw so caller can handle if needed\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return { submit, isSubmitting, error, isSuccess };\n}\n","/**\n * Hook to load booking form configuration and services\n */\n\nimport { useState, useEffect } from 'react';\nimport { getCmsApiUrl } from '../utils/api-url';\n\nexport interface Service {\n id: string;\n title: string;\n description?: string;\n durationMinutes?: number;\n}\n\nexport interface BookingFormConfig {\n id: string;\n name: string;\n slug: string;\n settings?: {\n type: 'booking';\n serviceId?: string;\n serviceIds?: string[];\n resourceId?: string;\n requiresApproval?: boolean;\n successMessage?: string;\n };\n schema?: {\n version: string;\n fields: any[];\n };\n}\n\ninterface UseBookingFormConfigResult {\n formConfig: BookingFormConfig | null;\n services: Service[];\n isLoading: boolean;\n error: string | null;\n}\n\n// UUID regex pattern\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Load booking form configuration and associated services\n *\n * Fetches the form definition and determines which services to load based on:\n * - Single service (serviceId)\n * - Multiple services (serviceIds array)\n * - All site services (no serviceId/serviceIds)\n *\n * Supports both UUID and slug for formId. When using a slug, siteId is required.\n */\nexport function useBookingFormConfig(\n siteId: string,\n formId: string\n): UseBookingFormConfigResult {\n const [formConfig, setFormConfig] = useState<BookingFormConfig | null>(null);\n const [services, setServices] = useState<Service[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let mounted = true;\n\n async function loadFormAndServices() {\n try {\n setIsLoading(true);\n setError(null);\n\n const apiUrl = getCmsApiUrl();\n // Support both UUID and slug lookup\n // For slug lookup, pass siteId as query param (required by API)\n const isUUID = UUID_REGEX.test(formId);\n const formUrl = isUUID\n ? `${apiUrl}/public/forms/${formId}`\n : `${apiUrl}/public/forms/${formId}?siteId=${encodeURIComponent(siteId)}`;\n const response = await fetch(formUrl);\n\n if (!response.ok) {\n throw new Error('Failed to load booking form');\n }\n\n const { form: rawData } = await response.json();\n\n if (!mounted) return;\n\n // Normalize API response to match BookingFormConfig interface\n const normalizedForm: BookingFormConfig = {\n id: rawData.id,\n name: rawData.name,\n slug: rawData.slug,\n settings: rawData.settingsJson ?? rawData.settings,\n schema: rawData.schemaJson ?? rawData.schema,\n };\n\n setFormConfig(normalizedForm);\n\n // Load services based on form configuration\n // Use public endpoints (no authentication required)\n if (!normalizedForm.settings?.serviceId && !normalizedForm.settings?.serviceIds) {\n // Load all services for the site\n const servicesResponse = await fetch(\n `${apiUrl}/public/bookings/services?siteId=${encodeURIComponent(siteId)}`\n );\n if (servicesResponse.ok) {\n const servicesData = await servicesResponse.json();\n if (mounted) {\n setServices(servicesData.services || []);\n }\n }\n } else if (normalizedForm.settings?.serviceIds && normalizedForm.settings.serviceIds.length > 0) {\n // Load specific services\n const servicesResponse = await fetch(\n `${apiUrl}/public/bookings/services?siteId=${encodeURIComponent(siteId)}&ids=${normalizedForm.settings.serviceIds.join(',')}`\n );\n if (servicesResponse.ok) {\n const servicesData = await servicesResponse.json();\n if (mounted) {\n setServices(servicesData.services || []);\n }\n }\n } else if (normalizedForm.settings?.serviceId) {\n // Single service - load it\n const serviceResponse = await fetch(\n `${apiUrl}/public/bookings/services/${normalizedForm.settings.serviceId}?siteId=${encodeURIComponent(siteId)}`\n );\n if (serviceResponse.ok) {\n const serviceData = await serviceResponse.json();\n if (mounted) {\n setServices([serviceData.service || serviceData]);\n }\n }\n }\n } catch (err) {\n console.error('Failed to load form:', err);\n if (mounted) {\n setError('Failed to load booking form. Please try again later.');\n }\n } finally {\n if (mounted) {\n setIsLoading(false);\n }\n }\n }\n\n loadFormAndServices();\n\n return () => {\n mounted = false;\n };\n }, [siteId, formId]);\n\n return { formConfig, services, isLoading, error };\n}\n"],"mappings":"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","names":["getCmsApiUrl","import_react","import_react","import_react","import_react","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","import_react"]}
|