@bailierich/booking-components 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +319 -0
- package/TENANT_DATA_INTEGRATION.md +402 -0
- package/TENANT_SETUP.md +316 -0
- package/components/BookingFlow/BookingFlow.tsx +790 -0
- package/components/BookingFlow/index.ts +5 -0
- package/components/BookingFlow/steps/AddonsSelection.tsx +118 -0
- package/components/BookingFlow/steps/Confirmation.tsx +185 -0
- package/components/BookingFlow/steps/ContactForm.tsx +292 -0
- package/components/BookingFlow/steps/CycleAwareDateSelection.tsx +277 -0
- package/components/BookingFlow/steps/DateSelection.tsx +473 -0
- package/components/BookingFlow/steps/ServiceSelection.tsx +315 -0
- package/components/BookingFlow/steps/TimeSelection.tsx +230 -0
- package/components/BookingFlow/steps/index.ts +10 -0
- package/components/BottomSheet/index.tsx +120 -0
- package/components/Forms/FormBlock.tsx +283 -0
- package/components/Forms/FormField.tsx +385 -0
- package/components/Forms/FormRenderer.tsx +216 -0
- package/components/Forms/FormValidation.ts +122 -0
- package/components/Forms/index.ts +4 -0
- package/components/HoldTimer/HoldTimer.tsx +266 -0
- package/components/HoldTimer/index.ts +2 -0
- package/components/SectionRenderer.tsx +558 -0
- package/components/Sections/About.tsx +145 -0
- package/components/Sections/BeforeAfter.tsx +81 -0
- package/components/Sections/BookingSection.tsx +76 -0
- package/components/Sections/Contact.tsx +103 -0
- package/components/Sections/FAQSection.tsx +239 -0
- package/components/Sections/FeatureContent.tsx +113 -0
- package/components/Sections/FeaturedLink.tsx +103 -0
- package/components/Sections/FixedInfoCard.tsx +189 -0
- package/components/Sections/Gallery.tsx +83 -0
- package/components/Sections/Header.tsx +78 -0
- package/components/Sections/Hero.tsx +178 -0
- package/components/Sections/ImageSection.tsx +147 -0
- package/components/Sections/InstagramFeed.tsx +38 -0
- package/components/Sections/LinkList.tsx +76 -0
- package/components/Sections/LocationMap.tsx +202 -0
- package/components/Sections/Logo.tsx +61 -0
- package/components/Sections/MinimalFooter.tsx +78 -0
- package/components/Sections/MinimalHeader.tsx +81 -0
- package/components/Sections/MinimalNavigation.tsx +63 -0
- package/components/Sections/Navbar.tsx +258 -0
- package/components/Sections/PricingTable.tsx +106 -0
- package/components/Sections/ScrollingTextDivider.tsx +138 -0
- package/components/Sections/ScrollingTextDivider.tsx.bak +138 -0
- package/components/Sections/ServicesPreview.tsx +129 -0
- package/components/Sections/SocialBar.tsx +177 -0
- package/components/Sections/Team.tsx +80 -0
- package/components/Sections/Testimonials.tsx +92 -0
- package/components/Sections/TextSection.tsx +116 -0
- package/components/Sections/VideoSection.tsx +178 -0
- package/components/Sections/index.ts +57 -0
- package/components/index.ts +21 -0
- package/dist/index-DAai7Glf.d.mts +474 -0
- package/dist/index-DAai7Glf.d.ts +474 -0
- package/dist/index.d.mts +1075 -0
- package/dist/index.d.ts +1075 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +22 -0
- package/dist/index.mjs.map +1 -0
- package/dist/styles/index.d.mts +1 -0
- package/dist/styles/index.d.ts +1 -0
- package/dist/styles/index.js +2 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/styles/index.mjs +2 -0
- package/dist/styles/index.mjs.map +1 -0
- package/docs/API.md +849 -0
- package/docs/CALLBACKS.md +760 -0
- package/docs/COMPLETE_SESSION_SUMMARY.md +404 -0
- package/docs/DATA_SHAPES.md +684 -0
- package/docs/MIGRATION.md +662 -0
- package/docs/PAYMENT_INTEGRATION.md +766 -0
- package/docs/SESSION_SUMMARY.md +185 -0
- package/docs/STYLING.md +735 -0
- package/index.ts +4 -0
- package/lib/storage.ts +239 -0
- package/package.json +59 -0
- package/styles/animations.ts +210 -0
- package/styles/index.ts +1 -0
- package/tsconfig.json +32 -0
- package/tsup.config.ts +13 -0
- package/types/index.ts +369 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../components/Sections/Logo.tsx","../components/Sections/Header.tsx","../components/Sections/FeaturedLink.tsx","../components/Sections/LinkList.tsx","../components/Sections/SocialBar.tsx","../components/Sections/Hero.tsx","../components/Sections/About.tsx","../components/Sections/ServicesPreview.tsx","../components/Sections/Gallery.tsx","../components/Sections/Testimonials.tsx","../components/Sections/Team.tsx","../components/Sections/Contact.tsx","../components/Sections/MinimalHeader.tsx","../components/Sections/MinimalNavigation.tsx","../components/Sections/MinimalFooter.tsx","../components/Sections/FeatureContent.tsx","../components/Sections/BeforeAfter.tsx","../components/Sections/PricingTable.tsx","../components/Sections/InstagramFeed.tsx","../components/Sections/FixedInfoCard.tsx","../components/Sections/BookingSection.tsx","../components/Sections/VideoSection.tsx","../components/Sections/ScrollingTextDivider.tsx","../components/Sections/LocationMap.tsx","../components/Sections/ImageSection.tsx","../components/Sections/FAQSection.tsx","../components/Sections/Navbar.tsx","../components/Sections/TextSection.tsx","../styles/animations.ts","../components/BookingFlow/steps/ServiceSelection.tsx","../components/BookingFlow/steps/DateSelection.tsx","../components/BookingFlow/steps/TimeSelection.tsx","../components/BookingFlow/steps/AddonsSelection.tsx","../components/BottomSheet/index.tsx","../components/BookingFlow/steps/ContactForm.tsx","../components/BookingFlow/steps/Confirmation.tsx","../components/BookingFlow/steps/CycleAwareDateSelection.tsx","../components/HoldTimer/HoldTimer.tsx","../components/BookingFlow/BookingFlow.tsx","../components/SectionRenderer.tsx","../lib/storage.ts","../components/Forms/FormField.tsx","../../../node_modules/@dnd-kit/utilities/src/hooks/useCombinedRefs.ts","../../../node_modules/@dnd-kit/utilities/src/execution-context/canUseDOM.ts","../../../node_modules/@dnd-kit/utilities/src/type-guards/isWindow.ts","../../../node_modules/@dnd-kit/utilities/src/type-guards/isNode.ts","../../../node_modules/@dnd-kit/utilities/src/execution-context/getWindow.ts","../../../node_modules/@dnd-kit/utilities/src/type-guards/isDocument.ts","../../../node_modules/@dnd-kit/utilities/src/type-guards/isHTMLElement.ts","../../../node_modules/@dnd-kit/utilities/src/type-guards/isSVGElement.ts","../../../node_modules/@dnd-kit/utilities/src/execution-context/getOwnerDocument.ts","../../../node_modules/@dnd-kit/utilities/src/hooks/useIsomorphicLayoutEffect.ts","../../../node_modules/@dnd-kit/utilities/src/hooks/useEvent.ts","../../../node_modules/@dnd-kit/utilities/src/hooks/useInterval.ts","../../../node_modules/@dnd-kit/utilities/src/hooks/useLatestValue.ts","../../../node_modules/@dnd-kit/utilities/src/hooks/useLazyMemo.ts","../../../node_modules/@dnd-kit/utilities/src/hooks/useNodeRef.ts","../../../node_modules/@dnd-kit/utilities/src/hooks/usePrevious.ts","../../../node_modules/@dnd-kit/utilities/src/hooks/useUniqueId.ts","../../../node_modules/@dnd-kit/utilities/src/adjustment.ts","../../../node_modules/@dnd-kit/utilities/src/event/hasViewportRelativeCoordinates.ts","../../../node_modules/@dnd-kit/utilities/src/event/isKeyboardEvent.ts","../../../node_modules/@dnd-kit/utilities/src/event/isTouchEvent.ts","../../../node_modules/@dnd-kit/utilities/src/coordinates/getEventCoordinates.ts","../../../node_modules/@dnd-kit/utilities/src/css.ts","../../../node_modules/@dnd-kit/utilities/src/focus/findFirstFocusableNode.ts","../../../node_modules/@dnd-kit/accessibility/src/components/HiddenText/HiddenText.tsx","../../../node_modules/@dnd-kit/accessibility/src/components/LiveRegion/LiveRegion.tsx","../../../node_modules/@dnd-kit/accessibility/src/hooks/useAnnouncement.ts","../../../node_modules/@dnd-kit/core/src/components/DndMonitor/context.ts","../../../node_modules/@dnd-kit/core/src/components/DndMonitor/useDndMonitor.ts","../../../node_modules/@dnd-kit/core/src/components/DndMonitor/useDndMonitorProvider.tsx","../../../node_modules/@dnd-kit/core/src/components/Accessibility/defaults.ts","../../../node_modules/@dnd-kit/core/src/components/Accessibility/Accessibility.tsx","../../../node_modules/@dnd-kit/core/src/store/actions.ts","../../../node_modules/@dnd-kit/core/src/utilities/other/noop.ts","../../../node_modules/@dnd-kit/core/src/sensors/useSensor.ts","../../../node_modules/@dnd-kit/core/src/sensors/useSensors.ts","../../../node_modules/@dnd-kit/core/src/utilities/coordinates/constants.ts","../../../node_modules/@dnd-kit/core/src/utilities/coordinates/distanceBetweenPoints.ts","../../../node_modules/@dnd-kit/core/src/utilities/algorithms/helpers.ts","../../../node_modules/@dnd-kit/core/src/utilities/algorithms/closestCenter.ts","../../../node_modules/@dnd-kit/core/src/utilities/algorithms/rectIntersection.ts","../../../node_modules/@dnd-kit/core/src/utilities/rect/adjustScale.ts","../../../node_modules/@dnd-kit/core/src/utilities/rect/getRectDelta.ts","../../../node_modules/@dnd-kit/core/src/utilities/rect/rectAdjustment.ts","../../../node_modules/@dnd-kit/core/src/utilities/transform/parseTransform.ts","../../../node_modules/@dnd-kit/core/src/utilities/transform/inverseTransform.ts","../../../node_modules/@dnd-kit/core/src/utilities/rect/getRect.ts","../../../node_modules/@dnd-kit/core/src/utilities/rect/getWindowClientRect.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/isFixed.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/isScrollable.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollableAncestors.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollableElement.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollCoordinates.ts","../../../node_modules/@dnd-kit/core/src/types/direction.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/documentScrollingElement.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollPosition.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollDirectionAndSpeed.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollElementRect.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/getScrollOffsets.ts","../../../node_modules/@dnd-kit/core/src/utilities/scroll/scrollIntoViewIfNeeded.ts","../../../node_modules/@dnd-kit/core/src/utilities/rect/Rect.ts","../../../node_modules/@dnd-kit/core/src/sensors/utilities/Listeners.ts","../../../node_modules/@dnd-kit/core/src/sensors/utilities/getEventListenerTarget.ts","../../../node_modules/@dnd-kit/core/src/sensors/utilities/hasExceededDistance.ts","../../../node_modules/@dnd-kit/core/src/sensors/events.ts","../../../node_modules/@dnd-kit/core/src/sensors/keyboard/types.ts","../../../node_modules/@dnd-kit/core/src/sensors/keyboard/defaults.ts","../../../node_modules/@dnd-kit/core/src/sensors/keyboard/KeyboardSensor.ts","../../../node_modules/@dnd-kit/core/src/sensors/pointer/AbstractPointerSensor.ts","../../../node_modules/@dnd-kit/core/src/sensors/pointer/PointerSensor.ts","../../../node_modules/@dnd-kit/core/src/sensors/mouse/MouseSensor.ts","../../../node_modules/@dnd-kit/core/src/sensors/touch/TouchSensor.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useAutoScroller.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useCachedNode.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useCombineActivators.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useDroppableMeasuring.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useInitialValue.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useInitialRect.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useMutationObserver.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useResizeObserver.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useRect.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useRectDelta.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useScrollableAncestors.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useScrollOffsets.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useScrollOffsetsDelta.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useSensorSetup.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useSyntheticListeners.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useWindowRect.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useRects.ts","../../../node_modules/@dnd-kit/core/src/utilities/nodes/getMeasurableNode.ts","../../../node_modules/@dnd-kit/core/src/hooks/utilities/useDragOverlayMeasuring.ts","../../../node_modules/@dnd-kit/core/src/components/DndContext/defaults.ts","../../../node_modules/@dnd-kit/core/src/store/constructors.ts","../../../node_modules/@dnd-kit/core/src/store/context.ts","../../../node_modules/@dnd-kit/core/src/store/reducer.ts","../../../node_modules/@dnd-kit/core/src/components/Accessibility/components/RestoreFocus.tsx","../../../node_modules/@dnd-kit/core/src/modifiers/applyModifiers.ts","../../../node_modules/@dnd-kit/core/src/components/DndContext/hooks/useMeasuringConfiguration.ts","../../../node_modules/@dnd-kit/core/src/components/DndContext/hooks/useLayoutShiftScrollCompensation.ts","../../../node_modules/@dnd-kit/core/src/components/DndContext/DndContext.tsx","../../../node_modules/@dnd-kit/core/src/hooks/useDraggable.ts","../../../node_modules/@dnd-kit/core/src/hooks/useDndContext.ts","../../../node_modules/@dnd-kit/core/src/hooks/useDroppable.ts","../../../node_modules/@dnd-kit/sortable/src/utilities/arrayMove.ts","../../../node_modules/@dnd-kit/sortable/src/utilities/getSortedRects.ts","../../../node_modules/@dnd-kit/sortable/src/utilities/isValidIndex.ts","../../../node_modules/@dnd-kit/sortable/src/utilities/itemsEqual.ts","../../../node_modules/@dnd-kit/sortable/src/utilities/normalizeDisabled.ts","../../../node_modules/@dnd-kit/sortable/src/strategies/rectSorting.ts","../../../node_modules/@dnd-kit/sortable/src/strategies/verticalListSorting.ts","../../../node_modules/@dnd-kit/sortable/src/components/SortableContext.tsx","../../../node_modules/@dnd-kit/sortable/src/hooks/defaults.ts","../../../node_modules/@dnd-kit/sortable/src/hooks/utilities/useDerivedTransform.ts","../../../node_modules/@dnd-kit/sortable/src/hooks/useSortable.ts","../../../node_modules/@dnd-kit/sortable/src/sensors/keyboard/sortableKeyboardCoordinates.ts","../components/Forms/FormBlock.tsx","../components/Forms/FormValidation.ts","../components/Forms/FormRenderer.tsx"],"names":["Logo","logoUrl","fallbackText","size","alignment","colors","enableInlineEditing","sectionId","logoSize","jsx","Header","name","title","bio","showName","showTitle","showBio","typography","jsxs","FeaturedLink","text","url","style","getClassName","sizeClasses","styleClasses","getStyle","LinkList","links","getLinkClassName","baseClasses","getLinkStyle","isOutline","link","index","SocialBar","platforms","socialLinks","position","invertIcons","getContrastColor","hexColor","hex","r","g","b","getSocialIcon","platform","iconSize","Instagram","Facebook","Music","Twitter","Youtube","Pinterest","getSocialClassName","getSocialStyle","socialUrl","Hero","headline","subheadline","heroImage","ctaButton","layout","imagePosition","contentDisplay","heroContent","heroImageElement","About","content","image","ServicesPreview","services","columns","showPrices","showDuration","gridColsMap","mockServices","getLayoutClasses","service","Gallery","images","galleryGridMap","imagesToShow","i","img","Testimonials","testimonials","layoutClass","mockTestimonials","testimonial","_","Team","members","mockTeam","member","Contact","email","phone","address","showForm","MinimalHeader","brandName","sticky","alignmentClass","Fragment","MinimalNavigation","handleNavClick","e","element","MinimalFooter","footerText","showSocial","showContact","showLinks","alignClass","FeatureContent","description","buttonText","buttonUrl","showButton","imageSection","contentSection","BeforeAfter","comparisons","mockComparisons","comparison","PricingTable","plans","mockPlans","plan","feature","InstagramFeed","username","FixedInfoCard","subheading","bookingButtonText","bookingButtonUrl","showBookingButton","cardWidth","cardColor","hexToRgba","alpha","widthMap","positionClasses","textAlignClass","subheadingAlign","getRoundedClass","BookingSection","config","BookingFlowComponent","VideoSection","videoUrl","aspectRatio","autoplay","loop","muted","controls","allowFullScreen","coverImage","maxWidth","borderRadius","embedData","youtubeMatch","videoId","params","vimeoMatch","aspectRatioMap","maxWidthMap","ScrollingTextDivider","scrollDirection","scrollSpeed","orientation","dividerIcon","customIcon","textSize","textColor","fontWeight","backgroundColor","backgroundGradient","pauseOnHover","isPaused","setIsPaused","useState","icon","duration","textSizeMap","fontWeightMap","rotationMap","repeatingText","LocationMap","displayType","mapHeight","mapStyle","zoom","showMarker","directionsButtonText","height","encodedAddress","directionsUrl","mapEmbedUrl","ImageSection","imageUrl","altText","caption","linkUrl","openInNewTab","imageContent","FAQAccordionItem","faq","isOpen","setIsOpen","FAQSection","faqs","Navbar","showLogo","showBrandName","ctaText","ctaUrl","transparentOnTop","mobileMenuOpen","setMobileMenuOpen","scrolled","setScrolled","activeSection","setActiveSection","useEffect","handleScroll","sections","currentSection","section","rect","isTransparent","isActive","TextSection","paddingY","alignmentMap","getAnimationDuration","speed","reducedMotion","getSlideVariants","slideDistance","direction","getFadeVariants","getTransitionVariants","animations","shouldReduceMotion","createStaggerAnimation","itemCount","baseDelay","delayIncrement","createEntranceAnimation","delay","ServiceSelection","categories","selectedService","onServiceSelect","settings","selectedCategory","setSelectedCategory","expandedCategories","setExpandedCategories","headerText","subheaderText","showPricing","showDescription","enableCategories","categoryStyle","policyImages","policyText","imageSpacing","spacingMap","gridCols","filteredServices","s","renderServiceCard","isSelected","motion","cat","isExpanded","categoryServices","newExpanded","ChevronDown","generateMockDates","dates","today","monthOffset","month","daysInMonth","day","dateStr","CYCLE_PHASE_COLORS","DateSelection","availableDates","selectedDate","onDateSelect","cyclePhases","addons","selectedAddons","onAddonsChange","addonPlacement","calendarView","isPreviewMode","effectiveDates","useMemo","initialMonth","futureDate","firstDate","currentMonth","setCurrentMonth","availableDatesSet","year","monthName","calendarDays","firstDay","lastDay","startingDayOfWeek","days","dateObj","canGoPrevious","prevMonth","prevMonthStr","date","canGoNext","nextMonth","nextMonthStr","handlePreviousMonth","handleNextMonth","hasCycleData","calculateTotal","total","addonId","addon","a","handleAddonToggle","id","addonPrice","phase","phaseInfo","ChevronLeft","ChevronRight","dayInfo","isAvailable","cyclePhase","phaseColors","dayName","TimeSelection","availableTimes","selectedTime","onTimeSelect","serviceDuration","timeFormat","totalPrice","formatDate","formatTime","time","timeParts","hourStr","minuteStr","hour","minute","period","AddonsSelection","toggleAddon","newSelection","BottomSheet","onClose","children","isRequired","maxHeight","handleEscape","AnimatePresence","X","ContactForm","contactInfo","onContactInfoChange","optInModules","onOptInData","isPreview","isModalOpen","setIsModalOpen","currentOptInModule","setCurrentOptInModule","optInChecked","setOptInChecked","errors","setErrors","touched","setTouched","validateEmail","validatePhone","validateName","validateField","field","value","formFields","handleFieldChange","error","prev","handleBlur","handleOptInChange","module","checked","data","opt","Confirmation","paymentProvider","paymentConfig","onConfirm","servicePrice","addonsPrice","sum","addonsDuration","totalDuration","depositPercentage","depositAmount","totalAmount","balanceAmount","CYCLE_PHASES","CycleAwareDateSelection","fetchCycleData","selectedClient","onCycleWarning","cycleAwareEnabled","setCyclePhases","isLoading","setIsLoading","setError","showCycleFeatures","phases","err","handleDateSelect","useCallback","phaseData","key","optimalDates","d","DEFAULT_CONFIG","HoldTimer","holdStatus","userConfig","onExtend","onRelease","onWarning","onExpired","className","currentTime","setCurrentTime","hasTriggeredWarning","setHasTriggeredWarning","isExtending","setIsExtending","isReleasing","setIsReleasing","interval","timeRemaining","isExpired","isWarning","handleExtend","handleRelease","minutes","seconds","formattedTime","bgColor","borderColor","BookingFlow","times","onComplete","onStepChange","validateStep","holdTimer","stepOrder","customPaymentForm","currentStepIndex","setCurrentStepIndex","setDirection","setSelectedService","setSelectedDate","setSelectedTime","setSelectedAddons","setContactInfo","optInData","setOptInData","activeHold","setActiveHold","transitions","transitionStyle","transitionSpeed","background","stepsMap","orderedStepIds","allSteps","step","currentStep","getBackgroundStyle","getDuration","getVariants","stepId","hasName","hasValidEmail","hasValidPhone","isStepCompleted","stepIndex","handleStepChange","newStepIndex","handleNext","handleBack","prevStepIndex","handleTimeSelect","selectedServiceData","hold","handleHoldExpired","timeStepIndex","handleComplete","renderCurrentStep","stepProps","serviceId","info","selectedAddonsData","addonTotalCost","renderProgressBar","progressStyle","extended","SectionRenderer","theme","type","supabaseClient","getSupabaseClient","supabaseUrl","supabaseKey","createClient","FORM_UPLOAD_CONFIG","uploadFormImage","file","clientId","formId","optimizedFile","optimizeImage","timestamp","sanitizedName","fileName","filePath","supabase","publicUrl","quality","supportsTransparency","outputType","resolve","reject","timeout","canvas","ctx","ratio","blob","validateImageFile","FormField","onChange","businessId","styling","fileInputRef","useRef","uploading","setUploading","uploadError","setUploadError","labelColor","fieldStyle","baseInputClass","labelClass","option","selectedValues","handleCheckboxChange","optionValue","newValues","v","handleFileChange","validation","uploaded","fieldData","imageSize","isFull","sizeMap","borderRadiusMap","containerStyle","useCombinedRefs","refs","node","forEach","ref","canUseDOM","window","document","createElement","isWindow","elementString","Object","prototype","toString","call","isNode","getWindow","target","_target$ownerDocument","_target$ownerDocument2","ownerDocument","defaultView","isDocument","Document","isHTMLElement","HTMLElement","isSVGElement","SVGElement","getOwnerDocument","useIsomorphicLayoutEffect","useLayoutEffect","useEvent","handler","handlerRef","current","args","useInterval","intervalRef","set","listener","setInterval","clear","clearInterval","useLatestValue","dependencies","valueRef","useLazyMemo","callback","newValue","useNodeRef","onChangeHandler","setNodeRef","usePrevious","ids","useUniqueId","prefix","createAdjustmentFn","modifier","object","adjustments","reduce","accumulator","adjustment","entries","valueAdjustment","add","subtract","hasViewportRelativeCoordinates","event","isKeyboardEvent","KeyboardEvent","isTouchEvent","TouchEvent","getEventCoordinates","touches","length","clientX","x","clientY","y","changedTouches","CSS","freeze","Translate","transform","Math","round","Scale","scaleX","scaleY","Transform","join","Transition","_ref","property","easing","SELECTOR","findFirstFocusableNode","matches","querySelector","hiddenStyles","display","HiddenText","React","LiveRegion","announcement","ariaLiveType","visuallyHidden","top","left","width","margin","border","padding","overflow","clip","clipPath","whiteSpace","role","useAnnouncement","setAnnouncement","announce","DndMonitorContext","createContext","useDndMonitor","registerListener","useContext","Error","useDndMonitorProvider","listeners","Set","delete","_listener$type","defaultScreenReaderInstructions","draggable","defaultAnnouncements","onDragStart","active","onDragOver","_ref2","over","onDragEnd","_ref3","onDragCancel","_ref4","Accessibility","announcements","container","hiddenTextDescribedById","screenReaderInstructions","liveRegionId","mounted","setMounted","onDragMove","_ref5","_ref6","markup","createPortal","Action","noop","useSensor","sensor","options","useSensors","sensors","filter","defaultCoordinates","distanceBetween","p1","p2","sqrt","pow","sortCollisionsAsc","sortCollisionsDesc","getFirstCollision","collisions","firstCollision","centerOfRectangle","closestCenter","collisionRect","droppableRects","droppableContainers","centerRect","droppableContainer","get","distBetween","push","sort","getIntersectionRatio","entry","max","right","min","bottom","targetArea","entryArea","intersectionArea","intersectionRatio","Number","toFixed","rectIntersection","adjustScale","rect1","rect2","getRectDelta","createRectAdjustmentFn","acc","getAdjustedRect","parseTransform","startsWith","transformArray","slice","split","inverseTransform","transformOrigin","parsedTransform","translateX","translateY","parseFloat","indexOf","w","h","defaultOptions","ignoreTransform","getClientRect","getBoundingClientRect","getComputedStyle","getTransformAgnosticClientRect","getWindowClientRect","innerWidth","innerHeight","isFixed","computedStyle","isScrollable","overflowRegex","some","test","getScrollableAncestors","limit","scrollParents","findScrollableAncestors","scrollingElement","includes","parentNode","getFirstScrollableAncestor","firstScrollableAncestor","getScrollableElement","getScrollXCoordinate","scrollX","scrollLeft","getScrollYCoordinate","scrollY","scrollTop","getScrollCoordinates","Direction","isDocumentScrollingElement","getScrollPosition","scrollingContainer","minScroll","dimensions","clientHeight","clientWidth","maxScroll","scrollWidth","scrollHeight","isTop","isLeft","isBottom","isRight","defaultThreshold","getScrollDirectionAndSpeed","scrollContainer","scrollContainerRect","acceleration","thresholdPercentage","threshold","Backward","abs","Forward","getScrollElementRect","getScrollOffsets","scrollableAncestors","getScrollXOffset","getScrollYOffset","scrollIntoViewIfNeeded","measure","scrollIntoView","block","inline","properties","Rect","constructor","scrollOffsets","axis","keys","getScrollOffset","defineProperty","currentOffsets","scrollOffsetsDeltla","enumerable","Listeners","removeAll","_this$target","removeEventListener","eventName","_this$target2","addEventListener","getEventListenerTarget","EventTarget","hasExceededDistance","delta","measurement","dx","dy","EventName","preventDefault","stopPropagation","KeyboardCode","defaultKeyboardCodes","start","Space","Enter","cancel","Esc","end","Tab","defaultKeyboardCoordinateGetter","currentCoordinates","code","Right","Left","Down","Up","KeyboardSensor","props","autoScrollEnabled","referenceCoordinates","windowListeners","handleKeyDown","bind","handleCancel","attach","handleStart","Resize","VisibilityChange","setTimeout","Keydown","activeNode","onStart","context","keyboardCodes","coordinateGetter","scrollBehavior","handleEnd","newCoordinates","coordinatesDelta","getCoordinatesDelta","scrollDelta","scrollElementRect","clampedCoordinates","canScrollX","canScrollY","newScrollCoordinates","canScrollToNewCoordinates","scrollTo","behavior","scrollBy","handleMove","getAdjustedCoordinates","coordinates","onMove","onEnd","detach","onCancel","activators","onActivation","nativeEvent","activator","activatorNode","isDistanceConstraint","constraint","Boolean","isDelayConstraint","AbstractPointerSensor","events","listenerTarget","activated","initialCoordinates","timeoutId","documentListeners","_getEventCoordinates","handleKeydown","removeTextSelection","activationConstraint","bypassActivationConstraint","move","passive","DragStart","ContextMenu","handlePending","clearTimeout","offset","onPending","Click","capture","SelectionChange","_getEventCoordinates2","tolerance","distance","cancelable","onAbort","_this$document$getSel","getSelection","removeAllRanges","PointerSensor","isPrimary","button","MouseButton","MouseSensor","RightClick","TouchSensor","setup","AutoScrollActivator","TraversalOrder","useAutoScroller","Pointer","canScroll","draggingRect","enabled","order","TreeOrder","pointerCoordinates","scrollableAncestorRects","scrollIntent","useScrollIntent","disabled","setAutoScrollInterval","clearAutoScrollInterval","DraggableRect","scrollContainerRef","autoScroll","sortedScrollableAncestors","reverse","JSON","stringify","defaultScrollIntent","previousDelta","previousIntent","sign","useCachedNode","draggableNodes","draggableNode","undefined","cachedNode","useCombineActivators","getSyntheticHandler","Sensor","sensorActivators","map","MeasuringStrategy","MeasuringFrequency","defaultValue","Map","useDroppableMeasuring","containers","dragging","queue","setQueue","frequency","strategy","containersRef","isDisabled","disabledRef","measureDroppableContainers","concat","previousValue","measuringScheduled","Always","BeforeDragging","useInitialValue","computeFn","useInitialRect","useMutationObserver","handleMutations","mutationObserver","MutationObserver","disconnect","useResizeObserver","handleResize","resizeObserver","ResizeObserver","defaultMeasure","useRect","fallbackRect","setRect","measureRect","currentRect","isConnected","newRect","records","record","contains","observe","body","childList","subtree","useRectDelta","initialRect","useScrollableAncestors","previousNode","ancestors","useScrollOffsets","elements","scrollCoordinates","setScrollCoordinates","prevElements","previousElements","cleanup","scrollableElement","Array","from","values","useScrollOffsetsDelta","initialScrollOffsets","hasScrollOffsets","useSensorSetup","teardownFns","teardown","useSyntheticListeners","useWindowRect","useRects","firstElement","windowRect","rects","setRects","measureRects","getMeasurableNode","firstChild","useDragOverlayMeasuring","handleNodeChange","nodeRef","setRef","defaultSensors","defaultData","defaultMeasuringConfiguration","droppable","WhileDragging","Optimized","dragOverlay","DroppableContainersMap","_super$get","toArray","getEnabled","getNodeFor","_this$get$node$curren","_this$get","defaultPublicContext","activatorEvent","activeNodeRect","containerNodeRect","measuringConfiguration","defaultInternalContext","ariaDescribedById","dispatch","InternalContext","PublicContext","getInitialState","nodes","translate","reducer","state","action","DragMove","DragEnd","DragCancel","RegisterDroppable","SetDroppableDisabled","UnregisterDroppable","RestoreFocus","previousActivatorEvent","previousActiveId","activeElement","requestAnimationFrame","focusableNode","focus","applyModifiers","modifiers","useMeasuringConfiguration","useLayoutShiftScrollCompensation","initialized","rectDelta","ActiveDraggableContext","Status","DndContext","memo","accessibility","collisionDetection","measuring","store","useReducer","dispatchMonitorEvent","registerMonitorListener","status","setStatus","Uninitialized","isInitialized","Initialized","activeId","activeRects","initial","translated","_node$data","activeRef","activeSensor","setActiveSensor","setActivatorEvent","latestProps","draggableDescribedById","enabledDroppableContainers","activationCoordinates","autoScrollOptions","getAutoScrollerOptions","initialActiveNodeRect","layoutShiftCompensation","parentElement","sensorContext","draggingNode","draggingNodeRect","scrollAdjustedTranslate","overNode","_sensorContext$curren","_dragOverlay$nodeRef$","_dragOverlay$rect","usesDragOverlay","nodeRectDelta","modifiedTranslate","overlayNodeRect","scrollAdjustment","activeNodeScrollDelta","overId","setOver","appliedTranslate","_over$rect","activeSensorRef","instantiateSensor","sensorInstance","onDragAbort","onDragPending","unstable_batchedUpdates","Initializing","createHandler","cancelDrop","Promise","bindActivatorToSensorInstantiator","activeDraggableNode","dndKit","defaultPrevented","activationContext","capturedBy","overContainer","publicContext","internalContext","Provider","restoreFocus","activeSensorDisablesAutoscroll","autoScrollGloballyDisabled","NullContext","defaultRole","ID_PREFIX","useDraggable","attributes","roleDescription","tabIndex","isDragging","setActivatorNodeRef","dataRef","memoizedAttributes","useDndContext","defaultResizeObserverConfig","useDroppable","resizeObserverConfig","previous","resizeObserverConnected","callbackId","resizeObserverDisabled","updateMeasurementsFor","resizeObserverTimeout","isArray","newElement","previousElement","unobserve","isOver","arrayMove","array","to","newArray","splice","getSortedRects","items","isValidIndex","itemsEqual","normalizeDisabled","rectSortingStrategy","activeIndex","overIndex","newRects","oldRect","defaultScale","verticalListSortingStrategy","fallbackActiveRect","_rects$activeIndex","overIndexRect","itemGap","getItemGap","clientRects","previousRect","nextRect","Context","containerId","disableTransforms","useDragOverlay","sortedRects","SortableContext","userDefinedItems","disabledProp","item","previousItemsRef","itemsHaveChanged","contextValue","defaultNewIndexGetter","defaultAnimateLayoutChanges","isSorting","wasDragging","newIndex","previousItems","previousContainerId","transition","defaultTransition","transitionProperty","disabledTransition","defaultAttributes","useDerivedTransform","derivedTransform","setDerivedtransform","previousIndex","useSortable","animateLayoutChanges","userDefinedAttributes","localDisabled","customData","getNewIndex","localStrategy","globalDisabled","globalStrategy","normalizeLocalDisabled","sortable","itemsAfterCurrentSortable","setDroppableNodeRef","setDraggableNodeRef","displaceItem","shouldDisplaceDragSource","dragSourceDisplacement","finalTransform","shouldAnimateLayoutChanges","getTransition","_localDisabled$dragga","_localDisabled$droppa","SortableFormField","GripVertical","FormBlock","formData","previewMode","onFieldReorder","handleFieldDragEnd","oldIndex","f","fields","validateForm","isValid","sanitizeFormData","sanitized","FormRenderer","form","onSuccess","setFormData","isSubmitting","setIsSubmitting","isSuccess","setIsSuccess","submitError","setSubmitError","fieldId","newErrors","handleSubmit","allFields","apiUrl","response","buttonColor"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client';\n\nexport interface LogoProps {\n logoUrl?: string;\n fallbackText?: string;\n size?: 'small' | 'medium' | 'large';\n alignment?: 'left' | 'center' | 'right';\n colors: {\n primary: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function Logo({ logoUrl, fallbackText, size = 'medium', alignment = 'center', colors, enableInlineEditing = false, sectionId = '' }: LogoProps) {\n const logoSizeMap = {\n small: 80,\n medium: 120,\n large: 160\n };\n const logoSize = logoSizeMap[size];\n const alignmentClass = alignment === 'center' ? 'justify-center' : alignment === 'right' ? 'justify-end' : 'justify-start';\n\n return (\n <div className={`container mx-auto px-4 flex ${alignmentClass}`}>\n {logoUrl ? (\n <img\n src={logoUrl}\n alt={fallbackText || 'Logo'}\n className=\"object-contain\"\n style={{ height: `${logoSize}px`, width: 'auto' }}\n />\n ) : fallbackText ? (\n <div\n className=\"flex items-center justify-center rounded-full font-bold\"\n style={{\n width: `${logoSize}px`,\n height: `${logoSize}px`,\n backgroundColor: colors.primary,\n color: '#FFFFFF',\n fontSize: `${logoSize * 0.4}px`\n }}\n >\n {fallbackText.slice(0, 2).toUpperCase()}\n </div>\n ) : (\n <div\n className=\"rounded-full\"\n style={{\n width: `${logoSize}px`,\n height: `${logoSize}px`,\n backgroundColor: colors.primary,\n opacity: 0.2\n }}\n />\n )}\n </div>\n );\n}\n\nexport default Logo;\n","'use client';\n\nexport interface HeaderProps {\n name?: string;\n title?: string;\n bio?: string;\n showName?: boolean;\n showTitle?: boolean;\n showBio?: boolean;\n colors: {\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function Header({\n name,\n title,\n bio,\n showName = true,\n showTitle = true,\n showBio = true,\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: HeaderProps) {\n return (\n <div className=\"container mx-auto px-4 text-center\">\n {showName && (\n <h1\n className=\"text-4xl font-bold mb-3\"\n style={{\n fontFamily: typography.headingFont,\n color: colors.text\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.name'\n })}\n >\n {name || 'Your Name'}\n </h1>\n )}\n {showTitle && (\n <p\n className=\"text-lg opacity-80 mb-2\"\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'Beauty Professional'}\n </p>\n )}\n {showBio && (\n <p\n className=\"text-base opacity-70 max-w-md mx-auto\"\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.bio'\n })}\n >\n {bio || 'Transform your look ✨'}\n </p>\n )}\n </div>\n );\n}\n\nexport default Header;\n","'use client';\n\nexport interface FeaturedLinkProps {\n text?: string;\n url?: string;\n style?: 'gradient' | 'solid' | 'outline';\n size?: 'small' | 'medium' | 'large';\n colors: {\n primary: string;\n secondary: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function FeaturedLink({\n text,\n url,\n style = 'gradient',\n size = 'large',\n colors,\n enableInlineEditing = false,\n sectionId = ''\n}: FeaturedLinkProps) {\n const getClassName = () => {\n let sizeClasses = '';\n switch (size) {\n case 'small':\n sizeClasses = 'p-3 text-base';\n break;\n case 'medium':\n sizeClasses = 'p-4 text-lg';\n break;\n case 'large':\n sizeClasses = 'p-5 text-xl';\n break;\n default:\n sizeClasses = 'p-5 text-xl';\n }\n\n let styleClasses = '';\n switch (style) {\n case 'gradient':\n styleClasses = 'rounded-full';\n break;\n case 'solid':\n styleClasses = 'rounded-lg';\n break;\n case 'outline':\n styleClasses = 'rounded-full border-2';\n break;\n default:\n styleClasses = 'rounded-full';\n }\n\n return `block max-w-2xl mx-auto ${sizeClasses} ${styleClasses} text-center font-semibold transition-all hover:scale-105 hover:shadow-xl`;\n };\n\n const getStyle = () => {\n switch (style) {\n case 'gradient':\n return {\n background: `linear-gradient(135deg, ${colors.primary} 0%, ${colors.secondary} 100%)`,\n color: '#FFFFFF'\n };\n case 'solid':\n return {\n backgroundColor: colors.primary,\n color: '#FFFFFF'\n };\n case 'outline':\n return {\n backgroundColor: 'transparent',\n borderColor: colors.primary,\n color: colors.primary\n };\n default:\n return {\n backgroundColor: colors.primary,\n color: '#FFFFFF'\n };\n }\n };\n\n return (\n <div className=\"container mx-auto px-4\">\n <a\n href={url || '/book'}\n className={getClassName()}\n style={getStyle()}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.text'\n })}\n >\n {text || '💅 Book Now'}\n </a>\n </div>\n );\n}\n\nexport default FeaturedLink;\n","'use client';\n\nexport interface Link {\n id: string;\n label: string;\n url: string;\n}\n\nexport interface LinkListProps {\n links: Link[];\n style?: 'pill' | 'square' | 'outline';\n colors: {\n primary: string;\n linkBackground?: string;\n linkText?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function LinkList({ links, style = 'pill', colors, enableInlineEditing = false, sectionId = '' }: LinkListProps) {\n const getLinkClassName = () => {\n const baseClasses = \"block w-full p-4 text-center font-medium transition-all hover:scale-105\";\n\n switch (style) {\n case 'pill':\n return `${baseClasses} rounded-full`;\n case 'square':\n return `${baseClasses} rounded-md`;\n case 'outline':\n return `${baseClasses} rounded-full border-2`;\n default:\n return `${baseClasses} rounded-lg`;\n }\n };\n\n const getLinkStyle = (isOutline: boolean) => {\n if (isOutline) {\n return {\n backgroundColor: 'transparent',\n borderColor: colors.primary,\n color: colors.primary\n };\n }\n return {\n backgroundColor: colors.linkBackground || colors.primary,\n color: colors.linkText || '#FFFFFF'\n };\n };\n\n return (\n <div className=\"container mx-auto px-4\">\n <div className=\"max-w-2xl mx-auto space-y-3\">\n {links.map((link, index) => (\n <a\n key={link.id}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={getLinkClassName()}\n style={getLinkStyle(style === 'outline')}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': `settings.links.${index}.label`\n })}\n >\n {link.label}\n </a>\n ))}\n </div>\n </div>\n );\n}\n\nexport default LinkList;\n","'use client';\n\nimport { Instagram, Facebook, Music, Twitter, Youtube, PinIcon as Pinterest } from 'lucide-react';\n\nexport interface SocialBarProps {\n platforms: string[];\n socialLinks?: Record<string, string>;\n style?: 'filled' | 'outline' | 'ghost';\n size?: 'small' | 'medium' | 'large';\n position?: 'center' | 'left-vertical' | 'right-vertical';\n invertIcons?: boolean;\n colors: {\n primary: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function SocialBar({\n platforms,\n socialLinks = {},\n style = 'filled',\n size = 'large',\n position = 'center',\n invertIcons = false,\n colors,\n enableInlineEditing = false,\n sectionId = ''\n}: SocialBarProps) {\n const getContrastColor = (hexColor: string) => {\n const hex = hexColor.replace('#', '');\n const r = parseInt(hex.substr(0, 2), 16);\n const g = parseInt(hex.substr(2, 2), 16);\n const b = parseInt(hex.substr(4, 2), 16);\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return luminance > 0.5 ? '#000000' : '#FFFFFF';\n };\n\n const getSocialIcon = (platform: string) => {\n const iconSize = size === 'small' ? 20 : size === 'medium' ? 24 : 28;\n\n switch (platform) {\n case 'instagram':\n return <Instagram size={iconSize} />;\n case 'facebook':\n return <Facebook size={iconSize} />;\n case 'tiktok':\n return <Music size={iconSize} />;\n case 'twitter':\n return <Twitter size={iconSize} />;\n case 'youtube':\n return <Youtube size={iconSize} />;\n case 'pinterest':\n return <Pinterest size={iconSize} />;\n default:\n return <Instagram size={iconSize} />;\n }\n };\n\n const getSocialClassName = () => {\n let sizeClasses = '';\n switch (size) {\n case 'small':\n sizeClasses = 'w-10 h-10 text-lg';\n break;\n case 'medium':\n sizeClasses = 'w-12 h-12 text-xl';\n break;\n case 'large':\n sizeClasses = 'w-14 h-14 text-2xl';\n break;\n default:\n sizeClasses = 'w-14 h-14 text-2xl';\n }\n\n let styleClasses = '';\n switch (style) {\n case 'filled':\n styleClasses = 'rounded-full';\n break;\n case 'outline':\n styleClasses = 'rounded-full border-2';\n break;\n case 'ghost':\n styleClasses = 'rounded-full';\n break;\n default:\n styleClasses = 'rounded-full';\n }\n\n return `${sizeClasses} ${styleClasses} flex items-center justify-center hover:scale-110 transition-transform`;\n };\n\n const getSocialStyle = () => {\n switch (style) {\n case 'filled':\n return {\n backgroundColor: colors.primary,\n color: getContrastColor(colors.primary || '#BCB4FF')\n };\n case 'outline':\n return {\n backgroundColor: 'transparent',\n borderColor: colors.primary,\n color: colors.primary\n };\n case 'ghost':\n return {\n backgroundColor: 'rgba(0,0,0,0.05)',\n color: colors.primary\n };\n default:\n return {\n backgroundColor: colors.primary,\n color: getContrastColor(colors.primary || '#BCB4FF')\n };\n }\n };\n\n if (position === 'left-vertical' || position === 'right-vertical') {\n return (\n <div\n className={`fixed top-6 z-40 flex flex-col gap-3 ${\n position === 'left-vertical' ? 'left-4' : 'right-4'\n }`}\n >\n {platforms.map((platform) => {\n const socialUrl = socialLinks[platform] || `https://${platform}.com/`;\n return (\n <a\n key={platform}\n href={socialUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={getSocialClassName()}\n style={{\n ...getSocialStyle(),\n filter: invertIcons ? 'invert(1)' : 'none'\n }}\n title={platform.charAt(0).toUpperCase() + platform.slice(1)}\n >\n {getSocialIcon(platform)}\n </a>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className=\"container mx-auto px-4 py-8 text-center\">\n <div className=\"flex items-center justify-center gap-4\">\n {platforms.map((platform) => {\n const socialUrl = socialLinks[platform] || `https://${platform}.com/`;\n return (\n <a\n key={platform}\n href={socialUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={getSocialClassName()}\n style={{\n ...getSocialStyle(),\n filter: invertIcons ? 'invert(1)' : 'none'\n }}\n title={platform.charAt(0).toUpperCase() + platform.slice(1)}\n >\n {getSocialIcon(platform)}\n </a>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport default SocialBar;\n","'use client';\n\nexport interface HeroProps {\n headline?: string;\n subheadline?: string;\n heroImage?: string;\n ctaButton?: {\n text: string;\n url: string;\n };\n layout?: 'split' | 'full';\n imagePosition?: 'left' | 'right';\n contentDisplay?: 'side' | 'overlay';\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function Hero({\n headline,\n subheadline,\n heroImage,\n ctaButton,\n layout = 'split',\n imagePosition = 'right',\n contentDisplay = 'side',\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: HeroProps) {\n const heroContent = (\n <div className={layout === 'full' ? 'text-center max-w-4xl z-10' : 'text-left'}>\n <h1\n className={layout === 'full' ? 'text-5xl md:text-6xl font-bold mb-6' : 'text-5xl font-bold mb-4'}\n style={{\n fontFamily: typography.headingFont,\n color: layout === 'full' && heroImage ? '#FFFFFF' : colors.text,\n textShadow: layout === 'full' && heroImage ? '0 2px 10px rgba(0,0,0,0.3)' : 'none'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.headline'\n })}\n >\n {headline || 'Welcome'}\n </h1>\n {subheadline && (\n <p\n className={layout === 'full' ? 'text-xl md:text-2xl opacity-90 mb-12' : 'text-xl opacity-80 mb-8'}\n style={{\n color: layout === 'full' && heroImage ? '#FFFFFF' : colors.text,\n textShadow: layout === 'full' && heroImage ? '0 2px 10px rgba(0,0,0,0.3)' : 'none'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.subheadline'\n })}\n >\n {subheadline}\n </p>\n )}\n {ctaButton && (\n <a\n href={ctaButton.url || '#'}\n className=\"inline-block px-8 py-4 rounded-lg font-semibold text-lg transition-all hover:scale-105 shadow-lg\"\n style={{\n backgroundColor: colors.primary,\n color: '#FFFFFF'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.ctaButton.text'\n })}\n >\n {ctaButton.text || 'Get Started'}\n </a>\n )}\n </div>\n );\n\n const heroImageElement = heroImage ? (\n <div className=\"w-full h-full rounded-2xl overflow-hidden\">\n <img\n src={heroImage}\n alt={headline || 'Hero'}\n className=\"w-full h-full object-cover\"\n />\n </div>\n ) : (\n <div\n className=\"w-full h-full rounded-2xl flex items-center justify-center\"\n style={{ backgroundColor: colors.primary, opacity: 0.1 }}\n >\n <span className=\"text-sm opacity-50\">Add hero image</span>\n </div>\n );\n\n if (layout === 'full') {\n return (\n <div\n className=\"relative py-20 md:py-24 px-4 flex items-center justify-center\"\n style={{\n backgroundImage: heroImage ? `url(${heroImage})` : 'none',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n backgroundColor: !heroImage ? colors.primary : 'transparent',\n opacity: !heroImage ? 0.1 : 1\n }}\n >\n {heroImage && (\n <div className=\"absolute inset-0 bg-black/40\" />\n )}\n {heroContent}\n </div>\n );\n }\n\n if (contentDisplay === 'overlay') {\n return (\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"relative max-w-6xl mx-auto rounded-2xl overflow-hidden\" style={{ height: '500px' }}>\n {heroImage ? (\n <img\n src={heroImage}\n alt={headline || 'Hero'}\n className=\"absolute inset-0 w-full h-full object-cover\"\n />\n ) : (\n <div\n className=\"absolute inset-0\"\n style={{ backgroundColor: colors.primary, opacity: 0.1 }}\n />\n )}\n <div className=\"absolute inset-0 bg-gradient-to-r from-black/60 to-black/20\" />\n <div\n className={`relative h-full flex items-center ${imagePosition === 'left' ? 'justify-end' : 'justify-start'} px-12`}\n >\n <div className=\"max-w-lg\" style={{ color: '#FFFFFF', textShadow: '0 2px 10px rgba(0,0,0,0.3)' }}>\n {heroContent}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"grid md:grid-cols-2 gap-12 items-center max-w-6xl mx-auto\">\n {imagePosition === 'left' && (\n <div className=\"aspect-[4/3]\">\n {heroImageElement}\n </div>\n )}\n <div>\n {heroContent}\n </div>\n {imagePosition === 'right' && (\n <div className=\"aspect-[4/3]\">\n {heroImageElement}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default Hero;\n","'use client';\n\nexport interface AboutProps {\n title?: string;\n content?: string;\n image?: string;\n layout?: 'centered' | 'split' | 'wide';\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function About({\n title,\n content,\n image,\n layout = 'centered',\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: AboutProps) {\n if (layout === 'centered') {\n return (\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"max-w-3xl mx-auto text-center\">\n <h2\n className=\"text-3xl font-bold mb-6\"\n style={{\n fontFamily: typography.headingFont,\n color: colors.text\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'About Us'}\n </h2>\n <p\n className=\"text-lg opacity-80\"\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.content'\n })}\n >\n {content || 'Tell your story here...'}\n </p>\n </div>\n </div>\n );\n }\n\n if (layout === 'split') {\n return (\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"max-w-6xl mx-auto grid md:grid-cols-2 gap-12 items-center\">\n <div className=\"aspect-square rounded-2xl overflow-hidden\">\n {image ? (\n <img\n src={image}\n alt={title || 'About'}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div\n className=\"w-full h-full flex items-center justify-center\"\n style={{ backgroundColor: colors.primary, opacity: 0.2 }}\n >\n <span className=\"text-sm opacity-50\">Add image</span>\n </div>\n )}\n </div>\n <div>\n <h2\n className=\"text-3xl font-bold mb-6\"\n style={{\n fontFamily: typography.headingFont,\n color: colors.text\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'About Us'}\n </h2>\n <p\n className=\"text-lg opacity-80 leading-relaxed\"\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.content'\n })}\n >\n {content || 'Tell your story here...'}\n </p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"max-w-7xl mx-auto\">\n <h2\n className=\"text-4xl font-bold mb-8 text-left\"\n style={{\n fontFamily: typography.headingFont,\n color: colors.text\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'About Us'}\n </h2>\n <p\n className=\"text-xl opacity-80 leading-relaxed columns-2 gap-12\"\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.content'\n })}\n >\n {content || 'Tell your story here...'}\n </p>\n </div>\n </div>\n );\n}\n\nexport default About;\n","'use client';\n\n// Local interface (not exported to avoid conflicts)\ninterface ServicePreview {\n id: number;\n name: string;\n description: string;\n price: number;\n duration: number;\n}\n\nexport interface ServicesPreviewProps {\n title?: string;\n services?: ServicePreview[];\n layout?: 'grid' | 'list' | 'carousel';\n columns?: 2 | 3 | 4;\n showPrices?: boolean;\n showDuration?: boolean;\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function ServicesPreview({\n title,\n services = [],\n layout = 'grid',\n columns = 3,\n showPrices = true,\n showDuration = true,\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: ServicesPreviewProps) {\n const gridColsMap = {\n 2: 'grid-cols-1 md:grid-cols-2',\n 3: 'grid-cols-1 md:grid-cols-3',\n 4: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-4'\n };\n\n const mockServices = services.length > 0 ? services : [\n { id: 1, name: 'Haircut & Style', description: 'Professional cut and styling', price: 75, duration: 60 },\n { id: 2, name: 'Color Treatment', description: 'Full color or highlights', price: 150, duration: 120 },\n { id: 3, name: 'Deep Conditioning', description: 'Restorative treatment', price: 50, duration: 45 }\n ];\n\n const getLayoutClasses = () => {\n switch (layout) {\n case 'grid':\n return `grid ${gridColsMap[columns]} gap-8`;\n case 'list':\n return 'flex flex-col gap-4 max-w-3xl mx-auto';\n case 'carousel':\n return 'flex overflow-x-auto snap-x gap-6 pb-4';\n default:\n return `grid ${gridColsMap[columns]} gap-8`;\n }\n };\n\n return (\n <section className=\"py-16 px-6\">\n <div className=\"max-w-7xl mx-auto\">\n <h2\n className=\"text-3xl md:text-4xl font-bold text-center mb-12\"\n style={{ fontFamily: typography.headingFont, color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'Our Services'}\n </h2>\n <div className={getLayoutClasses()}>\n {mockServices.map((service) => (\n <div\n key={service.id}\n className={`p-6 rounded-lg border hover:scale-105 transition-transform shadow-lg ${\n layout === 'carousel' ? 'snap-center flex-shrink-0 w-80' : ''\n } ${\n layout === 'list' ? 'flex items-center gap-6' : ''\n }`}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.95)',\n borderColor: `${colors.primary}20`\n }}\n >\n {layout === 'list' && (\n <div className=\"flex-shrink-0 w-24 h-24 rounded-lg\" style={{ backgroundColor: colors.primary, opacity: 0.2 }} />\n )}\n <div className=\"flex-1\">\n <h3\n className=\"text-xl font-semibold mb-3\"\n style={{ color: '#1a1a1a' }}\n >\n {service.name}\n </h3>\n <p className=\"text-sm opacity-80 mb-4\" style={{ color: '#333333' }}>\n {service.description}\n </p>\n <div className={`flex ${layout === 'list' ? 'gap-4' : 'justify-between'} items-center`}>\n {showPrices && (\n <p className=\"font-bold text-lg\" style={{ color: colors.primary }}>\n ${service.price}\n </p>\n )}\n {showDuration && (\n <p className=\"text-sm opacity-70\" style={{ color: '#666666' }}>\n {service.duration} min\n </p>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nexport default ServicesPreview;\n","'use client';\n\nexport interface GalleryImage {\n id: string | number;\n url?: string;\n alt?: string;\n}\n\nexport interface GalleryProps {\n title?: string;\n images?: GalleryImage[];\n columns?: 2 | 3 | 4;\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function Gallery({\n title,\n images = [],\n columns = 3,\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: GalleryProps) {\n const galleryGridMap = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-2 md:grid-cols-3',\n 4: 'grid-cols-2 md:grid-cols-4'\n };\n\n const imagesToShow = images.length > 0 ? images : [1, 2, 3, 4, 5, 6].map(i => ({ id: i, url: undefined }));\n\n return (\n <section className=\"py-16 px-6\">\n <div className=\"max-w-7xl mx-auto\">\n <h2\n className=\"text-3xl md:text-4xl font-bold text-center mb-12\"\n style={{ fontFamily: typography.headingFont, color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'Gallery'}\n </h2>\n <div className={`grid ${galleryGridMap[columns]} gap-4`}>\n {imagesToShow.map((img, i) => (\n <div\n key={img.id || i}\n className=\"relative aspect-square overflow-hidden rounded-lg group\"\n >\n {img.url ? (\n <img\n src={img.url}\n alt={img.alt || ''}\n className=\"w-full h-full object-cover transition-transform group-hover:scale-110\"\n />\n ) : (\n <div\n className=\"w-full h-full flex items-center justify-center transition-transform group-hover:scale-110\"\n style={{ backgroundColor: colors.primary, opacity: 0.2 }}\n >\n <span className=\"text-sm opacity-50\">Add image</span>\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nexport default Gallery;\n","'use client';\n\nexport interface Testimonial {\n id: string | number;\n text: string;\n author: string;\n rating: number;\n}\n\nexport interface TestimonialsProps {\n title?: string;\n testimonials?: Testimonial[];\n layout?: 'grid' | 'carousel';\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function Testimonials({\n title,\n testimonials = [],\n layout = 'grid',\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: TestimonialsProps) {\n const layoutClass = layout === 'carousel'\n ? 'flex overflow-x-auto snap-x gap-6 pb-4'\n : 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6';\n\n const mockTestimonials = testimonials.length > 0 ? testimonials : [\n { id: 1, text: 'Amazing service! I love my new look.', author: 'Sarah M.', rating: 5 },\n { id: 2, text: 'Professional and friendly staff.', author: 'Jessica L.', rating: 5 },\n { id: 3, text: 'Best salon in town!', author: 'Emily R.', rating: 5 }\n ];\n\n return (\n <section className=\"py-16 px-6\">\n <div className=\"max-w-7xl mx-auto\">\n <h2\n className=\"text-3xl md:text-4xl font-bold text-center mb-12\"\n style={{ fontFamily: typography.headingFont, color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'What Our Clients Say'}\n </h2>\n <div className={layoutClass}>\n {mockTestimonials.map((testimonial) => (\n <div\n key={testimonial.id}\n className={`p-6 rounded-lg bg-white/10 backdrop-blur-sm ${\n layout === 'carousel' ? 'snap-center flex-shrink-0 w-80' : ''\n }`}\n >\n <div className=\"flex gap-1 mb-4\">\n {[...Array(5)].map((_, i) => (\n <svg\n key={i}\n className=\"w-5 h-5\"\n fill={i < testimonial.rating ? (colors.primary || '#8B5CF6') : '#E5E7EB'}\n viewBox=\"0 0 20 20\"\n >\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\n </svg>\n ))}\n </div>\n <p className=\"mb-4 italic\" style={{ color: colors.text }}>\n \"{testimonial.text}\"\n </p>\n <p className=\"font-semibold\" style={{ color: colors.text }}>\n {testimonial.author}\n </p>\n </div>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nexport default Testimonials;\n","'use client';\n\nexport interface TeamMember {\n id: string | number;\n name: string;\n role: string;\n bio: string;\n image?: string;\n}\n\nexport interface TeamProps {\n title?: string;\n members?: TeamMember[];\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function Team({\n title,\n members = [],\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: TeamProps) {\n const mockTeam = members.length > 0 ? members : [\n { id: 1, name: 'Sarah Johnson', role: 'Master Stylist', bio: 'Expert in color and styling with 10+ years experience' },\n { id: 2, name: 'Michael Chen', role: 'Senior Stylist', bio: 'Specializing in precision cuts and modern styles' },\n { id: 3, name: 'Emma Davis', role: 'Stylist', bio: 'Passionate about creating beautiful transformations' }\n ];\n\n return (\n <section className=\"py-16 px-6\">\n <div className=\"max-w-7xl mx-auto\">\n <h2\n className=\"text-3xl md:text-4xl font-bold text-center mb-12\"\n style={{ fontFamily: typography.headingFont, color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'Meet Our Team'}\n </h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8\">\n {mockTeam.map((member) => (\n <div key={member.id} className=\"text-center\">\n <div\n className=\"w-32 h-32 rounded-full mx-auto mb-4\"\n style={{ backgroundColor: colors.primary, opacity: 0.2 }}\n />\n <h3\n className=\"text-xl font-semibold mb-2\"\n style={{ color: colors.text }}\n >\n {member.name}\n </h3>\n <p className=\"text-sm mb-3\" style={{ color: colors.primary }}>\n {member.role}\n </p>\n <p className=\"text-sm opacity-80\" style={{ color: colors.text }}>\n {member.bio}\n </p>\n </div>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nexport default Team;\n","'use client';\n\nexport interface ContactProps {\n title?: string;\n email?: string;\n phone?: string;\n address?: string;\n showForm?: boolean;\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function Contact({\n title,\n email = 'contact@example.com',\n phone = '(555) 123-4567',\n address = '123 Main Street, City, State 12345',\n showForm = true,\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: ContactProps) {\n return (\n <section className=\"py-16 px-6\">\n <div className=\"max-w-7xl mx-auto\">\n <h2\n className=\"text-3xl md:text-4xl font-bold text-center mb-12\"\n style={{ fontFamily: typography.headingFont, color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'Get In Touch'}\n </h2>\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-12\">\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-4\">\n <svg className=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" style={{ color: colors.primary }}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n </svg>\n <span style={{ color: colors.text }}>{email}</span>\n </div>\n <div className=\"flex items-center gap-4\">\n <svg className=\"w-6 h-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" style={{ color: colors.primary }}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z\" />\n </svg>\n <span style={{ color: colors.text }}>{phone}</span>\n </div>\n <div className=\"flex items-start gap-4\">\n <svg className=\"w-6 h-6 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" style={{ color: colors.primary }}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n <span style={{ color: colors.text }}>{address}</span>\n </div>\n </div>\n\n {showForm && (\n <form className=\"space-y-4\">\n <input\n type=\"text\"\n placeholder=\"Name\"\n className=\"w-full px-4 py-3 rounded-lg bg-white/10 backdrop-blur-sm border border-white/20\"\n style={{ color: colors.text }}\n />\n <input\n type=\"email\"\n placeholder=\"Email\"\n className=\"w-full px-4 py-3 rounded-lg bg-white/10 backdrop-blur-sm border border-white/20\"\n style={{ color: colors.text }}\n />\n <textarea\n placeholder=\"Message\"\n rows={4}\n className=\"w-full px-4 py-3 rounded-lg bg-white/10 backdrop-blur-sm border border-white/20\"\n style={{ color: colors.text }}\n />\n <button\n type=\"submit\"\n className=\"w-full px-6 py-3 rounded-lg font-semibold transition-all hover:scale-105\"\n style={{ backgroundColor: colors.primary, color: '#FFFFFF' }}\n >\n Send Message\n </button>\n </form>\n )}\n </div>\n </div>\n </section>\n );\n}\n\nexport default Contact;\n","'use client';\n\nexport interface MinimalHeaderProps {\n brandName?: string;\n logoUrl?: string;\n style?: 'logo' | 'text' | 'both';\n alignment?: 'left' | 'center' | 'right';\n sticky?: boolean;\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function MinimalHeader({\n brandName,\n logoUrl,\n style = 'both',\n alignment = 'left',\n sticky = true,\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: MinimalHeaderProps) {\n const alignmentClass = alignment === 'center' ? 'justify-center' : alignment === 'right' ? 'justify-end' : 'justify-start';\n\n return (\n <header\n className={`${sticky ? 'sticky top-0 z-50 backdrop-blur-sm' : ''} border-b`}\n style={{\n backgroundColor: sticky ? 'rgba(255, 255, 255, 0.8)' : 'transparent',\n borderColor: colors.primary\n }}\n >\n <div className={`container mx-auto px-4 py-4 flex items-center ${alignmentClass}`}>\n <div className=\"flex items-center gap-3\">\n {(style === 'logo' || style === 'both') && (\n <>\n {logoUrl ? (\n <img\n src={logoUrl}\n alt={brandName || 'Logo'}\n className=\"h-10 w-auto object-contain\"\n />\n ) : (\n <div\n className=\"w-10 h-10 rounded-full\"\n style={{ backgroundColor: colors.primary, opacity: 0.2 }}\n />\n )}\n </>\n )}\n {(style === 'text' || style === 'both' || !style) && (\n <h1\n className=\"text-2xl font-bold\"\n style={{\n fontFamily: typography.headingFont,\n color: colors.text\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.brandName'\n })}\n >\n {brandName || 'Your Brand'}\n </h1>\n )}\n </div>\n </div>\n </header>\n );\n}\n\nexport default MinimalHeader;\n","'use client';\n\nexport interface NavLink {\n id: string;\n label: string;\n url: string;\n linkType?: 'internal' | 'external';\n}\n\nexport interface MinimalNavigationProps {\n links: NavLink[];\n style?: 'horizontal' | 'vertical';\n colors: {\n text: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function MinimalNavigation({\n links,\n style = 'horizontal',\n colors,\n enableInlineEditing = false,\n sectionId = ''\n}: MinimalNavigationProps) {\n const handleNavClick = (e: React.MouseEvent<HTMLAnchorElement>, url: string) => {\n if (url.startsWith('#')) {\n e.preventDefault();\n const sectionId = url.substring(1);\n const element = document.querySelector(`[data-section-id=\"${sectionId}\"]`);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }\n };\n\n return (\n <nav className=\"container mx-auto px-4 py-4\">\n <div className={`flex ${style === 'vertical' ? 'flex-col space-y-2' : 'flex-row space-x-6 justify-center'}`}>\n {links.map((link, index) => (\n <a\n key={link.id}\n href={link.url}\n onClick={(e) => handleNavClick(e, link.url)}\n className=\"text-base font-medium transition-colors hover:opacity-70\"\n style={{ color: colors.text }}\n {...(link.linkType === 'external' && !link.url.startsWith('#') ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': `settings.links.${index}.label`\n })}\n >\n {link.label}\n </a>\n ))}\n </div>\n </nav>\n );\n}\n\nexport default MinimalNavigation;\n","'use client';\n\nexport interface MinimalFooterProps {\n footerText?: string;\n alignment?: 'left' | 'center' | 'right';\n showSocial?: boolean;\n showContact?: boolean;\n showLinks?: boolean;\n colors: {\n primary: string;\n text: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function MinimalFooter({\n footerText,\n alignment = 'center',\n showSocial = true,\n showContact = true,\n showLinks = true,\n colors,\n enableInlineEditing = false,\n sectionId = ''\n}: MinimalFooterProps) {\n const alignClass = alignment === 'center' ? 'text-center' : alignment === 'right' ? 'text-right' : 'text-left';\n\n return (\n <footer\n className={`border-t py-8`}\n style={{ borderColor: colors.primary }}\n >\n <div className={`container mx-auto px-4 ${alignClass}`}>\n <div className=\"space-y-4\">\n {showSocial && (\n <div className={`flex gap-4 ${alignment === 'center' ? 'justify-center' : alignment === 'right' ? 'justify-end' : 'justify-start'}`}>\n {['instagram', 'facebook', 'twitter'].map((platform) => (\n <a\n key={platform}\n href={`https://${platform}.com/`}\n className=\"w-8 h-8 rounded-full flex items-center justify-center transition-transform hover:scale-110\"\n style={{ backgroundColor: colors.primary, color: '#FFFFFF' }}\n >\n {platform[0].toUpperCase()}\n </a>\n ))}\n </div>\n )}\n {showContact && (\n <div className=\"text-sm opacity-70\" style={{ color: colors.text }}>\n <p>contact@example.com | (555) 123-4567</p>\n </div>\n )}\n {showLinks && (\n <div className={`flex gap-4 text-sm ${alignment === 'center' ? 'justify-center' : alignment === 'right' ? 'justify-end' : 'justify-start'}`}>\n <a href=\"/privacy\" className=\"hover:opacity-70\" style={{ color: colors.text }}>Privacy</a>\n <a href=\"/terms\" className=\"hover:opacity-70\" style={{ color: colors.text }}>Terms</a>\n </div>\n )}\n <p\n className=\"text-sm opacity-60\"\n style={{ color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.footerText'\n })}\n >\n {footerText || '© 2025 Your Business'}\n </p>\n </div>\n </div>\n </footer>\n );\n}\n\nexport default MinimalFooter;\n","'use client';\n\nexport interface FeatureContentProps {\n headline?: string;\n description?: string;\n image?: string;\n buttonText?: string;\n buttonUrl?: string;\n layout?: 'image-left' | 'image-right' | 'image-top';\n showButton?: boolean;\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function FeatureContent({\n headline,\n description,\n image,\n buttonText,\n buttonUrl,\n layout = 'image-right',\n showButton = true,\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: FeatureContentProps) {\n const imageSection = (\n <div className=\"w-full h-full aspect-video rounded-lg overflow-hidden bg-gray-100\">\n {image ? (\n <img\n src={image}\n alt={headline || 'Feature image'}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div\n className=\"w-full h-full flex items-center justify-center\"\n style={{ backgroundColor: colors.primary, opacity: 0.2 }}\n >\n <span className=\"text-sm opacity-50\">Add image</span>\n </div>\n )}\n </div>\n );\n\n const contentSection = (\n <div className=\"space-y-4\">\n <h2\n className=\"text-3xl font-bold\"\n style={{\n fontFamily: typography.headingFont,\n color: colors.text\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.headline'\n })}\n >\n {headline || 'Feature Headline'}\n </h2>\n <p\n className=\"text-lg opacity-80\"\n style={{ color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.description'\n })}\n >\n {description || 'Feature description goes here...'}\n </p>\n {showButton && (\n <a\n href={buttonUrl || '#'}\n className=\"inline-block px-6 py-3 rounded-lg font-semibold transition-all hover:scale-105\"\n style={{\n backgroundColor: colors.primary,\n color: '#FFFFFF'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.buttonText'\n })}\n >\n {buttonText || 'Learn More'}\n </a>\n )}\n </div>\n );\n\n return (\n <div className=\"container mx-auto px-4 py-16\">\n <div className={`grid md:grid-cols-2 gap-12 items-center ${layout === 'image-top' ? 'grid-cols-1' : ''}`}>\n {layout === 'image-left' && imageSection}\n {contentSection}\n {layout === 'image-right' && imageSection}\n {layout === 'image-top' && imageSection}\n </div>\n </div>\n );\n}\n\nexport default FeatureContent;\n","'use client';\n\nexport interface Comparison {\n id: string | number;\n title?: string;\n beforeImage?: string;\n afterImage?: string;\n}\n\nexport interface BeforeAfterProps {\n title?: string;\n comparisons?: Comparison[];\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function BeforeAfter({\n title,\n comparisons = [],\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: BeforeAfterProps) {\n const mockComparisons = comparisons.length > 0 ? comparisons : [\n { id: 1, title: 'Hair Transformation', beforeImage: '', afterImage: '' }\n ];\n\n return (\n <section className=\"py-16 px-6\">\n <div className=\"max-w-7xl mx-auto\">\n <h2\n className=\"text-3xl md:text-4xl font-bold text-center mb-12\"\n style={{ fontFamily: typography.headingFont, color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'Results'}\n </h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n {mockComparisons.map((comparison, index) => (\n <div key={comparison.id || index} className=\"space-y-4\">\n {comparison.title && (\n <h3\n className=\"text-xl font-semibold text-center\"\n style={{ color: colors.text }}\n >\n {comparison.title}\n </h3>\n )}\n <div className=\"relative aspect-[4/3] rounded-lg overflow-hidden\">\n <div\n className=\"absolute inset-0\"\n style={{ backgroundColor: colors.primary, opacity: 0.1 }}\n />\n <div className=\"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded text-sm\">\n Before\n </div>\n <div className=\"absolute top-4 right-4 bg-black/50 text-white px-3 py-1 rounded text-sm\">\n After\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nexport default BeforeAfter;\n","'use client';\n\nexport interface PricingPlan {\n id: string | number;\n name: string;\n price: number;\n features: string[];\n featured?: boolean;\n}\n\nexport interface PricingTableProps {\n title?: string;\n plans?: PricingPlan[];\n colors: {\n primary: string;\n text: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function PricingTable({\n title,\n plans = [],\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: PricingTableProps) {\n const mockPlans = plans.length > 0 ? plans : [\n { id: 1, name: 'Basic', price: 50, features: ['Service 1', 'Service 2'] },\n { id: 2, name: 'Premium', price: 100, features: ['Service 1', 'Service 2', 'Service 3'], featured: true },\n { id: 3, name: 'Deluxe', price: 150, features: ['All Services', 'Priority Booking'] }\n ];\n\n return (\n <section className=\"py-16 px-6\">\n <div className=\"max-w-7xl mx-auto\">\n <h2\n className=\"text-3xl md:text-4xl font-bold text-center mb-12\"\n style={{ fontFamily: typography.headingFont, color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title || 'Pricing'}\n </h2>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-8\">\n {mockPlans.map((plan) => (\n <div\n key={plan.id}\n className={`p-8 rounded-lg border-2 ${\n plan.featured ? 'scale-105 shadow-xl' : ''\n }`}\n style={{\n borderColor: plan.featured ? colors.primary : 'rgba(255,255,255,0.1)',\n backgroundColor: plan.featured ? `${colors.primary}15` : 'rgba(255,255,255,0.05)'\n }}\n >\n <h3\n className=\"text-2xl font-bold mb-2 text-center\"\n style={{ color: colors.text }}\n >\n {plan.name}\n </h3>\n <div className=\"text-center mb-6\">\n <span\n className=\"text-4xl font-bold\"\n style={{ color: colors.primary }}\n >\n ${plan.price}\n </span>\n </div>\n <ul className=\"space-y-3 mb-6\">\n {plan.features.map((feature, i) => (\n <li key={i} className=\"flex items-center gap-2\">\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" style={{ color: colors.primary }}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n <span style={{ color: colors.text }}>{feature}</span>\n </li>\n ))}\n </ul>\n <button\n className=\"w-full px-6 py-3 rounded-lg font-semibold transition-all hover:scale-105\"\n style={{\n backgroundColor: plan.featured ? colors.primary : 'rgba(255,255,255,0.1)',\n color: plan.featured ? '#FFFFFF' : colors.text\n }}\n >\n Choose Plan\n </button>\n </div>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nexport default PricingTable;\n","'use client';\n\nexport interface InstagramFeedProps {\n username?: string;\n colors: {\n primary: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function InstagramFeed({\n username,\n colors,\n enableInlineEditing = false,\n sectionId = ''\n}: InstagramFeedProps) {\n return (\n <div className=\"container mx-auto px-4 py-8\">\n <div className=\"max-w-4xl mx-auto\">\n <p className=\"text-center text-sm opacity-60 mb-4\">\n Instagram Feed: {username || '@handle'}\n </p>\n <div className=\"grid grid-cols-3 gap-1\">\n {[1, 2, 3, 4, 5, 6].map((i) => (\n <div\n key={i}\n className=\"aspect-square rounded\"\n style={{ backgroundColor: colors.primary, opacity: 0.2 }}\n />\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nexport default InstagramFeed;\n","'use client';\n\nexport interface CardLink {\n id: string;\n label: string;\n url: string;\n}\n\nexport interface FixedInfoCardProps {\n name?: string;\n subheading?: string;\n bio?: string;\n links?: CardLink[];\n bookingButtonText?: string;\n bookingButtonUrl?: string;\n showBookingButton?: boolean;\n position?: 'bottom-left' | 'bottom-right' | 'bottom-center';\n cardWidth?: 'small' | 'medium' | 'large';\n cardColor?: string;\n colors: {\n primary: string;\n text: string;\n buttonText?: string;\n };\n typography: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function FixedInfoCard({\n name,\n subheading,\n bio,\n links = [],\n bookingButtonText,\n bookingButtonUrl,\n showBookingButton = true,\n position = 'bottom-left',\n cardWidth = 'medium',\n cardColor = '#FFFFFF',\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: FixedInfoCardProps) {\n const hexToRgba = (hex: string, alpha: number) => {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n };\n\n const widthMap = {\n small: '280px',\n medium: '320px',\n large: '400px'\n };\n\n const positionClasses = {\n 'bottom-left': 'bottom-0 left-0',\n 'bottom-right': 'bottom-0 right-0',\n 'bottom-center': 'bottom-0 left-1/2 -translate-x-1/2'\n };\n\n const textAlignClass = position === 'bottom-left' ? 'text-left' : position === 'bottom-right' ? 'text-right' : 'text-center';\n const subheadingAlign = position === 'bottom-left' ? 'justify-start' : position === 'bottom-right' ? 'justify-end' : 'justify-center';\n\n const getRoundedClass = () => {\n if (position === 'bottom-left') {\n return 'rounded-tr-3xl rounded-tl-none';\n } else if (position === 'bottom-right') {\n return 'rounded-tl-3xl rounded-tr-none';\n } else {\n return 'rounded-t-3xl';\n }\n };\n\n return (\n <div\n className={`fixed z-50 ${positionClasses[position]}`}\n style={{ width: widthMap[cardWidth] }}\n >\n <div\n className={`${getRoundedClass()} shadow-2xl border-t border-x`}\n style={{\n backgroundColor: hexToRgba(cardColor, 0.9),\n borderColor: hexToRgba(cardColor, 0.3),\n boxShadow: '0 -10px 40px rgba(0, 0, 0, 0.1)'\n }}\n >\n <div className={`px-8 pt-8 pb-3 ${textAlignClass}`}>\n <h3\n className=\"text-2xl font-bold\"\n style={{\n fontFamily: typography.headingFont,\n color: colors.text\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.name'\n })}\n >\n {name || 'Your Name'}\n </h3>\n </div>\n\n <div className=\"mb-6\">\n {subheading ? (\n <div className={`flex items-center gap-3 px-8 ${subheadingAlign}`}>\n <span\n className=\"text-xs font-medium whitespace-nowrap\"\n style={{ color: colors.primary }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.subheading'\n })}\n >\n {subheading}\n </span>\n <div className=\"flex-1 h-px\" style={{ backgroundColor: colors.primary, opacity: 0.3 }} />\n </div>\n ) : (\n <div className=\"w-full h-px\" style={{ backgroundColor: colors.primary, opacity: 0.3 }} />\n )}\n </div>\n\n <div className={`px-8 pb-8 ${textAlignClass}`}>\n <p\n className=\"text-sm opacity-80 mb-4\"\n style={{ color: colors.text }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.bio'\n })}\n >\n {bio || 'Transforming beauty, one client at a time ✨'}\n </p>\n\n {links.length > 0 && (\n <div className=\"space-y-2 mb-4\">\n {links.map((link, index) => (\n <a\n key={link.id}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block text-sm font-medium hover:opacity-70 transition-opacity\"\n style={{ color: colors.primary }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': `settings.links.${index}.label`\n })}\n >\n {link.label}\n </a>\n ))}\n </div>\n )}\n\n {showBookingButton && (\n <a\n href={bookingButtonUrl || '/book'}\n className=\"block w-full py-3 px-4 rounded-xl text-center font-semibold transition-all hover:scale-105 hover:shadow-lg\"\n style={{\n backgroundColor: colors.primary,\n color: colors.buttonText || '#FFFFFF'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.bookingButtonText'\n })}\n >\n {bookingButtonText || 'Book Appointment'}\n </a>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport default FixedInfoCard;\n","'use client';\n\nexport interface BookingConfig {\n theme?: {\n colors?: {\n primary: string;\n secondary: string;\n text: string;\n bookingText?: string;\n };\n typography?: {\n headingFont?: string;\n bodyFont?: string;\n bodySize?: string;\n };\n };\n bookingSettings?: any; // Full booking flow configuration\n}\n\nexport interface BookingSectionProps {\n config: BookingConfig;\n colors: {\n primary: string;\n secondary: string;\n text: string;\n bookingText?: string;\n };\n // Optional: If you want to pass a custom BookingFlow component\n BookingFlowComponent?: React.ComponentType<any>;\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function BookingSection({\n config,\n colors,\n BookingFlowComponent,\n enableInlineEditing = false,\n sectionId = ''\n}: BookingSectionProps) {\n // This is a wrapper component that can render any booking flow\n // If a custom component is provided, use it; otherwise show a placeholder\n\n if (BookingFlowComponent) {\n return (\n <div className=\"container mx-auto px-4 py-16\">\n <BookingFlowComponent config={config} colors={colors} />\n </div>\n );\n }\n\n // Placeholder when no BookingFlow component is provided\n return (\n <div className=\"container mx-auto px-4 py-16\">\n <div className=\"max-w-4xl mx-auto text-center\">\n <div\n className=\"p-12 rounded-2xl border-2 border-dashed\"\n style={{ borderColor: colors.primary, opacity: 0.5 }}\n >\n <div className=\"text-6xl mb-4\">📅</div>\n <h3\n className=\"text-2xl font-bold mb-3\"\n style={{ color: colors.text }}\n >\n Booking Flow\n </h3>\n <p className=\"text-base opacity-70\" style={{ color: colors.text }}>\n Pass a BookingFlowComponent prop to render your custom booking flow here.\n </p>\n </div>\n </div>\n </div>\n );\n}\n\nexport default BookingSection;\n","'use client';\n\nexport interface VideoSectionProps {\n videoUrl: string;\n aspectRatio?: '16:9' | '4:3' | '1:1' | '9:16';\n autoplay?: boolean;\n loop?: boolean;\n muted?: boolean;\n controls?: boolean;\n allowFullScreen?: boolean;\n coverImage?: string;\n maxWidth?: 'full' | 'large' | 'medium' | 'small';\n alignment?: 'left' | 'center' | 'right';\n borderRadius?: number;\n colors: {\n primary: string;\n text: string;\n };\n typography?: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function VideoSection({\n videoUrl,\n aspectRatio = '16:9',\n autoplay = false,\n loop = false,\n muted = true,\n controls = true,\n allowFullScreen = true,\n coverImage,\n maxWidth = 'large',\n alignment = 'center',\n borderRadius = 12,\n colors,\n enableInlineEditing = false,\n sectionId = ''\n}: VideoSectionProps) {\n // Helper to extract video ID from YouTube/Vimeo URLs\n const getEmbedUrl = (url: string): { type: 'youtube' | 'vimeo' | 'direct'; embedUrl: string } | null => {\n // YouTube\n const youtubeMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/|youtube\\.com\\/embed\\/)([a-zA-Z0-9_-]+)/);\n if (youtubeMatch) {\n const videoId = youtubeMatch[1];\n const params = new URLSearchParams({\n ...(autoplay ? { autoplay: '1' } : {}),\n ...(loop ? { loop: '1', playlist: videoId } : {}),\n ...(muted ? { mute: '1' } : {}),\n ...(controls ? {} : { controls: '0' }),\n });\n return {\n type: 'youtube',\n embedUrl: `https://www.youtube.com/embed/${videoId}?${params.toString()}`\n };\n }\n\n // Vimeo\n const vimeoMatch = url.match(/(?:vimeo\\.com\\/)(\\d+)/);\n if (vimeoMatch) {\n const videoId = vimeoMatch[1];\n const params = new URLSearchParams({\n ...(autoplay ? { autoplay: '1' } : {}),\n ...(loop ? { loop: '1' } : {}),\n ...(muted ? { muted: '1' } : {}),\n ...(controls ? {} : { controls: '0' }),\n });\n return {\n type: 'vimeo',\n embedUrl: `https://player.vimeo.com/video/${videoId}?${params.toString()}`\n };\n }\n\n // Direct video URL (mp4, webm, etc.)\n if (url.match(/\\.(mp4|webm|ogg)$/i)) {\n return {\n type: 'direct',\n embedUrl: url\n };\n }\n\n return null;\n };\n\n const embedData = getEmbedUrl(videoUrl);\n\n // Aspect ratio padding hack\n const aspectRatioMap = {\n '16:9': '56.25%',\n '4:3': '75%',\n '1:1': '100%',\n '9:16': '177.78%'\n };\n\n // Max width classes\n const maxWidthMap = {\n full: 'max-w-full',\n large: 'max-w-6xl',\n medium: 'max-w-4xl',\n small: 'max-w-2xl'\n };\n\n const alignmentClass = alignment === 'center' ? 'mx-auto' : alignment === 'right' ? 'ml-auto' : 'mr-auto';\n\n return (\n <div className=\"container mx-auto px-4\">\n <div className={`${maxWidthMap[maxWidth]} ${alignmentClass}`}>\n <div\n className=\"relative w-full overflow-hidden\"\n style={{\n paddingBottom: aspectRatioMap[aspectRatio],\n borderRadius: `${borderRadius}px`\n }}\n >\n {embedData ? (\n embedData.type === 'direct' ? (\n // Direct video\n <video\n src={embedData.embedUrl}\n autoPlay={autoplay}\n loop={loop}\n muted={muted}\n controls={controls}\n poster={coverImage}\n className=\"absolute top-0 left-0 w-full h-full object-cover\"\n />\n ) : (\n // YouTube or Vimeo iframe\n <iframe\n src={embedData.embedUrl}\n className=\"absolute top-0 left-0 w-full h-full\"\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen={allowFullScreen}\n title=\"Video\"\n />\n )\n ) : (\n // Fallback placeholder\n <div\n className=\"absolute top-0 left-0 w-full h-full flex items-center justify-center\"\n style={{ backgroundColor: `${colors.primary}20` }}\n >\n <div className=\"text-center px-4\">\n <svg\n className=\"w-16 h-16 mx-auto mb-4\"\n fill=\"none\"\n stroke={colors.primary}\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <p style={{ color: colors.text, opacity: 0.6 }}>\n {videoUrl ? 'Invalid video URL' : 'Add a video URL to display'}\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport default VideoSection;\n","'use client';\n\nimport { useState } from 'react';\n\nexport interface ScrollingTextDividerProps {\n text: string;\n scrollDirection?: 'left' | 'right';\n scrollSpeed?: 'slow' | 'medium' | 'fast' | number;\n orientation?: 'horizontal' | 'diagonal-left' | 'diagonal-right';\n dividerIcon?: 'bullet' | 'star' | 'diamond' | 'custom' | 'none';\n customIcon?: string;\n textSize?: 'small' | 'medium' | 'large' | 'xl';\n textColor?: string;\n fontWeight?: 'light' | 'normal' | 'bold';\n backgroundColor?: string;\n backgroundGradient?: string;\n pauseOnHover?: boolean;\n colors: {\n primary: string;\n text: string;\n };\n typography?: {\n headingFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function ScrollingTextDivider({\n text = 'SCROLL TEXT',\n scrollDirection = 'left',\n scrollSpeed = 'medium',\n orientation = 'horizontal',\n dividerIcon = 'bullet',\n customIcon,\n textSize = 'medium',\n textColor,\n fontWeight = 'bold',\n backgroundColor,\n backgroundGradient,\n pauseOnHover = true,\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: ScrollingTextDividerProps) {\n const [isPaused, setIsPaused] = useState(false);\n\n // Icon mapping\n const iconMap = {\n bullet: '•',\n star: '★',\n diamond: '◆',\n custom: customIcon || '•',\n none: ''\n };\n\n const icon = iconMap[dividerIcon];\n\n // Speed mapping (duration in seconds)\n const speedMap = {\n slow: 60,\n medium: 30,\n fast: 15\n };\n\n const duration = typeof scrollSpeed === 'number' ? scrollSpeed : speedMap[scrollSpeed];\n\n // Text size mapping\n const textSizeMap = {\n small: 'text-xl md:text-2xl',\n medium: 'text-2xl md:text-4xl',\n large: 'text-3xl md:text-5xl',\n xl: 'text-4xl md:text-6xl'\n };\n\n // Font weight mapping\n const fontWeightMap = {\n light: 'font-light',\n normal: 'font-normal',\n bold: 'font-bold'\n };\n\n // Orientation angle\n const rotationMap = {\n horizontal: '0deg',\n 'diagonal-left': '-5deg',\n 'diagonal-right': '5deg'\n };\n\n // Create repeating text with icons\n const repeatingText = icon\n ? `${text} ${icon} `.repeat(20)\n : `${text} `.repeat(20);\n\n // Background style\n const bgStyle = backgroundGradient\n ? { background: backgroundGradient }\n : { backgroundColor: backgroundColor || 'transparent' };\n\n return (\n <div\n className=\"relative overflow-hidden py-3\"\n style={{\n ...bgStyle,\n transform: `rotate(${rotationMap[orientation]})`\n }}\n onMouseEnter={() => pauseOnHover && setIsPaused(true)}\n onMouseLeave={() => pauseOnHover && setIsPaused(false)}\n >\n <style>{`\n @keyframes scroll-${scrollDirection} {\n 0% {\n transform: translateX(${scrollDirection === 'left' ? '0%' : '-50%'});\n }\n 100% {\n transform: translateX(${scrollDirection === 'left' ? '-50%' : '0%'});\n }\n }\n `}</style>\n\n <div\n className={`flex items-center whitespace-nowrap ${textSizeMap[textSize]} ${fontWeightMap[fontWeight]} uppercase tracking-wider`}\n style={{\n fontFamily: typography?.headingFont || 'inherit',\n color: textColor || colors.text,\n animation: `scroll-${scrollDirection} ${duration}s linear infinite`,\n animationPlayState: isPaused ? 'paused' : 'running'\n }}\n >\n <span className=\"inline-block\">{repeatingText}</span>\n <span className=\"inline-block\" aria-hidden=\"true\">{repeatingText}</span>\n </div>\n </div>\n );\n}\n\nexport default ScrollingTextDivider;\n","'use client';\n\nexport interface LocationMapProps {\n address: string;\n displayType?: 'map-only' | 'address-only' | 'both';\n mapHeight?: 'small' | 'medium' | 'large';\n mapStyle?: 'roadmap' | 'satellite';\n zoom?: number;\n showMarker?: boolean;\n borderRadius?: number;\n directionsButtonText?: string;\n colors: {\n primary: string;\n text: string;\n };\n typography?: {\n headingFont?: string;\n bodyFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function LocationMap({\n address,\n displayType = 'both',\n mapHeight = 'medium',\n mapStyle = 'roadmap',\n zoom = 15,\n showMarker = true,\n borderRadius = 12,\n directionsButtonText = 'Get Directions',\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: LocationMapProps) {\n // Map height mapping\n const heightMap = {\n small: 300,\n medium: 400,\n large: 500\n };\n\n const height = heightMap[mapHeight];\n\n // Encode address for Google Maps\n const encodedAddress = encodeURIComponent(address);\n const directionsUrl = `https://www.google.com/maps/dir/?api=1&destination=${encodedAddress}`;\n\n // Google Maps embed URL\n // Support both Next.js (process.env.NEXT_PUBLIC_*) and Vite (import.meta.env.VITE_*)\n const apiKey = (import.meta as any).env?.VITE_GOOGLE_MAPS_API_KEY ||\n (typeof globalThis !== 'undefined' && (globalThis as any).process?.env?.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY) ||\n '';\n const mapEmbedUrl = `https://www.google.com/maps/embed/v1/place?key=${apiKey}&q=${encodedAddress}&zoom=${zoom}&maptype=${mapStyle}`;\n\n return (\n <div className=\"container mx-auto px-4\">\n <div className=\"max-w-4xl mx-auto\">\n {/* Map */}\n {(displayType === 'map-only' || displayType === 'both') && address && (\n <div\n className=\"w-full overflow-hidden mb-6\"\n style={{\n height: `${height}px`,\n borderRadius: `${borderRadius}px`\n }}\n >\n <iframe\n src={mapEmbedUrl}\n className=\"w-full h-full\"\n style={{ border: 0 }}\n allowFullScreen\n loading=\"lazy\"\n referrerPolicy=\"no-referrer-when-downgrade\"\n title=\"Location Map\"\n />\n </div>\n )}\n\n {/* Address & Directions */}\n {(displayType === 'address-only' || displayType === 'both') && (\n <div\n className=\"p-6 rounded-lg border\"\n style={{\n backgroundColor: `${colors.primary}10`,\n borderColor: `${colors.primary}30`,\n borderRadius: `${borderRadius}px`\n }}\n >\n <div className=\"flex flex-col md:flex-row md:items-center md:justify-between gap-4\">\n {/* Address */}\n <div className=\"flex-1\">\n <div className=\"flex items-start gap-3\">\n <svg\n className=\"w-5 h-5 mt-0.5 flex-shrink-0\"\n fill=\"none\"\n stroke={colors.primary}\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <div>\n <p\n className=\"font-medium mb-1\"\n style={{\n color: colors.text,\n fontFamily: typography?.bodyFont || 'inherit'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.address'\n })}\n >\n {address || 'Add your address'}\n </p>\n {address && (\n <a\n href={directionsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm underline hover:no-underline\"\n style={{ color: colors.primary }}\n >\n View in Google Maps �\n </a>\n )}\n </div>\n </div>\n </div>\n\n {/* Get Directions Button */}\n {address && (\n <a\n href={directionsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"px-6 py-3 rounded-lg font-semibold transition-all hover:opacity-90 text-center\"\n style={{\n backgroundColor: colors.primary,\n color: '#FFFFFF'\n }}\n >\n {directionsButtonText}\n </a>\n )}\n </div>\n </div>\n )}\n\n {/* Fallback when no address */}\n {!address && (\n <div\n className=\"p-12 rounded-lg border-2 border-dashed text-center\"\n style={{\n borderColor: `${colors.primary}30`,\n borderRadius: `${borderRadius}px`\n }}\n >\n <svg\n className=\"w-12 h-12 mx-auto mb-4\"\n fill=\"none\"\n stroke={colors.primary}\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <p style={{ color: colors.text, opacity: 0.6 }}>\n Add your business address to display a map\n </p>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default LocationMap;\n","'use client';\n\nexport interface ImageSectionProps {\n imageUrl: string;\n altText?: string;\n caption?: string;\n maxWidth?: 'full' | 'large' | 'medium' | 'small';\n alignment?: 'left' | 'center' | 'right';\n aspectRatio?: 'auto' | '16:9' | '4:3' | '1:1' | '3:2';\n borderRadius?: number;\n linkUrl?: string;\n openInNewTab?: boolean;\n colors: {\n primary: string;\n text: string;\n };\n typography?: {\n bodyFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function ImageSection({\n imageUrl,\n altText = '',\n caption,\n maxWidth = 'large',\n alignment = 'center',\n aspectRatio = 'auto',\n borderRadius = 12,\n linkUrl,\n openInNewTab = true,\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: ImageSectionProps) {\n // Max width classes\n const maxWidthMap = {\n full: 'max-w-full',\n large: 'max-w-6xl',\n medium: 'max-w-4xl',\n small: 'max-w-2xl'\n };\n\n // Aspect ratio padding hack\n const aspectRatioMap = {\n auto: null,\n '16:9': '56.25%',\n '4:3': '75%',\n '1:1': '100%',\n '3:2': '66.67%'\n };\n\n const alignmentClass = alignment === 'center' ? 'mx-auto' : alignment === 'right' ? 'ml-auto' : 'mr-auto';\n\n const imageContent = (\n <div className={`${maxWidthMap[maxWidth]} ${alignmentClass}`}>\n <div\n className=\"relative w-full overflow-hidden\"\n style={{\n borderRadius: `${borderRadius}px`,\n ...(aspectRatioMap[aspectRatio] && { paddingBottom: aspectRatioMap[aspectRatio] })\n }}\n >\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={altText || 'Image'}\n className={aspectRatio === 'auto' ? 'w-full h-auto' : 'absolute top-0 left-0 w-full h-full object-cover'}\n style={{\n borderRadius: `${borderRadius}px`\n }}\n />\n ) : (\n // Placeholder when no image\n <div\n className=\"flex items-center justify-center bg-gray-100\"\n style={{\n backgroundColor: `${colors.primary}10`,\n borderRadius: `${borderRadius}px`,\n minHeight: aspectRatio === 'auto' ? '300px' : undefined\n }}\n >\n <div className=\"text-center px-4\">\n <svg\n className=\"w-16 h-16 mx-auto mb-4\"\n fill=\"none\"\n stroke={colors.primary}\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n <p style={{ color: colors.text, opacity: 0.6 }}>\n Add an image URL to display\n </p>\n </div>\n </div>\n )}\n </div>\n\n {/* Caption */}\n {caption && imageUrl && (\n <p\n className=\"mt-3 text-sm text-center\"\n style={{\n color: colors.text,\n opacity: 0.7,\n fontFamily: typography?.bodyFont || 'inherit'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.caption'\n })}\n >\n {caption}\n </p>\n )}\n </div>\n );\n\n return (\n <div className={maxWidth === 'full' ? 'w-full' : 'container mx-auto px-4'}>\n {linkUrl && imageUrl ? (\n <a\n href={linkUrl}\n target={openInNewTab ? '_blank' : '_self'}\n rel={openInNewTab ? 'noopener noreferrer' : undefined}\n className=\"block\"\n >\n {imageContent}\n </a>\n ) : (\n imageContent\n )}\n </div>\n );\n}\n\nexport default ImageSection;\n","'use client';\n\nimport { useState } from 'react';\n\nexport interface FAQItem {\n question: string;\n answer: string;\n}\n\nexport interface FAQSectionProps {\n title?: string;\n faqs: FAQItem[];\n layout?: 'accordion' | 'stacked';\n maxWidth?: 'full' | 'large' | 'medium' | 'small';\n colors: {\n primary: string;\n text: string;\n };\n typography?: {\n headingFont?: string;\n bodyFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nfunction FAQAccordionItem({\n faq,\n index,\n colors,\n typography,\n enableInlineEditing,\n sectionId\n}: {\n faq: FAQItem;\n index: number;\n colors: any;\n typography: any;\n enableInlineEditing: boolean;\n sectionId: string;\n}) {\n const [isOpen, setIsOpen] = useState(false);\n\n return (\n <div\n className=\"border-b border-opacity-10\"\n style={{ borderColor: colors.text }}\n >\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full py-4 px-6 flex items-center justify-between text-left hover:bg-opacity-5 transition-colors\"\n style={{\n backgroundColor: isOpen ? `${colors.primary}10` : 'transparent'\n }}\n >\n <span\n className=\"font-semibold text-lg pr-4\"\n style={{\n color: colors.text,\n fontFamily: typography?.headingFont || 'inherit'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': `settings.faqs.${index}.question`\n })}\n >\n {faq.question || 'Add question...'}\n </span>\n <svg\n className=\"w-5 h-5 flex-shrink-0 transition-transform\"\n style={{\n color: colors.primary,\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)'\n }}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n {isOpen && (\n <div\n className=\"px-6 pb-4 pt-2\"\n style={{\n color: colors.text,\n opacity: 0.8,\n fontFamily: typography?.bodyFont || 'inherit'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': `settings.faqs.${index}.answer`\n })}\n >\n {faq.answer || 'Add answer...'}\n </div>\n )}\n </div>\n );\n}\n\nexport function FAQSection({\n title = 'Frequently Asked Questions',\n faqs = [],\n layout = 'accordion',\n maxWidth = 'large',\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: FAQSectionProps) {\n // Max width classes\n const maxWidthMap = {\n full: 'max-w-full',\n large: 'max-w-4xl',\n medium: 'max-w-3xl',\n small: 'max-w-2xl'\n };\n\n return (\n <div className=\"container mx-auto px-4\">\n <div className={`${maxWidthMap[maxWidth]} mx-auto`}>\n {/* Title */}\n {title && (\n <h2\n className=\"text-3xl font-bold text-center mb-8\"\n style={{\n color: colors.text,\n fontFamily: typography?.headingFont || 'inherit'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title}\n </h2>\n )}\n\n {/* FAQ Items */}\n {faqs.length > 0 ? (\n <div\n className=\"rounded-lg overflow-hidden\"\n style={{\n border: `1px solid ${colors.text}20`,\n backgroundColor: `${colors.primary}05`\n }}\n >\n {faqs.map((faq, index) => (\n layout === 'accordion' ? (\n <FAQAccordionItem\n key={index}\n faq={faq}\n index={index}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n ) : (\n // Stacked layout (always expanded)\n <div\n key={index}\n className=\"border-b border-opacity-10 last:border-b-0 p-6\"\n style={{ borderColor: colors.text }}\n >\n <h3\n className=\"font-semibold text-lg mb-2\"\n style={{\n color: colors.text,\n fontFamily: typography?.headingFont || 'inherit'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': `settings.faqs.${index}.question`\n })}\n >\n {faq.question || 'Add question...'}\n </h3>\n <p\n style={{\n color: colors.text,\n opacity: 0.8,\n fontFamily: typography?.bodyFont || 'inherit'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': `settings.faqs.${index}.answer`\n })}\n >\n {faq.answer || 'Add answer...'}\n </p>\n </div>\n )\n ))}\n </div>\n ) : (\n // Empty state\n <div\n className=\"p-12 rounded-lg border-2 border-dashed text-center\"\n style={{\n borderColor: `${colors.primary}30`,\n backgroundColor: `${colors.primary}05`\n }}\n >\n <svg\n className=\"w-12 h-12 mx-auto mb-4\"\n fill=\"none\"\n stroke={colors.primary}\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <p style={{ color: colors.text, opacity: 0.6 }}>\n Add FAQ items to get started\n </p>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default FAQSection;\n","'use client';\n\nimport { useState, useEffect } from 'react';\n\nexport interface NavbarLink {\n id: string;\n label: string;\n url: string;\n linkType?: 'internal' | 'external';\n}\n\nexport interface NavbarProps {\n brandName?: string;\n logoUrl?: string;\n showLogo?: boolean;\n showBrandName?: boolean;\n links: NavbarLink[];\n ctaText?: string;\n ctaUrl?: string;\n sticky?: boolean;\n transparentOnTop?: boolean;\n colors: {\n primary: string;\n text: string;\n buttonText?: string;\n };\n typography?: {\n headingFont?: string;\n bodyFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function Navbar({\n brandName = 'Your Brand',\n logoUrl,\n showLogo = true,\n showBrandName = true,\n links = [],\n ctaText,\n ctaUrl,\n sticky = true,\n transparentOnTop = false,\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: NavbarProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n const [scrolled, setScrolled] = useState(false);\n const [activeSection, setActiveSection] = useState('');\n\n // Handle scroll for sticky navbar effects\n useEffect(() => {\n const handleScroll = () => {\n setScrolled(window.scrollY > 20);\n };\n\n window.addEventListener('scroll', handleScroll);\n return () => window.removeEventListener('scroll', handleScroll);\n }, []);\n\n // Track active section for navigation highlighting\n useEffect(() => {\n const handleScroll = () => {\n const sections = links\n .filter(link => link.url.startsWith('#'))\n .map(link => document.querySelector(`[data-section-id=\"${link.url.substring(1)}\"]`))\n .filter(Boolean);\n\n let currentSection = '';\n sections.forEach((section) => {\n if (section) {\n const rect = section.getBoundingClientRect();\n if (rect.top <= 100 && rect.bottom >= 100) {\n currentSection = section.getAttribute('data-section-id') || '';\n }\n }\n });\n\n setActiveSection(currentSection);\n };\n\n window.addEventListener('scroll', handleScroll);\n return () => window.removeEventListener('scroll', handleScroll);\n }, [links]);\n\n const handleNavClick = (e: React.MouseEvent<HTMLAnchorElement>, url: string) => {\n if (url.startsWith('#')) {\n e.preventDefault();\n const sectionId = url.substring(1);\n const element = document.querySelector(`[data-section-id=\"${sectionId}\"]`);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n setMobileMenuOpen(false);\n }\n };\n\n const isTransparent = transparentOnTop && !scrolled;\n const navbarBg = isTransparent\n ? 'bg-transparent'\n : sticky\n ? 'bg-white/80 backdrop-blur-md border-b'\n : 'bg-white border-b';\n\n return (\n <nav\n className={`${sticky ? 'sticky top-0 z-50' : ''} ${navbarBg} transition-all duration-300`}\n style={{\n borderColor: isTransparent ? 'transparent' : `${colors.primary}20`\n }}\n >\n <div className=\"container mx-auto px-4\">\n <div className=\"flex items-center justify-between h-16 md:h-20\">\n {/* Logo & Brand */}\n <div className=\"flex items-center gap-3\">\n {showLogo && logoUrl && (\n <img\n src={logoUrl}\n alt={brandName}\n className=\"h-8 md:h-10 w-auto object-contain\"\n />\n )}\n {showBrandName && (\n <h1\n className=\"text-xl md:text-2xl font-bold\"\n style={{\n fontFamily: typography?.headingFont || 'inherit',\n color: colors.text\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.brandName'\n })}\n >\n {brandName}\n </h1>\n )}\n </div>\n\n {/* Desktop Navigation */}\n <div className=\"hidden md:flex items-center gap-8\">\n {links.map((link, index) => {\n const isActive = link.url.startsWith('#') && link.url.substring(1) === activeSection;\n return (\n <a\n key={link.id}\n href={link.url}\n onClick={(e) => handleNavClick(e, link.url)}\n className=\"relative text-base font-medium transition-colors group\"\n style={{\n color: isActive ? colors.primary : colors.text,\n fontFamily: typography?.bodyFont || 'inherit'\n }}\n {...(link.linkType === 'external' && !link.url.startsWith('#') ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': `settings.links.${index}.label`\n })}\n >\n {link.label}\n {/* Active indicator */}\n <span\n className={`absolute -bottom-1 left-0 h-0.5 transition-all ${isActive ? 'w-full' : 'w-0 group-hover:w-full'}`}\n style={{ backgroundColor: colors.primary }}\n />\n </a>\n );\n })}\n\n {/* CTA Button */}\n {ctaText && ctaUrl && (\n <a\n href={ctaUrl}\n className=\"px-6 py-2.5 rounded-full font-semibold transition-all hover:opacity-90 hover:scale-105\"\n style={{\n backgroundColor: colors.primary,\n color: colors.buttonText || '#FFFFFF',\n fontFamily: typography?.bodyFont || 'inherit'\n }}\n >\n {ctaText}\n </a>\n )}\n </div>\n\n {/* Mobile Menu Button */}\n <button\n onClick={() => setMobileMenuOpen(!mobileMenuOpen)}\n className=\"md:hidden p-2 rounded-lg transition-colors hover:bg-black/5\"\n aria-label=\"Toggle menu\"\n >\n <svg\n className=\"w-6 h-6\"\n fill=\"none\"\n stroke={colors.text}\n viewBox=\"0 0 24 24\"\n >\n {mobileMenuOpen ? (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n ) : (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 6h16M4 12h16M4 18h16\" />\n )}\n </svg>\n </button>\n </div>\n\n {/* Mobile Menu */}\n <div\n className={`md:hidden overflow-hidden transition-all duration-300 ${mobileMenuOpen ? 'max-h-96 pb-4' : 'max-h-0'}`}\n >\n <div className=\"flex flex-col space-y-3 pt-4 border-t\" style={{ borderColor: `${colors.primary}20` }}>\n {links.map((link, index) => {\n const isActive = link.url.startsWith('#') && link.url.substring(1) === activeSection;\n return (\n <a\n key={link.id}\n href={link.url}\n onClick={(e) => handleNavClick(e, link.url)}\n className=\"text-base font-medium py-2 px-4 rounded-lg transition-colors\"\n style={{\n color: isActive ? colors.primary : colors.text,\n backgroundColor: isActive ? `${colors.primary}10` : 'transparent',\n fontFamily: typography?.bodyFont || 'inherit'\n }}\n {...(link.linkType === 'external' && !link.url.startsWith('#') ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {link.label}\n </a>\n );\n })}\n\n {/* Mobile CTA Button */}\n {ctaText && ctaUrl && (\n <a\n href={ctaUrl}\n className=\"px-6 py-3 rounded-full font-semibold text-center transition-all hover:opacity-90\"\n style={{\n backgroundColor: colors.primary,\n color: colors.buttonText || '#FFFFFF',\n fontFamily: typography?.bodyFont || 'inherit'\n }}\n >\n {ctaText}\n </a>\n )}\n </div>\n </div>\n </div>\n </nav>\n );\n}\n\nexport default Navbar;\n","'use client';\n\nexport interface TextSectionProps {\n title?: string;\n content: string;\n alignment?: 'left' | 'center' | 'right';\n maxWidth?: 'full' | 'large' | 'medium' | 'small';\n textSize?: 'small' | 'medium' | 'large';\n backgroundColor?: string;\n textColor?: string;\n paddingY?: 'none' | 'small' | 'medium' | 'large';\n colors: {\n primary: string;\n text: string;\n };\n typography?: {\n headingFont?: string;\n bodyFont?: string;\n };\n enableInlineEditing?: boolean;\n sectionId?: string;\n}\n\nexport function TextSection({\n title,\n content,\n alignment = 'left',\n maxWidth = 'medium',\n textSize = 'medium',\n backgroundColor,\n textColor,\n paddingY = 'medium',\n colors,\n typography,\n enableInlineEditing = false,\n sectionId = ''\n}: TextSectionProps) {\n // Max width classes\n const maxWidthMap = {\n full: 'max-w-full',\n large: 'max-w-6xl',\n medium: 'max-w-4xl',\n small: 'max-w-2xl'\n };\n\n // Text alignment\n const alignmentMap = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right'\n };\n\n // Text sizes\n const textSizeMap = {\n small: 'text-sm',\n medium: 'text-base',\n large: 'text-lg'\n };\n\n // Padding\n const paddingMap = {\n none: 'py-0',\n small: 'py-8',\n medium: 'py-16',\n large: 'py-24'\n };\n\n return (\n <div\n className={paddingMap[paddingY]}\n style={{\n backgroundColor: backgroundColor || 'transparent'\n }}\n >\n <div className=\"container mx-auto px-4\">\n <div className={`${maxWidthMap[maxWidth]} mx-auto ${alignmentMap[alignment]}`}>\n {/* Title */}\n {title && (\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-6\"\n style={{\n color: textColor || colors.text,\n fontFamily: typography?.headingFont || 'inherit'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.title'\n })}\n >\n {title}\n </h2>\n )}\n\n {/* Content */}\n <div\n className={`${textSizeMap[textSize]} leading-relaxed whitespace-pre-wrap`}\n style={{\n color: textColor || colors.text,\n fontFamily: typography?.bodyFont || 'inherit'\n }}\n {...(enableInlineEditing && {\n 'data-editable': true,\n 'data-section-id': sectionId,\n 'data-field-path': 'settings.content'\n })}\n >\n {content || 'Add your text content here...'}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default TextSection;\n","import type { AnimationVariants, TransitionDirection } from '../types';\n\n/**\n * Animation duration calculator based on speed and reduced motion preference\n */\nexport function getAnimationDuration(\n speed: 'fast' | 'normal' | 'slow',\n reducedMotion: boolean = false\n): number {\n if (reducedMotion) return 0.15;\n\n switch (speed) {\n case 'fast':\n return 0.2;\n case 'slow':\n return 0.5;\n default:\n return 0.3;\n }\n}\n\n/**\n * Slide animation variants for step transitions\n */\nexport function getSlideVariants(slideDistance: number = 50): AnimationVariants {\n return {\n enter: (direction: TransitionDirection) => ({\n x: direction === 'forward' ? slideDistance : -slideDistance,\n opacity: 0,\n }),\n center: {\n x: 0,\n opacity: 1,\n },\n exit: (direction: TransitionDirection) => ({\n x: direction === 'forward' ? -slideDistance : slideDistance,\n opacity: 0,\n }),\n };\n}\n\n/**\n * Fade animation variants for step transitions\n */\nexport function getFadeVariants(): AnimationVariants {\n return {\n enter: () => ({\n opacity: 0,\n scale: 0.95,\n }),\n center: {\n opacity: 1,\n scale: 1,\n },\n exit: () => ({\n opacity: 0,\n scale: 0.95,\n }),\n };\n}\n\n/**\n * Get transition variants based on style preference\n */\nexport function getTransitionVariants(\n style: 'slide' | 'fade',\n slideDistance?: number\n): AnimationVariants {\n return style === 'fade' ? getFadeVariants() : getSlideVariants(slideDistance);\n}\n\n/**\n * Common animation configurations\n */\nexport const animations = {\n /**\n * Smooth easing curve for natural motion\n */\n easing: [0.4, 0, 0.2, 1] as const,\n\n /**\n * Spring configuration for elastic animations\n */\n spring: {\n type: 'spring' as const,\n damping: 30,\n stiffness: 300,\n },\n\n /**\n * Stagger children animation\n */\n staggerChildren: {\n staggerChildren: 0.05,\n delayChildren: 0.1,\n },\n\n /**\n * Card hover animation\n */\n cardHover: {\n scale: 1.02,\n transition: { duration: 0.2 },\n },\n\n /**\n * Button hover animation\n */\n buttonHover: {\n scale: 1.05,\n transition: { duration: 0.2 },\n },\n\n /**\n * Fade in animation\n */\n fadeIn: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n },\n\n /**\n * Slide up animation (for bottom sheets)\n */\n slideUp: {\n initial: { y: '100%' },\n animate: { y: 0 },\n exit: { y: '100%' },\n },\n\n /**\n * Scale in animation\n */\n scaleIn: {\n initial: { opacity: 0, scale: 0.9 },\n animate: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.9 },\n },\n\n /**\n * Slide in from left\n */\n slideInLeft: {\n initial: { opacity: 0, x: -10 },\n animate: { opacity: 1, x: 0 },\n },\n\n /**\n * Slide in from right\n */\n slideInRight: {\n initial: { opacity: 0, x: 10 },\n animate: { opacity: 1, x: 0 },\n },\n\n /**\n * Backdrop animation\n */\n backdrop: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n },\n};\n\n/**\n * Accessibility: Check for reduced motion preference\n */\nexport function shouldReduceMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Create stagger animation for list items\n */\nexport function createStaggerAnimation(\n itemCount: number,\n baseDelay: number = 0.1,\n delayIncrement: number = 0.05\n) {\n return Array.from({ length: itemCount }, (_, index) => ({\n initial: { opacity: 0, y: 10 },\n animate: { opacity: 1, y: 0 },\n transition: {\n duration: 0.3,\n delay: baseDelay + index * delayIncrement,\n ease: animations.easing,\n },\n }));\n}\n\n/**\n * Utility to create entrance animation with delay\n */\nexport function createEntranceAnimation(\n delay: number = 0,\n duration: number = 0.3\n) {\n return {\n initial: { opacity: 0, y: 10 },\n animate: { opacity: 1, y: 0 },\n transition: {\n duration,\n delay,\n ease: animations.easing,\n },\n };\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronDown } from 'lucide-react';\nimport type { Service, ServiceCategory, ServiceSelectionSettings } from '../../../types';\nimport { createEntranceAnimation } from '../../../styles';\n\ninterface ServiceSelectionProps {\n services: Service[];\n categories?: ServiceCategory[];\n selectedService: string | null;\n onServiceSelect: (serviceId: string) => void;\n settings: ServiceSelectionSettings;\n colors: {\n primary: string;\n secondary: string;\n };\n}\n\nexport function ServiceSelection({\n services,\n categories = [],\n selectedService,\n onServiceSelect,\n settings,\n colors\n}: ServiceSelectionProps) {\n const [selectedCategory, setSelectedCategory] = useState<string | null>(null);\n const [expandedCategories, setExpandedCategories] = useState<Set<string>>(\n new Set(categories.length > 0 ? [categories[0].id] : [])\n );\n\n const layout = settings.serviceLayout || 'grid';\n const columns = settings.columns || 2;\n const headerText = settings.headerContent?.value || 'Choose Your Service';\n const subheaderText = settings.subheaderContent?.value || 'Select the service you\\'d like to book';\n const showPricing = settings.showPricing !== false;\n const showDuration = settings.showDuration !== false;\n const showDescription = settings.showDescription !== false;\n const enableCategories = settings.enableCategories === true;\n const categoryStyle = settings.categoryStyle || 'dropdown';\n\n const policyImages = settings.policyImages || [];\n const policyText = settings.policyText || null;\n const imageSpacing = settings.imageSpacing || 'small';\n\n const spacingMap = {\n none: '0px',\n small: '8px',\n medium: '16px',\n large: '24px'\n };\n\n const borderRadius = settings.imageBorderRadius || '0px';\n\n const gridCols = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4'\n }[columns] || 'grid-cols-2';\n\n const filteredServices = enableCategories && selectedCategory\n ? services.filter(s => s.category === selectedCategory)\n : services;\n\n const renderServiceCard = (service: Service, layout: 'grid' | 'list') => {\n const isSelected = selectedService === service.id;\n\n return (\n <button\n key={service.id}\n onClick={() => onServiceSelect(service.id)}\n className={`w-full ${layout === 'grid' ? 'h-full' : ''} p-4 rounded-lg border-2 transition-all text-left ${layout === 'grid' ? 'flex flex-col' : ''} ${\n isSelected\n ? 'border-current shadow-lg'\n : 'border-gray-200 hover:border-gray-300'\n }`}\n style={{\n borderColor: isSelected ? colors.primary : undefined,\n backgroundColor: isSelected ? `${colors.primary}10` : undefined\n }}\n >\n {layout === 'grid' ? (\n <>\n <p className=\"font-semibold mb-1\">{service.name}</p>\n {showDescription && <p className=\"text-xs opacity-70 mb-2 flex-1\">{service.description}</p>}\n <div className=\"flex justify-between items-center text-sm mt-auto\">\n {showPricing && <span className=\"font-bold\" style={{ color: colors.primary }}>${service.price}</span>}\n {showDuration && <span className=\"opacity-60\">{service.duration} min</span>}\n </div>\n </>\n ) : (\n <div className=\"flex justify-between items-start\">\n <div className=\"flex-1\">\n <p className=\"font-semibold mb-1\">{service.name}</p>\n {showDescription && <p className=\"text-sm opacity-70\">{service.description}</p>}\n </div>\n <div className=\"text-right ml-4\">\n {showPricing && <p className=\"font-bold\" style={{ color: colors.primary }}>${service.price}</p>}\n {showDuration && <p className=\"text-sm opacity-60\">{service.duration} min</p>}\n </div>\n </div>\n )}\n </button>\n );\n };\n\n return (\n <div className=\"space-y-4\">\n <motion.div\n {...createEntranceAnimation(0.05)}\n className=\"text-center sm:text-left\"\n >\n <h2 className=\"text-xl sm:text-2xl font-bold mb-2\" style={{ color: colors.primary }}>\n {headerText}\n </h2>\n <p className=\"text-sm opacity-70\">{subheaderText}</p>\n </motion.div>\n\n {/* Policy Images */}\n {policyImages && policyImages.length > 0 && (\n <div className=\"w-full flex flex-col\" style={{ gap: spacingMap[imageSpacing as keyof typeof spacingMap] }}>\n {policyImages.slice(0, 3).map((image, index) => (\n <div\n key={index}\n className=\"w-full overflow-hidden\"\n style={{\n aspectRatio: '720 / 300',\n borderRadius: borderRadius\n }}\n >\n <img\n src={image.url}\n alt={image.alt || `Policy image ${index + 1}`}\n className=\"w-full h-full object-cover\"\n />\n </div>\n ))}\n </div>\n )}\n\n {/* Policy Text (if no images) */}\n {(!policyImages || policyImages.length === 0) && policyText && (\n <div\n className=\"w-full p-4 rounded-lg border\"\n style={{\n backgroundColor: `${colors.primary}10`,\n borderColor: `${colors.primary}30`\n }}\n dangerouslySetInnerHTML={{ __html: policyText }}\n />\n )}\n\n {/* Category Filters */}\n {enableCategories && categories.length > 0 && (\n <>\n {categoryStyle === 'dropdown' && (\n <div>\n <label className=\"block text-sm font-medium mb-2\">Service Category</label>\n <select\n value={selectedCategory || 'all'}\n onChange={(e) => setSelectedCategory(e.target.value === 'all' ? null : e.target.value)}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:border-transparent transition-all\"\n style={{ '--tw-ring-color': colors.primary } as any}\n >\n <option value=\"all\">All Services</option>\n {categories.map(cat => (\n <option key={cat.id} value={cat.id}>{cat.name}</option>\n ))}\n </select>\n </div>\n )}\n\n {categoryStyle === 'tabs' && (\n <div className=\"flex gap-2 flex-wrap\">\n <button\n onClick={() => setSelectedCategory(null)}\n className={`px-4 py-2 rounded-lg transition-all text-sm font-medium ${\n selectedCategory === null ? 'text-white shadow-lg' : 'border border-gray-300 hover:border-gray-400'\n }`}\n style={{ backgroundColor: selectedCategory === null ? colors.primary : undefined }}\n >\n All Services\n </button>\n {categories.map(cat => (\n <button\n key={cat.id}\n onClick={() => setSelectedCategory(cat.id)}\n className={`px-4 py-2 rounded-lg transition-all text-sm font-medium ${\n selectedCategory === cat.id ? 'text-white shadow-lg' : 'border border-gray-300 hover:border-gray-400'\n }`}\n style={{ backgroundColor: selectedCategory === cat.id ? colors.primary : undefined }}\n >\n {cat.name}\n </button>\n ))}\n </div>\n )}\n\n {categoryStyle === 'pills' && (\n <div className=\"flex gap-2 overflow-x-auto pb-2 scrollbar-hide\">\n <button\n onClick={() => setSelectedCategory(null)}\n className={`px-5 py-2 rounded-full transition-all text-sm font-medium whitespace-nowrap ${\n selectedCategory === null ? 'text-white shadow-md' : 'bg-gray-100 hover:bg-gray-200'\n }`}\n style={{ backgroundColor: selectedCategory === null ? colors.primary : undefined }}\n >\n All\n </button>\n {categories.map(cat => (\n <button\n key={cat.id}\n onClick={() => setSelectedCategory(cat.id)}\n className={`px-5 py-2 rounded-full transition-all text-sm font-medium whitespace-nowrap ${\n selectedCategory === cat.id ? 'text-white shadow-md' : 'bg-gray-100 hover:bg-gray-200'\n }`}\n style={{ backgroundColor: selectedCategory === cat.id ? colors.primary : undefined }}\n >\n {cat.name}\n </button>\n ))}\n </div>\n )}\n\n {categoryStyle === 'chips' && (\n <div className=\"flex gap-2 flex-wrap\">\n <button\n onClick={() => setSelectedCategory(null)}\n className={`px-3 py-1.5 rounded-lg transition-all text-xs font-medium flex items-center gap-1.5 ${\n selectedCategory === null ? 'text-white' : 'border border-gray-300 bg-white hover:border-gray-400'\n }`}\n style={{\n backgroundColor: selectedCategory === null ? colors.primary : undefined,\n borderColor: selectedCategory === null ? colors.primary : undefined\n }}\n >\n {selectedCategory === null && <span className=\"text-[10px]\">✓</span>}\n All\n </button>\n {categories.map(cat => (\n <button\n key={cat.id}\n onClick={() => setSelectedCategory(cat.id)}\n className={`px-3 py-1.5 rounded-lg transition-all text-xs font-medium flex items-center gap-1.5 ${\n selectedCategory === cat.id ? 'text-white' : 'border border-gray-300 bg-white hover:border-gray-400'\n }`}\n style={{\n backgroundColor: selectedCategory === cat.id ? colors.primary : undefined,\n borderColor: selectedCategory === cat.id ? colors.primary : undefined\n }}\n >\n {selectedCategory === cat.id && <span className=\"text-[10px]\">✓</span>}\n {cat.name}\n </button>\n ))}\n </div>\n )}\n </>\n )}\n\n {/* Accordion View */}\n {enableCategories && categoryStyle === 'accordion' ? (\n <div className=\"space-y-4\">\n {categories.map(cat => {\n const isExpanded = expandedCategories.has(cat.id);\n const categoryServices = services.filter(s => s.category === cat.id);\n return (\n <div key={cat.id}>\n <button\n onClick={() => {\n const newExpanded = new Set(expandedCategories);\n if (isExpanded) {\n newExpanded.delete(cat.id);\n } else {\n newExpanded.add(cat.id);\n }\n setExpandedCategories(newExpanded);\n }}\n className=\"w-full flex items-center justify-between py-2 border-b-2 transition-all group\"\n style={{ borderColor: isExpanded ? colors.primary : '#e5e7eb' }}\n >\n <span className=\"font-semibold text-left transition-colors\" style={{\n color: isExpanded ? colors.primary : undefined\n }}>{cat.name}</span>\n <ChevronDown\n className={`w-4 h-4 transition-all ${isExpanded ? 'rotate-180' : ''}`}\n style={{ color: isExpanded ? colors.primary : '#9ca3af' }}\n />\n </button>\n {isExpanded && (\n <div className={`mt-4 ${layout === 'grid' ? `grid ${gridCols} gap-3` : 'space-y-3'}`}>\n {categoryServices.map(service => renderServiceCard(service, layout))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n ) : layout === 'grid' ? (\n <div className={`grid ${gridCols} gap-3`}>\n {filteredServices.map(service => renderServiceCard(service, 'grid'))}\n </div>\n ) : (\n <div className=\"space-y-3\">\n {filteredServices.map(service => renderServiceCard(service, 'list'))}\n </div>\n )}\n </div>\n );\n}\n\nexport default ServiceSelection;\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { motion } from 'framer-motion';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport type { DateSelectionSettings } from '../../../types';\nimport { createEntranceAnimation } from '../../../styles';\n\ninterface DateSelectionProps {\n availableDates: string[];\n selectedDate: string | null;\n onDateSelect: (date: string) => void;\n settings: DateSelectionSettings;\n colors: {\n primary: string;\n secondary: string;\n };\n cyclePhases?: Record<string, string>; // Map of date -> phase ('avoid', 'caution', 'optimal', 'neutral')\n selectedService?: any; // Selected service object with name, price, description, duration\n addons?: any[]; // Available addons\n selectedAddons?: string[]; // Selected addon IDs\n onAddonsChange?: (addonIds: string[]) => void; // Callback when addons change\n addonPlacement?: string; // NEW: 'date_selection' | 'separate_step' - controls addon visibility\n}\n\n// Generate mock dates for preview mode\nfunction generateMockDates(): string[] {\n const dates: string[] = [];\n const today = new Date();\n\n // Set to start of today to avoid timezone issues\n today.setHours(0, 0, 0, 0);\n\n // Generate dates for current + next 2 months, skip some to show unavailable dates\n for (let monthOffset = 0; monthOffset < 3; monthOffset++) {\n const month = new Date(today.getFullYear(), today.getMonth() + monthOffset, 1);\n const daysInMonth = new Date(month.getFullYear(), month.getMonth() + 1, 0).getDate();\n\n for (let day = 1; day <= daysInMonth; day++) {\n const dateObj = new Date(month.getFullYear(), month.getMonth(), day);\n\n // Skip past dates\n if (dateObj < today) continue;\n\n // Skip some dates randomly to show unavailable styling (skip ~40% of dates)\n if (Math.random() > 0.6) continue;\n\n const dateStr = `${month.getFullYear()}-${String(month.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n dates.push(dateStr);\n }\n }\n\n return dates;\n}\n\n// Cycle phase color mapping\nconst CYCLE_PHASE_COLORS: Record<string, { bg: string; text: string; label: string }> = {\n avoid: { bg: '#FEE2E2', text: '#991B1B', label: 'Avoid' },\n caution: { bg: '#FEF3C7', text: '#92400E', label: 'Caution' },\n optimal: { bg: '#D1FAE5', text: '#065F46', label: 'Optimal' },\n neutral: { bg: '#F3F4F6', text: '#4B5563', label: 'Neutral' }\n};\n\nexport function DateSelection({\n availableDates,\n selectedDate,\n onDateSelect,\n settings,\n colors,\n cyclePhases,\n selectedService,\n addons = [],\n selectedAddons = [],\n onAddonsChange,\n addonPlacement = 'date_selection' // Default to showing on date selection\n}: DateSelectionProps) {\n // DEBUG: Log addon data to troubleshoot visibility\n console.log('[DateSelection] Addon Debug:', {\n addonsLength: addons.length,\n hasOnAddonsChange: !!onAddonsChange,\n addonPlacement: addonPlacement,\n showAddons: addonPlacement !== 'separate_step' && addons.length > 0 && !!onAddonsChange,\n addons: addons,\n selectedService: selectedService\n });\n\n const calendarView = settings.calendarView || 'month';\n const headerText = settings.headerContent?.value || 'Select a Date';\n\n // Detect preview mode vs live mode\n const isPreviewMode = !availableDates || availableDates.length === 0;\n\n // Use mock dates in preview mode, real dates in live mode\n const effectiveDates = useMemo(() => {\n return isPreviewMode ? generateMockDates() : availableDates;\n }, [isPreviewMode, availableDates]);\n\n // Determine initial month from first available date (today or later)\n const initialMonth = useMemo(() => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n if (effectiveDates.length > 0) {\n // Find first date that is today or later\n const futureDate = effectiveDates.find(dateStr => {\n const date = new Date(dateStr);\n return date >= today;\n });\n\n if (futureDate) {\n const firstDate = new Date(futureDate);\n return `${firstDate.getFullYear()}-${String(firstDate.getMonth() + 1).padStart(2, '0')}`;\n }\n }\n\n // Fallback to current month\n return `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}`;\n }, [effectiveDates]);\n\n const [currentMonth, setCurrentMonth] = useState(initialMonth);\n\n // Create a Set for O(1) lookup of available dates\n const availableDatesSet = useMemo(() => new Set(effectiveDates), [effectiveDates]);\n\n // Parse current month\n const [year, month] = currentMonth.split('-').map(Number);\n\n // Get month name\n const monthNames = ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'];\n const monthName = monthNames[month - 1];\n\n // Calculate calendar grid\n const calendarDays = useMemo(() => {\n const firstDay = new Date(year, month - 1, 1);\n const lastDay = new Date(year, month, 0);\n const startingDayOfWeek = firstDay.getDay();\n const daysInMonth = lastDay.getDate();\n\n const days = [];\n\n // Add empty cells for days before the first of the month\n for (let i = 0; i < startingDayOfWeek; i++) {\n days.push(null);\n }\n\n // Add actual days\n for (let day = 1; day <= daysInMonth; day++) {\n const dateStr = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n const dateObj = new Date(dateStr);\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n days.push({\n day,\n dateStr,\n isAvailable: availableDatesSet.has(dateStr) && dateObj >= today\n });\n }\n\n return days;\n }, [year, month, availableDatesSet]);\n\n // Check if we can navigate to previous/next month\n const canGoPrevious = useMemo(() => {\n const prevMonth = new Date(year, month - 2, 1);\n const prevMonthStr = `${prevMonth.getFullYear()}-${String(prevMonth.getMonth() + 1).padStart(2, '0')}`;\n return effectiveDates.some(date => date.startsWith(prevMonthStr));\n }, [effectiveDates, year, month]);\n\n const canGoNext = useMemo(() => {\n const nextMonth = new Date(year, month, 1);\n const nextMonthStr = `${nextMonth.getFullYear()}-${String(nextMonth.getMonth() + 1).padStart(2, '0')}`;\n return effectiveDates.some(date => date.startsWith(nextMonthStr));\n }, [effectiveDates, year, month]);\n\n const handlePreviousMonth = () => {\n if (!canGoPrevious) return;\n const prevMonth = new Date(year, month - 2, 1);\n setCurrentMonth(`${prevMonth.getFullYear()}-${String(prevMonth.getMonth() + 1).padStart(2, '0')}`);\n };\n\n const handleNextMonth = () => {\n if (!canGoNext) return;\n const nextMonth = new Date(year, month, 1);\n setCurrentMonth(`${nextMonth.getFullYear()}-${String(nextMonth.getMonth() + 1).padStart(2, '0')}`);\n };\n\n const hasCycleData = cyclePhases && Object.keys(cyclePhases).length > 0;\n\n // Calculate total price including addons\n const calculateTotal = () => {\n let total = selectedService?.price || 0;\n\n if (selectedAddons.length > 0 && addons.length > 0) {\n selectedAddons.forEach(addonId => {\n const addon = addons.find(a => a.id === addonId);\n if (addon) {\n total += addon.addonPrice || addon.price || 0;\n }\n });\n }\n\n return total;\n };\n\n // Handle addon toggle\n const handleAddonToggle = (addonId: string) => {\n if (!onAddonsChange) return;\n\n const isSelected = selectedAddons.includes(addonId);\n if (isSelected) {\n onAddonsChange(selectedAddons.filter(id => id !== addonId));\n } else {\n onAddonsChange([...selectedAddons, addonId]);\n }\n };\n\n return (\n <div className=\"space-y-6\">\n {/* Service Summary Card */}\n {selectedService && (\n <motion.div\n {...createEntranceAnimation(0.05)}\n className=\"bg-gradient-to-br from-white to-gray-50/30 rounded-xl border border-gray-200/80 p-6 shadow-sm hover:shadow-md transition-shadow\"\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2 mb-3\">\n <h3 className=\"text-sm font-semibold tracking-wide uppercase\" style={{ color: colors.primary }}>\n Your Selection\n </h3>\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-bold text-lg text-gray-900\">\n {selectedService.name}\n </p>\n {selectedService.description && (\n <p className=\"text-sm text-gray-600 leading-relaxed\">{selectedService.description}</p>\n )}\n {selectedService.duration && (\n <div className=\"flex items-center gap-1.5 text-xs text-gray-500\">\n <svg className=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <span>{selectedService.duration} minutes</span>\n </div>\n )}\n </div>\n </div>\n <div className=\"text-right\">\n <div className=\"text-xs text-gray-500 mb-1 font-medium\">Price</div>\n <div className=\"text-2xl font-bold\" style={{ color: colors.primary }}>\n ${selectedService.price}\n </div>\n </div>\n </div>\n </motion.div>\n )}\n\n {/* Addon Selection - Only show if placement is on date_selection (not separate_step) */}\n {addonPlacement !== 'separate_step' && addons.length > 0 && onAddonsChange && (\n <motion.div\n {...createEntranceAnimation(0.1)}\n className=\"bg-white rounded-xl border border-gray-200/80 p-6 shadow-sm hover:shadow-md transition-shadow\"\n >\n <div className=\"flex items-center gap-2 mb-4\">\n <h3 className=\"text-sm font-semibold tracking-wide uppercase\" style={{ color: colors.primary }}>\n Enhance Your Experience\n </h3>\n </div>\n\n <div className=\"space-y-3\">\n {addons.map((addon) => {\n const isSelected = selectedAddons.includes(addon.id);\n const addonPrice = addon.addonPrice || addon.price || 0;\n\n return (\n <label\n key={addon.id}\n className=\"flex items-start gap-4 p-4 rounded-xl border-2 cursor-pointer transition-all group\"\n style={{\n borderColor: isSelected ? colors.primary : '#E5E7EB',\n backgroundColor: isSelected ? `${colors.primary}08` : 'transparent',\n boxShadow: isSelected ? `0 0 0 3px ${colors.primary}15` : 'none'\n }}\n >\n <div className=\"flex items-center pt-0.5\">\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => handleAddonToggle(addon.id)}\n className=\"w-5 h-5 rounded border-2 border-gray-300 cursor-pointer\"\n style={{ accentColor: colors.primary }}\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-3 mb-1\">\n <span className=\"font-semibold text-base text-gray-900 group-hover:text-gray-700 transition-colors\">\n {addon.name}\n </span>\n <span\n className=\"text-base font-bold whitespace-nowrap flex-shrink-0\"\n style={{ color: colors.primary }}\n >\n +${addonPrice}\n </span>\n </div>\n {addon.description && (\n <p className=\"text-sm text-gray-600 leading-relaxed\">{addon.description}</p>\n )}\n </div>\n </label>\n );\n })}\n </div>\n\n {/* Updated Total */}\n {selectedAddons.length > 0 && (\n <div className=\"mt-6 pt-5 border-t-2 border-gray-100\">\n <div className=\"flex items-center justify-between px-2\">\n <div>\n <div className=\"text-xs text-gray-500 mb-1 font-medium uppercase tracking-wide\">New Total</div>\n <div className=\"text-sm text-gray-600\">\n Service + {selectedAddons.length} add-on{selectedAddons.length > 1 ? 's' : ''}\n </div>\n </div>\n <div\n className=\"text-3xl font-bold\"\n style={{ color: colors.primary }}\n >\n ${calculateTotal()}\n </div>\n </div>\n </div>\n )}\n </motion.div>\n )}\n\n <motion.h2\n {...createEntranceAnimation(0.15)}\n className=\"text-xl sm:text-2xl font-bold text-center sm:text-left\"\n style={{ color: colors.primary }}\n >\n {headerText}\n </motion.h2>\n\n {/* Cycle Legend */}\n {hasCycleData && (\n <motion.div\n {...createEntranceAnimation(0.1)}\n className=\"bg-white rounded-lg border border-gray-200 px-4 py-3\"\n >\n <div className=\"flex items-center justify-between flex-wrap gap-2 text-xs\">\n <span className=\"font-medium flex items-center\" style={{ color: colors.primary }}>\n Cycle Calendar:\n </span>\n <div className=\"flex items-center gap-3\">\n {Object.entries(CYCLE_PHASE_COLORS).map(([phase, phaseInfo]) => (\n <div key={phase} className=\"flex items-center space-x-1.5\">\n <div\n className=\"w-3 h-3 rounded border border-gray-300\"\n style={{ backgroundColor: phaseInfo.bg }}\n />\n <span>{phaseInfo.label}</span>\n </div>\n ))}\n </div>\n </div>\n </motion.div>\n )}\n\n {calendarView === 'month' ? (\n <div className=\"border border-gray-200 rounded-lg p-4\">\n <div className=\"flex items-center justify-between mb-4\">\n <button\n className={`p-2 rounded transition-colors ${\n canGoPrevious ? 'hover:bg-gray-100' : 'opacity-30 cursor-not-allowed'\n }`}\n onClick={handlePreviousMonth}\n disabled={!canGoPrevious}\n >\n <ChevronLeft className=\"w-4 h-4\" />\n </button>\n <p className=\"font-semibold\">{monthName} {year}</p>\n <button\n className={`p-2 rounded transition-colors ${\n canGoNext ? 'hover:bg-gray-100' : 'opacity-30 cursor-not-allowed'\n }`}\n onClick={handleNextMonth}\n disabled={!canGoNext}\n >\n <ChevronRight className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"grid grid-cols-7 gap-2\">\n {['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map(day => (\n <div key={day} className=\"text-center text-xs font-medium py-2 opacity-60\">\n {day}\n </div>\n ))}\n {calendarDays.map((dayInfo, index) => {\n if (!dayInfo) {\n return <div key={`empty-${index}`} />;\n }\n\n const { day, dateStr, isAvailable } = dayInfo;\n const isSelected = selectedDate === dateStr;\n const cyclePhase = cyclePhases?.[dateStr];\n const phaseColors = cyclePhase ? CYCLE_PHASE_COLORS[cyclePhase] : null;\n\n return (\n <button\n key={dateStr}\n onClick={() => isAvailable && onDateSelect(dateStr)}\n disabled={!isAvailable}\n className={`aspect-square rounded-lg text-sm transition-all ${\n isSelected\n ? 'text-white shadow-lg font-semibold'\n : isAvailable\n ? 'hover:scale-105 cursor-pointer'\n : 'bg-gray-50 text-gray-300 cursor-not-allowed opacity-40'\n }`}\n style={{\n backgroundColor: isSelected\n ? colors.primary\n : phaseColors?.bg || undefined,\n color: isSelected\n ? 'white'\n : phaseColors?.text || undefined\n }}\n >\n {day}\n </button>\n );\n })}\n </div>\n </div>\n ) : (\n <div className=\"grid grid-cols-5 gap-3\">\n {effectiveDates.slice(0, 5).map(date => {\n const dateObj = new Date(date);\n const day = dateObj.getDate();\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n const dayName = dayNames[dateObj.getDay()];\n const isSelected = selectedDate === date;\n\n return (\n <button\n key={date}\n onClick={() => onDateSelect(date)}\n className={`p-4 rounded-lg border-2 transition-all text-center ${\n isSelected\n ? 'border-current text-white'\n : 'border-gray-200 hover:border-gray-300'\n }`}\n style={{\n borderColor: isSelected ? colors.primary : undefined,\n backgroundColor: isSelected ? colors.primary : undefined\n }}\n >\n <p className=\"text-xs mb-1 opacity-75\">{dayName}</p>\n <p className=\"text-2xl font-semibold\">{day}</p>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\nexport default DateSelection;\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport type { TimeSelectionSettings } from '../../../types';\nimport { createEntranceAnimation, createStaggerAnimation } from '../../../styles';\n\ninterface TimeSelectionProps {\n availableTimes: string[];\n selectedTime: string | null;\n onTimeSelect: (time: string) => void;\n settings: TimeSelectionSettings;\n serviceDuration?: number;\n colors: {\n primary: string;\n secondary: string;\n };\n selectedService?: any; // Selected service object with name, price, description, duration\n selectedDate?: string | null; // Selected date in YYYY-MM-DD format\n selectedAddons?: string[]; // Array of selected addon IDs\n addons?: any[]; // Array of available addon objects\n}\n\nexport function TimeSelection({\n availableTimes,\n selectedTime,\n onTimeSelect,\n settings,\n serviceDuration,\n colors,\n selectedService,\n selectedDate,\n selectedAddons = [],\n addons = []\n}: TimeSelectionProps) {\n const timeFormat = settings.timeFormat || '12h';\n const showDuration = settings.showDuration !== false;\n const headerText = settings.headerContent?.value || 'Pick a Time';\n const columns = settings.columns || 3;\n\n // Calculate total price including addons\n const totalPrice = () => {\n let total = selectedService?.price || 0;\n if (selectedAddons.length > 0 && addons.length > 0) {\n selectedAddons.forEach(addonId => {\n const addon = addons.find(a => a.id === addonId);\n if (addon) {\n total += addon.addonPrice || addon.price || 0;\n }\n });\n }\n return total;\n };\n\n // Format date for display\n const formatDate = (dateStr: string) => {\n const date = new Date(dateStr + 'T00:00:00');\n return date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n });\n };\n\n const formatTime = (time: string) => {\n // Parse time string (handles both \"HH:MM\" and \"HH:MM AM/PM\" formats)\n const timeParts = time.trim().split(' ');\n const [hourStr, minuteStr] = timeParts[0].split(':');\n let hour = parseInt(hourStr);\n const minute = minuteStr || '00';\n\n // If time already has AM/PM, check if we need to convert to 24h\n if (timeParts.length > 1) {\n const period = timeParts[1];\n if (timeFormat === '24h') {\n if (period === 'PM' && hour !== 12) {\n hour += 12;\n } else if (period === 'AM' && hour === 12) {\n hour = 0;\n }\n return `${String(hour).padStart(2, '0')}:${minute}`;\n }\n return time; // Already in 12h format\n }\n\n // Time is in 24h format, convert to 12h if needed\n if (timeFormat === '12h') {\n const period = hour >= 12 ? 'PM' : 'AM';\n const displayHour = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n return `${displayHour}:${minute} ${period}`;\n }\n\n // Keep in 24h format\n return `${String(hour).padStart(2, '0')}:${minute}`;\n };\n\n const gridCols = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-2 sm:grid-cols-3',\n 4: 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-4'\n }[columns] || 'grid-cols-3';\n\n return (\n <div className=\"space-y-6\">\n {/* Booking Summary Card */}\n {selectedService && selectedDate && (\n <motion.div\n {...createEntranceAnimation(0.05)}\n className=\"bg-gradient-to-br from-white to-gray-50/30 rounded-xl border border-gray-200/80 p-6 shadow-sm hover:shadow-md transition-shadow\"\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 mb-4\">\n <h3 className=\"text-sm font-semibold tracking-wide uppercase\" style={{ color: colors.primary }}>\n Your Booking\n </h3>\n </div>\n\n {/* Service */}\n <div className=\"mb-3\">\n <p className=\"font-bold text-lg text-gray-900\">\n {selectedService.name}\n </p>\n {selectedService.duration && (\n <div className=\"flex items-center gap-1.5 text-xs text-gray-500 mt-1\">\n <svg className=\"w-3.5 h-3.5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <span>{selectedService.duration} minutes</span>\n </div>\n )}\n </div>\n\n {/* Add-ons */}\n {selectedAddons.length > 0 && addons.length > 0 && (\n <div className=\"mb-4\">\n <p className=\"text-sm font-bold text-gray-900 mb-2\">Add-ons</p>\n <div className=\"space-y-2\">\n {selectedAddons.map(addonId => {\n const addon = addons.find(a => a.id === addonId);\n if (!addon) return null;\n return (\n <div key={addonId} className=\"flex items-center justify-between\">\n <span className=\"text-sm text-gray-700 font-medium\">{addon.name}</span>\n <span className=\"text-sm font-semibold text-gray-900\">${addon.addonPrice || addon.price || 0}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Full-width divider */}\n <div className=\"border-t border-gray-200 -mx-6 mb-4\"></div>\n\n {/* Date section with emphasis */}\n <div className=\"bg-gray-50/50 -mx-6 px-6 py-4 mb-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-5 h-5\" style={{ color: colors.primary }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n <span className=\"font-bold text-base text-gray-900\">{formatDate(selectedDate)}</span>\n </div>\n </div>\n </div>\n\n {/* Full-width divider */}\n <div className=\"border-t border-gray-200 -mx-6 mb-4\"></div>\n\n {/* Total */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-base font-bold text-gray-900\">Total</span>\n <span className=\"text-2xl font-bold\" style={{ color: colors.primary }}>\n ${totalPrice()}\n </span>\n </div>\n </motion.div>\n )}\n\n <motion.h2\n {...createEntranceAnimation(selectedService && selectedDate ? 0.15 : 0.05)}\n className=\"text-xl sm:text-2xl font-bold text-center sm:text-left\"\n style={{ color: colors.primary }}\n >\n {headerText}\n </motion.h2>\n\n <motion.div\n className={`grid ${gridCols} gap-3`}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.3, delay: selectedService && selectedDate ? 0.2 : 0.1 }}\n >\n {availableTimes.map((time, index) => {\n const isSelected = selectedTime === time;\n\n return (\n <motion.button\n key={time}\n onClick={() => onTimeSelect(time)}\n className={`p-3 rounded-lg border-2 transition-all text-center hover:scale-105 ${\n isSelected\n ? 'border-current text-white shadow-lg'\n : 'border-gray-200 hover:border-gray-300'\n }`}\n style={{\n borderColor: isSelected ? colors.primary : undefined,\n backgroundColor: isSelected ? colors.primary : undefined\n }}\n initial={{ opacity: 0, scale: 0.9 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{\n duration: 0.2,\n delay: 0.15 + (index * 0.03),\n ease: 'easeOut'\n }}\n >\n <p className=\"font-medium\">{formatTime(time)}</p>\n {showDuration && serviceDuration && (\n <p className=\"text-xs mt-1 opacity-75\">{serviceDuration} min</p>\n )}\n </motion.button>\n );\n })}\n </motion.div>\n </div>\n );\n}\n\nexport default TimeSelection;\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport type { Addon, AddonSelectionSettings } from '../../../types';\nimport { createEntranceAnimation } from '../../../styles';\n\ninterface AddonsSelectionProps {\n addons: Addon[];\n selectedAddons: string[];\n onAddonsChange: (addonIds: string[]) => void;\n settings: AddonSelectionSettings;\n colors: {\n primary: string;\n secondary: string;\n };\n}\n\nexport function AddonsSelection({\n addons,\n selectedAddons,\n onAddonsChange,\n settings,\n colors\n}: AddonsSelectionProps) {\n const headerText = settings.headerContent?.value || 'Add Extras';\n const subheaderText = settings.subheaderContent?.value || 'Enhance your experience with these optional add-ons';\n const showPricing = settings.showPricing !== false;\n const showDuration = settings.showDuration !== false;\n\n const toggleAddon = (addonId: string) => {\n const newSelection = selectedAddons.includes(addonId)\n ? selectedAddons.filter(id => id !== addonId)\n : [...selectedAddons, addonId];\n onAddonsChange(newSelection);\n };\n\n return (\n <div className=\"space-y-4\">\n <motion.div\n {...createEntranceAnimation(0.05)}\n className=\"text-center sm:text-left\"\n >\n <h2 className=\"text-xl sm:text-2xl font-bold mb-2\" style={{ color: colors.primary }}>\n {headerText}\n </h2>\n <p className=\"text-sm opacity-70\">{subheaderText}</p>\n </motion.div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n {addons.map((addon, index) => {\n const isSelected = selectedAddons.includes(addon.id);\n return (\n <motion.button\n key={addon.id}\n onClick={() => toggleAddon(addon.id)}\n className={`p-4 rounded-lg border-2 transition-all text-left relative ${\n isSelected\n ? 'border-current shadow-lg'\n : 'border-gray-200 hover:border-gray-300'\n }`}\n style={{\n borderColor: isSelected ? colors.primary : undefined,\n backgroundColor: isSelected ? `${colors.primary}10` : undefined\n }}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n duration: 0.3,\n delay: 0.1 + (index * 0.05)\n }}\n >\n {/* Checkmark indicator */}\n {isSelected && (\n <div\n className=\"absolute top-3 right-3 w-6 h-6 rounded-full flex items-center justify-center text-white text-sm\"\n style={{ backgroundColor: colors.primary }}\n >\n ✓\n </div>\n )}\n\n <p className=\"font-semibold mb-1 pr-8\">{addon.name}</p>\n <p className=\"text-xs opacity-70 mb-3\">{addon.description}</p>\n <div className=\"flex justify-between items-center text-sm\">\n {showPricing && <span className=\"font-bold\" style={{ color: colors.primary }}>+${addon.price}</span>}\n {showDuration && <span className=\"opacity-60\">+{addon.duration} min</span>}\n </div>\n </motion.button>\n );\n })}\n </div>\n\n {selectedAddons.length > 0 && (\n <motion.div\n className=\"bg-gray-50 rounded-lg p-4 mt-4\"\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n >\n <p className=\"text-sm font-medium mb-2\">Selected Add-ons:</p>\n <div className=\"space-y-1\">\n {selectedAddons.map(addonId => {\n const addon = addons.find(a => a.id === addonId);\n if (!addon) return null;\n return (\n <div key={addonId} className=\"flex justify-between text-sm\">\n <span>{addon.name}</span>\n <span className=\"font-medium\" style={{ color: colors.primary }}>+${addon.price}</span>\n </div>\n );\n })}\n </div>\n </motion.div>\n )}\n </div>\n );\n}\n\nexport default AddonsSelection;\n","'use client';\n\nimport { useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport type { BottomSheetProps } from '../../types';\nimport { animations } from '../../styles';\n\n/**\n * BottomSheet - Reusable slide-up modal component\n *\n * Perfect for custom forms, terms of service, or any content that needs\n * to slide up from the bottom of the screen.\n *\n * @example\n * ```tsx\n * <BottomSheet\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Color Consultation Form\"\n * isRequired={false}\n * >\n * <YourFormContent />\n * </BottomSheet>\n * ```\n */\nexport function BottomSheet({\n isOpen,\n onClose,\n title,\n children,\n isRequired = false,\n maxHeight = '80vh'\n}: BottomSheetProps) {\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'unset';\n }\n return () => {\n document.body.style.overflow = 'unset';\n };\n }, [isOpen]);\n\n // Close on escape key (unless required)\n useEffect(() => {\n if (!isRequired && isOpen) {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose();\n }\n };\n window.addEventListener('keydown', handleEscape);\n return () => window.removeEventListener('keydown', handleEscape);\n }\n }, [isOpen, isRequired, onClose]);\n\n return (\n <AnimatePresence>\n {isOpen && (\n <>\n {/* Backdrop */}\n <motion.div\n {...animations.backdrop}\n onClick={!isRequired ? onClose : undefined}\n className=\"fixed inset-0 bg-black/50 z-50\"\n style={{ backdropFilter: 'blur(4px)' }}\n />\n\n {/* Bottom Sheet */}\n <motion.div\n initial={{ y: '100%' }}\n animate={{ y: 0 }}\n exit={{ y: '100%' }}\n transition={animations.spring}\n className=\"fixed bottom-0 left-0 right-0 bg-white rounded-t-2xl shadow-2xl z-50\"\n style={{ maxHeight }}\n >\n {/* Handle bar */}\n <div className=\"flex justify-center pt-3 pb-2\">\n <div className=\"w-12 h-1 bg-gray-300 rounded-full\" />\n </div>\n\n {/* Header */}\n <div className=\"flex items-center justify-between px-6 pb-4 border-b border-gray-200\">\n <div className=\"flex items-center gap-2\">\n {title && <h3 className=\"text-lg font-semibold\">{title}</h3>}\n {isRequired && (\n <span className=\"text-xs font-medium px-2 py-0.5 bg-amber-100 text-amber-800 rounded\">\n Required\n </span>\n )}\n </div>\n {!isRequired && (\n <button\n onClick={onClose}\n className=\"p-2 hover:bg-gray-100 rounded-lg transition-colors\"\n aria-label=\"Close\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n )}\n </div>\n\n {/* Content */}\n <div className=\"overflow-y-auto\" style={{ maxHeight: `calc(${maxHeight} - 120px)` }}>\n <div className=\"px-6 py-6\">\n {children}\n </div>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n );\n}\n\nexport default BottomSheet;\n","'use client';\n\nimport { useState } from 'react';\nimport { motion } from 'framer-motion';\nimport type { ContactInfo, ContactFormSettings, OptInModule } from '../../../types';\nimport { createEntranceAnimation } from '../../../styles';\nimport { BottomSheet } from '../../BottomSheet';\n\ninterface ContactFormProps {\n contactInfo: Partial<ContactInfo>;\n onContactInfoChange: (info: Partial<ContactInfo>) => void;\n settings: ContactFormSettings;\n optInModules?: OptInModule[];\n onOptInData?: (moduleId: string, data: any) => void;\n colors: {\n primary: string;\n secondary: string;\n };\n isPreview?: boolean; // Disable validation in preview mode\n}\n\nexport function ContactForm({\n contactInfo,\n onContactInfoChange,\n settings,\n optInModules = [],\n onOptInData,\n colors,\n isPreview = false\n}: ContactFormProps) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [currentOptInModule, setCurrentOptInModule] = useState<OptInModule | null>(null);\n const [optInChecked, setOptInChecked] = useState<Record<string, boolean>>({});\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const headerText = settings.headerContent?.value || 'Your Information';\n\n // Validation functions\n const validateEmail = (email: string): string | null => {\n if (!email) return 'Email is required';\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(email)) return 'Please enter a valid email address';\n return null;\n };\n\n const validatePhone = (phone: string): string | null => {\n if (!phone) return 'Phone number is required';\n // Remove all non-digit characters\n const digits = phone.replace(/\\D/g, '');\n if (digits.length < 10) return 'Please enter a valid phone number';\n return null;\n };\n\n const validateName = (name: string): string | null => {\n if (!name || name.trim().length === 0) return 'Name is required';\n if (name.trim().length < 2) return 'Name must be at least 2 characters';\n return null;\n };\n\n const validateField = (field: keyof ContactInfo, value: string): string | null => {\n switch (field) {\n case 'email':\n return validateEmail(value);\n case 'phone':\n return validatePhone(value);\n case 'name':\n return validateName(value);\n default:\n return null;\n }\n };\n\n const formFields = [\n { label: 'Name *', type: 'text' as const, placeholder: 'Your full name', field: 'name' },\n { label: 'Email *', type: 'email' as const, placeholder: 'your@email.com', field: 'email' },\n { label: 'Phone *', type: 'tel' as const, placeholder: '(555) 123-4567', field: 'phone' },\n { label: 'Notes (optional)', type: 'textarea' as const, placeholder: 'Any special requests or notes...', field: 'notes' }\n ];\n\n const handleFieldChange = (field: keyof ContactInfo, value: string) => {\n // Update the value\n onContactInfoChange({ ...contactInfo, [field]: value });\n\n // Skip validation in preview mode\n if (isPreview) return;\n\n // Validate and update errors if field has been touched\n if (touched[field]) {\n const error = validateField(field, value);\n setErrors(prev => ({\n ...prev,\n [field]: error || ''\n }));\n }\n };\n\n const handleBlur = (field: keyof ContactInfo) => {\n // Skip validation in preview mode\n if (isPreview) return;\n\n // Mark field as touched\n setTouched(prev => ({ ...prev, [field]: true }));\n\n // Validate on blur\n const value = contactInfo[field] || '';\n const error = validateField(field, value);\n setErrors(prev => ({\n ...prev,\n [field]: error || ''\n }));\n };\n\n const handleOptInChange = (module: OptInModule, checked: boolean) => {\n setOptInChecked(prev => ({ ...prev, [module.id]: checked }));\n if (checked) {\n setCurrentOptInModule(module);\n setIsModalOpen(true);\n }\n };\n\n return (\n <>\n <div className=\"space-y-4\">\n <motion.h2\n {...createEntranceAnimation(0.05)}\n className=\"text-xl sm:text-2xl font-bold text-center sm:text-left\"\n style={{ color: colors.primary }}\n >\n {headerText}\n </motion.h2>\n\n <div className=\"space-y-3\">\n {formFields.map((field, index) => (\n <motion.div\n key={field.label}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{\n duration: 0.3,\n delay: 0.1 + (index * 0.05),\n ease: 'easeOut'\n }}\n >\n <label className=\"block text-sm font-medium mb-1\">{field.label}</label>\n {field.type === 'textarea' ? (\n <>\n <textarea\n className={`w-full px-3 py-2 border rounded-lg focus:ring-2 focus:border-transparent resize-none transition-all ${\n !isPreview && errors[field.field] && touched[field.field] ? 'border-red-500' : 'border-gray-300'\n }`}\n style={{ '--tw-ring-color': colors.primary } as any}\n rows={3}\n placeholder={field.placeholder}\n value={contactInfo[field.field as keyof ContactInfo] || ''}\n onChange={(e) => handleFieldChange(field.field as keyof ContactInfo, e.target.value)}\n onBlur={() => handleBlur(field.field as keyof ContactInfo)}\n />\n {!isPreview && errors[field.field] && touched[field.field] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[field.field]}</p>\n )}\n </>\n ) : (\n <>\n <input\n type={field.type}\n className={`w-full px-3 py-2 border rounded-lg focus:ring-2 focus:border-transparent transition-all ${\n !isPreview && errors[field.field] && touched[field.field] ? 'border-red-500' : 'border-gray-300'\n }`}\n style={{ '--tw-ring-color': colors.primary } as any}\n placeholder={field.placeholder}\n value={contactInfo[field.field as keyof ContactInfo] || ''}\n onChange={(e) => handleFieldChange(field.field as keyof ContactInfo, e.target.value)}\n onBlur={() => handleBlur(field.field as keyof ContactInfo)}\n />\n {!isPreview && errors[field.field] && touched[field.field] && (\n <p className=\"text-red-500 text-xs mt-1\">{errors[field.field]}</p>\n )}\n </>\n )}\n </motion.div>\n ))}\n\n {/* Opt-in Modules */}\n {optInModules.length > 0 && (\n <motion.div\n className=\"pt-3 border-t border-gray-200 space-y-3\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3, delay: 0.3 }}\n >\n {optInModules.map(module => (\n <label key={module.id} className=\"flex items-start gap-3 cursor-pointer group\">\n <input\n type=\"checkbox\"\n checked={optInChecked[module.id] || false}\n onChange={(e) => handleOptInChange(module, e.target.checked)}\n className=\"mt-1 w-4 h-4 rounded border-gray-300\"\n style={{ accentColor: colors.primary }}\n />\n <div>\n <span className=\"text-sm font-medium\">\n {module.label}\n {module.required && <span className=\"text-red-500 ml-1\">*</span>}\n </span>\n <p className=\"text-xs text-gray-500 mt-0.5\">\n Check this to provide additional information\n </p>\n </div>\n </label>\n ))}\n </motion.div>\n )}\n </div>\n </div>\n\n {/* Bottom Sheet Modal for Opt-in Forms */}\n {currentOptInModule && (\n <BottomSheet\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n title={currentOptInModule.formTitle || 'Additional Information'}\n isRequired={currentOptInModule.required}\n >\n {/* Check if module has custom render function */}\n {currentOptInModule.renderCustomForm ? (\n currentOptInModule.renderCustomForm(\n () => setIsModalOpen(false),\n (data: any) => {\n if (onOptInData) {\n onOptInData(currentOptInModule.id, data);\n }\n },\n colors\n )\n ) : (\n /* Standard form rendering */\n <div className=\"space-y-4\">\n {currentOptInModule.formFields?.map(field => (\n <div key={field.id}>\n <label className=\"block text-sm font-medium mb-1\">\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n {field.type === 'textarea' ? (\n <textarea\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:border-transparent resize-none\"\n style={{ '--tw-ring-color': colors.primary } as any}\n rows={3}\n placeholder={field.placeholder}\n />\n ) : field.type === 'select' && field.options ? (\n <select\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:border-transparent\"\n style={{ '--tw-ring-color': colors.primary } as any}\n >\n {field.options.map(opt => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n ) : (\n <input\n type={field.type}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:border-transparent\"\n style={{ '--tw-ring-color': colors.primary } as any}\n placeholder={field.placeholder}\n />\n )}\n </div>\n ))}\n\n <button\n onClick={() => {\n if (onOptInData && currentOptInModule) {\n onOptInData(currentOptInModule.id, {}); // Collect form data here\n }\n setIsModalOpen(false);\n }}\n className=\"w-full py-3 rounded-lg text-white font-medium transition-all hover:opacity-90\"\n style={{ backgroundColor: colors.primary }}\n >\n Save & Continue\n </button>\n </div>\n )}\n </BottomSheet>\n )}\n </>\n );\n}\n\nexport default ContactForm;\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport type { Service, Addon, PaymentConfig } from '../../../types';\nimport { createEntranceAnimation } from '../../../styles';\n\ninterface ConfirmationProps {\n service?: Service;\n addons?: Addon[];\n selectedDate?: string;\n selectedTime?: string;\n paymentProvider: 'square' | 'stripe';\n paymentConfig: PaymentConfig;\n onConfirm: () => Promise<void>;\n colors: {\n primary: string;\n secondary: string;\n };\n isPreview?: boolean;\n}\n\nexport function Confirmation({\n service,\n addons = [],\n selectedDate,\n selectedTime,\n paymentProvider,\n paymentConfig,\n onConfirm,\n colors,\n isPreview = false\n}: ConfirmationProps) {\n const servicePrice = service?.price || 0;\n // Fix: Use addonPrice field (or fallback to price for backward compatibility)\n const addonsPrice = addons.reduce((sum, addon) => sum + (addon.addonPrice || addon.price || 0), 0);\n const totalPrice = servicePrice + addonsPrice;\n const serviceDuration = service?.duration || 0;\n const addonsDuration = addons.reduce((sum, addon) => sum + (addon.duration || 0), 0);\n const totalDuration = serviceDuration + addonsDuration;\n\n const depositPercentage = paymentConfig.depositPercentage || 20;\n const depositAmount = (totalPrice * (depositPercentage / 100)).toFixed(2);\n const totalAmount = totalPrice.toFixed(2);\n const balanceAmount = (parseFloat(totalAmount) - parseFloat(depositAmount)).toFixed(2);\n\n return (\n <div className=\"space-y-4\">\n <motion.h2\n {...createEntranceAnimation(0.05)}\n className=\"text-xl font-bold text-center\"\n style={{ color: colors.primary }}\n >\n Confirm & Pay\n </motion.h2>\n\n {/* Appointment Summary - Compact */}\n <motion.div\n className=\"bg-gray-50 rounded-lg p-4\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3, delay: 0.1 }}\n >\n <div className=\"space-y-2\">\n {service && (\n <div className=\"flex justify-between items-center text-sm\">\n <div>\n <p className=\"font-medium\">{service.name}</p>\n <p className=\"text-xs opacity-70\">{totalDuration} min total</p>\n </div>\n <span className=\"font-bold\" style={{ color: colors.primary }}>${servicePrice}</span>\n </div>\n )}\n {addons.length > 0 && (\n <div className=\"space-y-1 text-xs\">\n {addons.map(addon => (\n <div key={addon.id} className=\"flex justify-between opacity-70\">\n <span>+ {addon.name}</span>\n <span>+${addon.addonPrice || addon.price || 0}</span>\n </div>\n ))}\n </div>\n )}\n {selectedDate && (\n <div className=\"flex justify-between items-center text-sm pt-2 border-t border-gray-200\">\n <span className=\"opacity-70\">\n {new Date(selectedDate + 'T00:00:00').toLocaleDateString('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n })}\n </span>\n <span>{selectedTime}</span>\n </div>\n )}\n <div className=\"pt-2 mt-2 border-t border-gray-200 flex justify-between items-center\">\n <span className=\"text-sm font-medium\">Due Today</span>\n <span className=\"text-lg font-bold\" style={{ color: colors.primary }}>${depositAmount}</span>\n </div>\n </div>\n </motion.div>\n\n {/* Payment Form - Preview or Live */}\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3, delay: 0.2 }}\n >\n {isPreview ? (\n // Preview Mode: Show placeholder UI\n <div className=\"border border-gray-200 rounded-lg p-4 bg-white\">\n <div className=\"space-y-2\">\n <div className=\"h-10 bg-gray-50 border border-gray-200 rounded flex items-center px-3\">\n <span className=\"text-xs text-gray-400\">Card Number</span>\n </div>\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"h-10 bg-gray-50 border border-gray-200 rounded flex items-center px-3\">\n <span className=\"text-xs text-gray-400\">MM/YY</span>\n </div>\n <div className=\"h-10 bg-gray-50 border border-gray-200 rounded flex items-center px-3\">\n <span className=\"text-xs text-gray-400\">CVV</span>\n </div>\n </div>\n </div>\n <div className=\"mt-3 flex items-center justify-center gap-1\">\n <svg className=\"w-3 h-3 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\" />\n </svg>\n <span className=\"text-xs text-gray-400\">\n Powered by {paymentProvider === 'square' ? 'Square' : 'Stripe'}\n </span>\n </div>\n </div>\n ) : (\n // Live Mode: Real payment processing\n // Note: The actual payment form will be rendered by the tenant app\n // This component will trigger payment initialization when mounted\n <div className=\"border border-gray-200 rounded-lg p-4 bg-white\">\n <div className=\"text-center py-8 text-sm text-gray-500\">\n <div className=\"animate-pulse\">\n Initializing {paymentProvider === 'square' ? 'Square' : 'Stripe'} payment...\n </div>\n <div className=\"mt-4 text-xs text-gray-400\">\n Please wait while we securely load the payment form\n </div>\n </div>\n </div>\n )}\n </motion.div>\n\n {/* Terms - Compact */}\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3, delay: 0.3 }}\n >\n <div className=\"space-y-2\">\n <label className=\"flex items-start gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n className=\"mt-0.5 w-4 h-4 rounded border-gray-300\"\n style={{ accentColor: colors.primary }}\n />\n <span className=\"text-xs\">\n I agree to the <a href=\"#\" className=\"underline\" style={{ color: colors.primary }}>cancellation policy</a> and understand the ${balanceAmount} balance is due at appointment.\n </span>\n </label>\n\n <label className=\"flex items-start gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n className=\"mt-0.5 w-4 h-4 rounded border-gray-300\"\n style={{ accentColor: colors.primary }}\n />\n <span className=\"text-xs\">\n I agree to the <a href=\"#\" className=\"underline\" style={{ color: colors.primary }}>terms of service</a>.\n </span>\n </label>\n </div>\n </motion.div>\n </div>\n );\n}\n\nexport default Confirmation;\n","'use client';\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { DateSelection } from './DateSelection';\nimport type {\n DateSelectionSettings,\n CyclePhase,\n CyclePhaseMap,\n CycleClient,\n FetchCycleDataFn,\n CycleWarningCallback\n} from '../../../types';\n\n/**\n * Cycle phase definitions matching tenant backend\n */\nexport const CYCLE_PHASES: Record<string, Omit<CyclePhase, 'daysSinceStart' | 'confidence'>> = {\n avoid: {\n phase: 'avoid',\n color: '#EF4444',\n bgColor: '#FEF2F2',\n label: 'Avoid',\n icon: '🔴',\n description: 'Period - avoid waxing'\n },\n caution: {\n phase: 'caution',\n color: '#F59E0B',\n bgColor: '#FFFBEB',\n label: 'Caution',\n icon: '🟡',\n description: 'End of period - proceed with caution'\n },\n optimal: {\n phase: 'optimal',\n color: '#10B981',\n bgColor: '#F0FDF4',\n label: 'Optimal',\n icon: '🟢',\n description: 'Best time for waxing'\n },\n neutral: {\n phase: 'neutral',\n color: '#6B7280',\n bgColor: '#F9FAFB',\n label: 'Neutral',\n icon: '⚪',\n description: 'Okay but not optimal'\n },\n unknown: {\n phase: 'unknown',\n color: '#9CA3AF',\n bgColor: '#F3F4F6',\n label: 'Unknown',\n icon: '❓',\n description: 'No cycle data available'\n }\n};\n\nexport interface CycleAwareDateSelectionProps {\n // Standard DateSelection props\n availableDates: string[];\n selectedDate: string | null;\n onDateSelect: (date: string, cyclePhase?: CyclePhase) => void;\n settings: DateSelectionSettings;\n colors: {\n primary: string;\n secondary: string;\n };\n\n // Cycle-aware specific props\n /** Tenant-provided function to fetch cycle data */\n fetchCycleData?: FetchCycleDataFn;\n\n /** Selected client (must have cycle_opt_in = true to show cycle features) */\n selectedClient?: CycleClient;\n\n /** Callback when a warning should be shown (e.g., avoid phase selected) */\n onCycleWarning?: CycleWarningCallback;\n\n /** Override to force enable/disable cycle features */\n cycleAwareEnabled?: boolean;\n}\n\n/**\n * CycleAwareDateSelection - Enhanced date picker with cycle phase indicators\n *\n * Wraps the base DateSelection component with cycle-aware features:\n * - Visual indicators for each cycle phase\n * - Color-coded calendar days\n * - Legend explaining phases\n * - Warnings for non-optimal dates\n *\n * @example\n * ```tsx\n * const fetchCycleData = async (client, dates) => {\n * const res = await fetch(`/api/cycle?clientId=${client.id}`);\n * const data = await res.json();\n * return transformToCyclePhases(data, dates);\n * };\n *\n * <CycleAwareDateSelection\n * availableDates={dates}\n * selectedDate={selectedDate}\n * onDateSelect={(date, phase) => {\n * setSelectedDate(date);\n * if (phase?.phase === 'avoid') {\n * showWarning('This date may be uncomfortable');\n * }\n * }}\n * settings={settings}\n * colors={colors}\n * fetchCycleData={fetchCycleData}\n * selectedClient={client}\n * onCycleWarning={(phase, date) => console.log('Warning:', phase, date)}\n * />\n * ```\n */\nexport function CycleAwareDateSelection({\n availableDates,\n selectedDate,\n onDateSelect,\n settings,\n colors,\n fetchCycleData,\n selectedClient,\n onCycleWarning,\n cycleAwareEnabled\n}: CycleAwareDateSelectionProps) {\n const [cyclePhases, setCyclePhases] = useState<CyclePhaseMap>({});\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Determine if cycle features should be shown\n const showCycleFeatures = useMemo(() => {\n if (cycleAwareEnabled !== undefined) return cycleAwareEnabled;\n return !!(selectedClient?.cycle_opt_in && fetchCycleData);\n }, [cycleAwareEnabled, selectedClient?.cycle_opt_in, fetchCycleData]);\n\n // Fetch cycle data when client or dates change\n useEffect(() => {\n if (!showCycleFeatures || !fetchCycleData || !selectedClient) {\n setCyclePhases({});\n return;\n }\n\n if (availableDates.length === 0) {\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n fetchCycleData(selectedClient, availableDates)\n .then((phases) => {\n setCyclePhases(phases);\n })\n .catch((err) => {\n console.error('[CycleAwareDateSelection] Error fetching cycle data:', err);\n setError(err.message || 'Failed to load cycle data');\n setCyclePhases({});\n })\n .finally(() => {\n setIsLoading(false);\n });\n }, [showCycleFeatures, fetchCycleData, selectedClient, availableDates]);\n\n // Enhanced date selection handler with cycle awareness\n const handleDateSelect = useCallback((date: string) => {\n const phaseData = cyclePhases[date];\n\n // Trigger warning callback if date is in avoid phase\n if (phaseData?.phase === 'avoid' && onCycleWarning) {\n onCycleWarning(phaseData, date);\n }\n\n // Call original handler with cycle data\n onDateSelect(date, phaseData);\n }, [cyclePhases, onDateSelect, onCycleWarning]);\n\n return (\n <div className=\"cycle-aware-date-selection space-y-4\">\n {/* Cycle Legend */}\n {showCycleFeatures && Object.keys(cyclePhases).length > 0 && (\n <div className=\"bg-white rounded-lg border border-gray-200 p-4\">\n <h4 className=\"font-medium mb-3 flex items-center\" style={{ color: colors.primary }}>\n <span className=\"mr-2\">📅</span>\n Your Cycle Calendar\n </h4>\n <div className=\"grid grid-cols-2 gap-3 text-sm\">\n {Object.entries(CYCLE_PHASES).map(([key, phase]) => (\n key !== 'unknown' && (\n <div key={key} className=\"flex items-center space-x-2\">\n <div\n className=\"w-3 h-3 rounded-full border border-gray-300\"\n style={{ backgroundColor: phase.color }}\n />\n <span>{phase.label}</span>\n </div>\n )\n ))}\n </div>\n <p className=\"text-xs opacity-70 mt-2\">\n Green dates are optimal for comfortable waxing appointments\n </p>\n </div>\n )}\n\n {/* Loading State */}\n {showCycleFeatures && isLoading && (\n <div className=\"text-center py-2 text-sm opacity-70\">\n Loading cycle predictions...\n </div>\n )}\n\n {/* Error State */}\n {showCycleFeatures && error && (\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-3\">\n <p className=\"text-yellow-800 text-sm\">\n Unable to load cycle predictions: {error}\n </p>\n </div>\n )}\n\n {/* Enhanced Calendar with Cycle Indicators */}\n <DateSelection\n availableDates={availableDates}\n selectedDate={selectedDate}\n onDateSelect={handleDateSelect}\n settings={settings}\n colors={colors}\n // TODO: Pass cycle phases to DateSelection for rendering\n // This requires updating DateSelection to accept and render cycle indicators\n // For now, cycle indicators are shown separately via the legend\n />\n\n {/* Cycle Warning for Selected Date */}\n {showCycleFeatures && selectedDate && cyclePhases[selectedDate]?.phase === 'avoid' && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <div className=\"flex items-start space-x-3\">\n <span className=\"text-red-500 text-xl\">⚠️</span>\n <div>\n <h4 className=\"font-medium text-red-800 mb-1\">\n This date falls during your predicted period\n </h4>\n <p className=\"text-red-700 text-sm mb-3\">\n Waxing during this time may be more uncomfortable than usual.\n Would you like to see better alternatives?\n </p>\n <div className=\"flex space-x-2\">\n <button\n className=\"px-3 py-1 bg-red-100 text-red-700 rounded text-sm hover:bg-red-200 transition-colors\"\n onClick={() => {\n // Find next optimal date\n const optimalDates = availableDates.filter(d =>\n cyclePhases[d]?.phase === 'optimal'\n );\n if (optimalDates.length > 0) {\n handleDateSelect(optimalDates[0]);\n }\n }}\n >\n Show optimal dates\n </button>\n <button className=\"px-3 py-1 text-red-600 text-sm hover:underline\">\n Continue anyway\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default CycleAwareDateSelection;\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport type { HoldStatus, HoldTimerConfig } from '../../types';\n\nexport interface HoldTimerProps {\n /** Current hold status */\n holdStatus: HoldStatus | null;\n /** Configuration for timer behavior */\n config?: Partial<HoldTimerConfig>;\n /** Theme colors */\n colors: {\n primary: string;\n secondary: string;\n text?: string;\n };\n /** Callback when user clicks extend button */\n onExtend?: () => void | Promise<void>;\n /** Callback when user clicks release button */\n onRelease?: () => void | Promise<void>;\n /** Callback when timer enters warning state */\n onWarning?: (timeRemaining: number) => void;\n /** Callback when timer expires */\n onExpired?: () => void;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst DEFAULT_CONFIG: HoldTimerConfig = {\n enabled: true,\n duration: 600000, // 10 minutes\n warningThreshold: 120000, // 2 minutes\n maxExtensions: 2,\n extensionDuration: 300000, // 5 minutes\n showActions: true,\n showWarning: true\n};\n\n/**\n * HoldTimer - Countdown timer for time slot reservations\n *\n * Shows a countdown for how long a time slot is reserved, with\n * visual warning states and optional extension/release actions.\n *\n * @example\n * ```tsx\n * <HoldTimer\n * holdStatus={activeHold}\n * config={{\n * duration: 600000, // 10 minutes\n * warningThreshold: 120000, // 2 minutes\n * maxExtensions: 2\n * }}\n * colors={{ primary: '#8B5CF6', secondary: '#EC4899' }}\n * onExtend={() => extendHold(activeHold.holdId)}\n * onRelease={() => releaseHold(activeHold.holdId)}\n * onExpired={() => {\n * // Handle expiration - usually go back to time selection\n * setSelectedTime(null);\n * setStep('time');\n * }}\n * />\n * ```\n */\nexport function HoldTimer({\n holdStatus,\n config: userConfig,\n colors,\n onExtend,\n onRelease,\n onWarning,\n onExpired,\n className = ''\n}: HoldTimerProps) {\n const [currentTime, setCurrentTime] = useState(Date.now());\n const [hasTriggeredWarning, setHasTriggeredWarning] = useState(false);\n const [isExtending, setIsExtending] = useState(false);\n const [isReleasing, setIsReleasing] = useState(false);\n\n // Merge user config with defaults\n const config: HoldTimerConfig = {\n ...DEFAULT_CONFIG,\n ...userConfig\n };\n\n // Update current time every second\n useEffect(() => {\n if (!holdStatus) return;\n\n const interval = setInterval(() => {\n setCurrentTime(Date.now());\n }, 1000);\n\n return () => clearInterval(interval);\n }, [holdStatus]);\n\n // Calculate remaining time\n const timeRemaining = holdStatus ? Math.max(0, holdStatus.expiresAt - currentTime) : 0;\n const isExpired = timeRemaining === 0 && holdStatus !== null;\n const isWarning = timeRemaining <= config.warningThreshold && timeRemaining > 0;\n\n // Trigger warning callback\n useEffect(() => {\n if (isWarning && !hasTriggeredWarning && onWarning && holdStatus) {\n setHasTriggeredWarning(true);\n onWarning(timeRemaining);\n }\n }, [isWarning, hasTriggeredWarning, onWarning, holdStatus, timeRemaining]);\n\n // Trigger expired callback\n useEffect(() => {\n if (isExpired && holdStatus && onExpired) {\n onExpired();\n }\n }, [isExpired, holdStatus, onExpired]);\n\n // Reset warning trigger when hold changes\n useEffect(() => {\n setHasTriggeredWarning(false);\n }, [holdStatus?.holdKey]);\n\n const handleExtend = useCallback(async () => {\n if (!onExtend || !holdStatus || isExtending) return;\n\n try {\n setIsExtending(true);\n await onExtend();\n setHasTriggeredWarning(false); // Reset warning after extension\n } catch (error) {\n console.error('[HoldTimer] Failed to extend hold:', error);\n } finally {\n setIsExtending(false);\n }\n }, [onExtend, holdStatus, isExtending]);\n\n const handleRelease = useCallback(async () => {\n if (!onRelease || !holdStatus || isReleasing) return;\n\n try {\n setIsReleasing(true);\n await onRelease();\n } catch (error) {\n console.error('[HoldTimer] Failed to release hold:', error);\n } finally {\n setIsReleasing(false);\n }\n }, [onRelease, holdStatus, isReleasing]);\n\n // Don't render if no hold or not enabled\n if (!holdStatus || !config.enabled) {\n return null;\n }\n\n // Format time as MM:SS\n const minutes = Math.floor(timeRemaining / 60000);\n const seconds = Math.floor((timeRemaining % 60000) / 1000);\n const formattedTime = `${minutes}:${seconds.toString().padStart(2, '0')}`;\n\n // Determine display variant\n let bgColor = 'rgba(139, 92, 246, 0.1)'; // primary with opacity\n let borderColor = 'rgba(139, 92, 246, 0.3)';\n let textColor = colors.primary;\n\n if (isExpired) {\n bgColor = 'rgba(239, 68, 68, 0.1)';\n borderColor = 'rgba(239, 68, 68, 0.3)';\n textColor = '#EF4444';\n } else if (isWarning && config.showWarning) {\n bgColor = `${colors.secondary}1A`; // secondary with opacity (hex alpha)\n borderColor = `${colors.secondary}4D`;\n textColor = colors.secondary;\n }\n\n return (\n <div\n className={`rounded-lg p-4 text-center ${className}`}\n style={{\n backgroundColor: bgColor,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: borderColor\n }}\n >\n <div className=\"flex flex-col items-center justify-center\">\n {/* Timer Display */}\n <div className=\"flex flex-col items-center gap-2 mb-4\">\n {isExpired ? (\n <div style={{ color: textColor }} className=\"font-medium text-base\">\n <span>Time expired - </span>\n <button\n onClick={handleRelease}\n disabled={isReleasing}\n className=\"underline hover:no-underline focus:outline-none focus:ring-2 focus:ring-offset-2 inline disabled:opacity-50\"\n style={{ color: textColor }}\n >\n {isReleasing ? 'Releasing...' : 'select a new time'}\n </button>\n </div>\n ) : (\n <div style={{ color: textColor }} className=\"font-medium text-base\">\n Your time slot is reserved for {formattedTime}\n </div>\n )}\n </div>\n\n {/* Actions */}\n {config.showActions && !isExpired && (\n <div className=\"flex justify-center gap-2\">\n {/* Extend Button */}\n {onExtend && holdStatus.canExtend && (\n <button\n onClick={handleExtend}\n disabled={!holdStatus.canExtend || isExtending}\n className=\"px-4 py-2 text-sm font-medium rounded transition-all active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed text-white\"\n style={{ backgroundColor: colors.primary }}\n aria-label={`Extend hold (${holdStatus.maxExtensions - holdStatus.extensions} extensions remaining)`}\n >\n {isExtending ? 'Extending...' : 'Extend'}\n {!isExtending && holdStatus.maxExtensions - holdStatus.extensions > 0 && (\n <span className=\"ml-1\">\n ({holdStatus.maxExtensions - holdStatus.extensions})\n </span>\n )}\n </button>\n )}\n\n {/* Release Button */}\n {onRelease && (\n <button\n onClick={handleRelease}\n disabled={isReleasing}\n className=\"px-4 py-2 text-sm font-medium rounded border transition-all active:scale-95 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n borderColor: 'rgba(255, 255, 255, 0.2)',\n color: colors.text || '#000000'\n }}\n aria-label=\"Release hold and return to time selection\"\n >\n {isReleasing ? 'Releasing...' : 'Release'}\n </button>\n )}\n </div>\n )}\n\n {/* Extension Limit Reached */}\n {!isExpired && !holdStatus.canExtend && holdStatus.extensions >= holdStatus.maxExtensions && (\n <div className=\"mt-3 pt-3 border-t border-white/10 text-center\">\n <div className=\"text-sm\" style={{ color: colors.secondary }}>\n Maximum extensions reached - complete booking now or{' '}\n <button\n onClick={handleRelease}\n disabled={isReleasing}\n className=\"hover:underline focus:outline-none focus:underline disabled:opacity-50\"\n style={{ color: colors.primary }}\n >\n {isReleasing ? 'releasing...' : 'select a different time'}\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default HoldTimer;\n","'use client';\n\nimport React, { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n ServiceSelection,\n DateSelection,\n TimeSelection,\n AddonsSelection,\n ContactForm,\n Confirmation\n} from './steps';\nimport { HoldTimer } from '../HoldTimer';\nimport type {\n HoldTimerConfig,\n HoldStatus,\n CreateHoldFn,\n ExtendHoldFn,\n ReleaseHoldFn\n} from '../../types';\n\n// Local interface for step management\ninterface BookingFlowStep {\n id: string;\n name: string;\n enabled: boolean;\n settings?: any;\n}\n\n// Export simplified versions (not conflicting with types/index.ts)\nexport interface BookingFlowConfig {\n steps: {\n service_selection?: {\n enabled: boolean;\n settings?: any;\n };\n date_selection?: {\n enabled: boolean;\n settings?: any;\n };\n time_selection?: {\n enabled: boolean;\n settings?: any;\n };\n addon_selection?: {\n enabled: boolean;\n settings?: any;\n };\n contact_form?: {\n enabled: boolean;\n settings?: any;\n };\n confirmation?: {\n enabled: boolean;\n settings?: any;\n };\n };\n progressBar?: {\n style?: 'dots' | 'bar' | 'minimal';\n };\n transitions?: {\n style?: 'slide' | 'fade';\n speed?: 'fast' | 'normal' | 'slow';\n };\n background?: {\n type: 'color' | 'gradient' | 'image';\n value: string;\n };\n}\n\nexport interface BookingFlowProps {\n config: BookingFlowConfig;\n colors: {\n primary: string;\n secondary: string;\n text?: string;\n bookingText?: string;\n };\n // Data providers - pass your service/date/time data\n services?: any[];\n categories?: any[];\n dates?: string[];\n times?: string[];\n addons?: any[];\n // Payment configuration (for confirmation step)\n paymentProvider?: 'square' | 'stripe';\n paymentConfig?: any;\n isPreview?: boolean;\n // Callbacks\n onComplete?: (bookingData: any) => void;\n onStepChange?: (stepIndex: number, stepId: string) => void;\n onServiceSelect?: (serviceId: string) => void;\n onDateSelect?: (date: string) => void;\n onContactInfoChange?: (contactInfo: any) => void; // NEW: Callback when contact info changes\n // Optional: provide custom step validation\n validateStep?: (stepId: string, data: any) => boolean;\n // Hold timer integration (optional)\n holdTimer?: {\n enabled: boolean;\n config: Partial<HoldTimerConfig>;\n createHold: CreateHoldFn;\n extendHold: ExtendHoldFn;\n releaseHold: ReleaseHoldFn;\n };\n // Optional: custom step order for mod-based flows\n stepOrder?: string[]; // NEW: Array of step IDs in desired order, e.g., ['details', 'service', 'date', 'time', 'addons', 'confirm']\n // Optional: opt-in modules for contact form\n optInModules?: import('../../types').OptInModule[]; // NEW: Modules for cycle-aware, etc.\n onOptInData?: (moduleId: string, data: any) => void; // NEW: Callback for opt-in module data\n // Optional: custom payment form component to replace default confirmation\n customPaymentForm?: React.ComponentType<any>;\n // Optional: cycle phase data for date selection\n cyclePhases?: Record<string, string>; // NEW: Map of date -> phase for cycle-aware booking\n}\n\n/**\n * BookingFlow - Main orchestrator component for multi-step booking\n *\n * Manages flow state, navigation, and renders appropriate step components.\n *\n * @example\n * ```tsx\n * <BookingFlow\n * config={{\n * steps: {\n * service_selection: { enabled: true, settings: {} },\n * date_selection: { enabled: true, settings: {} },\n * time_selection: { enabled: true, settings: {} },\n * contact_form: { enabled: true, settings: {} }\n * },\n * progressBar: { style: 'dots' },\n * transitions: { style: 'slide', speed: 'normal' }\n * }}\n * colors={{ primary: '#BCB4FF', secondary: '#CAC426' }}\n * services={services}\n * onComplete={(data) => console.log('Booking complete!', data)}\n * />\n * ```\n */\nexport function BookingFlow({\n config,\n colors,\n services = [],\n categories = [],\n dates = [],\n times = [],\n addons = [],\n paymentProvider,\n paymentConfig,\n isPreview = false,\n onComplete,\n onStepChange,\n onServiceSelect,\n onDateSelect,\n onContactInfoChange,\n validateStep,\n holdTimer,\n stepOrder,\n optInModules = [],\n onOptInData,\n customPaymentForm,\n cyclePhases\n}: BookingFlowProps) {\n // Flow state\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n const [direction, setDirection] = useState<'forward' | 'backward'>('forward');\n\n // Booking data state\n const [selectedService, setSelectedService] = useState<string | null>(null);\n const [selectedDate, setSelectedDate] = useState<string | null>(null);\n const [selectedTime, setSelectedTime] = useState<string | null>(null);\n const [selectedAddons, setSelectedAddons] = useState<string[]>([]);\n const [contactInfo, setContactInfo] = useState<any>({});\n const [optInData, setOptInData] = useState<any>({});\n\n // Hold timer state\n const [activeHold, setActiveHold] = useState<HoldStatus | null>(null);\n\n // Configuration\n const textColor = colors.bookingText || colors.text || '#000000';\n const transitions = config.transitions || {};\n const transitionStyle = transitions.style || 'slide';\n const transitionSpeed = transitions.speed || 'normal';\n const reducedMotion = typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const background = config.background || { type: 'color', value: '#FFFFFF' };\n\n // Build enabled steps array\n const stepsMap: Record<string, BookingFlowStep> = {\n service: {\n id: 'service',\n name: 'Service',\n enabled: config.steps?.service_selection?.enabled !== false, // Core step - defaults to enabled\n settings: config.steps?.service_selection?.settings || {}\n },\n date: {\n id: 'date',\n name: 'Date',\n enabled: config.steps?.date_selection?.enabled !== false, // Core step - defaults to enabled\n settings: config.steps?.date_selection?.settings || {}\n },\n time: {\n id: 'time',\n name: 'Time',\n enabled: config.steps?.time_selection?.enabled !== false, // Core step - defaults to enabled\n settings: config.steps?.time_selection?.settings || {}\n },\n addons: {\n id: 'addons',\n name: 'Add-ons',\n enabled: config.steps?.addon_selection?.enabled === true, // Optional step - must be explicitly enabled\n settings: config.steps?.addon_selection?.settings || {}\n },\n details: {\n id: 'details',\n name: 'Details',\n enabled: config.steps?.contact_form?.enabled !== false, // Core step - defaults to enabled\n settings: config.steps?.contact_form?.settings || {}\n },\n confirm: {\n id: 'confirm',\n name: 'Confirm',\n enabled: config.steps?.confirmation?.enabled === true, // Conditional based on config\n settings: config.steps?.confirmation?.settings || {}\n }\n };\n\n // NEW: Use custom step order if provided, otherwise use default order\n const defaultOrder = ['service', 'date', 'time', 'addons', 'details', 'confirm'];\n const orderedStepIds = stepOrder || defaultOrder;\n\n // Build steps array respecting the custom order and filtering disabled steps\n const allSteps: BookingFlowStep[] = orderedStepIds\n .map(id => stepsMap[id])\n .filter(step => step && step.enabled);\n\n console.log('[BookingFlow] Step configuration:', {\n customStepOrder: stepOrder,\n orderedStepIds,\n allSteps: allSteps.map(s => s.id),\n currentStepIndex,\n currentStepId: allSteps[currentStepIndex]?.id\n });\n\n const currentStep = allSteps[currentStepIndex];\n\n // Background styling\n const getBackgroundStyle = () => {\n if (background.type === 'gradient') {\n return { background: background.value };\n }\n if (background.type === 'image') {\n return {\n backgroundImage: `url(${background.value})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center'\n };\n }\n return { backgroundColor: background.value };\n };\n\n // Animation configuration\n const getDuration = () => {\n if (reducedMotion) return 0.15;\n switch (transitionSpeed) {\n case 'fast': return 0.2;\n case 'slow': return 0.5;\n default: return 0.3;\n }\n };\n\n const getVariants = () => {\n const slideDistance = 50;\n\n if (transitionStyle === 'fade') {\n return {\n enter: () => ({ opacity: 0, scale: 0.95 }),\n center: { opacity: 1, scale: 1 },\n exit: () => ({ opacity: 0, scale: 0.95 })\n };\n }\n\n // Default: slide\n return {\n enter: () => ({\n x: direction === 'forward' ? slideDistance : -slideDistance,\n opacity: 0\n }),\n center: { x: 0, opacity: 1 },\n exit: () => ({\n x: direction === 'forward' ? -slideDistance : slideDistance,\n opacity: 0\n })\n };\n };\n\n // Step validation\n const canGoNext = () => {\n const stepId = currentStep?.id;\n\n // Custom validation if provided\n if (validateStep) {\n const currentData = {\n service: selectedService,\n date: selectedDate,\n time: selectedTime,\n addons: selectedAddons,\n contact: contactInfo\n };\n return validateStep(stepId, currentData);\n }\n\n // Default validation\n switch (stepId) {\n case 'service':\n return selectedService !== null;\n case 'date':\n return selectedDate !== null;\n case 'time':\n return selectedTime !== null;\n case 'details':\n // Validate contact form: name, email, and phone are required (notes optional)\n if (isPreview) return true; // Skip validation in preview mode\n\n const hasName = contactInfo?.name && contactInfo.name.trim().length >= 2;\n const hasValidEmail = contactInfo?.email && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(contactInfo.email);\n const hasValidPhone = contactInfo?.phone && contactInfo.phone.replace(/\\D/g, '').length >= 10;\n\n return hasName && hasValidEmail && hasValidPhone;\n default:\n return true;\n }\n };\n\n const isStepCompleted = (stepIndex: number) => {\n return stepIndex < currentStepIndex;\n };\n\n // Navigation\n const handleStepChange = (newStepIndex: number) => {\n setDirection(newStepIndex > currentStepIndex ? 'forward' : 'backward');\n setCurrentStepIndex(newStepIndex);\n\n if (onStepChange) {\n onStepChange(newStepIndex, allSteps[newStepIndex]?.id);\n }\n };\n\n const handleNext = () => {\n if (currentStepIndex < allSteps.length - 1) {\n handleStepChange(currentStepIndex + 1);\n }\n };\n\n const handleBack = async () => {\n if (currentStepIndex === 0) return;\n\n const prevStepIndex = currentStepIndex - 1;\n const prevStep = allSteps[prevStepIndex];\n\n // If going back to/before time selection, release hold\n if (prevStep?.id === 'time' && activeHold && holdTimer?.releaseHold) {\n try {\n await holdTimer.releaseHold(activeHold.holdId);\n setActiveHold(null);\n setSelectedTime(null);\n } catch (error) {\n console.error('[BookingFlow] Failed to release hold:', error);\n }\n }\n\n handleStepChange(prevStepIndex);\n };\n\n // Enhanced time selection handler with hold integration\n const handleTimeSelect = async (time: string) => {\n setSelectedTime(time);\n\n // If hold timer enabled, create hold before proceeding\n if (holdTimer?.enabled && holdTimer.createHold && selectedDate && selectedService) {\n try {\n const selectedServiceData = services.find((s: any) => s.id === selectedService);\n\n const hold = await holdTimer.createHold({\n date: selectedDate,\n time,\n serviceId: selectedService,\n serviceDuration: selectedServiceData?.duration || 60\n });\n\n setActiveHold(hold);\n } catch (error) {\n console.error('[BookingFlow] Failed to create hold:', error);\n // Don't proceed if hold creation fails\n return;\n }\n }\n\n // Navigate to next step\n handleNext();\n };\n\n // Hold expiration handler\n const handleHoldExpired = () => {\n setActiveHold(null);\n setSelectedTime(null);\n\n // Find and navigate to time step\n const timeStepIndex = allSteps.findIndex(s => s.id === 'time');\n if (timeStepIndex >= 0) {\n handleStepChange(timeStepIndex);\n }\n };\n\n const handleComplete = async () => {\n const bookingData = {\n service: selectedService,\n date: selectedDate,\n time: selectedTime,\n addons: selectedAddons,\n contact: contactInfo,\n optIn: optInData\n };\n\n if (onComplete) {\n onComplete(bookingData);\n }\n };\n\n // Render current step\n const renderCurrentStep = () => {\n if (!currentStep) return null;\n\n const stepProps = {\n settings: currentStep.settings,\n colors\n };\n\n // Get selected service data once for all steps that need it\n const selectedServiceData = services.find((s: any) => s.id === selectedService);\n\n switch (currentStep.id) {\n case 'service':\n return (\n <ServiceSelection\n {...stepProps}\n services={services}\n categories={categories}\n selectedService={selectedService}\n onServiceSelect={(serviceId) => {\n setSelectedService(serviceId);\n // NEW: Notify parent of service selection\n if (onServiceSelect) {\n onServiceSelect(serviceId);\n }\n }}\n />\n );\n\n case 'date':\n return (\n <DateSelection\n {...stepProps}\n availableDates={dates}\n selectedDate={selectedDate}\n onDateSelect={(date) => {\n setSelectedDate(date);\n // NEW: Notify parent of date selection\n if (onDateSelect) {\n onDateSelect(date);\n }\n }}\n cyclePhases={cyclePhases} // NEW: Pass cycle phases for cycle-aware booking\n selectedService={selectedServiceData} // NEW: Pass selected service for summary card\n addons={addons} // NEW: Pass addons for selection\n selectedAddons={selectedAddons} // NEW: Pass selected addons\n onAddonsChange={setSelectedAddons} // NEW: Handle addon changes\n addonPlacement={config.steps?.addon_selection?.settings?.placement || 'date_selection'} // NEW: Pass addon placement config\n />\n );\n\n case 'time':\n return (\n <TimeSelection\n {...stepProps}\n availableTimes={times}\n selectedTime={selectedTime}\n onTimeSelect={handleTimeSelect}\n serviceDuration={selectedServiceData?.duration || 60}\n selectedService={selectedServiceData}\n selectedDate={selectedDate}\n selectedAddons={selectedAddons}\n addons={addons}\n />\n );\n\n case 'addons':\n return (\n <AddonsSelection\n {...stepProps}\n addons={addons}\n selectedAddons={selectedAddons}\n onAddonsChange={setSelectedAddons}\n />\n );\n\n case 'details':\n return (\n <ContactForm\n {...stepProps}\n contactInfo={contactInfo}\n onContactInfoChange={(info) => {\n setContactInfo(info);\n // NEW: Notify parent of contact info changes\n if (onContactInfoChange) {\n onContactInfoChange(info);\n }\n }}\n optInModules={optInModules} // NEW: Pass opt-in modules from parent\n onOptInData={onOptInData} // NEW: Pass opt-in data callback\n />\n );\n\n case 'confirm':\n const selectedAddonsData = addons.filter((a: any) => selectedAddons.includes(a.id));\n\n // Calculate addon total cost\n const addonTotalCost = selectedAddonsData.reduce((sum, addon) => {\n return sum + (addon.addonPrice || addon.price || 0);\n }, 0);\n\n // Calculate total amount (service + addons)\n const totalAmount = (selectedServiceData?.price || 0) + addonTotalCost;\n\n // Calculate total duration (service + addons that affect duration)\n const totalDuration = selectedAddonsData.reduce((duration, addon) => {\n if (addon.affectsDuration && addon.additionalDuration) {\n return duration + addon.additionalDuration;\n }\n return duration;\n }, selectedServiceData?.duration || 60);\n\n // Use custom payment form if provided, otherwise use default Confirmation\n if (customPaymentForm) {\n const CustomPaymentForm = customPaymentForm;\n return (\n <CustomPaymentForm\n bookingData={{\n service: selectedService,\n serviceName: selectedServiceData?.name,\n date: selectedDate,\n time: selectedTime,\n addons: selectedAddons,\n contact: contactInfo,\n amount: selectedServiceData?.price || 0,\n duration: totalDuration,\n // Contact info for automation\n clientName: contactInfo?.name,\n clientEmail: contactInfo?.email,\n clientPhone: contactInfo?.phone,\n // Add pendingBooking with COMPLETE booking data for PaymentForm\n pendingBooking: {\n // Customer info\n customerClientId: null, // Will be populated by wrapper if returning customer\n\n // Service info\n serviceId: selectedService,\n date: selectedDate,\n time: selectedTime,\n notes: contactInfo?.notes || '',\n\n // Addon info\n selectedAddons: selectedAddonsData, // Full addon objects for display\n addonServices: selectedAddons, // Addon IDs for database\n addonTotalCost: addonTotalCost,\n\n // Payment calculations\n totalAmount: totalAmount,\n duration: totalDuration\n }\n }}\n onPaymentSuccess={handleComplete}\n onPaymentError={(error: any) => {\n console.error('[BookingFlow] Payment error:', error);\n }}\n />\n );\n }\n\n return (\n <Confirmation\n {...stepProps}\n service={selectedServiceData}\n addons={selectedAddonsData}\n selectedDate={selectedDate || ''}\n selectedTime={selectedTime || ''}\n paymentProvider={paymentProvider || 'square'}\n paymentConfig={paymentConfig || { depositPercentage: 20 }}\n isPreview={isPreview}\n onConfirm={handleComplete}\n />\n );\n\n default:\n return null;\n }\n };\n\n // Render progress indicator\n const renderProgressBar = () => {\n const progressStyle = config.progressBar?.style || 'dots';\n\n if (progressStyle === 'bar') {\n return (\n <div className=\"mb-6\">\n <div className=\"flex justify-between items-center mb-2\">\n <span className=\"text-sm font-medium\">Step {currentStepIndex + 1} of {allSteps.length}</span>\n <span className=\"text-xs opacity-60\">{currentStep?.name}</span>\n </div>\n <div className=\"w-full h-2 bg-gray-200 rounded-full overflow-hidden\">\n <motion.div\n className=\"h-full rounded-full\"\n style={{ backgroundColor: colors.primary }}\n initial={{ width: 0 }}\n animate={{ width: `${((currentStepIndex + 1) / allSteps.length) * 100}%` }}\n transition={{ duration: 0.3, ease: 'easeOut' }}\n />\n </div>\n </div>\n );\n }\n\n if (progressStyle === 'minimal') {\n return (\n <div className=\"mb-6 text-center\">\n <p className=\"text-sm font-medium\" style={{ color: colors.primary }}>\n {currentStep?.name}\n </p>\n <p className=\"text-xs opacity-60 mt-1\">\n Step {currentStepIndex + 1} of {allSteps.length}\n </p>\n </div>\n );\n }\n\n // Default: dots\n return (\n <div className=\"flex justify-center mb-4 overflow-x-auto py-2\">\n <div className=\"flex items-center space-x-1.5 px-4 min-w-max\">\n {allSteps.map((step, index) => (\n <div key={step.id} className=\"flex items-center\">\n <motion.div\n className={`w-6 h-6 rounded-full flex items-center justify-center font-medium text-xs transition-all flex-shrink-0 ${\n index === currentStepIndex\n ? 'text-white shadow-md'\n : isStepCompleted(index)\n ? 'text-white'\n : 'bg-gray-200 text-gray-500'\n }`}\n style={{\n backgroundColor: index <= currentStepIndex ? colors.primary : undefined\n }}\n animate={{\n scale: index === currentStepIndex ? 1.05 : 1\n }}\n transition={{ duration: 0.2 }}\n >\n {isStepCompleted(index) ? '✓' : index + 1}\n </motion.div>\n {index < allSteps.length - 1 && (\n <motion.div\n className={`w-4 h-0.5 mx-1 transition-all flex-shrink-0 ${\n index < currentStepIndex ? '' : 'bg-gray-200'\n }`}\n style={{\n backgroundColor: index < currentStepIndex ? colors.primary : undefined\n }}\n initial={{ scaleX: 0 }}\n animate={{ scaleX: 1 }}\n transition={{ duration: 0.3, delay: 0.1 }}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n return (\n <div\n className=\"w-full max-w-4xl mx-auto p-6 rounded-2xl shadow-xl\"\n style={{ ...getBackgroundStyle(), color: textColor }}\n >\n {/* Progress Indicator */}\n {renderProgressBar()}\n\n {/* Hold Timer - Show when active and past time step */}\n {holdTimer?.enabled && activeHold && currentStep?.id !== 'time' && (\n <HoldTimer\n holdStatus={activeHold}\n config={holdTimer.config}\n colors={colors}\n onExtend={async () => {\n if (holdTimer.extendHold && activeHold) {\n try {\n const extended = await holdTimer.extendHold(activeHold.holdId);\n setActiveHold(extended);\n } catch (error) {\n console.error('[BookingFlow] Failed to extend hold:', error);\n }\n }\n }}\n onRelease={async () => {\n if (holdTimer.releaseHold && activeHold) {\n try {\n await holdTimer.releaseHold(activeHold.holdId);\n setActiveHold(null);\n setSelectedTime(null);\n // Navigate to time step\n const timeStepIndex = allSteps.findIndex(s => s.id === 'time');\n if (timeStepIndex >= 0) {\n handleStepChange(timeStepIndex);\n }\n } catch (error) {\n console.error('[BookingFlow] Failed to release hold:', error);\n }\n }\n }}\n onExpired={handleHoldExpired}\n className=\"mb-6\"\n />\n )}\n\n {/* Current Step Content */}\n <div className=\"mb-6 min-h-[300px] relative overflow-hidden\">\n <AnimatePresence mode=\"wait\" custom={direction}>\n <motion.div\n key={currentStepIndex}\n custom={direction}\n variants={getVariants()}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={{\n duration: getDuration(),\n ease: [0.4, 0, 0.2, 1]\n }}\n >\n {renderCurrentStep()}\n </motion.div>\n </AnimatePresence>\n </div>\n\n {/* Navigation Buttons - Hide when on confirm step with custom payment form */}\n {!(currentStep?.id === 'confirm' && customPaymentForm) && (\n <div className=\"flex items-center justify-between pt-4 border-t border-gray-200\">\n <button\n onClick={handleBack}\n disabled={currentStepIndex === 0}\n className=\"px-4 py-2 rounded-lg border border-gray-300 disabled:opacity-30 disabled:cursor-not-allowed hover:bg-gray-50 transition-all text-sm font-medium\"\n >\n Back\n </button>\n\n {currentStepIndex < allSteps.length - 1 ? (\n <button\n onClick={handleNext}\n disabled={!canGoNext()}\n className=\"px-6 py-2 rounded-lg text-white disabled:opacity-50 disabled:cursor-not-allowed hover:opacity-90 transition-all text-sm font-medium shadow-md\"\n style={{ backgroundColor: colors.primary }}\n >\n Next\n </button>\n ) : (\n <button\n onClick={handleComplete}\n disabled={!canGoNext()}\n className=\"px-6 py-2 rounded-lg text-white disabled:opacity-50 disabled:cursor-not-allowed hover:opacity-90 transition-all text-sm font-medium shadow-md\"\n style={{ backgroundColor: colors.primary }}\n >\n {currentStep?.id === 'confirm' ? 'Pay & Confirm' : 'Complete'}\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default BookingFlow;\n","'use client';\n\nimport React from 'react';\nimport {\n Logo,\n Header,\n FeaturedLink,\n LinkList,\n SocialBar,\n Hero,\n About,\n ServicesPreview,\n Gallery,\n Testimonials,\n Team,\n Contact,\n MinimalHeader,\n MinimalNavigation,\n MinimalFooter,\n FeatureContent,\n BeforeAfter,\n PricingTable,\n InstagramFeed,\n FixedInfoCard,\n BookingSection,\n VideoSection,\n ScrollingTextDivider,\n LocationMap,\n ImageSection,\n FAQSection,\n Navbar,\n TextSection\n} from './Sections';\n\nexport interface SectionRendererProps {\n section: {\n id: string;\n type: string;\n settings: any;\n enabled?: boolean;\n position?: number;\n };\n theme: {\n colors: {\n primary: string;\n secondary: string;\n text: string;\n bookingText?: string;\n linkBackground?: string;\n linkText?: string;\n buttonText?: string;\n };\n typography: {\n headingFont?: string;\n bodyFont?: string;\n bodySize?: string;\n };\n };\n // Optional: Pass custom BookingFlow component for booking sections\n BookingFlowComponent?: React.ComponentType<any>;\n // Optional: Pass full config for booking sections\n config?: any;\n // Optional: Enable inline editing (for Studio preview mode)\n enableInlineEditing?: boolean;\n}\n\n/**\n * SectionRenderer - Universal renderer for all section types\n *\n * Maps section configuration objects to the appropriate component\n * and passes through theme/styling props.\n *\n * @example\n * ```tsx\n * <SectionRenderer\n * section={{\n * id: 'hero-1',\n * type: 'hero',\n * settings: {\n * headline: 'Welcome',\n * subheadline: 'Transform your look',\n * heroImage: '/hero.jpg',\n * layout: 'split'\n * }\n * }}\n * theme={{\n * colors: { primary: '#BCB4FF', secondary: '#CAC426', text: '#000000' },\n * typography: { headingFont: 'Geist Sans' }\n * }}\n * />\n * ```\n */\nexport function SectionRenderer({\n section,\n theme,\n BookingFlowComponent,\n config,\n enableInlineEditing = false\n}: SectionRendererProps) {\n const { type, settings } = section;\n const sectionId = section.id;\n\n // Debug log\n if (type === 'video_section') {\n console.log('🎬 Rendering video_section:', { type, settings, sectionId });\n }\n const colors = theme?.colors || {\n primary: '#BCB4FF',\n secondary: '#CAC426',\n text: '#000000'\n };\n const typography = theme?.typography || {\n headingFont: 'Geist Sans',\n bodyFont: 'Inter',\n bodySize: '16px'\n };\n\n // Map section type to component\n switch (type) {\n case 'logo':\n return (\n <Logo\n logoUrl={settings.logoUrl}\n fallbackText={settings.fallbackText}\n size={settings.size}\n alignment={settings.alignment}\n colors={colors}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'header':\n return (\n <Header\n name={settings.name}\n title={settings.title}\n bio={settings.bio}\n showName={settings.showName}\n showTitle={settings.showTitle}\n showBio={settings.showBio}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'featured_link':\n return (\n <FeaturedLink\n text={settings.text}\n url={settings.url}\n style={settings.style}\n size={settings.size}\n colors={colors}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'link_list':\n return (\n <LinkList\n links={settings.links || []}\n style={settings.style}\n colors={colors}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'social_bar':\n return (\n <SocialBar\n platforms={settings.platforms || []}\n socialLinks={settings.socialLinks}\n style={settings.style}\n size={settings.size}\n position={settings.position}\n invertIcons={settings.invertIcons}\n colors={colors}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'instagram_feed':\n return (\n <InstagramFeed\n username={settings.username}\n colors={colors}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'minimal_header':\n return (\n <MinimalHeader\n brandName={settings.brandName}\n logoUrl={settings.logoUrl}\n style={settings.style}\n alignment={settings.alignment}\n sticky={settings.sticky}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'minimal_navigation':\n return (\n <MinimalNavigation\n links={settings.links || []}\n style={settings.style}\n colors={colors}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'feature_content':\n return (\n <FeatureContent\n headline={settings.headline}\n description={settings.description}\n image={settings.image}\n buttonText={settings.buttonText}\n buttonUrl={settings.buttonUrl}\n showButton={settings.showButton}\n layout={settings.layout}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'minimal_footer':\n return (\n <MinimalFooter\n alignment={settings.alignment}\n showSocial={settings.showSocial}\n showContact={settings.showContact}\n showLinks={settings.showLinks}\n footerText={settings.footerText}\n colors={colors}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'hero':\n return (\n <Hero\n headline={settings.headline}\n subheadline={settings.subheadline}\n heroImage={settings.heroImage}\n ctaButton={settings.ctaButton}\n layout={settings.layout}\n imagePosition={settings.imagePosition}\n contentDisplay={settings.contentDisplay}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'about':\n return (\n <About\n title={settings.title}\n content={settings.content}\n image={settings.image}\n layout={settings.layout}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'services_preview':\n return (\n <ServicesPreview\n title={settings.title}\n services={settings.services}\n layout={settings.layout}\n columns={settings.columns}\n showPrices={settings.showPrices}\n showDuration={settings.showDuration}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'gallery':\n return (\n <Gallery\n title={settings.title}\n images={settings.images || []}\n columns={settings.columns}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'testimonials':\n return (\n <Testimonials\n title={settings.title}\n testimonials={settings.testimonials}\n layout={settings.layout}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'team':\n return (\n <Team\n title={settings.title}\n members={settings.members}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'contact':\n return (\n <Contact\n title={settings.title}\n showForm={settings.showForm}\n email={settings.email}\n phone={settings.phone}\n address={settings.address}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'before_after':\n return (\n <BeforeAfter\n title={settings.title}\n comparisons={settings.comparisons}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'pricing_table':\n return (\n <PricingTable\n title={settings.title}\n plans={settings.plans}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'booking':\n return (\n <BookingSection\n config={config || {}}\n colors={colors}\n BookingFlowComponent={BookingFlowComponent}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'fixed_info_card':\n return (\n <FixedInfoCard\n name={settings.name}\n subheading={settings.subheading}\n bio={settings.bio}\n links={settings.links || []}\n bookingButtonText={settings.bookingButtonText}\n bookingButtonUrl={settings.bookingButtonUrl}\n showBookingButton={settings.showBookingButton}\n position={settings.position}\n cardWidth={settings.cardWidth}\n cardColor={settings.cardColor}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'video_section':\n return (\n <VideoSection\n videoUrl={settings.videoUrl}\n aspectRatio={settings.aspectRatio}\n autoplay={settings.autoplay}\n loop={settings.loop}\n muted={settings.muted}\n controls={settings.controls}\n allowFullScreen={settings.allowFullScreen}\n coverImage={settings.coverImage}\n maxWidth={settings.maxWidth}\n alignment={settings.alignment}\n borderRadius={settings.borderRadius}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'scrolling_text_divider':\n return (\n <ScrollingTextDivider\n text={settings.text}\n scrollDirection={settings.scrollDirection}\n scrollSpeed={settings.scrollSpeed}\n orientation={settings.orientation}\n dividerIcon={settings.dividerIcon}\n customIcon={settings.customIcon}\n textSize={settings.textSize}\n textColor={settings.textColor}\n fontWeight={settings.fontWeight}\n backgroundColor={settings.backgroundColor}\n backgroundGradient={settings.backgroundGradient}\n pauseOnHover={settings.pauseOnHover}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'location_map':\n return (\n <LocationMap\n address={settings.address}\n displayType={settings.displayType}\n mapHeight={settings.mapHeight}\n mapStyle={settings.mapStyle}\n zoom={settings.zoom}\n showMarker={settings.showMarker}\n borderRadius={settings.borderRadius}\n directionsButtonText={settings.directionsButtonText}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'image_section':\n return (\n <ImageSection\n imageUrl={settings.imageUrl}\n altText={settings.altText}\n caption={settings.caption}\n maxWidth={settings.maxWidth}\n alignment={settings.alignment}\n aspectRatio={settings.aspectRatio}\n borderRadius={settings.borderRadius}\n linkUrl={settings.linkUrl}\n openInNewTab={settings.openInNewTab}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'faq_section':\n return (\n <FAQSection\n title={settings.title}\n faqs={settings.faqs}\n layout={settings.layout}\n maxWidth={settings.maxWidth}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'navbar':\n return (\n <Navbar\n brandName={settings.brandName}\n logoUrl={settings.logoUrl}\n showLogo={settings.showLogo}\n showBrandName={settings.showBrandName}\n links={settings.links}\n ctaText={settings.ctaText}\n ctaUrl={settings.ctaUrl}\n sticky={settings.sticky}\n transparentOnTop={settings.transparentOnTop}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n case 'text_section':\n return (\n <TextSection\n title={settings.title}\n content={settings.content}\n alignment={settings.alignment}\n maxWidth={settings.maxWidth}\n textSize={settings.textSize}\n backgroundColor={settings.backgroundColor}\n textColor={settings.textColor}\n paddingY={settings.paddingY}\n colors={colors}\n typography={typography}\n enableInlineEditing={enableInlineEditing}\n sectionId={sectionId}\n />\n );\n\n default:\n // Unknown section type - render placeholder\n return (\n <div className=\"container mx-auto px-4 py-16\">\n <div\n className=\"max-w-4xl mx-auto p-8 rounded-lg border-2 border-dashed text-center\"\n style={{ borderColor: colors.primary, opacity: 0.5 }}\n >\n <p className=\"text-lg\" style={{ color: colors.text }}>\n Unknown section type: {type}\n </p>\n </div>\n </div>\n );\n }\n}\n\nexport default SectionRenderer;\n","/**\n * Form Image Storage Utilities for OVIAH Booking Components\n *\n * Handles image uploads for form photo fields using Supabase Storage\n * Targets the \"form-uploads\" bucket for form submission attachments\n */\n\nimport { createClient } from '@supabase/supabase-js';\n\n// Supabase client will be initialized from environment variables\nlet supabaseClient: ReturnType<typeof createClient> | null = null;\n\nexport function getSupabaseClient() {\n if (!supabaseClient) {\n const supabaseUrl = import.meta.env.VITE_SUPABASE_URL || process.env.NEXT_PUBLIC_SUPABASE_URL;\n const supabaseKey = import.meta.env.VITE_SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;\n\n if (!supabaseUrl || !supabaseKey) {\n throw new Error('Supabase URL and Anon Key must be provided');\n }\n\n supabaseClient = createClient(supabaseUrl, supabaseKey);\n }\n return supabaseClient;\n}\n\n// Storage configuration for form uploads\nexport const FORM_UPLOAD_CONFIG = {\n bucket: 'form-uploads',\n structure: '{clientId}/{formId}/{timestamp}_{filename}',\n limits: {\n maxSize: 5 * 1024 * 1024, // 5MB in bytes\n allowedTypes: ['image/jpeg', 'image/png', 'image/webp', 'image/jpg'],\n }\n} as const;\n\nexport interface UploadedFormImage {\n url: string;\n path: string;\n filename: string;\n size: number;\n type: string;\n}\n\n/**\n * Upload a form image to Supabase Storage\n */\nexport async function uploadFormImage(\n file: File,\n clientId: string,\n formId: string\n): Promise<UploadedFormImage> {\n console.log('📦 uploadFormImage called:', { fileName: file.name, clientId, formId });\n\n // Validate file size\n if (file.size > FORM_UPLOAD_CONFIG.limits.maxSize) {\n throw new Error(`File size exceeds maximum of ${FORM_UPLOAD_CONFIG.limits.maxSize / 1024 / 1024}MB`);\n }\n\n // Validate file type\n if (!FORM_UPLOAD_CONFIG.limits.allowedTypes.includes(file.type)) {\n throw new Error(`File type ${file.type} not allowed. Accepted types: JPG, PNG, WebP`);\n }\n\n console.log('🎨 Starting image optimization...');\n // Optimize image before upload\n const optimizedFile = await optimizeImage(file);\n console.log('✅ Image optimized:', { originalSize: file.size, optimizedSize: optimizedFile.size });\n\n // Generate unique filename\n const timestamp = Date.now();\n const fileExt = file.name.split('.').pop()?.toLowerCase() || 'jpg';\n const sanitizedName = file.name.replace(/[^a-zA-Z0-9.-]/g, '_').substring(0, 50);\n const fileName = `${timestamp}_${sanitizedName}`;\n const filePath = `${clientId}/${formId}/${fileName}`;\n\n console.log('☁️ Uploading to Supabase:', { filePath, bucket: FORM_UPLOAD_CONFIG.bucket });\n\n // Get Supabase client\n const supabase = getSupabaseClient();\n\n // Upload to Supabase Storage\n const { data, error } = await supabase.storage\n .from(FORM_UPLOAD_CONFIG.bucket)\n .upload(filePath, optimizedFile, {\n cacheControl: '3600',\n upsert: false,\n contentType: optimizedFile.type\n });\n\n console.log('📤 Upload result:', { data, error });\n\n if (error) {\n console.error('❌ Supabase upload error:', error);\n throw new Error(`Upload failed: ${error.message}`);\n }\n\n console.log('✅ Upload successful, getting public URL...');\n\n // Get public URL\n const { data: { publicUrl } } = supabase.storage\n .from(FORM_UPLOAD_CONFIG.bucket)\n .getPublicUrl(filePath);\n\n console.log('✅ Public URL obtained:', publicUrl);\n\n return {\n url: publicUrl,\n path: filePath,\n filename: file.name,\n size: optimizedFile.size,\n type: optimizedFile.type\n };\n}\n\n/**\n * Optimize image before upload\n * - Resize to max 1920px width\n * - Compress to 85% quality\n */\nexport async function optimizeImage(\n file: File,\n maxWidth: number = 1920,\n quality: number = 0.85\n): Promise<File> {\n console.log('🖼️ optimizeImage: Starting optimization');\n\n // Determine if the image supports transparency\n const supportsTransparency = file.type === 'image/png' || file.type === 'image/webp';\n const outputType = supportsTransparency ? file.type : 'image/jpeg';\n\n console.log('🖼️ optimizeImage: Output type:', outputType, 'Transparency:', supportsTransparency);\n\n return new Promise((resolve, reject) => {\n // Set a timeout to prevent hanging\n const timeout = setTimeout(() => {\n console.error('⏱️ optimizeImage: Timeout after 30 seconds');\n reject(new Error('Image optimization timed out'));\n }, 30000);\n\n const img = new Image();\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d', { alpha: supportsTransparency });\n\n if (!ctx) {\n clearTimeout(timeout);\n console.error('❌ optimizeImage: Canvas context not available');\n reject(new Error('Canvas context not available'));\n return;\n }\n\n console.log('🖼️ optimizeImage: Created canvas and context');\n\n img.onload = () => {\n console.log('🖼️ optimizeImage: Image loaded', { width: img.width, height: img.height });\n\n try {\n // Calculate new dimensions\n const ratio = Math.min(maxWidth / img.width, 1);\n canvas.width = img.width * ratio;\n canvas.height = img.height * ratio;\n\n console.log('🖼️ optimizeImage: Resizing to', { width: canvas.width, height: canvas.height });\n\n // Clear canvas with transparency if needed\n if (supportsTransparency) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n // Draw resized image\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n console.log('🖼️ optimizeImage: Image drawn, converting to blob...');\n\n // Convert to blob\n canvas.toBlob(\n (blob) => {\n clearTimeout(timeout);\n\n if (!blob) {\n console.error('❌ optimizeImage: Blob conversion failed');\n reject(new Error('Image optimization failed'));\n return;\n }\n\n console.log('✅ optimizeImage: Blob created', { size: blob.size, type: outputType });\n\n // Create new file with optimized blob\n const optimizedFile = new File([blob], file.name, {\n type: outputType,\n lastModified: Date.now()\n });\n\n console.log('✅ optimizeImage: Optimization complete');\n resolve(optimizedFile);\n },\n outputType,\n quality\n );\n } catch (err) {\n clearTimeout(timeout);\n console.error('❌ optimizeImage: Error during processing', err);\n reject(err);\n }\n };\n\n img.onerror = (err) => {\n clearTimeout(timeout);\n console.error('❌ optimizeImage: Failed to load image', err);\n reject(new Error('Failed to load image'));\n };\n\n console.log('🖼️ optimizeImage: Creating object URL and loading image...');\n img.src = URL.createObjectURL(file);\n });\n}\n\n/**\n * Validate image file\n */\nexport function validateImageFile(file: File): { valid: boolean; error?: string } {\n // Check file size\n if (file.size > FORM_UPLOAD_CONFIG.limits.maxSize) {\n return {\n valid: false,\n error: `File size exceeds maximum of ${FORM_UPLOAD_CONFIG.limits.maxSize / 1024 / 1024}MB`\n };\n }\n\n // Check file type\n if (!FORM_UPLOAD_CONFIG.limits.allowedTypes.includes(file.type)) {\n return {\n valid: false,\n error: `File type not allowed. Accepted: JPG, PNG, WebP`\n };\n }\n\n return { valid: true };\n}\n","'use client';\n\nimport React, { useRef, useState } from 'react';\nimport { uploadFormImage, validateImageFile } from '../../lib/storage';\n\ninterface FormFieldData {\n id: string;\n label: string;\n type: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'radio' | 'checkbox' | 'date' | 'photo' | 'image';\n placeholder?: string;\n required: boolean;\n options?: Array<{ value: string; label: string }>;\n}\n\ninterface FormFieldProps {\n field: FormFieldData;\n value: any;\n error?: string;\n onChange: (value: any) => void;\n businessId?: string;\n formId?: string;\n styling?: {\n fieldStyle?: 'outlined' | 'filled' | 'underlined' | 'minimal';\n sectionBackground?: string;\n fieldBorder?: string;\n labelColor?: string;\n textColor?: string;\n buttonColor?: string;\n };\n}\n\nexport default function FormField({ field, value, error, onChange, businessId, formId, styling }: FormFieldProps) {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [uploading, setUploading] = useState(false);\n const [uploadError, setUploadError] = useState<string | null>(null);\n\n const labelColor = styling?.labelColor || '#374151';\n const fieldStyle = styling?.fieldStyle || 'outlined';\n\n // Build input classes based on field style\n const getInputClasses = () => {\n const baseClasses = 'w-full px-4 py-2 transition-all focus:outline-none';\n\n if (error) {\n return `${baseClasses} bg-red-50 border border-red-300 rounded-lg focus:ring-2 focus:ring-red-500`;\n }\n\n switch (fieldStyle) {\n case 'filled':\n return `${baseClasses} bg-gray-100 border border-transparent rounded-lg focus:bg-white focus:ring-2 focus:ring-gray-900 focus:border-transparent`;\n case 'underlined':\n return `${baseClasses} bg-transparent border-0 border-b-2 border-gray-300 rounded-none focus:border-gray-900 focus:ring-0 px-0`;\n case 'minimal':\n return `${baseClasses} bg-transparent border border-gray-200 rounded-lg focus:border-gray-400 focus:ring-1 focus:ring-gray-300`;\n case 'outlined':\n default:\n return `${baseClasses} bg-white border-2 border-gray-300 rounded-lg focus:border-gray-900 focus:ring-2 focus:ring-gray-900`;\n }\n };\n\n const baseInputClass = getInputClasses();\n const labelClass = `block text-sm font-medium mb-1`;\n\n // Text input\n if (field.type === 'text' || field.type === 'email' || field.type === 'tel') {\n return (\n <div>\n <label htmlFor={field.id} className={labelClass} style={{ color: labelColor }}>\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\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 placeholder={field.placeholder}\n required={field.required}\n className={baseInputClass}\n style={{ color: labelColor }}\n />\n {error && <p className=\"mt-1 text-xs text-red-600\">{error}</p>}\n </div>\n );\n }\n\n // Textarea\n if (field.type === 'textarea') {\n return (\n <div>\n <label htmlFor={field.id} className={labelClass} style={{ color: labelColor }}>\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n <textarea\n id={field.id}\n name={field.id}\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={field.placeholder}\n required={field.required}\n rows={4}\n className={baseInputClass}\n style={{ color: labelColor }}\n />\n {error && <p className=\"mt-1 text-xs text-red-600\">{error}</p>}\n </div>\n );\n }\n\n // Date input\n if (field.type === 'date') {\n return (\n <div>\n <label htmlFor={field.id} className={labelClass} style={{ color: labelColor }}>\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n <input\n type=\"date\"\n id={field.id}\n name={field.id}\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n required={field.required}\n className={baseInputClass}\n style={{ color: labelColor }}\n />\n {error && <p className=\"mt-1 text-xs text-red-600\">{error}</p>}\n </div>\n );\n }\n\n // Select dropdown\n if (field.type === 'select' && field.options) {\n return (\n <div>\n <label htmlFor={field.id} className={labelClass} style={{ color: labelColor }}>\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n <select\n id={field.id}\n name={field.id}\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n required={field.required}\n className={baseInputClass}\n style={{ color: labelColor }}\n >\n <option value=\"\">Select an option...</option>\n {field.options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n {error && <p className=\"mt-1 text-xs text-red-600\">{error}</p>}\n </div>\n );\n }\n\n // Radio buttons\n if (field.type === 'radio' && field.options) {\n return (\n <div>\n <label className={labelClass} style={{ color: labelColor }}>\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n <div className=\"space-y-2 mt-2\">\n {field.options.map((option) => (\n <label\n key={option.value}\n className=\"flex items-center space-x-2 cursor-pointer\"\n >\n <input\n type=\"radio\"\n name={field.id}\n value={option.value}\n checked={value === option.value}\n onChange={(e) => onChange(e.target.value)}\n required={field.required}\n className=\"w-4 h-4 text-gray-900 focus:ring-gray-900 focus:ring-2\"\n />\n <span className=\"text-sm\" style={{ color: styling?.labelColor || '#000000' }}>{option.label}</span>\n </label>\n ))}\n </div>\n {error && <p className=\"mt-1 text-xs text-red-600\">{error}</p>}\n </div>\n );\n }\n\n // Checkboxes (multiple selection)\n if (field.type === 'checkbox' && field.options) {\n const selectedValues = Array.isArray(value) ? value : [];\n\n const handleCheckboxChange = (optionValue: string) => {\n const newValues = selectedValues.includes(optionValue)\n ? selectedValues.filter((v) => v !== optionValue)\n : [...selectedValues, optionValue];\n onChange(newValues);\n };\n\n return (\n <div>\n <label className={labelClass} style={{ color: labelColor }}>\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n <div className=\"space-y-2 mt-2\">\n {field.options.map((option) => (\n <label\n key={option.value}\n className=\"flex items-center space-x-2 cursor-pointer\"\n >\n <input\n type=\"checkbox\"\n name={`${field.id}[]`}\n value={option.value}\n checked={selectedValues.includes(option.value)}\n onChange={() => handleCheckboxChange(option.value)}\n className=\"w-4 h-4 text-gray-900 focus:ring-gray-900 focus:ring-2 rounded\"\n />\n <span className=\"text-sm\" style={{ color: styling?.labelColor || '#000000' }}>{option.label}</span>\n </label>\n ))}\n </div>\n {error && <p className=\"mt-1 text-xs text-red-600\">{error}</p>}\n </div>\n );\n }\n\n // Photo upload\n if (field.type === 'photo') {\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n setUploadError(null);\n\n // Validate file\n const validation = validateImageFile(file);\n if (!validation.valid) {\n setUploadError(validation.error || 'Invalid file');\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n return;\n }\n\n // Check if businessId and formId are provided\n if (!businessId || !formId) {\n setUploadError('Missing required configuration for file upload');\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n return;\n }\n\n // Upload to Supabase Storage\n setUploading(true);\n try {\n const uploaded = await uploadFormImage(file, businessId, formId);\n onChange({\n url: uploaded.url,\n filename: uploaded.filename,\n size: uploaded.size,\n type: uploaded.type,\n uploadedAt: new Date().toISOString()\n });\n setUploadError(null);\n } catch (err) {\n console.error('Photo upload error:', err);\n setUploadError(err instanceof Error ? err.message : 'Upload failed');\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n } finally {\n setUploading(false);\n }\n };\n\n return (\n <div>\n <label htmlFor={field.id} className={labelClass} style={{ color: labelColor }}>\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n <div className=\"mt-1\">\n <input\n ref={fileInputRef}\n type=\"file\"\n id={field.id}\n name={field.id}\n accept=\"image/*\"\n onChange={handleFileChange}\n required={field.required}\n disabled={uploading}\n className=\"block w-full text-sm text-gray-500\n file:mr-4 file:py-2 file:px-4\n file:rounded-lg file:border-0\n file:text-sm file:font-medium\n file:bg-gray-900 file:text-white\n hover:file:bg-gray-800\n file:cursor-pointer cursor-pointer\n disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n {uploading && (\n <div className=\"mt-2 flex items-center gap-2 text-xs text-blue-600\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-blue-600 border-t-transparent\"></div>\n <span>Uploading...</span>\n </div>\n )}\n {value && !uploading && (\n <div className=\"mt-2 flex items-center gap-2\">\n <svg className=\"w-4 h-4 text-green-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n <span className=\"text-xs text-gray-600\">\n {value.filename} ({Math.round(value.size / 1024)}KB)\n </span>\n </div>\n )}\n </div>\n <p className=\"mt-1 text-xs text-gray-500\">Max file size: 5MB • JPG, PNG, WebP</p>\n {uploadError && <p className=\"mt-1 text-xs text-red-600\">{uploadError}</p>}\n {error && <p className=\"mt-1 text-xs text-red-600\">{error}</p>}\n </div>\n );\n }\n\n // Decorative image (within section)\n if (field.type === 'image') {\n const fieldData = field as any;\n const imageUrl = fieldData.imageUrl;\n\n if (!imageUrl) return null;\n\n const imageSize = fieldData.imageSize || 'medium';\n const isFull = imageSize === 'full';\n\n const sizeMap = {\n small: '200px',\n medium: '400px',\n large: '600px'\n };\n const maxWidth = isFull ? 'none' : (sizeMap[imageSize as keyof typeof sizeMap] || sizeMap.medium);\n\n const borderRadiusMap = {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n full: '9999px'\n };\n const borderRadius = borderRadiusMap[fieldData.borderRadius as keyof typeof borderRadiusMap] || borderRadiusMap.md;\n\n const alignmentClass = isFull ? '' : {\n left: 'mr-auto',\n center: 'mx-auto',\n right: 'ml-auto'\n }[fieldData.imageAlignment || 'center'];\n\n const containerStyle: React.CSSProperties = {\n maxWidth,\n ...(isFull && { width: '100%' })\n };\n\n return (\n <div className={alignmentClass} style={containerStyle}>\n <img\n src={imageUrl}\n alt={field.label || ''}\n className=\"w-full h-auto\"\n style={{ borderRadius }}\n />\n </div>\n );\n }\n\n return null;\n}\n","import {useMemo} from 'react';\n\nexport function useCombinedRefs<T>(\n ...refs: ((node: T) => void)[]\n): (node: T) => void {\n return useMemo(\n () => (node: T) => {\n refs.forEach((ref) => ref(node));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs\n );\n}\n","// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const canUseDOM =\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined';\n","export function isWindow(element: Object): element is typeof window {\n const elementString = Object.prototype.toString.call(element);\n return (\n elementString === '[object Window]' ||\n // In Electron context the Window object serializes to [object global]\n elementString === '[object global]'\n );\n}\n","export function isNode(node: Object): node is Node {\n return 'nodeType' in node;\n}\n","import {isWindow} from '../type-guards/isWindow';\nimport {isNode} from '../type-guards/isNode';\n\nexport function getWindow(target: Event['target']): typeof window {\n if (!target) {\n return window;\n }\n\n if (isWindow(target)) {\n return target;\n }\n\n if (!isNode(target)) {\n return window;\n }\n\n return target.ownerDocument?.defaultView ?? window;\n}\n","import {getWindow} from '../execution-context/getWindow';\n\nexport function isDocument(node: Node): node is Document {\n const {Document} = getWindow(node);\n\n return node instanceof Document;\n}\n","import {getWindow} from '../execution-context/getWindow';\n\nimport {isWindow} from './isWindow';\n\nexport function isHTMLElement(node: Node | Window): node is HTMLElement {\n if (isWindow(node)) {\n return false;\n }\n\n return node instanceof getWindow(node).HTMLElement;\n}\n","import {getWindow} from '../execution-context/getWindow';\n\nexport function isSVGElement(node: Node): node is SVGElement {\n return node instanceof getWindow(node).SVGElement;\n}\n","import {\n isWindow,\n isHTMLElement,\n isDocument,\n isNode,\n isSVGElement,\n} from '../type-guards';\n\nexport function getOwnerDocument(target: Event['target']): Document {\n if (!target) {\n return document;\n }\n\n if (isWindow(target)) {\n return target.document;\n }\n\n if (!isNode(target)) {\n return document;\n }\n\n if (isDocument(target)) {\n return target;\n }\n\n if (isHTMLElement(target) || isSVGElement(target)) {\n return target.ownerDocument;\n }\n\n return document;\n}\n","import {useEffect, useLayoutEffect} from 'react';\n\nimport {canUseDOM} from '../execution-context';\n\n/**\n * A hook that resolves to useEffect on the server and useLayoutEffect on the client\n * @param callback {function} Callback function that is invoked when the dependencies of the hook change\n */\nexport const useIsomorphicLayoutEffect = canUseDOM\n ? useLayoutEffect\n : useEffect;\n","import {useCallback, useRef} from 'react';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect';\n\nexport function useEvent<T extends Function>(handler: T | undefined) {\n const handlerRef = useRef<T | undefined>(handler);\n\n useIsomorphicLayoutEffect(() => {\n handlerRef.current = handler;\n });\n\n return useCallback(function (...args: any) {\n return handlerRef.current?.(...args);\n }, []);\n}\n","import {useCallback, useRef} from 'react';\n\nexport function useInterval() {\n const intervalRef = useRef<number | null>(null);\n\n const set = useCallback((listener: Function, duration: number) => {\n intervalRef.current = setInterval(listener, duration);\n }, []);\n\n const clear = useCallback(() => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n\n return [set, clear] as const;\n}\n","import {useRef} from 'react';\nimport type {DependencyList} from 'react';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect';\n\nexport function useLatestValue<T extends any>(\n value: T,\n dependencies: DependencyList = [value]\n) {\n const valueRef = useRef<T>(value);\n\n useIsomorphicLayoutEffect(() => {\n if (valueRef.current !== value) {\n valueRef.current = value;\n }\n }, dependencies);\n\n return valueRef;\n}\n","import {useMemo, useRef} from 'react';\n\nexport function useLazyMemo<T>(\n callback: (prevValue: T | undefined) => T,\n dependencies: any[]\n) {\n const valueRef = useRef<T>();\n\n return useMemo(\n () => {\n const newValue = callback(valueRef.current);\n valueRef.current = newValue;\n\n return newValue;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...dependencies]\n );\n}\n","import {useRef, useCallback} from 'react';\n\nimport {useEvent} from './useEvent';\n\nexport function useNodeRef(\n onChange?: (\n newElement: HTMLElement | null,\n previousElement: HTMLElement | null\n ) => void\n) {\n const onChangeHandler = useEvent(onChange);\n const node = useRef<HTMLElement | null>(null);\n const setNodeRef = useCallback(\n (element: HTMLElement | null) => {\n if (element !== node.current) {\n onChangeHandler?.(element, node.current);\n }\n\n node.current = element;\n },\n //eslint-disable-next-line\n []\n );\n\n return [node, setNodeRef] as const;\n}\n","import {useRef, useEffect} from 'react';\n\nexport function usePrevious<T>(value: T) {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n}\n","import {useMemo} from 'react';\n\nlet ids: Record<string, number> = {};\n\nexport function useUniqueId(prefix: string, value?: string) {\n return useMemo(() => {\n if (value) {\n return value;\n }\n\n const id = ids[prefix] == null ? 0 : ids[prefix] + 1;\n ids[prefix] = id;\n\n return `${prefix}-${id}`;\n }, [prefix, value]);\n}\n","function createAdjustmentFn(modifier: number) {\n return <T extends Record<U, number>, U extends string>(\n object: T,\n ...adjustments: Partial<T>[]\n ): T => {\n return adjustments.reduce<T>(\n (accumulator, adjustment) => {\n const entries = Object.entries(adjustment) as [U, number][];\n\n for (const [key, valueAdjustment] of entries) {\n const value = accumulator[key];\n\n if (value != null) {\n accumulator[key] = (value + modifier * valueAdjustment) as T[U];\n }\n }\n\n return accumulator;\n },\n {\n ...object,\n }\n );\n };\n}\n\nexport const add = createAdjustmentFn(1);\nexport const subtract = createAdjustmentFn(-1);\n","export function hasViewportRelativeCoordinates(\n event: Event\n): event is Event & Pick<PointerEvent, 'clientX' | 'clientY'> {\n return 'clientX' in event && 'clientY' in event;\n}\n","import {getWindow} from '../execution-context';\n\nexport function isKeyboardEvent(\n event: Event | undefined | null\n): event is KeyboardEvent {\n if (!event) {\n return false;\n }\n\n const {KeyboardEvent} = getWindow(event.target);\n\n return KeyboardEvent && event instanceof KeyboardEvent;\n}\n","import {getWindow} from '../execution-context';\n\nexport function isTouchEvent(\n event: Event | undefined | null\n): event is TouchEvent {\n if (!event) {\n return false;\n }\n\n const {TouchEvent} = getWindow(event.target);\n\n return TouchEvent && event instanceof TouchEvent;\n}\n","import type {Coordinates} from './types';\nimport {isTouchEvent, hasViewportRelativeCoordinates} from '../event';\n\n/**\n * Returns the normalized x and y coordinates for mouse and touch events.\n */\nexport function getEventCoordinates(event: Event): Coordinates | null {\n if (isTouchEvent(event)) {\n if (event.touches && event.touches.length) {\n const {clientX: x, clientY: y} = event.touches[0];\n\n return {\n x,\n y,\n };\n } else if (event.changedTouches && event.changedTouches.length) {\n const {clientX: x, clientY: y} = event.changedTouches[0];\n\n return {\n x,\n y,\n };\n }\n }\n\n if (hasViewportRelativeCoordinates(event)) {\n return {\n x: event.clientX,\n y: event.clientY,\n };\n }\n\n return null;\n}\n","export type Transform = {\n x: number;\n y: number;\n scaleX: number;\n scaleY: number;\n};\n\nexport interface Transition {\n property: string;\n easing: string;\n duration: number;\n}\n\nexport const CSS = Object.freeze({\n Translate: {\n toString(transform: Transform | null) {\n if (!transform) {\n return;\n }\n\n const {x, y} = transform;\n\n return `translate3d(${x ? Math.round(x) : 0}px, ${\n y ? Math.round(y) : 0\n }px, 0)`;\n },\n },\n Scale: {\n toString(transform: Transform | null) {\n if (!transform) {\n return;\n }\n\n const {scaleX, scaleY} = transform;\n\n return `scaleX(${scaleX}) scaleY(${scaleY})`;\n },\n },\n Transform: {\n toString(transform: Transform | null) {\n if (!transform) {\n return;\n }\n\n return [\n CSS.Translate.toString(transform),\n CSS.Scale.toString(transform),\n ].join(' ');\n },\n },\n Transition: {\n toString({property, duration, easing}: Transition) {\n return `${property} ${duration}ms ${easing}`;\n },\n },\n});\n","const SELECTOR =\n 'a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]';\n\nexport function findFirstFocusableNode(\n element: HTMLElement\n): HTMLElement | null {\n if (element.matches(SELECTOR)) {\n return element;\n }\n\n return element.querySelector(SELECTOR);\n}\n","import React from 'react';\n\ninterface Props {\n id: string;\n value: string;\n}\n\nconst hiddenStyles: React.CSSProperties = {\n display: 'none',\n};\n\nexport function HiddenText({id, value}: Props) {\n return (\n <div id={id} style={hiddenStyles}>\n {value}\n </div>\n );\n}\n","import React from 'react';\n\nexport interface Props {\n id: string;\n announcement: string;\n ariaLiveType?: \"polite\" | \"assertive\" | \"off\";\n}\n\nexport function LiveRegion({id, announcement, ariaLiveType = \"assertive\"}: Props) {\n // Hide element visually but keep it readable by screen readers\n const visuallyHidden: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: 1,\n height: 1,\n margin: -1,\n border: 0,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(100%)',\n whiteSpace: 'nowrap',\n };\n \n return (\n <div\n id={id}\n style={visuallyHidden}\n role=\"status\"\n aria-live={ariaLiveType}\n aria-atomic\n >\n {announcement}\n </div>\n );\n}\n","import {useCallback, useState} from 'react';\n\nexport function useAnnouncement() {\n const [announcement, setAnnouncement] = useState('');\n const announce = useCallback((value: string | undefined) => {\n if (value != null) {\n setAnnouncement(value);\n }\n }, []);\n\n return {announce, announcement} as const;\n}\n","import {createContext} from 'react';\n\nimport type {RegisterListener} from './types';\n\nexport const DndMonitorContext = createContext<RegisterListener | null>(null);\n","import {useContext, useEffect} from 'react';\n\nimport {DndMonitorContext} from './context';\nimport type {DndMonitorListener} from './types';\n\nexport function useDndMonitor(listener: DndMonitorListener) {\n const registerListener = useContext(DndMonitorContext);\n\n useEffect(() => {\n if (!registerListener) {\n throw new Error(\n 'useDndMonitor must be used within a children of <DndContext>'\n );\n }\n\n const unsubscribe = registerListener(listener);\n\n return unsubscribe;\n }, [listener, registerListener]);\n}\n","import {useCallback, useState} from 'react';\n\nimport type {DndMonitorListener, DndMonitorEvent} from './types';\n\nexport function useDndMonitorProvider() {\n const [listeners] = useState(() => new Set<DndMonitorListener>());\n\n const registerListener = useCallback(\n (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n [listeners]\n );\n\n const dispatch = useCallback(\n ({type, event}: DndMonitorEvent) => {\n listeners.forEach((listener) => listener[type]?.(event as any));\n },\n [listeners]\n );\n\n return [dispatch, registerListener] as const;\n}\n","import type {Announcements, ScreenReaderInstructions} from './types';\n\nexport const defaultScreenReaderInstructions: ScreenReaderInstructions = {\n draggable: `\n To pick up a draggable item, press the space bar.\n While dragging, use the arrow keys to move the item.\n Press space again to drop the item in its new position, or press escape to cancel.\n `,\n};\n\nexport const defaultAnnouncements: Announcements = {\n onDragStart({active}) {\n return `Picked up draggable item ${active.id}.`;\n },\n onDragOver({active, over}) {\n if (over) {\n return `Draggable item ${active.id} was moved over droppable area ${over.id}.`;\n }\n\n return `Draggable item ${active.id} is no longer over a droppable area.`;\n },\n onDragEnd({active, over}) {\n if (over) {\n return `Draggable item ${active.id} was dropped over droppable area ${over.id}`;\n }\n\n return `Draggable item ${active.id} was dropped.`;\n },\n onDragCancel({active}) {\n return `Dragging was cancelled. Draggable item ${active.id} was dropped.`;\n },\n};\n","import React, {useEffect, useMemo, useState} from 'react';\nimport {createPortal} from 'react-dom';\nimport {useUniqueId} from '@dnd-kit/utilities';\nimport {HiddenText, LiveRegion, useAnnouncement} from '@dnd-kit/accessibility';\n\nimport {DndMonitorListener, useDndMonitor} from '../DndMonitor';\n\nimport type {Announcements, ScreenReaderInstructions} from './types';\nimport {\n defaultAnnouncements,\n defaultScreenReaderInstructions,\n} from './defaults';\n\ninterface Props {\n announcements?: Announcements;\n container?: Element;\n screenReaderInstructions?: ScreenReaderInstructions;\n hiddenTextDescribedById: string;\n}\n\nexport function Accessibility({\n announcements = defaultAnnouncements,\n container,\n hiddenTextDescribedById,\n screenReaderInstructions = defaultScreenReaderInstructions,\n}: Props) {\n const {announce, announcement} = useAnnouncement();\n const liveRegionId = useUniqueId(`DndLiveRegion`);\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useDndMonitor(\n useMemo<DndMonitorListener>(\n () => ({\n onDragStart({active}) {\n announce(announcements.onDragStart({active}));\n },\n onDragMove({active, over}) {\n if (announcements.onDragMove) {\n announce(announcements.onDragMove({active, over}));\n }\n },\n onDragOver({active, over}) {\n announce(announcements.onDragOver({active, over}));\n },\n onDragEnd({active, over}) {\n announce(announcements.onDragEnd({active, over}));\n },\n onDragCancel({active, over}) {\n announce(announcements.onDragCancel({active, over}));\n },\n }),\n [announce, announcements]\n )\n );\n\n if (!mounted) {\n return null;\n }\n\n const markup = (\n <>\n <HiddenText\n id={hiddenTextDescribedById}\n value={screenReaderInstructions.draggable}\n />\n <LiveRegion id={liveRegionId} announcement={announcement} />\n </>\n );\n\n return container ? createPortal(markup, container) : markup;\n}\n","import type {Coordinates, UniqueIdentifier} from '../types';\nimport type {DroppableContainer} from './types';\n\nexport enum Action {\n DragStart = 'dragStart',\n DragMove = 'dragMove',\n DragEnd = 'dragEnd',\n DragCancel = 'dragCancel',\n DragOver = 'dragOver',\n RegisterDroppable = 'registerDroppable',\n SetDroppableDisabled = 'setDroppableDisabled',\n UnregisterDroppable = 'unregisterDroppable',\n}\n\nexport type Actions =\n | {\n type: Action.DragStart;\n active: UniqueIdentifier;\n initialCoordinates: Coordinates;\n }\n | {type: Action.DragMove; coordinates: Coordinates}\n | {type: Action.DragEnd}\n | {type: Action.DragCancel}\n | {\n type: Action.RegisterDroppable;\n element: DroppableContainer;\n }\n | {\n type: Action.SetDroppableDisabled;\n id: UniqueIdentifier;\n key: UniqueIdentifier;\n disabled: boolean;\n }\n | {\n type: Action.UnregisterDroppable;\n id: UniqueIdentifier;\n key: UniqueIdentifier;\n };\n","export function noop(..._args: any) {}\n","import {useMemo} from 'react';\n\nimport type {Sensor, SensorDescriptor, SensorOptions} from './types';\n\nexport function useSensor<T extends SensorOptions>(\n sensor: Sensor<T>,\n options?: T\n): SensorDescriptor<T> {\n return useMemo(\n () => ({\n sensor,\n options: options ?? ({} as T),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [sensor, options]\n );\n}\n","import {useMemo} from 'react';\n\nimport type {SensorDescriptor, SensorOptions} from './types';\n\nexport function useSensors(\n ...sensors: (SensorDescriptor<any> | undefined | null)[]\n): SensorDescriptor<SensorOptions>[] {\n return useMemo(\n () =>\n [...sensors].filter(\n (sensor): sensor is SensorDescriptor<any> => sensor != null\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...sensors]\n );\n}\n","import type {Coordinates} from '../../types';\n\nexport const defaultCoordinates: Coordinates = Object.freeze({\n x: 0,\n y: 0,\n});\n","import type {Coordinates} from '../../types';\n\n/**\n * Returns the distance between two points\n */\nexport function distanceBetween(p1: Coordinates, p2: Coordinates) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n","/* eslint-disable no-redeclare */\nimport type {ClientRect} from '../../types';\n\nimport type {Collision, CollisionDescriptor} from './types';\n\n/**\n * Sort collisions from smallest to greatest value\n */\nexport function sortCollisionsAsc(\n {data: {value: a}}: CollisionDescriptor,\n {data: {value: b}}: CollisionDescriptor\n) {\n return a - b;\n}\n\n/**\n * Sort collisions from greatest to smallest value\n */\nexport function sortCollisionsDesc(\n {data: {value: a}}: CollisionDescriptor,\n {data: {value: b}}: CollisionDescriptor\n) {\n return b - a;\n}\n\n/**\n * Returns the coordinates of the corners of a given rectangle:\n * [TopLeft {x, y}, TopRight {x, y}, BottomLeft {x, y}, BottomRight {x, y}]\n */\nexport function cornersOfRectangle({left, top, height, width}: ClientRect) {\n return [\n {\n x: left,\n y: top,\n },\n {\n x: left + width,\n y: top,\n },\n {\n x: left,\n y: top + height,\n },\n {\n x: left + width,\n y: top + height,\n },\n ];\n}\n\n/**\n * Returns the first collision, or null if there isn't one.\n * If a property is specified, returns the specified property of the first collision.\n */\nexport function getFirstCollision(\n collisions: Collision[] | null | undefined\n): Collision | null;\nexport function getFirstCollision<T extends keyof Collision>(\n collisions: Collision[] | null | undefined,\n property: T\n): Collision[T] | null;\nexport function getFirstCollision(\n collisions: Collision[] | null | undefined,\n property?: keyof Collision\n) {\n if (!collisions || collisions.length === 0) {\n return null;\n }\n\n const [firstCollision] = collisions;\n\n return property ? firstCollision[property] : firstCollision;\n}\n","import {distanceBetween} from '../coordinates';\nimport type {Coordinates, ClientRect} from '../../types';\n\nimport type {CollisionDescriptor, CollisionDetection} from './types';\nimport {sortCollisionsAsc} from './helpers';\n\n/**\n * Returns the coordinates of the center of a given ClientRect\n */\nfunction centerOfRectangle(\n rect: ClientRect,\n left = rect.left,\n top = rect.top\n): Coordinates {\n return {\n x: left + rect.width * 0.5,\n y: top + rect.height * 0.5,\n };\n}\n\n/**\n * Returns the closest rectangles from an array of rectangles to the center of a given\n * rectangle.\n */\nexport const closestCenter: CollisionDetection = ({\n collisionRect,\n droppableRects,\n droppableContainers,\n}) => {\n const centerRect = centerOfRectangle(\n collisionRect,\n collisionRect.left,\n collisionRect.top\n );\n const collisions: CollisionDescriptor[] = [];\n\n for (const droppableContainer of droppableContainers) {\n const {id} = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const distBetween = distanceBetween(centerOfRectangle(rect), centerRect);\n\n collisions.push({id, data: {droppableContainer, value: distBetween}});\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n","import type {ClientRect} from '../../types';\n\nimport type {CollisionDescriptor, CollisionDetection} from './types';\nimport {sortCollisionsDesc} from './helpers';\n\n/**\n * Returns the intersecting rectangle area between two rectangles\n */\nexport function getIntersectionRatio(\n entry: ClientRect,\n target: ClientRect\n): number {\n const top = Math.max(target.top, entry.top);\n const left = Math.max(target.left, entry.left);\n const right = Math.min(target.left + target.width, entry.left + entry.width);\n const bottom = Math.min(target.top + target.height, entry.top + entry.height);\n const width = right - left;\n const height = bottom - top;\n\n if (left < right && top < bottom) {\n const targetArea = target.width * target.height;\n const entryArea = entry.width * entry.height;\n const intersectionArea = width * height;\n const intersectionRatio =\n intersectionArea / (targetArea + entryArea - intersectionArea);\n\n return Number(intersectionRatio.toFixed(4));\n }\n\n // Rectangles do not overlap, or overlap has an area of zero (edge/corner overlap)\n return 0;\n}\n\n/**\n * Returns the rectangles that has the greatest intersection area with a given\n * rectangle in an array of rectangles.\n */\nexport const rectIntersection: CollisionDetection = ({\n collisionRect,\n droppableRects,\n droppableContainers,\n}) => {\n const collisions: CollisionDescriptor[] = [];\n\n for (const droppableContainer of droppableContainers) {\n const {id} = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const intersectionRatio = getIntersectionRatio(rect, collisionRect);\n\n if (intersectionRatio > 0) {\n collisions.push({\n id,\n data: {droppableContainer, value: intersectionRatio},\n });\n }\n }\n }\n\n return collisions.sort(sortCollisionsDesc);\n};\n","import type {Transform} from '@dnd-kit/utilities';\nimport type {ClientRect} from '../../types';\n\nexport function adjustScale(\n transform: Transform,\n rect1: ClientRect | null,\n rect2: ClientRect | null\n): Transform {\n return {\n ...transform,\n scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1,\n scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1,\n };\n}\n","import type {Coordinates, ClientRect} from '../../types';\nimport {defaultCoordinates} from '../coordinates';\n\nexport function getRectDelta(\n rect1: ClientRect | null,\n rect2: ClientRect | null\n): Coordinates {\n return rect1 && rect2\n ? {\n x: rect1.left - rect2.left,\n y: rect1.top - rect2.top,\n }\n : defaultCoordinates;\n}\n","import type {Coordinates, ClientRect} from '../../types';\n\nexport function createRectAdjustmentFn(modifier: number) {\n return function adjustClientRect(\n rect: ClientRect,\n ...adjustments: Coordinates[]\n ): ClientRect {\n return adjustments.reduce<ClientRect>(\n (acc, adjustment) => ({\n ...acc,\n top: acc.top + modifier * adjustment.y,\n bottom: acc.bottom + modifier * adjustment.y,\n left: acc.left + modifier * adjustment.x,\n right: acc.right + modifier * adjustment.x,\n }),\n {...rect}\n );\n };\n}\n\nexport const getAdjustedRect = createRectAdjustmentFn(1);\n","import type {Transform} from '@dnd-kit/utilities';\n\nexport function parseTransform(transform: string): Transform | null {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5],\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3],\n };\n }\n\n return null;\n}\n","import type {ClientRect} from '../../types';\n\nimport {parseTransform} from './parseTransform';\n\nexport function inverseTransform(\n rect: ClientRect,\n transform: string,\n transformOrigin: string\n): ClientRect {\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return rect;\n }\n\n const {scaleX, scaleY, x: translateX, y: translateY} = parsedTransform;\n\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y =\n rect.top -\n translateY -\n (1 - scaleY) *\n parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x,\n };\n}\n","import {getWindow} from '@dnd-kit/utilities';\n\nimport type {ClientRect} from '../../types';\nimport {inverseTransform} from '../transform';\n\ninterface Options {\n ignoreTransform?: boolean;\n}\n\nconst defaultOptions: Options = {ignoreTransform: false};\n\n/**\n * Returns the bounding client rect of an element relative to the viewport.\n */\nexport function getClientRect(\n element: Element,\n options: Options = defaultOptions\n) {\n let rect: ClientRect = element.getBoundingClientRect();\n\n if (options.ignoreTransform) {\n const {transform, transformOrigin} =\n getWindow(element).getComputedStyle(element);\n\n if (transform) {\n rect = inverseTransform(rect, transform, transformOrigin);\n }\n }\n\n const {top, left, width, height, bottom, right} = rect;\n\n return {\n top,\n left,\n width,\n height,\n bottom,\n right,\n };\n}\n\n/**\n * Returns the bounding client rect of an element relative to the viewport.\n *\n * @remarks\n * The ClientRect returned by this method does not take into account transforms\n * applied to the element it measures.\n *\n */\nexport function getTransformAgnosticClientRect(element: Element): ClientRect {\n return getClientRect(element, {ignoreTransform: true});\n}\n","import type {ClientRect} from '../../types';\n\nexport function getWindowClientRect(element: typeof window): ClientRect {\n const width = element.innerWidth;\n const height = element.innerHeight;\n\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height,\n };\n}\n","import {getWindow} from '@dnd-kit/utilities';\n\nexport function isFixed(\n node: HTMLElement,\n computedStyle: CSSStyleDeclaration = getWindow(node).getComputedStyle(node)\n): boolean {\n return computedStyle.position === 'fixed';\n}\n","import {getWindow} from '@dnd-kit/utilities';\n\nexport function isScrollable(\n element: HTMLElement,\n computedStyle: CSSStyleDeclaration = getWindow(element).getComputedStyle(\n element\n )\n): boolean {\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n\n return properties.some((property) => {\n const value = computedStyle[property as keyof CSSStyleDeclaration];\n\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n });\n}\n","import {\n getWindow,\n isDocument,\n isHTMLElement,\n isSVGElement,\n} from '@dnd-kit/utilities';\n\nimport {isFixed} from './isFixed';\nimport {isScrollable} from './isScrollable';\n\nexport function getScrollableAncestors(\n element: Node | null,\n limit?: number\n): Element[] {\n const scrollParents: Element[] = [];\n\n function findScrollableAncestors(node: Node | null): Element[] {\n if (limit != null && scrollParents.length >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if (\n isDocument(node) &&\n node.scrollingElement != null &&\n !scrollParents.includes(node.scrollingElement)\n ) {\n scrollParents.push(node.scrollingElement);\n\n return scrollParents;\n }\n\n if (!isHTMLElement(node) || isSVGElement(node)) {\n return scrollParents;\n }\n\n if (scrollParents.includes(node)) {\n return scrollParents;\n }\n\n const computedStyle = getWindow(element).getComputedStyle(node);\n\n if (node !== element) {\n if (isScrollable(node, computedStyle)) {\n scrollParents.push(node);\n }\n }\n\n if (isFixed(node, computedStyle)) {\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\n\nexport function getFirstScrollableAncestor(node: Node | null): Element | null {\n const [firstScrollableAncestor] = getScrollableAncestors(node, 1);\n\n return firstScrollableAncestor ?? null;\n}\n","import {\n canUseDOM,\n isHTMLElement,\n isDocument,\n getOwnerDocument,\n isNode,\n isWindow,\n} from '@dnd-kit/utilities';\n\nexport function getScrollableElement(element: EventTarget | null) {\n if (!canUseDOM || !element) {\n return null;\n }\n\n if (isWindow(element)) {\n return element;\n }\n\n if (!isNode(element)) {\n return null;\n }\n\n if (\n isDocument(element) ||\n element === getOwnerDocument(element).scrollingElement\n ) {\n return window;\n }\n\n if (isHTMLElement(element)) {\n return element;\n }\n\n return null;\n}\n","import {isWindow} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\n\nexport function getScrollXCoordinate(element: Element | typeof window): number {\n if (isWindow(element)) {\n return element.scrollX;\n }\n\n return element.scrollLeft;\n}\n\nexport function getScrollYCoordinate(element: Element | typeof window): number {\n if (isWindow(element)) {\n return element.scrollY;\n }\n\n return element.scrollTop;\n}\n\nexport function getScrollCoordinates(\n element: Element | typeof window\n): Coordinates {\n return {\n x: getScrollXCoordinate(element),\n y: getScrollYCoordinate(element),\n };\n}\n","export enum Direction {\n Forward = 1,\n Backward = -1,\n}\n","import {canUseDOM} from '@dnd-kit/utilities';\n\nexport function isDocumentScrollingElement(element: Element | null) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === document.scrollingElement;\n}\n","import {isDocumentScrollingElement} from './documentScrollingElement';\n\nexport function getScrollPosition(scrollingContainer: Element) {\n const minScroll = {\n x: 0,\n y: 0,\n };\n const dimensions = isDocumentScrollingElement(scrollingContainer)\n ? {\n height: window.innerHeight,\n width: window.innerWidth,\n }\n : {\n height: scrollingContainer.clientHeight,\n width: scrollingContainer.clientWidth,\n };\n const maxScroll = {\n x: scrollingContainer.scrollWidth - dimensions.width,\n y: scrollingContainer.scrollHeight - dimensions.height,\n };\n\n const isTop = scrollingContainer.scrollTop <= minScroll.y;\n const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n\n return {\n isTop,\n isLeft,\n isBottom,\n isRight,\n maxScroll,\n minScroll,\n };\n}\n","import {Direction, ClientRect} from '../../types';\nimport {getScrollPosition} from './getScrollPosition';\n\ninterface PositionalCoordinates\n extends Pick<ClientRect, 'top' | 'left' | 'right' | 'bottom'> {}\n\nconst defaultThreshold = {\n x: 0.2,\n y: 0.2,\n};\n\nexport function getScrollDirectionAndSpeed(\n scrollContainer: Element,\n scrollContainerRect: ClientRect,\n {top, left, right, bottom}: PositionalCoordinates,\n acceleration = 10,\n thresholdPercentage = defaultThreshold\n) {\n const {isTop, isBottom, isLeft, isRight} = getScrollPosition(scrollContainer);\n\n const direction = {\n x: 0,\n y: 0,\n };\n const speed = {\n x: 0,\n y: 0,\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x,\n };\n\n if (!isTop && top <= scrollContainerRect.top + threshold.height) {\n // Scroll Up\n direction.y = Direction.Backward;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.top + threshold.height - top) / threshold.height\n );\n } else if (\n !isBottom &&\n bottom >= scrollContainerRect.bottom - threshold.height\n ) {\n // Scroll Down\n direction.y = Direction.Forward;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.bottom - threshold.height - bottom) /\n threshold.height\n );\n }\n\n if (!isRight && right >= scrollContainerRect.right - threshold.width) {\n // Scroll Right\n direction.x = Direction.Forward;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.right - threshold.width - right) / threshold.width\n );\n } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) {\n // Scroll Left\n direction.x = Direction.Backward;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.left + threshold.width - left) / threshold.width\n );\n }\n\n return {\n direction,\n speed,\n };\n}\n","export function getScrollElementRect(element: Element) {\n if (element === document.scrollingElement) {\n const {innerWidth, innerHeight} = window;\n\n return {\n top: 0,\n left: 0,\n right: innerWidth,\n bottom: innerHeight,\n width: innerWidth,\n height: innerHeight,\n };\n }\n\n const {top, left, right, bottom} = element.getBoundingClientRect();\n\n return {\n top,\n left,\n right,\n bottom,\n width: element.clientWidth,\n height: element.clientHeight,\n };\n}\n","import {add} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\nimport {\n getScrollCoordinates,\n getScrollXCoordinate,\n getScrollYCoordinate,\n} from './getScrollCoordinates';\nimport {defaultCoordinates} from '../coordinates';\n\nexport function getScrollOffsets(scrollableAncestors: Element[]): Coordinates {\n return scrollableAncestors.reduce<Coordinates>((acc, node) => {\n return add(acc, getScrollCoordinates(node));\n }, defaultCoordinates);\n}\n\nexport function getScrollXOffset(scrollableAncestors: Element[]): number {\n return scrollableAncestors.reduce<number>((acc, node) => {\n return acc + getScrollXCoordinate(node);\n }, 0);\n}\n\nexport function getScrollYOffset(scrollableAncestors: Element[]): number {\n return scrollableAncestors.reduce<number>((acc, node) => {\n return acc + getScrollYCoordinate(node);\n }, 0);\n}\n","import type {ClientRect} from '../../types';\nimport {getClientRect} from '../rect/getRect';\nimport {getFirstScrollableAncestor} from './getScrollableAncestors';\n\nexport function scrollIntoViewIfNeeded(\n element: HTMLElement | null | undefined,\n measure: (node: HTMLElement) => ClientRect = getClientRect\n) {\n if (!element) {\n return;\n }\n\n const {top, left, bottom, right} = measure(element);\n const firstScrollableAncestor = getFirstScrollableAncestor(element);\n\n if (!firstScrollableAncestor) {\n return;\n }\n\n if (\n bottom <= 0 ||\n right <= 0 ||\n top >= window.innerHeight ||\n left >= window.innerWidth\n ) {\n element.scrollIntoView({\n block: 'center',\n inline: 'center',\n });\n }\n}\n","import type {ClientRect} from '../../types/rect';\nimport {\n getScrollableAncestors,\n getScrollOffsets,\n getScrollXOffset,\n getScrollYOffset,\n} from '../scroll';\n\nconst properties = [\n ['x', ['left', 'right'], getScrollXOffset],\n ['y', ['top', 'bottom'], getScrollYOffset],\n] as const;\n\nexport class Rect {\n constructor(rect: ClientRect, element: Element) {\n const scrollableAncestors = getScrollableAncestors(element);\n const scrollOffsets = getScrollOffsets(scrollableAncestors);\n\n this.rect = {...rect};\n this.width = rect.width;\n this.height = rect.height;\n\n for (const [axis, keys, getScrollOffset] of properties) {\n for (const key of keys) {\n Object.defineProperty(this, key, {\n get: () => {\n const currentOffsets = getScrollOffset(scrollableAncestors);\n const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets;\n\n return this.rect[key] + scrollOffsetsDeltla;\n },\n enumerable: true,\n });\n }\n }\n\n Object.defineProperty(this, 'rect', {enumerable: false});\n }\n\n private rect: ClientRect;\n\n public width: number;\n\n public height: number;\n\n // The below properties are set by the `Object.defineProperty` calls in the constructor\n // @ts-ignore\n public top: number;\n // @ts-ignore\n public bottom: number;\n // @ts-ignore\n public right: number;\n // @ts-ignore\n public left: number;\n}\n","export class Listeners {\n private listeners: [\n string,\n EventListenerOrEventListenerObject,\n AddEventListenerOptions | boolean | undefined\n ][] = [];\n\n constructor(private target: EventTarget | null) {}\n\n public add<T extends Event>(\n eventName: string,\n handler: (event: T) => void,\n options?: AddEventListenerOptions | boolean\n ) {\n this.target?.addEventListener(eventName, handler as EventListener, options);\n this.listeners.push([eventName, handler as EventListener, options]);\n }\n\n public removeAll = () => {\n this.listeners.forEach((listener) =>\n this.target?.removeEventListener(...listener)\n );\n };\n}\n","import {getOwnerDocument, getWindow} from '@dnd-kit/utilities';\n\nexport function getEventListenerTarget(\n target: EventTarget | null\n): EventTarget | Document {\n // If the `event.target` element is removed from the document events will still be targeted\n // at it, and hence won't always bubble up to the window or document anymore.\n // If there is any risk of an element being removed while it is being dragged,\n // the best practice is to attach the event listeners directly to the target.\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n\n const {EventTarget} = getWindow(target);\n\n return target instanceof EventTarget ? target : getOwnerDocument(target);\n}\n","import type {Coordinates, DistanceMeasurement} from '../../types';\n\nexport function hasExceededDistance(\n delta: Coordinates,\n measurement: DistanceMeasurement\n): boolean {\n const dx = Math.abs(delta.x);\n const dy = Math.abs(delta.y);\n\n if (typeof measurement === 'number') {\n return Math.sqrt(dx ** 2 + dy ** 2) > measurement;\n }\n\n if ('x' in measurement && 'y' in measurement) {\n return dx > measurement.x && dy > measurement.y;\n }\n\n if ('x' in measurement) {\n return dx > measurement.x;\n }\n\n if ('y' in measurement) {\n return dy > measurement.y;\n }\n\n return false;\n}\n","export enum EventName {\n Click = 'click',\n DragStart = 'dragstart',\n Keydown = 'keydown',\n ContextMenu = 'contextmenu',\n Resize = 'resize',\n SelectionChange = 'selectionchange',\n VisibilityChange = 'visibilitychange',\n}\n\nexport function preventDefault(event: Event) {\n event.preventDefault();\n}\n\nexport function stopPropagation(event: Event) {\n event.stopPropagation();\n}\n","import type {Coordinates, UniqueIdentifier} from '../../types';\nimport type {SensorContext} from '../types';\n\nexport enum KeyboardCode {\n Space = 'Space',\n Down = 'ArrowDown',\n Right = 'ArrowRight',\n Left = 'ArrowLeft',\n Up = 'ArrowUp',\n Esc = 'Escape',\n Enter = 'Enter',\n Tab = 'Tab',\n}\n\nexport type KeyboardCodes = {\n start: KeyboardEvent['code'][];\n cancel: KeyboardEvent['code'][];\n end: KeyboardEvent['code'][];\n};\n\nexport type KeyboardCoordinateGetter = (\n event: KeyboardEvent,\n args: {\n active: UniqueIdentifier;\n currentCoordinates: Coordinates;\n context: SensorContext;\n }\n) => Coordinates | void;\n","import {KeyboardCoordinateGetter, KeyboardCode, KeyboardCodes} from './types';\n\nexport const defaultKeyboardCodes: KeyboardCodes = {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter, KeyboardCode.Tab],\n};\n\nexport const defaultKeyboardCoordinateGetter: KeyboardCoordinateGetter = (\n event,\n {currentCoordinates}\n) => {\n switch (event.code) {\n case KeyboardCode.Right:\n return {\n ...currentCoordinates,\n x: currentCoordinates.x + 25,\n };\n case KeyboardCode.Left:\n return {\n ...currentCoordinates,\n x: currentCoordinates.x - 25,\n };\n case KeyboardCode.Down:\n return {\n ...currentCoordinates,\n y: currentCoordinates.y + 25,\n };\n case KeyboardCode.Up:\n return {\n ...currentCoordinates,\n y: currentCoordinates.y - 25,\n };\n }\n\n return undefined;\n};\n","import {\n add as getAdjustedCoordinates,\n subtract as getCoordinatesDelta,\n getOwnerDocument,\n getWindow,\n isKeyboardEvent,\n} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\nimport {\n defaultCoordinates,\n getScrollPosition,\n getScrollElementRect,\n} from '../../utilities';\nimport {scrollIntoViewIfNeeded} from '../../utilities/scroll';\nimport {EventName} from '../events';\nimport {Listeners} from '../utilities';\nimport type {\n Activators,\n SensorInstance,\n SensorProps,\n SensorOptions,\n} from '../types';\n\nimport {KeyboardCoordinateGetter, KeyboardCode, KeyboardCodes} from './types';\nimport {\n defaultKeyboardCodes,\n defaultKeyboardCoordinateGetter,\n} from './defaults';\n\nexport interface KeyboardSensorOptions extends SensorOptions {\n keyboardCodes?: KeyboardCodes;\n coordinateGetter?: KeyboardCoordinateGetter;\n scrollBehavior?: ScrollBehavior;\n onActivation?({event}: {event: KeyboardEvent}): void;\n}\n\nexport type KeyboardSensorProps = SensorProps<KeyboardSensorOptions>;\n\nexport class KeyboardSensor implements SensorInstance {\n public autoScrollEnabled = false;\n private referenceCoordinates: Coordinates | undefined;\n private listeners: Listeners;\n private windowListeners: Listeners;\n\n constructor(private props: KeyboardSensorProps) {\n const {\n event: {target},\n } = props;\n\n this.props = props;\n this.listeners = new Listeners(getOwnerDocument(target));\n this.windowListeners = new Listeners(getWindow(target));\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n\n this.attach();\n }\n\n private attach() {\n this.handleStart();\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n\n setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown));\n }\n\n private handleStart() {\n const {activeNode, onStart} = this.props;\n const node = activeNode.node.current;\n\n if (node) {\n scrollIntoViewIfNeeded(node);\n }\n\n onStart(defaultCoordinates);\n }\n\n private handleKeyDown(event: Event) {\n if (isKeyboardEvent(event)) {\n const {active, context, options} = this.props;\n const {\n keyboardCodes = defaultKeyboardCodes,\n coordinateGetter = defaultKeyboardCoordinateGetter,\n scrollBehavior = 'smooth',\n } = options;\n const {code} = event;\n\n if (keyboardCodes.end.includes(code)) {\n this.handleEnd(event);\n return;\n }\n\n if (keyboardCodes.cancel.includes(code)) {\n this.handleCancel(event);\n return;\n }\n\n const {collisionRect} = context.current;\n const currentCoordinates = collisionRect\n ? {x: collisionRect.left, y: collisionRect.top}\n : defaultCoordinates;\n\n if (!this.referenceCoordinates) {\n this.referenceCoordinates = currentCoordinates;\n }\n\n const newCoordinates = coordinateGetter(event, {\n active,\n context: context.current,\n currentCoordinates,\n });\n\n if (newCoordinates) {\n const coordinatesDelta = getCoordinatesDelta(\n newCoordinates,\n currentCoordinates\n );\n const scrollDelta = {\n x: 0,\n y: 0,\n };\n const {scrollableAncestors} = context.current;\n\n for (const scrollContainer of scrollableAncestors) {\n const direction = event.code;\n const {isTop, isRight, isLeft, isBottom, maxScroll, minScroll} =\n getScrollPosition(scrollContainer);\n const scrollElementRect = getScrollElementRect(scrollContainer);\n\n const clampedCoordinates = {\n x: Math.min(\n direction === KeyboardCode.Right\n ? scrollElementRect.right - scrollElementRect.width / 2\n : scrollElementRect.right,\n Math.max(\n direction === KeyboardCode.Right\n ? scrollElementRect.left\n : scrollElementRect.left + scrollElementRect.width / 2,\n newCoordinates.x\n )\n ),\n y: Math.min(\n direction === KeyboardCode.Down\n ? scrollElementRect.bottom - scrollElementRect.height / 2\n : scrollElementRect.bottom,\n Math.max(\n direction === KeyboardCode.Down\n ? scrollElementRect.top\n : scrollElementRect.top + scrollElementRect.height / 2,\n newCoordinates.y\n )\n ),\n };\n\n const canScrollX =\n (direction === KeyboardCode.Right && !isRight) ||\n (direction === KeyboardCode.Left && !isLeft);\n const canScrollY =\n (direction === KeyboardCode.Down && !isBottom) ||\n (direction === KeyboardCode.Up && !isTop);\n\n if (canScrollX && clampedCoordinates.x !== newCoordinates.x) {\n const newScrollCoordinates =\n scrollContainer.scrollLeft + coordinatesDelta.x;\n const canScrollToNewCoordinates =\n (direction === KeyboardCode.Right &&\n newScrollCoordinates <= maxScroll.x) ||\n (direction === KeyboardCode.Left &&\n newScrollCoordinates >= minScroll.x);\n\n if (canScrollToNewCoordinates && !coordinatesDelta.y) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n left: newScrollCoordinates,\n behavior: scrollBehavior,\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates;\n } else {\n scrollDelta.x =\n direction === KeyboardCode.Right\n ? scrollContainer.scrollLeft - maxScroll.x\n : scrollContainer.scrollLeft - minScroll.x;\n }\n\n if (scrollDelta.x) {\n scrollContainer.scrollBy({\n left: -scrollDelta.x,\n behavior: scrollBehavior,\n });\n }\n break;\n } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n const newScrollCoordinates =\n scrollContainer.scrollTop + coordinatesDelta.y;\n const canScrollToNewCoordinates =\n (direction === KeyboardCode.Down &&\n newScrollCoordinates <= maxScroll.y) ||\n (direction === KeyboardCode.Up &&\n newScrollCoordinates >= minScroll.y);\n\n if (canScrollToNewCoordinates && !coordinatesDelta.x) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n top: newScrollCoordinates,\n behavior: scrollBehavior,\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates;\n } else {\n scrollDelta.y =\n direction === KeyboardCode.Down\n ? scrollContainer.scrollTop - maxScroll.y\n : scrollContainer.scrollTop - minScroll.y;\n }\n\n if (scrollDelta.y) {\n scrollContainer.scrollBy({\n top: -scrollDelta.y,\n behavior: scrollBehavior,\n });\n }\n\n break;\n }\n }\n\n this.handleMove(\n event,\n getAdjustedCoordinates(\n getCoordinatesDelta(newCoordinates, this.referenceCoordinates),\n scrollDelta\n )\n );\n }\n }\n }\n\n private handleMove(event: Event, coordinates: Coordinates) {\n const {onMove} = this.props;\n\n event.preventDefault();\n onMove(coordinates);\n }\n\n private handleEnd(event: Event) {\n const {onEnd} = this.props;\n\n event.preventDefault();\n this.detach();\n onEnd();\n }\n\n private handleCancel(event: Event) {\n const {onCancel} = this.props;\n\n event.preventDefault();\n this.detach();\n onCancel();\n }\n\n private detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n }\n\n static activators: Activators<KeyboardSensorOptions> = [\n {\n eventName: 'onKeyDown' as const,\n handler: (\n event: React.KeyboardEvent,\n {keyboardCodes = defaultKeyboardCodes, onActivation},\n {active}\n ) => {\n const {code} = event.nativeEvent;\n\n if (keyboardCodes.start.includes(code)) {\n const activator = active.activatorNode.current;\n\n if (activator && event.target !== activator) {\n return false;\n }\n\n event.preventDefault();\n\n onActivation?.({event: event.nativeEvent});\n\n return true;\n }\n\n return false;\n },\n },\n ];\n}\n","import {\n subtract as getCoordinatesDelta,\n getEventCoordinates,\n getOwnerDocument,\n getWindow,\n} from '@dnd-kit/utilities';\n\nimport {defaultCoordinates} from '../../utilities';\nimport {\n getEventListenerTarget,\n hasExceededDistance,\n Listeners,\n} from '../utilities';\nimport {EventName, preventDefault, stopPropagation} from '../events';\nimport {KeyboardCode} from '../keyboard';\nimport type {SensorInstance, SensorProps, SensorOptions} from '../types';\nimport type {Coordinates, DistanceMeasurement} from '../../types';\n\ninterface DistanceConstraint {\n distance: DistanceMeasurement;\n tolerance?: DistanceMeasurement;\n}\n\ninterface DelayConstraint {\n delay: number;\n tolerance: DistanceMeasurement;\n}\n\ninterface EventDescriptor {\n name: keyof DocumentEventMap;\n passive?: boolean;\n}\n\nexport interface PointerEventHandlers {\n cancel?: EventDescriptor;\n move: EventDescriptor;\n end: EventDescriptor;\n}\n\nexport type PointerActivationConstraint =\n | DelayConstraint\n | DistanceConstraint\n | (DelayConstraint & DistanceConstraint);\n\nfunction isDistanceConstraint(\n constraint: PointerActivationConstraint\n): constraint is PointerActivationConstraint & DistanceConstraint {\n return Boolean(constraint && 'distance' in constraint);\n}\n\nfunction isDelayConstraint(\n constraint: PointerActivationConstraint\n): constraint is DelayConstraint {\n return Boolean(constraint && 'delay' in constraint);\n}\n\nexport interface AbstractPointerSensorOptions extends SensorOptions {\n activationConstraint?: PointerActivationConstraint;\n bypassActivationConstraint?(\n props: Pick<AbstractPointerSensorProps, 'activeNode' | 'event' | 'options'>\n ): boolean;\n onActivation?({event}: {event: Event}): void;\n}\n\nexport type AbstractPointerSensorProps =\n SensorProps<AbstractPointerSensorOptions>;\n\nexport class AbstractPointerSensor implements SensorInstance {\n public autoScrollEnabled = true;\n private document: Document;\n private activated: boolean = false;\n private initialCoordinates: Coordinates;\n private timeoutId: NodeJS.Timeout | null = null;\n private listeners: Listeners;\n private documentListeners: Listeners;\n private windowListeners: Listeners;\n\n constructor(\n private props: AbstractPointerSensorProps,\n private events: PointerEventHandlers,\n listenerTarget = getEventListenerTarget(props.event.target)\n ) {\n const {event} = props;\n const {target} = event;\n\n this.props = props;\n this.events = events;\n this.document = getOwnerDocument(target);\n this.documentListeners = new Listeners(this.document);\n this.listeners = new Listeners(listenerTarget);\n this.windowListeners = new Listeners(getWindow(target));\n this.initialCoordinates = getEventCoordinates(event) ?? defaultCoordinates;\n this.handleStart = this.handleStart.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleKeydown = this.handleKeydown.bind(this);\n this.removeTextSelection = this.removeTextSelection.bind(this);\n\n this.attach();\n }\n\n private attach() {\n const {\n events,\n props: {\n options: {activationConstraint, bypassActivationConstraint},\n },\n } = this;\n\n this.listeners.add(events.move.name, this.handleMove, {passive: false});\n this.listeners.add(events.end.name, this.handleEnd);\n\n if (events.cancel) {\n this.listeners.add(events.cancel.name, this.handleCancel);\n }\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.DragStart, preventDefault);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n this.windowListeners.add(EventName.ContextMenu, preventDefault);\n this.documentListeners.add(EventName.Keydown, this.handleKeydown);\n\n if (activationConstraint) {\n if (\n bypassActivationConstraint?.({\n event: this.props.event,\n activeNode: this.props.activeNode,\n options: this.props.options,\n })\n ) {\n return this.handleStart();\n }\n\n if (isDelayConstraint(activationConstraint)) {\n this.timeoutId = setTimeout(\n this.handleStart,\n activationConstraint.delay\n );\n this.handlePending(activationConstraint);\n return;\n }\n\n if (isDistanceConstraint(activationConstraint)) {\n this.handlePending(activationConstraint);\n return;\n }\n }\n\n this.handleStart();\n }\n\n private detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n\n // Wait until the next event loop before removing document listeners\n // This is necessary because we listen for `click` and `selection` events on the document\n setTimeout(this.documentListeners.removeAll, 50);\n\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n private handlePending(\n constraint: PointerActivationConstraint,\n offset?: Coordinates | undefined\n ): void {\n const {active, onPending} = this.props;\n onPending(active, constraint, this.initialCoordinates, offset);\n }\n\n private handleStart() {\n const {initialCoordinates} = this;\n const {onStart} = this.props;\n\n if (initialCoordinates) {\n this.activated = true;\n\n // Stop propagation of click events once activation constraints are met\n this.documentListeners.add(EventName.Click, stopPropagation, {\n capture: true,\n });\n\n // Remove any text selection from the document\n this.removeTextSelection();\n\n // Prevent further text selection while dragging\n this.documentListeners.add(\n EventName.SelectionChange,\n this.removeTextSelection\n );\n\n onStart(initialCoordinates);\n }\n }\n\n private handleMove(event: Event) {\n const {activated, initialCoordinates, props} = this;\n const {\n onMove,\n options: {activationConstraint},\n } = props;\n\n if (!initialCoordinates) {\n return;\n }\n\n const coordinates = getEventCoordinates(event) ?? defaultCoordinates;\n const delta = getCoordinatesDelta(initialCoordinates, coordinates);\n\n // Constraint validation\n if (!activated && activationConstraint) {\n if (isDistanceConstraint(activationConstraint)) {\n if (\n activationConstraint.tolerance != null &&\n hasExceededDistance(delta, activationConstraint.tolerance)\n ) {\n return this.handleCancel();\n }\n\n if (hasExceededDistance(delta, activationConstraint.distance)) {\n return this.handleStart();\n }\n }\n\n if (isDelayConstraint(activationConstraint)) {\n if (hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n }\n\n this.handlePending(activationConstraint, delta);\n return;\n }\n\n if (event.cancelable) {\n event.preventDefault();\n }\n\n onMove(coordinates);\n }\n\n private handleEnd() {\n const {onAbort, onEnd} = this.props;\n\n this.detach();\n if (!this.activated) {\n onAbort(this.props.active);\n }\n onEnd();\n }\n\n private handleCancel() {\n const {onAbort, onCancel} = this.props;\n\n this.detach();\n if (!this.activated) {\n onAbort(this.props.active);\n }\n onCancel();\n }\n\n private handleKeydown(event: KeyboardEvent) {\n if (event.code === KeyboardCode.Esc) {\n this.handleCancel();\n }\n }\n\n private removeTextSelection() {\n this.document.getSelection()?.removeAllRanges();\n }\n}\n","import type {PointerEvent} from 'react';\nimport {getOwnerDocument} from '@dnd-kit/utilities';\n\nimport type {SensorProps} from '../types';\nimport {\n AbstractPointerSensor,\n AbstractPointerSensorOptions,\n PointerEventHandlers,\n} from './AbstractPointerSensor';\n\nconst events: PointerEventHandlers = {\n cancel: {name: 'pointercancel'},\n move: {name: 'pointermove'},\n end: {name: 'pointerup'},\n};\n\nexport interface PointerSensorOptions extends AbstractPointerSensorOptions {}\n\nexport type PointerSensorProps = SensorProps<PointerSensorOptions>;\n\nexport class PointerSensor extends AbstractPointerSensor {\n constructor(props: PointerSensorProps) {\n const {event} = props;\n // Pointer events stop firing if the target is unmounted while dragging\n // Therefore we attach listeners to the owner document instead\n const listenerTarget = getOwnerDocument(event.target);\n\n super(props, events, listenerTarget);\n }\n\n static activators = [\n {\n eventName: 'onPointerDown' as const,\n handler: (\n {nativeEvent: event}: PointerEvent,\n {onActivation}: PointerSensorOptions\n ) => {\n if (!event.isPrimary || event.button !== 0) {\n return false;\n }\n\n onActivation?.({event});\n\n return true;\n },\n },\n ];\n}\n","import type {MouseEvent} from 'react';\nimport {getOwnerDocument} from '@dnd-kit/utilities';\n\nimport type {SensorProps} from '../types';\nimport {\n AbstractPointerSensor,\n PointerEventHandlers,\n AbstractPointerSensorOptions,\n} from '../pointer';\n\nconst events: PointerEventHandlers = {\n move: {name: 'mousemove'},\n end: {name: 'mouseup'},\n};\n\nenum MouseButton {\n RightClick = 2,\n}\n\nexport interface MouseSensorOptions extends AbstractPointerSensorOptions {}\n\nexport type MouseSensorProps = SensorProps<MouseSensorOptions>;\n\nexport class MouseSensor extends AbstractPointerSensor {\n constructor(props: MouseSensorProps) {\n super(props, events, getOwnerDocument(props.event.target));\n }\n\n static activators = [\n {\n eventName: 'onMouseDown' as const,\n handler: (\n {nativeEvent: event}: MouseEvent,\n {onActivation}: MouseSensorOptions\n ) => {\n if (event.button === MouseButton.RightClick) {\n return false;\n }\n\n onActivation?.({event});\n\n return true;\n },\n },\n ];\n}\n","import type {TouchEvent} from 'react';\n\nimport {\n AbstractPointerSensor,\n PointerSensorProps,\n PointerEventHandlers,\n PointerSensorOptions,\n} from '../pointer';\nimport type {SensorProps} from '../types';\n\nconst events: PointerEventHandlers = {\n cancel: {name: 'touchcancel'},\n move: {name: 'touchmove'},\n end: {name: 'touchend'},\n};\n\nexport interface TouchSensorOptions extends PointerSensorOptions {}\n\nexport type TouchSensorProps = SensorProps<TouchSensorOptions>;\n\nexport class TouchSensor extends AbstractPointerSensor {\n constructor(props: PointerSensorProps) {\n super(props, events);\n }\n\n static activators = [\n {\n eventName: 'onTouchStart' as const,\n handler: (\n {nativeEvent: event}: TouchEvent,\n {onActivation}: TouchSensorOptions\n ) => {\n const {touches} = event;\n\n if (touches.length > 1) {\n return false;\n }\n\n onActivation?.({event});\n\n return true;\n },\n },\n ];\n\n static setup() {\n // Adding a non-capture and non-passive `touchmove` listener in order\n // to force `event.preventDefault()` calls to work in dynamically added\n // touchmove event handlers. This is required for iOS Safari.\n window.addEventListener(events.move.name, noop, {\n capture: false,\n passive: false,\n });\n\n return function teardown() {\n window.removeEventListener(events.move.name, noop);\n };\n\n // We create a new handler because the teardown function of another sensor\n // could remove our event listener if we use a referentially equal listener.\n function noop() {}\n }\n}\n","import {useCallback, useEffect, useMemo, useRef} from 'react';\nimport {useInterval, useLazyMemo, usePrevious} from '@dnd-kit/utilities';\n\nimport {getScrollDirectionAndSpeed} from '../../utilities';\nimport {Direction} from '../../types';\nimport type {Coordinates, ClientRect} from '../../types';\n\nexport type ScrollAncestorSortingFn = (ancestors: Element[]) => Element[];\n\nexport enum AutoScrollActivator {\n Pointer,\n DraggableRect,\n}\n\nexport interface Options {\n acceleration?: number;\n activator?: AutoScrollActivator;\n canScroll?: CanScroll;\n enabled?: boolean;\n interval?: number;\n layoutShiftCompensation?:\n | boolean\n | {\n x: boolean;\n y: boolean;\n };\n order?: TraversalOrder;\n threshold?: {\n x: number;\n y: number;\n };\n}\n\ninterface Arguments extends Options {\n draggingRect: ClientRect | null;\n enabled: boolean;\n pointerCoordinates: Coordinates | null;\n scrollableAncestors: Element[];\n scrollableAncestorRects: ClientRect[];\n delta: Coordinates;\n}\n\nexport type CanScroll = (element: Element) => boolean;\n\nexport enum TraversalOrder {\n TreeOrder,\n ReversedTreeOrder,\n}\n\ninterface ScrollDirection {\n x: 0 | Direction;\n y: 0 | Direction;\n}\n\nexport function useAutoScroller({\n acceleration,\n activator = AutoScrollActivator.Pointer,\n canScroll,\n draggingRect,\n enabled,\n interval = 5,\n order = TraversalOrder.TreeOrder,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n delta,\n threshold,\n}: Arguments) {\n const scrollIntent = useScrollIntent({delta, disabled: !enabled});\n const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval();\n const scrollSpeed = useRef<Coordinates>({x: 0, y: 0});\n const scrollDirection = useRef<ScrollDirection>({x: 0, y: 0});\n const rect = useMemo(() => {\n switch (activator) {\n case AutoScrollActivator.Pointer:\n return pointerCoordinates\n ? {\n top: pointerCoordinates.y,\n bottom: pointerCoordinates.y,\n left: pointerCoordinates.x,\n right: pointerCoordinates.x,\n }\n : null;\n case AutoScrollActivator.DraggableRect:\n return draggingRect;\n }\n }, [activator, draggingRect, pointerCoordinates]);\n const scrollContainerRef = useRef<Element | null>(null);\n const autoScroll = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n\n if (!scrollContainer) {\n return;\n }\n\n const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x;\n const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;\n\n scrollContainer.scrollBy(scrollLeft, scrollTop);\n }, []);\n const sortedScrollableAncestors = useMemo(\n () =>\n order === TraversalOrder.TreeOrder\n ? [...scrollableAncestors].reverse()\n : scrollableAncestors,\n [order, scrollableAncestors]\n );\n\n useEffect(\n () => {\n if (!enabled || !scrollableAncestors.length || !rect) {\n clearAutoScrollInterval();\n return;\n }\n\n for (const scrollContainer of sortedScrollableAncestors) {\n if (canScroll?.(scrollContainer) === false) {\n continue;\n }\n\n const index = scrollableAncestors.indexOf(scrollContainer);\n const scrollContainerRect = scrollableAncestorRects[index];\n\n if (!scrollContainerRect) {\n continue;\n }\n\n const {direction, speed} = getScrollDirectionAndSpeed(\n scrollContainer,\n scrollContainerRect,\n rect,\n acceleration,\n threshold\n );\n\n for (const axis of ['x', 'y'] as const) {\n if (!scrollIntent[axis][direction[axis] as Direction]) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n\n if (speed.x > 0 || speed.y > 0) {\n clearAutoScrollInterval();\n\n scrollContainerRef.current = scrollContainer;\n setAutoScrollInterval(autoScroll, interval);\n\n scrollSpeed.current = speed;\n scrollDirection.current = direction;\n\n return;\n }\n }\n\n scrollSpeed.current = {x: 0, y: 0};\n scrollDirection.current = {x: 0, y: 0};\n clearAutoScrollInterval();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n acceleration,\n autoScroll,\n canScroll,\n clearAutoScrollInterval,\n enabled,\n interval,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(rect),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(scrollIntent),\n setAutoScrollInterval,\n scrollableAncestors,\n sortedScrollableAncestors,\n scrollableAncestorRects,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n ]\n );\n}\n\ninterface ScrollIntent {\n x: Record<Direction, boolean>;\n y: Record<Direction, boolean>;\n}\n\nconst defaultScrollIntent: ScrollIntent = {\n x: {[Direction.Backward]: false, [Direction.Forward]: false},\n y: {[Direction.Backward]: false, [Direction.Forward]: false},\n};\n\nfunction useScrollIntent({\n delta,\n disabled,\n}: {\n delta: Coordinates;\n disabled: boolean;\n}): ScrollIntent {\n const previousDelta = usePrevious(delta);\n\n return useLazyMemo<ScrollIntent>(\n (previousIntent) => {\n if (disabled || !previousDelta || !previousIntent) {\n // Reset scroll intent tracking when auto-scrolling is disabled\n return defaultScrollIntent;\n }\n\n const direction = {\n x: Math.sign(delta.x - previousDelta.x),\n y: Math.sign(delta.y - previousDelta.y),\n };\n\n // Keep track of the user intent to scroll in each direction for both axis\n return {\n x: {\n [Direction.Backward]:\n previousIntent.x[Direction.Backward] || direction.x === -1,\n [Direction.Forward]:\n previousIntent.x[Direction.Forward] || direction.x === 1,\n },\n y: {\n [Direction.Backward]:\n previousIntent.y[Direction.Backward] || direction.y === -1,\n [Direction.Forward]:\n previousIntent.y[Direction.Forward] || direction.y === 1,\n },\n };\n },\n [disabled, delta, previousDelta]\n );\n}\n","import {useLazyMemo} from '@dnd-kit/utilities';\n\nimport type {DraggableNode, DraggableNodes} from '../../store';\nimport type {UniqueIdentifier} from '../../types';\n\nexport function useCachedNode(\n draggableNodes: DraggableNodes,\n id: UniqueIdentifier | null\n): DraggableNode['node']['current'] {\n const draggableNode = id != null ? draggableNodes.get(id) : undefined;\n const node = draggableNode ? draggableNode.node.current : null;\n\n return useLazyMemo(\n (cachedNode) => {\n if (id == null) {\n return null;\n }\n\n // In some cases, the draggable node can unmount while dragging\n // This is the case for virtualized lists. In those situations,\n // we fall back to the last known value for that node.\n return node ?? cachedNode ?? null;\n },\n [node, id]\n );\n}\n","import {useMemo} from 'react';\n\nimport type {SensorActivatorFunction, SensorDescriptor} from '../../sensors';\nimport type {\n SyntheticListener,\n SyntheticListeners,\n} from './useSyntheticListeners';\n\nexport function useCombineActivators(\n sensors: SensorDescriptor<any>[],\n getSyntheticHandler: (\n handler: SensorActivatorFunction<any>,\n sensor: SensorDescriptor<any>\n ) => SyntheticListener['handler']\n): SyntheticListeners {\n return useMemo(\n () =>\n sensors.reduce<SyntheticListeners>((accumulator, sensor) => {\n const {sensor: Sensor} = sensor;\n\n const sensorActivators = Sensor.activators.map((activator) => ({\n eventName: activator.eventName,\n handler: getSyntheticHandler(activator.handler, sensor),\n }));\n\n return [...accumulator, ...sensorActivators];\n }, []),\n [sensors, getSyntheticHandler]\n );\n}\n","import {useCallback, useEffect, useRef, useState} from 'react';\nimport {useLatestValue, useLazyMemo} from '@dnd-kit/utilities';\n\nimport {Rect} from '../../utilities/rect';\nimport type {DroppableContainer, RectMap} from '../../store/types';\nimport type {ClientRect, UniqueIdentifier} from '../../types';\n\ninterface Arguments {\n dragging: boolean;\n dependencies: any[];\n config: DroppableMeasuring;\n}\n\nexport enum MeasuringStrategy {\n Always,\n BeforeDragging,\n WhileDragging,\n}\n\nexport enum MeasuringFrequency {\n Optimized = 'optimized',\n}\n\ntype MeasuringFunction = (element: HTMLElement) => ClientRect;\n\nexport interface DroppableMeasuring {\n measure: MeasuringFunction;\n strategy: MeasuringStrategy;\n frequency: MeasuringFrequency | number;\n}\n\nconst defaultValue: RectMap = new Map();\n\nexport function useDroppableMeasuring(\n containers: DroppableContainer[],\n {dragging, dependencies, config}: Arguments\n) {\n const [queue, setQueue] = useState<UniqueIdentifier[] | null>(null);\n const {frequency, measure, strategy} = config;\n const containersRef = useRef(containers);\n const disabled = isDisabled();\n const disabledRef = useLatestValue(disabled);\n const measureDroppableContainers = useCallback(\n (ids: UniqueIdentifier[] = []) => {\n if (disabledRef.current) {\n return;\n }\n\n setQueue((value) => {\n if (value === null) {\n return ids;\n }\n\n return value.concat(ids.filter((id) => !value.includes(id)));\n });\n },\n [disabledRef]\n );\n const timeoutId = useRef<NodeJS.Timeout | null>(null);\n const droppableRects = useLazyMemo<RectMap>(\n (previousValue) => {\n if (disabled && !dragging) {\n return defaultValue;\n }\n\n if (\n !previousValue ||\n previousValue === defaultValue ||\n containersRef.current !== containers ||\n queue != null\n ) {\n const map: RectMap = new Map();\n\n for (let container of containers) {\n if (!container) {\n continue;\n }\n\n if (\n queue &&\n queue.length > 0 &&\n !queue.includes(container.id) &&\n container.rect.current\n ) {\n // This container does not need to be re-measured\n map.set(container.id, container.rect.current);\n continue;\n }\n\n const node = container.node.current;\n const rect = node ? new Rect(measure(node), node) : null;\n\n container.rect.current = rect;\n\n if (rect) {\n map.set(container.id, rect);\n }\n }\n\n return map;\n }\n\n return previousValue;\n },\n [containers, queue, dragging, disabled, measure]\n );\n\n useEffect(() => {\n containersRef.current = containers;\n }, [containers]);\n\n useEffect(\n () => {\n if (disabled) {\n return;\n }\n\n measureDroppableContainers();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dragging, disabled]\n );\n\n useEffect(\n () => {\n if (queue && queue.length > 0) {\n setQueue(null);\n }\n },\n //eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(queue)]\n );\n\n useEffect(\n () => {\n if (\n disabled ||\n typeof frequency !== 'number' ||\n timeoutId.current !== null\n ) {\n return;\n }\n\n timeoutId.current = setTimeout(() => {\n measureDroppableContainers();\n timeoutId.current = null;\n }, frequency);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [frequency, disabled, measureDroppableContainers, ...dependencies]\n );\n\n return {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled: queue != null,\n };\n\n function isDisabled() {\n switch (strategy) {\n case MeasuringStrategy.Always:\n return false;\n case MeasuringStrategy.BeforeDragging:\n return dragging;\n default:\n return !dragging;\n }\n }\n}\n","import {useLazyMemo} from '@dnd-kit/utilities';\n\ntype AnyFunction = (...args: any) => any;\n\nexport function useInitialValue<\n T,\n U extends AnyFunction | undefined = undefined\n>(\n value: T | null,\n computeFn?: U\n): U extends AnyFunction ? ReturnType<U> | null : T | null {\n return useLazyMemo(\n (previousValue) => {\n if (!value) {\n return null;\n }\n\n if (previousValue) {\n return previousValue;\n }\n\n return typeof computeFn === 'function' ? computeFn(value) : value;\n },\n [computeFn, value]\n );\n}\n","import type {ClientRect} from '../../types';\nimport {useInitialValue} from './useInitialValue';\n\nexport function useInitialRect(\n node: HTMLElement | null,\n measure: (node: HTMLElement) => ClientRect\n) {\n return useInitialValue(node, measure);\n}\n","import {useEffect, useMemo} from 'react';\nimport {useEvent} from '@dnd-kit/utilities';\n\ninterface Arguments {\n callback: MutationCallback;\n disabled?: boolean;\n}\n\n/**\n * Returns a new MutationObserver instance.\n * If `MutationObserver` is undefined in the execution environment, returns `undefined`.\n */\nexport function useMutationObserver({callback, disabled}: Arguments) {\n const handleMutations = useEvent(callback);\n const mutationObserver = useMemo(() => {\n if (\n disabled ||\n typeof window === 'undefined' ||\n typeof window.MutationObserver === 'undefined'\n ) {\n return undefined;\n }\n\n const {MutationObserver} = window;\n\n return new MutationObserver(handleMutations);\n }, [handleMutations, disabled]);\n\n useEffect(() => {\n return () => mutationObserver?.disconnect();\n }, [mutationObserver]);\n\n return mutationObserver;\n}\n","import {useEffect, useMemo} from 'react';\nimport {useEvent} from '@dnd-kit/utilities';\n\ninterface Arguments {\n callback: ResizeObserverCallback;\n disabled?: boolean;\n}\n\n/**\n * Returns a new ResizeObserver instance bound to the `onResize` callback.\n * If `ResizeObserver` is undefined in the execution environment, returns `undefined`.\n */\nexport function useResizeObserver({callback, disabled}: Arguments) {\n const handleResize = useEvent(callback);\n const resizeObserver = useMemo(\n () => {\n if (\n disabled ||\n typeof window === 'undefined' ||\n typeof window.ResizeObserver === 'undefined'\n ) {\n return undefined;\n }\n\n const {ResizeObserver} = window;\n\n return new ResizeObserver(handleResize);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [disabled]\n );\n\n useEffect(() => {\n return () => resizeObserver?.disconnect();\n }, [resizeObserver]);\n\n return resizeObserver;\n}\n","import {useState} from 'react';\nimport {useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport type {ClientRect} from '../../types';\nimport {getClientRect, Rect} from '../../utilities';\n\nimport {useMutationObserver} from './useMutationObserver';\nimport {useResizeObserver} from './useResizeObserver';\n\nfunction defaultMeasure(element: HTMLElement) {\n return new Rect(getClientRect(element), element);\n}\n\nexport function useRect(\n element: HTMLElement | null,\n measure: (element: HTMLElement) => ClientRect = defaultMeasure,\n fallbackRect?: ClientRect | null\n) {\n const [rect, setRect] = useState<ClientRect | null>(null);\n\n function measureRect() {\n setRect((currentRect): ClientRect | null => {\n if (!element) {\n return null;\n }\n \n if (element.isConnected === false) {\n // Fall back to last rect we measured if the element is\n // no longer connected to the DOM.\n return currentRect ?? fallbackRect ?? null;\n }\n \n const newRect = measure(element);\n \n if (JSON.stringify(currentRect) === JSON.stringify(newRect)) {\n return currentRect;\n }\n \n return newRect;\n });\n }\n \n const mutationObserver = useMutationObserver({\n callback(records) {\n if (!element) {\n return;\n }\n\n for (const record of records) {\n const {type, target} = record;\n\n if (\n type === 'childList' &&\n target instanceof HTMLElement &&\n target.contains(element)\n ) {\n measureRect();\n break;\n }\n }\n },\n });\n const resizeObserver = useResizeObserver({callback: measureRect});\n\n useIsomorphicLayoutEffect(() => {\n measureRect();\n\n if (element) {\n resizeObserver?.observe(element);\n mutationObserver?.observe(document.body, {\n childList: true,\n subtree: true,\n });\n } else {\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n }\n }, [element]);\n\n return rect;\n}\n","import type {ClientRect} from '../../types';\nimport {getRectDelta} from '../../utilities';\n\nimport {useInitialValue} from './useInitialValue';\n\nexport function useRectDelta(rect: ClientRect | null) {\n const initialRect = useInitialValue(rect);\n\n return getRectDelta(rect, initialRect);\n}\n","import {useEffect, useRef} from 'react';\nimport {useLazyMemo} from '@dnd-kit/utilities';\n\nimport {getScrollableAncestors} from '../../utilities';\n\nconst defaultValue: Element[] = [];\n\nexport function useScrollableAncestors(node: HTMLElement | null) {\n const previousNode = useRef(node);\n\n const ancestors = useLazyMemo<Element[]>(\n (previousValue) => {\n if (!node) {\n return defaultValue;\n }\n\n if (\n previousValue &&\n previousValue !== defaultValue &&\n node &&\n previousNode.current &&\n node.parentNode === previousNode.current.parentNode\n ) {\n return previousValue;\n }\n\n return getScrollableAncestors(node);\n },\n [node]\n );\n\n useEffect(() => {\n previousNode.current = node;\n }, [node]);\n\n return ancestors;\n}\n","import {useState, useCallback, useMemo, useRef, useEffect} from 'react';\nimport {add} from '@dnd-kit/utilities';\n\nimport {\n defaultCoordinates,\n getScrollableElement,\n getScrollCoordinates,\n getScrollOffsets,\n} from '../../utilities';\nimport type {Coordinates} from '../../types';\n\ntype ScrollCoordinates = Map<HTMLElement | Window, Coordinates>;\n\nexport function useScrollOffsets(elements: Element[]): Coordinates {\n const [\n scrollCoordinates,\n setScrollCoordinates,\n ] = useState<ScrollCoordinates | null>(null);\n const prevElements = useRef(elements);\n\n // To-do: Throttle the handleScroll callback\n const handleScroll = useCallback((event: Event) => {\n const scrollingElement = getScrollableElement(event.target);\n\n if (!scrollingElement) {\n return;\n }\n\n setScrollCoordinates((scrollCoordinates) => {\n if (!scrollCoordinates) {\n return null;\n }\n\n scrollCoordinates.set(\n scrollingElement,\n getScrollCoordinates(scrollingElement)\n );\n\n return new Map(scrollCoordinates);\n });\n }, []);\n\n useEffect(() => {\n const previousElements = prevElements.current;\n\n if (elements !== previousElements) {\n cleanup(previousElements);\n\n const entries = elements\n .map((element) => {\n const scrollableElement = getScrollableElement(element);\n\n if (scrollableElement) {\n scrollableElement.addEventListener('scroll', handleScroll, {\n passive: true,\n });\n\n return [\n scrollableElement,\n getScrollCoordinates(scrollableElement),\n ] as const;\n }\n\n return null;\n })\n .filter(\n (\n entry\n ): entry is [\n HTMLElement | (Window & typeof globalThis),\n Coordinates\n ] => entry != null\n );\n\n setScrollCoordinates(entries.length ? new Map(entries) : null);\n\n prevElements.current = elements;\n }\n\n return () => {\n cleanup(elements);\n cleanup(previousElements);\n };\n\n function cleanup(elements: Element[]) {\n elements.forEach((element) => {\n const scrollableElement = getScrollableElement(element);\n\n scrollableElement?.removeEventListener('scroll', handleScroll);\n });\n }\n }, [handleScroll, elements]);\n\n return useMemo(() => {\n if (elements.length) {\n return scrollCoordinates\n ? Array.from(scrollCoordinates.values()).reduce(\n (acc, coordinates) => add(acc, coordinates),\n defaultCoordinates\n )\n : getScrollOffsets(elements);\n }\n\n return defaultCoordinates;\n }, [elements, scrollCoordinates]);\n}\n","import {useEffect, useRef} from 'react';\nimport {Coordinates, subtract} from '@dnd-kit/utilities';\n\nimport {defaultCoordinates} from '../../utilities';\n\nexport function useScrollOffsetsDelta(\n scrollOffsets: Coordinates,\n dependencies: any[] = []\n) {\n const initialScrollOffsets = useRef<Coordinates | null>(null);\n\n useEffect(\n () => {\n initialScrollOffsets.current = null;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n dependencies\n );\n\n useEffect(() => {\n const hasScrollOffsets = scrollOffsets !== defaultCoordinates;\n\n if (hasScrollOffsets && !initialScrollOffsets.current) {\n initialScrollOffsets.current = scrollOffsets;\n }\n\n if (!hasScrollOffsets && initialScrollOffsets.current) {\n initialScrollOffsets.current = null;\n }\n }, [scrollOffsets]);\n\n return initialScrollOffsets.current\n ? subtract(scrollOffsets, initialScrollOffsets.current)\n : defaultCoordinates;\n}\n","import {useEffect} from 'react';\nimport {canUseDOM} from '@dnd-kit/utilities';\n\nimport type {SensorDescriptor} from '../../sensors';\n\nexport function useSensorSetup(sensors: SensorDescriptor<any>[]) {\n useEffect(\n () => {\n if (!canUseDOM) {\n return;\n }\n\n const teardownFns = sensors.map(({sensor}) => sensor.setup?.());\n\n return () => {\n for (const teardown of teardownFns) {\n teardown?.();\n }\n };\n },\n // TO-DO: Sensors length could theoretically change which would not be a valid dependency\n // eslint-disable-next-line react-hooks/exhaustive-deps\n sensors.map(({sensor}) => sensor)\n );\n}\n","import {useMemo} from 'react';\n\nimport type {SyntheticEventName, UniqueIdentifier} from '../../types';\n\nexport type SyntheticListener = {\n eventName: SyntheticEventName;\n handler: (event: React.SyntheticEvent, id: UniqueIdentifier) => void;\n};\n\nexport type SyntheticListeners = SyntheticListener[];\n\nexport type SyntheticListenerMap = Record<string, Function>;\n\nexport function useSyntheticListeners(\n listeners: SyntheticListeners,\n id: UniqueIdentifier\n): SyntheticListenerMap {\n return useMemo(() => {\n return listeners.reduce<SyntheticListenerMap>(\n (acc, {eventName, handler}) => {\n acc[eventName] = (event: React.SyntheticEvent) => {\n handler(event, id);\n };\n\n return acc;\n },\n {} as SyntheticListenerMap\n );\n }, [listeners, id]);\n}\n","import {useMemo} from 'react';\n\nimport {getWindowClientRect} from '../../utilities/rect';\n\nexport function useWindowRect(element: typeof window | null) {\n return useMemo(() => (element ? getWindowClientRect(element) : null), [\n element,\n ]);\n}\n","import {useState} from 'react';\nimport {getWindow, useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport type {ClientRect} from '../../types';\nimport {Rect, getClientRect} from '../../utilities/rect';\nimport {isDocumentScrollingElement} from '../../utilities';\n\nimport {useResizeObserver} from './useResizeObserver';\nimport {useWindowRect} from './useWindowRect';\n\nconst defaultValue: Rect[] = [];\n\nexport function useRects(\n elements: Element[],\n measure: (element: Element) => ClientRect = getClientRect\n): ClientRect[] {\n const [firstElement] = elements;\n const windowRect = useWindowRect(\n firstElement ? getWindow(firstElement) : null\n );\n const [rects, setRects] = useState<ClientRect[]>(defaultValue);\n\n function measureRects() {\n setRects(() => {\n if (!elements.length) {\n return defaultValue;\n }\n\n return elements.map((element) =>\n isDocumentScrollingElement(element)\n ? (windowRect as ClientRect)\n : new Rect(measure(element), element)\n );\n });\n }\n\n const resizeObserver = useResizeObserver({callback: measureRects});\n\n useIsomorphicLayoutEffect(() => {\n resizeObserver?.disconnect();\n measureRects();\n elements.forEach((element) => resizeObserver?.observe(element));\n }, [elements]);\n\n return rects;\n}\n","import {isHTMLElement} from '@dnd-kit/utilities';\n\nexport function getMeasurableNode(\n node: HTMLElement | undefined | null\n): HTMLElement | null {\n if (!node) {\n return null;\n }\n\n if (node.children.length > 1) {\n return node;\n }\n const firstChild = node.children[0];\n\n return isHTMLElement(firstChild) ? firstChild : node;\n}\n","import {useMemo, useCallback, useState} from 'react';\nimport {isHTMLElement, useNodeRef} from '@dnd-kit/utilities';\n\nimport {useResizeObserver} from './useResizeObserver';\nimport {getMeasurableNode} from '../../utilities/nodes';\nimport type {PublicContextDescriptor} from '../../store';\nimport type {ClientRect} from '../../types';\n\ninterface Arguments {\n measure(element: HTMLElement): ClientRect;\n}\n\nexport function useDragOverlayMeasuring({\n measure,\n}: Arguments): PublicContextDescriptor['dragOverlay'] {\n const [rect, setRect] = useState<ClientRect | null>(null);\n const handleResize = useCallback(\n (entries: ResizeObserverEntry[]) => {\n for (const {target} of entries) {\n if (isHTMLElement(target)) {\n setRect((rect) => {\n const newRect = measure(target);\n\n return rect\n ? {...rect, width: newRect.width, height: newRect.height}\n : newRect;\n });\n break;\n }\n }\n },\n [measure]\n );\n const resizeObserver = useResizeObserver({callback: handleResize});\n const handleNodeChange = useCallback(\n (element) => {\n const node = getMeasurableNode(element);\n\n resizeObserver?.disconnect();\n\n if (node) {\n resizeObserver?.observe(node);\n }\n\n setRect(node ? measure(node) : null);\n },\n [measure, resizeObserver]\n );\n const [nodeRef, setRef] = useNodeRef(handleNodeChange);\n\n return useMemo(\n () => ({\n nodeRef,\n rect,\n setRef,\n }),\n [rect, nodeRef, setRef]\n );\n}\n","import type {DeepRequired} from '@dnd-kit/utilities';\n\nimport type {DataRef} from '../../store/types';\nimport {KeyboardSensor, PointerSensor} from '../../sensors';\nimport {MeasuringStrategy, MeasuringFrequency} from '../../hooks/utilities';\nimport {\n getClientRect,\n getTransformAgnosticClientRect,\n} from '../../utilities/rect';\n\nimport type {MeasuringConfiguration} from './types';\n\nexport const defaultSensors = [\n {sensor: PointerSensor, options: {}},\n {sensor: KeyboardSensor, options: {}},\n];\n\nexport const defaultData: DataRef = {current: {}};\n\nexport const defaultMeasuringConfiguration: DeepRequired<MeasuringConfiguration> = {\n draggable: {\n measure: getTransformAgnosticClientRect,\n },\n droppable: {\n measure: getTransformAgnosticClientRect,\n strategy: MeasuringStrategy.WhileDragging,\n frequency: MeasuringFrequency.Optimized,\n },\n dragOverlay: {\n measure: getClientRect,\n },\n};\n","import type {UniqueIdentifier} from '../types';\nimport type {DroppableContainer} from './types';\n\ntype Identifier = UniqueIdentifier | null | undefined;\n\nexport class DroppableContainersMap extends Map<\n UniqueIdentifier,\n DroppableContainer\n> {\n get(id: Identifier) {\n return id != null ? super.get(id) ?? undefined : undefined;\n }\n\n toArray(): DroppableContainer[] {\n return Array.from(this.values());\n }\n\n getEnabled(): DroppableContainer[] {\n return this.toArray().filter(({disabled}) => !disabled);\n }\n\n getNodeFor(id: Identifier) {\n return this.get(id)?.node.current ?? undefined;\n }\n}\n","import {createContext} from 'react';\n\nimport {noop} from '../utilities/other';\nimport {defaultMeasuringConfiguration} from '../components/DndContext/defaults';\nimport {DroppableContainersMap} from './constructors';\nimport type {InternalContextDescriptor, PublicContextDescriptor} from './types';\n\nexport const defaultPublicContext: PublicContextDescriptor = {\n activatorEvent: null,\n active: null,\n activeNode: null,\n activeNodeRect: null,\n collisions: null,\n containerNodeRect: null,\n draggableNodes: new Map(),\n droppableRects: new Map(),\n droppableContainers: new DroppableContainersMap(),\n over: null,\n dragOverlay: {\n nodeRef: {\n current: null,\n },\n rect: null,\n setRef: noop,\n },\n scrollableAncestors: [],\n scrollableAncestorRects: [],\n measuringConfiguration: defaultMeasuringConfiguration,\n measureDroppableContainers: noop,\n windowRect: null,\n measuringScheduled: false,\n};\n\nexport const defaultInternalContext: InternalContextDescriptor = {\n activatorEvent: null,\n activators: [],\n active: null,\n activeNodeRect: null,\n ariaDescribedById: {\n draggable: '',\n },\n dispatch: noop,\n draggableNodes: new Map(),\n over: null,\n measureDroppableContainers: noop,\n};\n\nexport const InternalContext = createContext<InternalContextDescriptor>(\n defaultInternalContext\n);\n\nexport const PublicContext = createContext<PublicContextDescriptor>(\n defaultPublicContext\n);\n","import {Action, Actions} from './actions';\nimport {DroppableContainersMap} from './constructors';\nimport type {State} from './types';\n\nexport function getInitialState(): State {\n return {\n draggable: {\n active: null,\n initialCoordinates: {x: 0, y: 0},\n nodes: new Map(),\n translate: {x: 0, y: 0},\n },\n droppable: {\n containers: new DroppableContainersMap(),\n },\n };\n}\n\nexport function reducer(state: State, action: Actions): State {\n switch (action.type) {\n case Action.DragStart:\n return {\n ...state,\n draggable: {\n ...state.draggable,\n initialCoordinates: action.initialCoordinates,\n active: action.active,\n },\n };\n case Action.DragMove:\n if (state.draggable.active == null) {\n return state;\n }\n\n return {\n ...state,\n draggable: {\n ...state.draggable,\n translate: {\n x: action.coordinates.x - state.draggable.initialCoordinates.x,\n y: action.coordinates.y - state.draggable.initialCoordinates.y,\n },\n },\n };\n case Action.DragEnd:\n case Action.DragCancel:\n return {\n ...state,\n draggable: {\n ...state.draggable,\n active: null,\n initialCoordinates: {x: 0, y: 0},\n translate: {x: 0, y: 0},\n },\n };\n\n case Action.RegisterDroppable: {\n const {element} = action;\n const {id} = element;\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, element);\n\n return {\n ...state,\n droppable: {\n ...state.droppable,\n containers,\n },\n };\n }\n\n case Action.SetDroppableDisabled: {\n const {id, key, disabled} = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, {\n ...element,\n disabled,\n });\n\n return {\n ...state,\n droppable: {\n ...state.droppable,\n containers,\n },\n };\n }\n\n case Action.UnregisterDroppable: {\n const {id, key} = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.delete(id);\n\n return {\n ...state,\n droppable: {\n ...state.droppable,\n containers,\n },\n };\n }\n\n default: {\n return state;\n }\n }\n}\n","import {useContext, useEffect} from 'react';\nimport {\n findFirstFocusableNode,\n isKeyboardEvent,\n usePrevious,\n} from '@dnd-kit/utilities';\n\nimport {InternalContext} from '../../../store';\n\ninterface Props {\n disabled: boolean;\n}\n\nexport function RestoreFocus({disabled}: Props) {\n const {active, activatorEvent, draggableNodes} = useContext(InternalContext);\n const previousActivatorEvent = usePrevious(activatorEvent);\n const previousActiveId = usePrevious(active?.id);\n\n // Restore keyboard focus on the activator node\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n if (!activatorEvent && previousActivatorEvent && previousActiveId != null) {\n if (!isKeyboardEvent(previousActivatorEvent)) {\n return;\n }\n\n if (document.activeElement === previousActivatorEvent.target) {\n // No need to restore focus\n return;\n }\n\n const draggableNode = draggableNodes.get(previousActiveId);\n\n if (!draggableNode) {\n return;\n }\n\n const {activatorNode, node} = draggableNode;\n\n if (!activatorNode.current && !node.current) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const element of [activatorNode.current, node.current]) {\n if (!element) {\n continue;\n }\n\n const focusableNode = findFirstFocusableNode(element);\n\n if (focusableNode) {\n focusableNode.focus();\n break;\n }\n }\n });\n }\n }, [\n activatorEvent,\n disabled,\n draggableNodes,\n previousActiveId,\n previousActivatorEvent,\n ]);\n\n return null;\n}\n","import type {FirstArgument, Transform} from '@dnd-kit/utilities';\n\nimport type {Modifiers, Modifier} from './types';\n\nexport function applyModifiers(\n modifiers: Modifiers | undefined,\n {transform, ...args}: FirstArgument<Modifier>\n): Transform {\n return modifiers?.length\n ? modifiers.reduce<Transform>((accumulator, modifier) => {\n return modifier({\n transform: accumulator,\n ...args,\n });\n }, transform)\n : transform;\n}\n","import {useMemo} from 'react';\nimport type {DeepRequired} from '@dnd-kit/utilities';\n\nimport {defaultMeasuringConfiguration} from '../defaults';\nimport type {MeasuringConfiguration} from '../types';\n\nexport function useMeasuringConfiguration(\n config: MeasuringConfiguration | undefined\n): DeepRequired<MeasuringConfiguration> {\n return useMemo(\n () => ({\n draggable: {\n ...defaultMeasuringConfiguration.draggable,\n ...config?.draggable,\n },\n droppable: {\n ...defaultMeasuringConfiguration.droppable,\n ...config?.droppable,\n },\n dragOverlay: {\n ...defaultMeasuringConfiguration.dragOverlay,\n ...config?.dragOverlay,\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [config?.draggable, config?.droppable, config?.dragOverlay]\n );\n}\n","import {useRef} from 'react';\nimport {useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport {getRectDelta} from '../../../utilities/rect';\nimport {getFirstScrollableAncestor} from '../../../utilities/scroll';\nimport type {ClientRect} from '../../../types';\nimport type {DraggableNode} from '../../../store';\nimport type {MeasuringFunction} from '../types';\n\ninterface Options {\n activeNode: DraggableNode | null | undefined;\n config: boolean | {x: boolean; y: boolean} | undefined;\n initialRect: ClientRect | null;\n measure: MeasuringFunction;\n}\n\nexport function useLayoutShiftScrollCompensation({\n activeNode,\n measure,\n initialRect,\n config = true,\n}: Options) {\n const initialized = useRef(false);\n const {x, y} = typeof config === 'boolean' ? {x: config, y: config} : config;\n\n useIsomorphicLayoutEffect(() => {\n const disabled = !x && !y;\n\n if (disabled || !activeNode) {\n initialized.current = false;\n return;\n }\n\n if (initialized.current || !initialRect) {\n // Return early if layout shift scroll compensation was already attempted\n // or if there is no initialRect to compare to.\n return;\n }\n\n // Get the most up to date node ref for the active draggable\n const node = activeNode?.node.current;\n\n if (!node || node.isConnected === false) {\n // Return early if there is no attached node ref or if the node is\n // disconnected from the document.\n return;\n }\n\n const rect = measure(node);\n const rectDelta = getRectDelta(rect, initialRect);\n\n if (!x) {\n rectDelta.x = 0;\n }\n\n if (!y) {\n rectDelta.y = 0;\n }\n\n // Only perform layout shift scroll compensation once\n initialized.current = true;\n\n if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) {\n const firstScrollableAncestor = getFirstScrollableAncestor(node);\n\n if (firstScrollableAncestor) {\n firstScrollableAncestor.scrollBy({\n top: rectDelta.y,\n left: rectDelta.x,\n });\n }\n }\n }, [activeNode, x, y, initialRect, measure]);\n}\n","import React, {\n memo,\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport {unstable_batchedUpdates} from 'react-dom';\nimport {\n add,\n getEventCoordinates,\n getWindow,\n useLatestValue,\n useIsomorphicLayoutEffect,\n useUniqueId,\n} from '@dnd-kit/utilities';\nimport type {Transform} from '@dnd-kit/utilities';\n\nimport {\n Action,\n PublicContext,\n InternalContext,\n PublicContextDescriptor,\n InternalContextDescriptor,\n getInitialState,\n reducer,\n} from '../../store';\nimport {DndMonitorContext, useDndMonitorProvider} from '../DndMonitor';\nimport {\n useAutoScroller,\n useCachedNode,\n useCombineActivators,\n useDragOverlayMeasuring,\n useDroppableMeasuring,\n useInitialRect,\n useRect,\n useRectDelta,\n useRects,\n useScrollableAncestors,\n useScrollOffsets,\n useScrollOffsetsDelta,\n useSensorSetup,\n useWindowRect,\n} from '../../hooks/utilities';\nimport type {AutoScrollOptions, SyntheticListener} from '../../hooks/utilities';\nimport type {\n Sensor,\n SensorContext,\n SensorDescriptor,\n SensorActivatorFunction,\n SensorInstance,\n} from '../../sensors';\nimport {\n adjustScale,\n CollisionDetection,\n defaultCoordinates,\n getAdjustedRect,\n getFirstCollision,\n rectIntersection,\n} from '../../utilities';\nimport {applyModifiers, Modifiers} from '../../modifiers';\nimport type {Active, Over} from '../../store/types';\nimport type {\n DragStartEvent,\n DragCancelEvent,\n DragEndEvent,\n DragMoveEvent,\n DragOverEvent,\n UniqueIdentifier,\n DragPendingEvent,\n DragAbortEvent,\n} from '../../types';\nimport {\n Accessibility,\n Announcements,\n RestoreFocus,\n ScreenReaderInstructions,\n} from '../Accessibility';\n\nimport {defaultData, defaultSensors} from './defaults';\nimport {\n useLayoutShiftScrollCompensation,\n useMeasuringConfiguration,\n} from './hooks';\nimport type {MeasuringConfiguration} from './types';\n\nexport interface Props {\n id?: string;\n accessibility?: {\n announcements?: Announcements;\n container?: Element;\n restoreFocus?: boolean;\n screenReaderInstructions?: ScreenReaderInstructions;\n };\n autoScroll?: boolean | AutoScrollOptions;\n cancelDrop?: CancelDrop;\n children?: React.ReactNode;\n collisionDetection?: CollisionDetection;\n measuring?: MeasuringConfiguration;\n modifiers?: Modifiers;\n sensors?: SensorDescriptor<any>[];\n onDragAbort?(event: DragAbortEvent): void;\n onDragPending?(event: DragPendingEvent): void;\n onDragStart?(event: DragStartEvent): void;\n onDragMove?(event: DragMoveEvent): void;\n onDragOver?(event: DragOverEvent): void;\n onDragEnd?(event: DragEndEvent): void;\n onDragCancel?(event: DragCancelEvent): void;\n}\n\nexport interface CancelDropArguments extends DragEndEvent {}\n\nexport type CancelDrop = (\n args: CancelDropArguments\n) => boolean | Promise<boolean>;\n\ninterface DndEvent extends Event {\n dndKit?: {\n capturedBy: Sensor<any>;\n };\n}\n\nexport const ActiveDraggableContext = createContext<Transform>({\n ...defaultCoordinates,\n scaleX: 1,\n scaleY: 1,\n});\n\nenum Status {\n Uninitialized,\n Initializing,\n Initialized,\n}\n\nexport const DndContext = memo(function DndContext({\n id,\n accessibility,\n autoScroll = true,\n children,\n sensors = defaultSensors,\n collisionDetection = rectIntersection,\n measuring,\n modifiers,\n ...props\n}: Props) {\n const store = useReducer(reducer, undefined, getInitialState);\n const [state, dispatch] = store;\n const [dispatchMonitorEvent, registerMonitorListener] =\n useDndMonitorProvider();\n const [status, setStatus] = useState<Status>(Status.Uninitialized);\n const isInitialized = status === Status.Initialized;\n const {\n draggable: {active: activeId, nodes: draggableNodes, translate},\n droppable: {containers: droppableContainers},\n } = state;\n const node = activeId != null ? draggableNodes.get(activeId) : null;\n const activeRects = useRef<Active['rect']['current']>({\n initial: null,\n translated: null,\n });\n const active = useMemo<Active | null>(\n () =>\n activeId != null\n ? {\n id: activeId,\n // It's possible for the active node to unmount while dragging\n data: node?.data ?? defaultData,\n rect: activeRects,\n }\n : null,\n [activeId, node]\n );\n const activeRef = useRef<UniqueIdentifier | null>(null);\n const [activeSensor, setActiveSensor] = useState<SensorInstance | null>(null);\n const [activatorEvent, setActivatorEvent] = useState<Event | null>(null);\n const latestProps = useLatestValue(props, Object.values(props));\n const draggableDescribedById = useUniqueId(`DndDescribedBy`, id);\n const enabledDroppableContainers = useMemo(\n () => droppableContainers.getEnabled(),\n [droppableContainers]\n );\n const measuringConfiguration = useMeasuringConfiguration(measuring);\n const {droppableRects, measureDroppableContainers, measuringScheduled} =\n useDroppableMeasuring(enabledDroppableContainers, {\n dragging: isInitialized,\n dependencies: [translate.x, translate.y],\n config: measuringConfiguration.droppable,\n });\n const activeNode = useCachedNode(draggableNodes, activeId);\n const activationCoordinates = useMemo(\n () => (activatorEvent ? getEventCoordinates(activatorEvent) : null),\n [activatorEvent]\n );\n const autoScrollOptions = getAutoScrollerOptions();\n const initialActiveNodeRect = useInitialRect(\n activeNode,\n measuringConfiguration.draggable.measure\n );\n\n useLayoutShiftScrollCompensation({\n activeNode: activeId != null ? draggableNodes.get(activeId) : null,\n config: autoScrollOptions.layoutShiftCompensation,\n initialRect: initialActiveNodeRect,\n measure: measuringConfiguration.draggable.measure,\n });\n\n const activeNodeRect = useRect(\n activeNode,\n measuringConfiguration.draggable.measure,\n initialActiveNodeRect\n );\n const containerNodeRect = useRect(\n activeNode ? activeNode.parentElement : null\n );\n const sensorContext = useRef<SensorContext>({\n activatorEvent: null,\n active: null,\n activeNode,\n collisionRect: null,\n collisions: null,\n droppableRects,\n draggableNodes,\n draggingNode: null,\n draggingNodeRect: null,\n droppableContainers,\n over: null,\n scrollableAncestors: [],\n scrollAdjustedTranslate: null,\n });\n const overNode = droppableContainers.getNodeFor(\n sensorContext.current.over?.id\n );\n const dragOverlay = useDragOverlayMeasuring({\n measure: measuringConfiguration.dragOverlay.measure,\n });\n\n // Use the rect of the drag overlay if it is mounted\n const draggingNode = dragOverlay.nodeRef.current ?? activeNode;\n const draggingNodeRect = isInitialized\n ? dragOverlay.rect ?? activeNodeRect\n : null;\n const usesDragOverlay = Boolean(\n dragOverlay.nodeRef.current && dragOverlay.rect\n );\n // The delta between the previous and new position of the draggable node\n // is only relevant when there is no drag overlay\n const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect);\n\n // Get the window rect of the dragging node\n const windowRect = useWindowRect(\n draggingNode ? getWindow(draggingNode) : null\n );\n\n // Get scrollable ancestors of the dragging node\n const scrollableAncestors = useScrollableAncestors(\n isInitialized ? overNode ?? activeNode : null\n );\n const scrollableAncestorRects = useRects(scrollableAncestors);\n\n // Apply modifiers\n const modifiedTranslate = applyModifiers(modifiers, {\n transform: {\n x: translate.x - nodeRectDelta.x,\n y: translate.y - nodeRectDelta.y,\n scaleX: 1,\n scaleY: 1,\n },\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect,\n over: sensorContext.current.over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect,\n });\n\n const pointerCoordinates = activationCoordinates\n ? add(activationCoordinates, translate)\n : null;\n\n const scrollOffsets = useScrollOffsets(scrollableAncestors);\n // Represents the scroll delta since dragging was initiated\n const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets);\n // Represents the scroll delta since the last time the active node rect was measured\n const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [\n activeNodeRect,\n ]);\n\n const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment);\n\n const collisionRect = draggingNodeRect\n ? getAdjustedRect(draggingNodeRect, modifiedTranslate)\n : null;\n\n const collisions =\n active && collisionRect\n ? collisionDetection({\n active,\n collisionRect,\n droppableRects,\n droppableContainers: enabledDroppableContainers,\n pointerCoordinates,\n })\n : null;\n const overId = getFirstCollision(collisions, 'id');\n const [over, setOver] = useState<Over | null>(null);\n\n // When there is no drag overlay used, we need to account for the\n // window scroll delta\n const appliedTranslate = usesDragOverlay\n ? modifiedTranslate\n : add(modifiedTranslate, activeNodeScrollDelta);\n\n const transform = adjustScale(\n appliedTranslate,\n over?.rect ?? null,\n activeNodeRect\n );\n\n const activeSensorRef = useRef<SensorInstance | null>(null);\n const instantiateSensor = useCallback(\n (\n event: React.SyntheticEvent,\n {sensor: Sensor, options}: SensorDescriptor<any>\n ) => {\n if (activeRef.current == null) {\n return;\n }\n\n const activeNode = draggableNodes.get(activeRef.current);\n\n if (!activeNode) {\n return;\n }\n\n const activatorEvent = event.nativeEvent;\n\n const sensorInstance = new Sensor({\n active: activeRef.current,\n activeNode,\n event: activatorEvent,\n options,\n // Sensors need to be instantiated with refs for arguments that change over time\n // otherwise they are frozen in time with the stale arguments\n context: sensorContext,\n onAbort(id) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {onDragAbort} = latestProps.current;\n const event: DragAbortEvent = {id};\n onDragAbort?.(event);\n dispatchMonitorEvent({type: 'onDragAbort', event});\n },\n onPending(id, constraint, initialCoordinates, offset) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {onDragPending} = latestProps.current;\n const event: DragPendingEvent = {\n id,\n constraint,\n initialCoordinates,\n offset,\n };\n\n onDragPending?.(event);\n dispatchMonitorEvent({type: 'onDragPending', event});\n },\n onStart(initialCoordinates) {\n const id = activeRef.current;\n\n if (id == null) {\n return;\n }\n\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {onDragStart} = latestProps.current;\n const event: DragStartEvent = {\n activatorEvent,\n active: {id, data: draggableNode.data, rect: activeRects},\n };\n\n unstable_batchedUpdates(() => {\n onDragStart?.(event);\n setStatus(Status.Initializing);\n dispatch({\n type: Action.DragStart,\n initialCoordinates,\n active: id,\n });\n dispatchMonitorEvent({type: 'onDragStart', event});\n setActiveSensor(activeSensorRef.current);\n setActivatorEvent(activatorEvent);\n });\n },\n onMove(coordinates) {\n dispatch({\n type: Action.DragMove,\n coordinates,\n });\n },\n onEnd: createHandler(Action.DragEnd),\n onCancel: createHandler(Action.DragCancel),\n });\n\n activeSensorRef.current = sensorInstance;\n\n function createHandler(type: Action.DragEnd | Action.DragCancel) {\n return async function handler() {\n const {active, collisions, over, scrollAdjustedTranslate} =\n sensorContext.current;\n let event: DragEndEvent | null = null;\n\n if (active && scrollAdjustedTranslate) {\n const {cancelDrop} = latestProps.current;\n\n event = {\n activatorEvent,\n active: active,\n collisions,\n delta: scrollAdjustedTranslate,\n over,\n };\n\n if (type === Action.DragEnd && typeof cancelDrop === 'function') {\n const shouldCancel = await Promise.resolve(cancelDrop(event));\n\n if (shouldCancel) {\n type = Action.DragCancel;\n }\n }\n }\n\n activeRef.current = null;\n\n unstable_batchedUpdates(() => {\n dispatch({type});\n setStatus(Status.Uninitialized);\n setOver(null);\n setActiveSensor(null);\n setActivatorEvent(null);\n activeSensorRef.current = null;\n\n const eventName =\n type === Action.DragEnd ? 'onDragEnd' : 'onDragCancel';\n\n if (event) {\n const handler = latestProps.current[eventName];\n\n handler?.(event);\n dispatchMonitorEvent({type: eventName, event});\n }\n });\n };\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes]\n );\n\n const bindActivatorToSensorInstantiator = useCallback(\n (\n handler: SensorActivatorFunction<any>,\n sensor: SensorDescriptor<any>\n ): SyntheticListener['handler'] => {\n return (event, active) => {\n const nativeEvent = event.nativeEvent as DndEvent;\n const activeDraggableNode = draggableNodes.get(active);\n\n if (\n // Another sensor is already instantiating\n activeRef.current !== null ||\n // No active draggable\n !activeDraggableNode ||\n // Event has already been captured\n nativeEvent.dndKit ||\n nativeEvent.defaultPrevented\n ) {\n return;\n }\n\n const activationContext = {\n active: activeDraggableNode,\n };\n const shouldActivate = handler(\n event,\n sensor.options,\n activationContext\n );\n\n if (shouldActivate === true) {\n nativeEvent.dndKit = {\n capturedBy: sensor.sensor,\n };\n\n activeRef.current = active;\n instantiateSensor(event, sensor);\n }\n };\n },\n [draggableNodes, instantiateSensor]\n );\n\n const activators = useCombineActivators(\n sensors,\n bindActivatorToSensorInstantiator\n );\n\n useSensorSetup(sensors);\n\n useIsomorphicLayoutEffect(() => {\n if (activeNodeRect && status === Status.Initializing) {\n setStatus(Status.Initialized);\n }\n }, [activeNodeRect, status]);\n\n useEffect(\n () => {\n const {onDragMove} = latestProps.current;\n const {active, activatorEvent, collisions, over} = sensorContext.current;\n\n if (!active || !activatorEvent) {\n return;\n }\n\n const event: DragMoveEvent = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y,\n },\n over,\n };\n\n unstable_batchedUpdates(() => {\n onDragMove?.(event);\n dispatchMonitorEvent({type: 'onDragMove', event});\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]\n );\n\n useEffect(\n () => {\n const {\n active,\n activatorEvent,\n collisions,\n droppableContainers,\n scrollAdjustedTranslate,\n } = sensorContext.current;\n\n if (\n !active ||\n activeRef.current == null ||\n !activatorEvent ||\n !scrollAdjustedTranslate\n ) {\n return;\n }\n\n const {onDragOver} = latestProps.current;\n const overContainer = droppableContainers.get(overId);\n const over =\n overContainer && overContainer.rect.current\n ? {\n id: overContainer.id,\n rect: overContainer.rect.current,\n data: overContainer.data,\n disabled: overContainer.disabled,\n }\n : null;\n const event: DragOverEvent = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y,\n },\n over,\n };\n\n unstable_batchedUpdates(() => {\n setOver(over);\n onDragOver?.(event);\n dispatchMonitorEvent({type: 'onDragOver', event});\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [overId]\n );\n\n useIsomorphicLayoutEffect(() => {\n sensorContext.current = {\n activatorEvent,\n active,\n activeNode,\n collisionRect,\n collisions,\n droppableRects,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate,\n };\n\n activeRects.current = {\n initial: draggingNodeRect,\n translated: collisionRect,\n };\n }, [\n active,\n activeNode,\n collisions,\n collisionRect,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableRects,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate,\n ]);\n\n useAutoScroller({\n ...autoScrollOptions,\n delta: translate,\n draggingRect: collisionRect,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n });\n\n const publicContext = useMemo(() => {\n const context: PublicContextDescriptor = {\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect,\n };\n\n return context;\n }, [\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect,\n ]);\n\n const internalContext = useMemo(() => {\n const context: InternalContextDescriptor = {\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n ariaDescribedById: {\n draggable: draggableDescribedById,\n },\n dispatch,\n draggableNodes,\n over,\n measureDroppableContainers,\n };\n\n return context;\n }, [\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n dispatch,\n draggableDescribedById,\n draggableNodes,\n over,\n measureDroppableContainers,\n ]);\n\n return (\n <DndMonitorContext.Provider value={registerMonitorListener}>\n <InternalContext.Provider value={internalContext}>\n <PublicContext.Provider value={publicContext}>\n <ActiveDraggableContext.Provider value={transform}>\n {children}\n </ActiveDraggableContext.Provider>\n </PublicContext.Provider>\n <RestoreFocus disabled={accessibility?.restoreFocus === false} />\n </InternalContext.Provider>\n <Accessibility\n {...accessibility}\n hiddenTextDescribedById={draggableDescribedById}\n />\n </DndMonitorContext.Provider>\n );\n\n function getAutoScrollerOptions() {\n const activeSensorDisablesAutoscroll =\n activeSensor?.autoScrollEnabled === false;\n const autoScrollGloballyDisabled =\n typeof autoScroll === 'object'\n ? autoScroll.enabled === false\n : autoScroll === false;\n const enabled =\n isInitialized &&\n !activeSensorDisablesAutoscroll &&\n !autoScrollGloballyDisabled;\n\n if (typeof autoScroll === 'object') {\n return {\n ...autoScroll,\n enabled,\n };\n }\n\n return {enabled};\n }\n});\n","import {createContext, useContext, useMemo} from 'react';\nimport {\n Transform,\n useNodeRef,\n useIsomorphicLayoutEffect,\n useLatestValue,\n useUniqueId,\n} from '@dnd-kit/utilities';\n\nimport {InternalContext, Data} from '../store';\nimport type {UniqueIdentifier} from '../types';\nimport {ActiveDraggableContext} from '../components/DndContext';\nimport {useSyntheticListeners, SyntheticListenerMap} from './utilities';\n\nexport interface UseDraggableArguments {\n id: UniqueIdentifier;\n data?: Data;\n disabled?: boolean;\n attributes?: {\n role?: string;\n roleDescription?: string;\n tabIndex?: number;\n };\n}\n\nexport interface DraggableAttributes {\n role: string;\n tabIndex: number;\n 'aria-disabled': boolean;\n 'aria-pressed': boolean | undefined;\n 'aria-roledescription': string;\n 'aria-describedby': string;\n}\n\nexport type DraggableSyntheticListeners = SyntheticListenerMap | undefined;\n\nconst NullContext = createContext<any>(null);\n\nconst defaultRole = 'button';\n\nconst ID_PREFIX = 'Draggable';\n\nexport function useDraggable({\n id,\n data,\n disabled = false,\n attributes,\n}: UseDraggableArguments) {\n const key = useUniqueId(ID_PREFIX);\n const {\n activators,\n activatorEvent,\n active,\n activeNodeRect,\n ariaDescribedById,\n draggableNodes,\n over,\n } = useContext(InternalContext);\n const {\n role = defaultRole,\n roleDescription = 'draggable',\n tabIndex = 0,\n } = attributes ?? {};\n const isDragging = active?.id === id;\n const transform: Transform | null = useContext(\n isDragging ? ActiveDraggableContext : NullContext\n );\n const [node, setNodeRef] = useNodeRef();\n const [activatorNode, setActivatorNodeRef] = useNodeRef();\n const listeners = useSyntheticListeners(activators, id);\n const dataRef = useLatestValue(data);\n\n useIsomorphicLayoutEffect(\n () => {\n draggableNodes.set(id, {id, key, node, activatorNode, data: dataRef});\n\n return () => {\n const node = draggableNodes.get(id);\n\n if (node && node.key === key) {\n draggableNodes.delete(id);\n }\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes, id]\n );\n\n const memoizedAttributes: DraggableAttributes = useMemo(\n () => ({\n role,\n tabIndex,\n 'aria-disabled': disabled,\n 'aria-pressed': isDragging && role === defaultRole ? true : undefined,\n 'aria-roledescription': roleDescription,\n 'aria-describedby': ariaDescribedById.draggable,\n }),\n [\n disabled,\n role,\n tabIndex,\n isDragging,\n roleDescription,\n ariaDescribedById.draggable,\n ]\n );\n\n return {\n active,\n activatorEvent,\n activeNodeRect,\n attributes: memoizedAttributes,\n isDragging,\n listeners: disabled ? undefined : listeners,\n node,\n over,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n };\n}\n","import {ContextType, useContext} from 'react';\nimport {PublicContext} from '../store';\n\nexport function useDndContext() {\n return useContext(PublicContext);\n}\n\nexport type UseDndContextReturnValue = ContextType<typeof PublicContext>;\n","import {useCallback, useContext, useEffect, useRef} from 'react';\nimport {useLatestValue, useNodeRef, useUniqueId} from '@dnd-kit/utilities';\n\nimport {InternalContext, Action, Data} from '../store';\nimport type {ClientRect, UniqueIdentifier} from '../types';\n\nimport {useResizeObserver} from './utilities';\n\ninterface ResizeObserverConfig {\n /** Whether the ResizeObserver should be disabled entirely */\n disabled?: boolean;\n /** Resize events may affect the layout and position of other droppable containers.\n * Specify an array of `UniqueIdentifier` of droppable containers that should also be re-measured\n * when this droppable container resizes. Specifying an empty array re-measures all droppable containers.\n */\n updateMeasurementsFor?: UniqueIdentifier[];\n /** Represents the debounce timeout between when resize events are observed and when elements are re-measured */\n timeout?: number;\n}\n\nexport interface UseDroppableArguments {\n id: UniqueIdentifier;\n disabled?: boolean;\n data?: Data;\n resizeObserverConfig?: ResizeObserverConfig;\n}\n\nconst ID_PREFIX = 'Droppable';\n\nconst defaultResizeObserverConfig = {\n timeout: 25,\n};\n\nexport function useDroppable({\n data,\n disabled = false,\n id,\n resizeObserverConfig,\n}: UseDroppableArguments) {\n const key = useUniqueId(ID_PREFIX);\n const {active, dispatch, over, measureDroppableContainers} =\n useContext(InternalContext);\n const previous = useRef({disabled});\n const resizeObserverConnected = useRef(false);\n const rect = useRef<ClientRect | null>(null);\n const callbackId = useRef<NodeJS.Timeout | null>(null);\n const {\n disabled: resizeObserverDisabled,\n updateMeasurementsFor,\n timeout: resizeObserverTimeout,\n } = {\n ...defaultResizeObserverConfig,\n ...resizeObserverConfig,\n };\n const ids = useLatestValue(updateMeasurementsFor ?? id);\n const handleResize = useCallback(\n () => {\n if (!resizeObserverConnected.current) {\n // ResizeObserver invokes the `handleResize` callback as soon as `observe` is called,\n // assuming the element is rendered and displayed.\n resizeObserverConnected.current = true;\n return;\n }\n\n if (callbackId.current != null) {\n clearTimeout(callbackId.current);\n }\n\n callbackId.current = setTimeout(() => {\n measureDroppableContainers(\n Array.isArray(ids.current) ? ids.current : [ids.current]\n );\n callbackId.current = null;\n }, resizeObserverTimeout);\n },\n //eslint-disable-next-line react-hooks/exhaustive-deps\n [resizeObserverTimeout]\n );\n const resizeObserver = useResizeObserver({\n callback: handleResize,\n disabled: resizeObserverDisabled || !active,\n });\n const handleNodeChange = useCallback(\n (newElement: HTMLElement | null, previousElement: HTMLElement | null) => {\n if (!resizeObserver) {\n return;\n }\n\n if (previousElement) {\n resizeObserver.unobserve(previousElement);\n resizeObserverConnected.current = false;\n }\n\n if (newElement) {\n resizeObserver.observe(newElement);\n }\n },\n [resizeObserver]\n );\n const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange);\n const dataRef = useLatestValue(data);\n\n useEffect(() => {\n if (!resizeObserver || !nodeRef.current) {\n return;\n }\n\n resizeObserver.disconnect();\n resizeObserverConnected.current = false;\n resizeObserver.observe(nodeRef.current);\n }, [nodeRef, resizeObserver]);\n\n useEffect(\n () => {\n dispatch({\n type: Action.RegisterDroppable,\n element: {\n id,\n key,\n disabled,\n node: nodeRef,\n rect,\n data: dataRef,\n },\n });\n\n return () =>\n dispatch({\n type: Action.UnregisterDroppable,\n key,\n id,\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [id]\n );\n\n useEffect(() => {\n if (disabled !== previous.current.disabled) {\n dispatch({\n type: Action.SetDroppableDisabled,\n id,\n key,\n disabled,\n });\n\n previous.current.disabled = disabled;\n }\n }, [id, key, disabled, dispatch]);\n\n return {\n active,\n rect,\n isOver: over?.id === id,\n node: nodeRef,\n over,\n setNodeRef,\n };\n}\n","/**\n * Move an array item to a different position. Returns a new array with the item moved to the new position.\n */\nexport function arrayMove<T>(array: T[], from: number, to: number): T[] {\n const newArray = array.slice();\n newArray.splice(\n to < 0 ? newArray.length + to : to,\n 0,\n newArray.splice(from, 1)[0]\n );\n\n return newArray;\n}\n","import type {\n ClientRect,\n UniqueIdentifier,\n UseDndContextReturnValue,\n} from '@dnd-kit/core';\n\nexport function getSortedRects(\n items: UniqueIdentifier[],\n rects: UseDndContextReturnValue['droppableRects']\n) {\n return items.reduce<ClientRect[]>((accumulator, id, index) => {\n const rect = rects.get(id);\n\n if (rect) {\n accumulator[index] = rect;\n }\n\n return accumulator;\n }, Array(items.length));\n}\n","export function isValidIndex(index: number | null): index is number {\n return index !== null && index >= 0;\n}\n","import type {UniqueIdentifier} from '@dnd-kit/core';\n\nexport function itemsEqual(a: UniqueIdentifier[], b: UniqueIdentifier[]) {\n if (a === b) {\n return true;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n","import type {Disabled} from '../types';\n\nexport function normalizeDisabled(disabled: boolean | Disabled): Disabled {\n if (typeof disabled === 'boolean') {\n return {\n draggable: disabled,\n droppable: disabled,\n };\n }\n\n return disabled;\n}\n","import {arrayMove} from '../utilities';\nimport type {SortingStrategy} from '../types';\n\nexport const rectSortingStrategy: SortingStrategy = ({\n rects,\n activeIndex,\n overIndex,\n index,\n}) => {\n const newRects = arrayMove(rects, overIndex, activeIndex);\n\n const oldRect = rects[index];\n const newRect = newRects[index];\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height,\n };\n};\n","import type {ClientRect} from '@dnd-kit/core';\nimport type {SortingStrategy} from '../types';\n\n// To-do: We should be calculating scale transformation\nconst defaultScale = {\n scaleX: 1,\n scaleY: 1,\n};\n\nexport const verticalListSortingStrategy: SortingStrategy = ({\n activeIndex,\n activeNodeRect: fallbackActiveRect,\n index,\n rects,\n overIndex,\n}) => {\n const activeNodeRect = rects[activeIndex] ?? fallbackActiveRect;\n\n if (!activeNodeRect) {\n return null;\n }\n\n if (index === activeIndex) {\n const overIndexRect = rects[overIndex];\n\n if (!overIndexRect) {\n return null;\n }\n\n return {\n x: 0,\n y:\n activeIndex < overIndex\n ? overIndexRect.top +\n overIndexRect.height -\n (activeNodeRect.top + activeNodeRect.height)\n : overIndexRect.top - activeNodeRect.top,\n ...defaultScale,\n };\n }\n\n const itemGap = getItemGap(rects, index, activeIndex);\n\n if (index > activeIndex && index <= overIndex) {\n return {\n x: 0,\n y: -activeNodeRect.height - itemGap,\n ...defaultScale,\n };\n }\n\n if (index < activeIndex && index >= overIndex) {\n return {\n x: 0,\n y: activeNodeRect.height + itemGap,\n ...defaultScale,\n };\n }\n\n return {\n x: 0,\n y: 0,\n ...defaultScale,\n };\n};\n\nfunction getItemGap(\n clientRects: ClientRect[],\n index: number,\n activeIndex: number\n) {\n const currentRect: ClientRect | undefined = clientRects[index];\n const previousRect: ClientRect | undefined = clientRects[index - 1];\n const nextRect: ClientRect | undefined = clientRects[index + 1];\n\n if (!currentRect) {\n return 0;\n }\n\n if (activeIndex < index) {\n return previousRect\n ? currentRect.top - (previousRect.top + previousRect.height)\n : nextRect\n ? nextRect.top - (currentRect.top + currentRect.height)\n : 0;\n }\n\n return nextRect\n ? nextRect.top - (currentRect.top + currentRect.height)\n : previousRect\n ? currentRect.top - (previousRect.top + previousRect.height)\n : 0;\n}\n","import React, {useEffect, useMemo, useRef} from 'react';\nimport {useDndContext, ClientRect, UniqueIdentifier} from '@dnd-kit/core';\nimport {useIsomorphicLayoutEffect, useUniqueId} from '@dnd-kit/utilities';\n\nimport type {Disabled, SortingStrategy} from '../types';\nimport {getSortedRects, itemsEqual, normalizeDisabled} from '../utilities';\nimport {rectSortingStrategy} from '../strategies';\n\nexport interface Props {\n children: React.ReactNode;\n items: (UniqueIdentifier | {id: UniqueIdentifier})[];\n strategy?: SortingStrategy;\n id?: string;\n disabled?: boolean | Disabled;\n}\n\nconst ID_PREFIX = 'Sortable';\n\ninterface ContextDescriptor {\n activeIndex: number;\n containerId: string;\n disabled: Disabled;\n disableTransforms: boolean;\n items: UniqueIdentifier[];\n overIndex: number;\n useDragOverlay: boolean;\n sortedRects: ClientRect[];\n strategy: SortingStrategy;\n}\n\nexport const Context = React.createContext<ContextDescriptor>({\n activeIndex: -1,\n containerId: ID_PREFIX,\n disableTransforms: false,\n items: [],\n overIndex: -1,\n useDragOverlay: false,\n sortedRects: [],\n strategy: rectSortingStrategy,\n disabled: {\n draggable: false,\n droppable: false,\n },\n});\n\nexport function SortableContext({\n children,\n id,\n items: userDefinedItems,\n strategy = rectSortingStrategy,\n disabled: disabledProp = false,\n}: Props) {\n const {\n active,\n dragOverlay,\n droppableRects,\n over,\n measureDroppableContainers,\n } = useDndContext();\n const containerId = useUniqueId(ID_PREFIX, id);\n const useDragOverlay = Boolean(dragOverlay.rect !== null);\n const items = useMemo<UniqueIdentifier[]>(\n () =>\n userDefinedItems.map((item) =>\n typeof item === 'object' && 'id' in item ? item.id : item\n ),\n [userDefinedItems]\n );\n const isDragging = active != null;\n const activeIndex = active ? items.indexOf(active.id) : -1;\n const overIndex = over ? items.indexOf(over.id) : -1;\n const previousItemsRef = useRef(items);\n const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current);\n const disableTransforms =\n (overIndex !== -1 && activeIndex === -1) || itemsHaveChanged;\n const disabled = normalizeDisabled(disabledProp);\n\n useIsomorphicLayoutEffect(() => {\n if (itemsHaveChanged && isDragging) {\n measureDroppableContainers(items);\n }\n }, [itemsHaveChanged, items, isDragging, measureDroppableContainers]);\n\n useEffect(() => {\n previousItemsRef.current = items;\n }, [items]);\n\n const contextValue = useMemo(\n (): ContextDescriptor => ({\n activeIndex,\n containerId,\n disabled,\n disableTransforms,\n items,\n overIndex,\n useDragOverlay,\n sortedRects: getSortedRects(items, droppableRects),\n strategy,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n activeIndex,\n containerId,\n disabled.draggable,\n disabled.droppable,\n disableTransforms,\n items,\n overIndex,\n droppableRects,\n useDragOverlay,\n strategy,\n ]\n );\n\n return <Context.Provider value={contextValue}>{children}</Context.Provider>;\n}\n","import {CSS} from '@dnd-kit/utilities';\n\nimport {arrayMove} from '../utilities';\n\nimport type {\n AnimateLayoutChanges,\n NewIndexGetter,\n SortableTransition,\n} from './types';\n\nexport const defaultNewIndexGetter: NewIndexGetter = ({\n id,\n items,\n activeIndex,\n overIndex,\n}) => arrayMove(items, activeIndex, overIndex).indexOf(id);\n\nexport const defaultAnimateLayoutChanges: AnimateLayoutChanges = ({\n containerId,\n isSorting,\n wasDragging,\n index,\n items,\n newIndex,\n previousItems,\n previousContainerId,\n transition,\n}) => {\n if (!transition || !wasDragging) {\n return false;\n }\n\n if (previousItems !== items && index === newIndex) {\n return false;\n }\n\n if (isSorting) {\n return true;\n }\n\n return newIndex !== index && containerId === previousContainerId;\n};\n\nexport const defaultTransition: SortableTransition = {\n duration: 200,\n easing: 'ease',\n};\n\nexport const transitionProperty = 'transform';\n\nexport const disabledTransition = CSS.Transition.toString({\n property: transitionProperty,\n duration: 0,\n easing: 'linear',\n});\n\nexport const defaultAttributes = {\n roleDescription: 'sortable',\n};\n","import {useEffect, useRef, useState} from 'react';\nimport {getClientRect, ClientRect} from '@dnd-kit/core';\nimport {Transform, useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\ninterface Arguments {\n rect: React.MutableRefObject<ClientRect | null>;\n disabled: boolean;\n index: number;\n node: React.MutableRefObject<HTMLElement | null>;\n}\n\n/*\n * When the index of an item changes while sorting,\n * we need to temporarily disable the transforms\n */\nexport function useDerivedTransform({disabled, index, node, rect}: Arguments) {\n const [derivedTransform, setDerivedtransform] = useState<Transform | null>(\n null\n );\n const previousIndex = useRef(index);\n\n useIsomorphicLayoutEffect(() => {\n if (!disabled && index !== previousIndex.current && node.current) {\n const initial = rect.current;\n\n if (initial) {\n const current = getClientRect(node.current, {\n ignoreTransform: true,\n });\n\n const delta = {\n x: initial.left - current.left,\n y: initial.top - current.top,\n scaleX: initial.width / current.width,\n scaleY: initial.height / current.height,\n };\n\n if (delta.x || delta.y) {\n setDerivedtransform(delta);\n }\n }\n }\n\n if (index !== previousIndex.current) {\n previousIndex.current = index;\n }\n }, [disabled, index, node, rect]);\n\n useEffect(() => {\n if (derivedTransform) {\n setDerivedtransform(null);\n }\n }, [derivedTransform]);\n\n return derivedTransform;\n}\n","import {useContext, useEffect, useMemo, useRef} from 'react';\nimport {\n useDraggable,\n useDroppable,\n UseDraggableArguments,\n UseDroppableArguments,\n} from '@dnd-kit/core';\nimport type {Data} from '@dnd-kit/core';\nimport {CSS, isKeyboardEvent, useCombinedRefs} from '@dnd-kit/utilities';\n\nimport {Context} from '../components';\nimport type {Disabled, SortableData, SortingStrategy} from '../types';\nimport {isValidIndex} from '../utilities';\nimport {\n defaultAnimateLayoutChanges,\n defaultAttributes,\n defaultNewIndexGetter,\n defaultTransition,\n disabledTransition,\n transitionProperty,\n} from './defaults';\nimport type {\n AnimateLayoutChanges,\n NewIndexGetter,\n SortableTransition,\n} from './types';\nimport {useDerivedTransform} from './utilities';\n\nexport interface Arguments\n extends Omit<UseDraggableArguments, 'disabled'>,\n Pick<UseDroppableArguments, 'resizeObserverConfig'> {\n animateLayoutChanges?: AnimateLayoutChanges;\n disabled?: boolean | Disabled;\n getNewIndex?: NewIndexGetter;\n strategy?: SortingStrategy;\n transition?: SortableTransition | null;\n}\n\nexport function useSortable({\n animateLayoutChanges = defaultAnimateLayoutChanges,\n attributes: userDefinedAttributes,\n disabled: localDisabled,\n data: customData,\n getNewIndex = defaultNewIndexGetter,\n id,\n strategy: localStrategy,\n resizeObserverConfig,\n transition = defaultTransition,\n}: Arguments) {\n const {\n items,\n containerId,\n activeIndex,\n disabled: globalDisabled,\n disableTransforms,\n sortedRects,\n overIndex,\n useDragOverlay,\n strategy: globalStrategy,\n } = useContext(Context);\n const disabled: Disabled = normalizeLocalDisabled(\n localDisabled,\n globalDisabled\n );\n const index = items.indexOf(id);\n const data = useMemo<SortableData & Data>(\n () => ({sortable: {containerId, index, items}, ...customData}),\n [containerId, customData, index, items]\n );\n const itemsAfterCurrentSortable = useMemo(\n () => items.slice(items.indexOf(id)),\n [items, id]\n );\n const {\n rect,\n node,\n isOver,\n setNodeRef: setDroppableNodeRef,\n } = useDroppable({\n id,\n data,\n disabled: disabled.droppable,\n resizeObserverConfig: {\n updateMeasurementsFor: itemsAfterCurrentSortable,\n ...resizeObserverConfig,\n },\n });\n const {\n active,\n activatorEvent,\n activeNodeRect,\n attributes,\n setNodeRef: setDraggableNodeRef,\n listeners,\n isDragging,\n over,\n setActivatorNodeRef,\n transform,\n } = useDraggable({\n id,\n data,\n attributes: {\n ...defaultAttributes,\n ...userDefinedAttributes,\n },\n disabled: disabled.draggable,\n });\n const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef);\n const isSorting = Boolean(active);\n const displaceItem =\n isSorting &&\n !disableTransforms &&\n isValidIndex(activeIndex) &&\n isValidIndex(overIndex);\n const shouldDisplaceDragSource = !useDragOverlay && isDragging;\n const dragSourceDisplacement =\n shouldDisplaceDragSource && displaceItem ? transform : null;\n const strategy = localStrategy ?? globalStrategy;\n const finalTransform = displaceItem\n ? dragSourceDisplacement ??\n strategy({\n rects: sortedRects,\n activeNodeRect,\n activeIndex,\n overIndex,\n index,\n })\n : null;\n const newIndex =\n isValidIndex(activeIndex) && isValidIndex(overIndex)\n ? getNewIndex({id, items, activeIndex, overIndex})\n : index;\n const activeId = active?.id;\n const previous = useRef({\n activeId,\n items,\n newIndex,\n containerId,\n });\n const itemsHaveChanged = items !== previous.current.items;\n const shouldAnimateLayoutChanges = animateLayoutChanges({\n active,\n containerId,\n isDragging,\n isSorting,\n id,\n index,\n items,\n newIndex: previous.current.newIndex,\n previousItems: previous.current.items,\n previousContainerId: previous.current.containerId,\n transition,\n wasDragging: previous.current.activeId != null,\n });\n\n const derivedTransform = useDerivedTransform({\n disabled: !shouldAnimateLayoutChanges,\n index,\n node,\n rect,\n });\n\n useEffect(() => {\n if (isSorting && previous.current.newIndex !== newIndex) {\n previous.current.newIndex = newIndex;\n }\n\n if (containerId !== previous.current.containerId) {\n previous.current.containerId = containerId;\n }\n\n if (items !== previous.current.items) {\n previous.current.items = items;\n }\n }, [isSorting, newIndex, containerId, items]);\n\n useEffect(() => {\n if (activeId === previous.current.activeId) {\n return;\n }\n\n if (activeId != null && previous.current.activeId == null) {\n previous.current.activeId = activeId;\n return;\n }\n\n const timeoutId = setTimeout(() => {\n previous.current.activeId = activeId;\n }, 50);\n\n return () => clearTimeout(timeoutId);\n }, [activeId]);\n\n return {\n active,\n activeIndex,\n attributes,\n data,\n rect,\n index,\n newIndex,\n items,\n isOver,\n isSorting,\n isDragging,\n listeners,\n node,\n overIndex,\n over,\n setNodeRef,\n setActivatorNodeRef,\n setDroppableNodeRef,\n setDraggableNodeRef,\n transform: derivedTransform ?? finalTransform,\n transition: getTransition(),\n };\n\n function getTransition() {\n if (\n // Temporarily disable transitions for a single frame to set up derived transforms\n derivedTransform ||\n // Or to prevent items jumping to back to their \"new\" position when items change\n (itemsHaveChanged && previous.current.newIndex === index)\n ) {\n return disabledTransition;\n }\n\n if (\n (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent)) ||\n !transition\n ) {\n return undefined;\n }\n\n if (isSorting || shouldAnimateLayoutChanges) {\n return CSS.Transition.toString({\n ...transition,\n property: transitionProperty,\n });\n }\n\n return undefined;\n }\n}\n\nfunction normalizeLocalDisabled(\n localDisabled: Arguments['disabled'],\n globalDisabled: Disabled\n) {\n if (typeof localDisabled === 'boolean') {\n return {\n draggable: localDisabled,\n // Backwards compatibility\n droppable: false,\n };\n }\n\n return {\n draggable: localDisabled?.draggable ?? globalDisabled.draggable,\n droppable: localDisabled?.droppable ?? globalDisabled.droppable,\n };\n}\n","import {\n closestCorners,\n getScrollableAncestors,\n getFirstCollision,\n KeyboardCode,\n DroppableContainer,\n KeyboardCoordinateGetter,\n} from '@dnd-kit/core';\nimport {subtract} from '@dnd-kit/utilities';\n\nimport {hasSortableData} from '../../types';\n\nconst directions: string[] = [\n KeyboardCode.Down,\n KeyboardCode.Right,\n KeyboardCode.Up,\n KeyboardCode.Left,\n];\n\nexport const sortableKeyboardCoordinates: KeyboardCoordinateGetter = (\n event,\n {\n context: {\n active,\n collisionRect,\n droppableRects,\n droppableContainers,\n over,\n scrollableAncestors,\n },\n }\n) => {\n if (directions.includes(event.code)) {\n event.preventDefault();\n\n if (!active || !collisionRect) {\n return;\n }\n\n const filteredContainers: DroppableContainer[] = [];\n\n droppableContainers.getEnabled().forEach((entry) => {\n if (!entry || entry?.disabled) {\n return;\n }\n\n const rect = droppableRects.get(entry.id);\n\n if (!rect) {\n return;\n }\n\n switch (event.code) {\n case KeyboardCode.Down:\n if (collisionRect.top < rect.top) {\n filteredContainers.push(entry);\n }\n break;\n case KeyboardCode.Up:\n if (collisionRect.top > rect.top) {\n filteredContainers.push(entry);\n }\n break;\n case KeyboardCode.Left:\n if (collisionRect.left > rect.left) {\n filteredContainers.push(entry);\n }\n break;\n case KeyboardCode.Right:\n if (collisionRect.left < rect.left) {\n filteredContainers.push(entry);\n }\n break;\n }\n });\n\n const collisions = closestCorners({\n active,\n collisionRect: collisionRect,\n droppableRects,\n droppableContainers: filteredContainers,\n pointerCoordinates: null,\n });\n let closestId = getFirstCollision(collisions, 'id');\n\n if (closestId === over?.id && collisions.length > 1) {\n closestId = collisions[1].id;\n }\n\n if (closestId != null) {\n const activeDroppable = droppableContainers.get(active.id);\n const newDroppable = droppableContainers.get(closestId);\n const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null;\n const newNode = newDroppable?.node.current;\n\n if (newNode && newRect && activeDroppable && newDroppable) {\n const newScrollAncestors = getScrollableAncestors(newNode);\n const hasDifferentScrollAncestors = newScrollAncestors.some(\n (element, index) => scrollableAncestors[index] !== element\n );\n const hasSameContainer = isSameContainer(activeDroppable, newDroppable);\n const isAfterActive = isAfter(activeDroppable, newDroppable);\n const offset =\n hasDifferentScrollAncestors || !hasSameContainer\n ? {\n x: 0,\n y: 0,\n }\n : {\n x: isAfterActive ? collisionRect.width - newRect.width : 0,\n y: isAfterActive ? collisionRect.height - newRect.height : 0,\n };\n const rectCoordinates = {\n x: newRect.left,\n y: newRect.top,\n };\n\n const newCoordinates =\n offset.x && offset.y\n ? rectCoordinates\n : subtract(rectCoordinates, offset);\n\n return newCoordinates;\n }\n }\n }\n\n return undefined;\n};\n\nfunction isSameContainer(a: DroppableContainer, b: DroppableContainer) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n return (\n a.data.current.sortable.containerId === b.data.current.sortable.containerId\n );\n}\n\nfunction isAfter(a: DroppableContainer, b: DroppableContainer) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n if (!isSameContainer(a, b)) {\n return false;\n }\n\n return a.data.current.sortable.index < b.data.current.sortable.index;\n}\n","'use client';\n\nimport React from 'react';\nimport FormField from './FormField';\nimport {\n DndContext,\n closestCenter,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { GripVertical } from 'lucide-react';\n\n// Sortable wrapper for form fields in preview mode\nfunction SortableFormField({ field, value, error, onChange, businessId, formId, styling }: any) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: field.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={`relative group ${isDragging ? 'z-50' : ''}`}\n >\n {/* Drag Handle */}\n <div\n {...attributes}\n {...listeners}\n className=\"absolute -left-8 top-1/2 -translate-y-1/2 z-50 opacity-0 group-hover:opacity-100 transition-opacity cursor-grab active:cursor-grabbing\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center gap-1 bg-[#BCB4FF] text-black px-1.5 py-1 rounded-md shadow-lg border border-black/10\">\n <GripVertical className=\"w-3 h-3\" />\n </div>\n </div>\n\n {/* Hover Outline */}\n <div className=\"absolute inset-0 pointer-events-none transition-all rounded-lg group-hover:border border-[#BCB4FF]/30\" />\n\n {/* Field Content - ensure inputs can receive clicks */}\n <div style={{ pointerEvents: 'auto' }}>\n <FormField\n field={field}\n value={value}\n error={error}\n onChange={onChange}\n businessId={businessId}\n formId={formId}\n styling={styling}\n />\n </div>\n </div>\n );\n}\n\ninterface FormFieldData {\n id: string;\n label: string;\n type: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'radio' | 'checkbox' | 'date' | 'photo' | 'image';\n placeholder?: string;\n required: boolean;\n options?: Array<{ value: string; label: string }>;\n}\n\ninterface FormBlockData {\n id: string;\n type: 'section' | 'text' | 'image';\n title?: string;\n description?: string;\n content?: string;\n alignment?: 'left' | 'center' | 'right';\n imageUrl?: string;\n fields?: FormFieldData[];\n}\n\ninterface FormBlockProps {\n block: FormBlockData;\n formData: Record<string, any>;\n errors: Record<string, string>;\n onChange: (fieldId: string, value: any, field: FormFieldData) => void;\n businessId?: string;\n formId?: string;\n styling?: {\n alignment?: 'left' | 'center' | 'right';\n fieldStyle?: 'outlined' | 'filled' | 'underlined' | 'minimal';\n sectionBackground?: string;\n fieldBorder?: string;\n buttonColor?: string;\n labelColor?: string;\n textColor?: string;\n };\n previewMode?: boolean;\n onFieldReorder?: (blockId: string, oldIndex: number, newIndex: number) => void;\n}\n\nexport default function FormBlock({ block, formData, errors, onChange, businessId, formId, styling, previewMode, onFieldReorder }: FormBlockProps) {\n // Setup sensors for drag detection (only used in preview mode)\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8, // Require 8px movement before drag starts\n },\n })\n );\n\n // Handle field drag end\n const handleFieldDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (over && active.id !== over.id && onFieldReorder && block.fields) {\n const oldIndex = block.fields.findIndex((f: any) => f.id === active.id);\n const newIndex = block.fields.findIndex((f: any) => f.id === over.id);\n\n onFieldReorder(block.id, oldIndex, newIndex);\n }\n };\n\n // Section Block - Contains form fields\n if (block.type === 'section') {\n const fields = block.fields || [];\n\n // In preview mode with field reordering, use drag-and-drop\n if (previewMode && onFieldReorder) {\n return (\n <div\n className=\"border rounded-lg p-6\"\n style={{\n backgroundColor: styling?.sectionBackground || '#FFFFFF',\n borderColor: styling?.fieldBorder ? `${styling.fieldBorder}30` : '#E5E7EB'\n }}\n >\n {block.title && (\n <h2 className=\"text-xl font-semibold mb-2\" style={{ color: styling?.labelColor || '#000000' }}>{block.title}</h2>\n )}\n {block.description && (\n <p className=\"text-sm mb-6\" style={{ color: styling?.textColor || '#000000' }}>{block.description}</p>\n )}\n\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleFieldDragEnd}\n >\n <SortableContext\n items={fields.map((f: any) => f.id)}\n strategy={verticalListSortingStrategy}\n >\n <div className=\"space-y-4\">\n {fields.map((field) => (\n <SortableFormField\n key={field.id}\n field={field}\n value={formData[field.id]}\n error={errors[field.id]}\n onChange={(value: any) => onChange(field.id, value, field)}\n businessId={businessId}\n formId={formId}\n styling={styling}\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n </div>\n );\n }\n\n // In normal mode, render without drag-and-drop\n return (\n <div\n className=\"border rounded-lg p-6\"\n style={{\n backgroundColor: styling?.sectionBackground || '#FFFFFF',\n borderColor: styling?.fieldBorder ? `${styling.fieldBorder}30` : '#E5E7EB'\n }}\n >\n {block.title && (\n <h2 className=\"text-xl font-semibold mb-2\" style={{ color: styling?.labelColor || '#000000' }}>{block.title}</h2>\n )}\n {block.description && (\n <p className=\"text-sm mb-6\" style={{ color: styling?.textColor || '#000000' }}>{block.description}</p>\n )}\n\n <div className=\"space-y-4\">\n {fields.map((field) => (\n <FormField\n key={field.id}\n field={field}\n value={formData[field.id]}\n error={errors[field.id]}\n onChange={(value) => onChange(field.id, value, field)}\n businessId={businessId}\n formId={formId}\n styling={styling}\n />\n ))}\n </div>\n </div>\n );\n }\n\n // Text Block - Rich text content\n if (block.type === 'text') {\n const alignmentClass = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right'\n }[block.alignment || 'left'];\n\n return (\n <div className={`prose prose-gray max-w-none ${alignmentClass}`}>\n <p className=\"whitespace-pre-wrap\" style={{ color: styling?.textColor || '#000000' }}>{block.content}</p>\n </div>\n );\n }\n\n // Image Block - Styled image\n if (block.type === 'image' && block.imageUrl) {\n const imageSize = (block as any).imageSize || 'medium';\n const isFull = imageSize === 'full';\n\n const alignmentClass = isFull ? '' : {\n left: 'mr-auto',\n center: 'mx-auto',\n right: 'ml-auto'\n }[block.alignment || 'center'];\n\n const sizeMap = {\n small: '300px',\n medium: '500px',\n large: '700px'\n };\n const maxWidth = isFull ? 'none' : (sizeMap[imageSize as keyof typeof sizeMap] || sizeMap.medium);\n\n const borderRadiusMap = {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n full: '9999px'\n };\n const borderRadius = borderRadiusMap[(block as any).borderRadius as keyof typeof borderRadiusMap] || borderRadiusMap.lg;\n\n const containerStyle: React.CSSProperties = {\n maxWidth,\n ...(isFull && { width: '100vw', marginLeft: '50%', transform: 'translateX(-50%)' })\n };\n\n return (\n <div className={alignmentClass} style={containerStyle}>\n <img\n src={block.imageUrl}\n alt=\"\"\n className=\"w-full h-auto\"\n style={{ borderRadius, objectFit: 'cover' }}\n />\n </div>\n );\n }\n\n return null;\n}\n","interface FormField {\n id: string;\n label: string;\n type: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'radio' | 'checkbox' | 'date' | 'photo' | 'image';\n required: boolean;\n options?: Array<{ value: string; label: string }>;\n}\n\ninterface ValidationResult {\n isValid: boolean;\n error?: string;\n}\n\ninterface FormValidationResult {\n isValid: boolean;\n errors: Record<string, string>;\n}\n\nexport function validateField(value: any, field: FormField): ValidationResult {\n // Check required fields\n if (field.required) {\n if (value === undefined || value === null || value === '') {\n return {\n isValid: false,\n error: `${field.label} is required`\n };\n }\n\n // Check for empty arrays (checkboxes)\n if (Array.isArray(value) && value.length === 0) {\n return {\n isValid: false,\n error: `Please select at least one ${field.label.toLowerCase()}`\n };\n }\n\n // Check for photo upload\n if (field.type === 'photo' && !value.data) {\n return {\n isValid: false,\n error: `${field.label} is required`\n };\n }\n }\n\n // Email validation\n if (field.type === 'email' && value) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return {\n isValid: false,\n error: 'Please enter a valid email address'\n };\n }\n }\n\n // Phone validation (basic)\n if (field.type === 'tel' && value) {\n const phoneRegex = /^[\\d\\s\\-\\+\\(\\)]+$/;\n if (!phoneRegex.test(value) || value.replace(/\\D/g, '').length < 10) {\n return {\n isValid: false,\n error: 'Please enter a valid phone number'\n };\n }\n }\n\n // Date validation\n if (field.type === 'date' && value) {\n const date = new Date(value);\n if (isNaN(date.getTime())) {\n return {\n isValid: false,\n error: 'Please enter a valid date'\n };\n }\n }\n\n return { isValid: true };\n}\n\nexport function validateForm(\n formData: Record<string, any>,\n fields: FormField[]\n): FormValidationResult {\n const errors: Record<string, string> = {};\n let isValid = true;\n\n fields.forEach(field => {\n const validation = validateField(formData[field.id], field);\n if (!validation.isValid && validation.error) {\n errors[field.id] = validation.error;\n isValid = false;\n }\n });\n\n return { isValid, errors };\n}\n\nexport function sanitizeFormData(formData: Record<string, any>): Record<string, any> {\n const sanitized: Record<string, any> = {};\n\n Object.keys(formData).forEach(key => {\n const value = formData[key];\n\n // Handle different types\n if (typeof value === 'string') {\n // Trim whitespace\n sanitized[key] = value.trim();\n } else if (Array.isArray(value)) {\n // Keep arrays as-is (for checkboxes)\n sanitized[key] = value;\n } else if (value && typeof value === 'object' && value.data) {\n // Keep file data as-is (for photo uploads)\n sanitized[key] = value;\n } else {\n sanitized[key] = value;\n }\n });\n\n return sanitized;\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport FormBlock from './FormBlock';\nimport { validateField, validateForm } from './FormValidation';\n\ninterface FormField {\n id: string;\n label: string;\n type: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'radio' | 'checkbox' | 'date' | 'photo' | 'image';\n placeholder?: string;\n required: boolean;\n options?: Array<{ value: string; label: string }>;\n}\n\ninterface FormBlockData {\n id: string;\n type: 'section' | 'text' | 'image';\n title?: string;\n description?: string;\n content?: string;\n alignment?: 'left' | 'center' | 'right';\n imageUrl?: string;\n fields?: FormField[];\n}\n\ninterface FormSettings {\n title: string;\n description: string;\n submitButtonText: string;\n successMessage: string;\n blocks: FormBlockData[];\n styling?: {\n alignment?: 'left' | 'center' | 'right';\n fieldStyle?: 'outlined' | 'filled' | 'underlined' | 'minimal';\n sectionBackground?: string;\n fieldBorder?: string;\n buttonColor?: string;\n labelColor?: string;\n textColor?: string;\n };\n notifications: {\n enabled: boolean;\n adminEmail: string;\n emailSubject: string;\n };\n}\n\ninterface FormRendererProps {\n form: {\n id: string;\n name: string;\n slug: string;\n type: string;\n settings: FormSettings;\n };\n businessId: string;\n onSuccess?: () => void;\n}\n\nexport default function FormRenderer({ form, businessId, onSuccess }: FormRendererProps) {\n const [formData, setFormData] = useState<Record<string, any>>({});\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n\n const handleFieldChange = (fieldId: string, value: any, field: FormField) => {\n setFormData(prev => ({ ...prev, [fieldId]: value }));\n\n // Clear error when user starts typing\n if (errors[fieldId]) {\n const validation = validateField(value, field);\n setErrors(prev => {\n const newErrors = { ...prev };\n if (validation.isValid) {\n delete newErrors[fieldId];\n } else {\n newErrors[fieldId] = validation.error || '';\n }\n return newErrors;\n });\n }\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setSubmitError(null);\n\n // Collect all fields from all section blocks\n const allFields: FormField[] = [];\n form.settings.blocks.forEach(block => {\n if (block.type === 'section' && block.fields) {\n allFields.push(...block.fields);\n }\n });\n\n // Validate all fields\n const validation = validateForm(formData, allFields);\n if (!validation.isValid) {\n setErrors(validation.errors);\n return;\n }\n\n setIsSubmitting(true);\n\n try {\n // Use different API endpoints for tenant vs dashboard\n // Tenant (Vite): /api/forms/submit\n // Dashboard (Next.js): /api/studio/forms/${businessId}/${form.slug}/submit\n const isTenant = typeof window !== 'undefined' && (import.meta as any).env;\n const apiUrl = isTenant\n ? '/api/forms/submit'\n : `/api/studio/forms/${businessId}/${form.slug}/submit`;\n\n const response = await fetch(apiUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n formId: form.id,\n slug: form.slug,\n data: formData\n })\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.message || 'Failed to submit form');\n }\n\n setIsSuccess(true);\n setFormData({});\n setErrors({});\n\n if (onSuccess) {\n onSuccess();\n }\n } catch (error: any) {\n console.error('Form submission error:', error);\n setSubmitError(error.message || 'Failed to submit form. Please try again.');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n if (isSuccess) {\n return (\n <div className=\"max-w-2xl mx-auto px-4 py-12\">\n <div className=\"bg-green-50 border border-green-200 rounded-lg p-8 text-center\">\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-4\">\n <svg className=\"w-8 h-8 text-green-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n <h3 className=\"text-xl font-semibold mb-2\" style={{ color: form.settings.styling?.labelColor || '#000000' }}>Success!</h3>\n <p style={{ color: form.settings.styling?.textColor || '#000000' }}>{form.settings.successMessage}</p>\n <button\n onClick={() => setIsSuccess(false)}\n className=\"mt-6 px-4 py-2 bg-gray-900 text-white rounded-lg hover:bg-gray-800 transition-colors\"\n >\n Submit Another Response\n </button>\n </div>\n </div>\n );\n }\n\n const alignment = form.settings.styling?.alignment || 'left';\n const alignmentClass = alignment === 'center' ? 'text-center' : alignment === 'right' ? 'text-right' : 'text-left';\n const buttonColor = form.settings.styling?.buttonColor || '#CAC426';\n\n return (\n <div className=\"max-w-2xl mx-auto px-4 py-12\">\n <div className={`mb-8 ${alignmentClass}`}>\n <h1 className=\"text-3xl font-bold mb-2\" style={{ color: form.settings.styling?.textColor || '#000000' }}>{form.settings.title}</h1>\n {form.settings.description && (\n <p style={{ color: form.settings.styling?.textColor || '#000000' }}>{form.settings.description}</p>\n )}\n </div>\n\n <form onSubmit={handleSubmit} className=\"space-y-8\">\n {form.settings.blocks.map((block) => (\n <FormBlock\n key={block.id}\n block={block}\n formData={formData}\n errors={errors}\n onChange={handleFieldChange}\n businessId={businessId}\n formId={form.id}\n styling={form.settings.styling}\n />\n ))}\n\n {submitError && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <p className=\"text-sm text-red-600\">{submitError}</p>\n </div>\n )}\n\n <div className=\"pt-6\">\n <button\n type=\"submit\"\n disabled={isSubmitting}\n className=\"w-full px-6 py-3 text-white rounded-lg disabled:opacity-50 disabled:cursor-not-allowed transition-all font-medium hover:opacity-90\"\n style={{ backgroundColor: buttonColor }}\n >\n {isSubmitting ? 'Submitting...' : form.settings.submitButtonText}\n </button>\n </div>\n </form>\n </div>\n );\n}\n"]}
|