{"version":3,"file":"js/300-0c31f9d603fe331bfaa4.js","mappings":"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","sources":["webpack://daocloud/./app/javascript/@core/practice/practice.utils.js","webpack://daocloud/./app/javascript/components/icons/YoutubeIcon.jsx","webpack://daocloud/./app/javascript/components/shared/AcceptTermsModal.jsx","webpack://daocloud/./app/javascript/components/shared/AnimatingBackgroundImage.jsx","webpack://daocloud/./app/javascript/components/shared/Badge.jsx","webpack://daocloud/./app/javascript/components/shared/ExpandableText.jsx","webpack://daocloud/./app/javascript/components/shared/FileStackWidgets.jsx","webpack://daocloud/./app/javascript/components/shared/HoverPopover.jsx","webpack://daocloud/./app/javascript/components/shared/QuillEditor.jsx","webpack://daocloud/./app/javascript/components/shared/ReviewStars.jsx","webpack://daocloud/./app/javascript/components/shared/Toast.jsx","webpack://daocloud/./app/javascript/contexts/CurrentUserContext.jsx","webpack://daocloud/./app/javascript/contexts/ToastContext.jsx","webpack://daocloud/./app/javascript/hooks/useContainerDimensions.jsx","webpack://daocloud/./app/javascript/hooks/useIntersectionObserver.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/AboutSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/BookingWidget.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/DesktopHeaderSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/LocationSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/MobileHeaderSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/ReviewsHeaderSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/ReviewsSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/ServicesSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/WebsiteAndSocial.jsx","webpack://daocloud/./app/javascript/pages/ProProfile.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/AskQuestionButton.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/CredentialsSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/EndorsementsSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/GalleryImagesSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/NextAvailableSlot.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/ReviewCard.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/ReviewCardSignature.jsx","webpack://daocloud/./app/javascript/pages/ProProfile/ScrollToSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/CredentialsSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/AboutMeContainer.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/AboutSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/AdditionalContent.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/AnimatedSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/BackgroundImage.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/BottomCTA.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/PhoneValidation.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/ChatWidget.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/EndorsementsSection.jsx","webpack://daocloud/./app/javascript/components/icons/FacebookIcon.jsx","webpack://daocloud/./app/javascript/components/icons/InstagramIcon.jsx","webpack://daocloud/./app/javascript/components/icons/LinkedinIcon.jsx","webpack://daocloud/./app/javascript/components/icons/TikTokIcon.jsx","webpack://daocloud/./app/javascript/components/icons/XTwitterIcon.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/Footer.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/GallerySection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/HealMeVerifiedBadge.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/HeroSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/Map.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/Navigation.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/Quote.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/Review.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/ReviewStars.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/ReviewsSectionVariationOne.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/SectionTitle.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/SeeMore.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/CardTitle.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/ServiceCard.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/ServicesSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/TopReviewsSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFive/AboutSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileShared/ReviewsSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFive/DiagonalDivider.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFive/ThemeImage.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFive/ProProfileThemeFive.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFive/ThemeFiveNavigation.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFour/CurvyDivider.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFour/CurvyDividerReversed.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFour/CurvyDividerWave.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFour/CurvyDividerWaveReversed.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFour/ValueStatementSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeFour/ProProfileThemeFour.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeOne/TriangleDivider.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeOne/ValueStatementSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeOne/ProProfileThemeOne.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeThree/HeroSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeThree/ValueStatementSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeThree/ProProfileThemeThree.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeTwo/AboutSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeTwo/ReviewsSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeTwo/ValueStatementSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeTwo/WaveDivider.jsx","webpack://daocloud/./app/javascript/pages/ProProfileThemeTwo/ProProfileThemeTwo.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2/AboutMeSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2/CTASection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2/HeroSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2/LocationSectionV2.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2/MyCredentialsSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2/MyPracticeSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2/MyReviewsSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2/MyServicesSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2/ProProfileFooter.jsx","webpack://daocloud/./app/javascript/pages/ProProfileV2.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/ContentInput.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/customPickerUtils.js","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/ImageUploadButton.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/Thumbnail.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/GalleryUpload.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/HeadshotUpload.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/HeroImageUpload.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/ContentTab.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/StyleTab.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/WebsiteBuilderContext.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/ThemeTab.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/WebsiteBuilderPage.jsx","webpack://daocloud/./app/javascript/pages/WebsiteBuilder/WebsitePreviewView.jsx","webpack://daocloud/./app/javascript/providers/GraphQLProvider.jsx"],"sourcesContent":["const practiceFreeService = (practice) => practice.services.find((service) => service.amountCents === 0)\n\nexport const practiceCtaText = (practice) => {\n  if (practice.ctaButtonText) {\n    return practice.ctaButtonText\n  }\n  const freeService = practiceFreeService(practice)\n\n  return freeService ? \"Book a free discovery call\" : \"Book now\"\n}\n\nexport const practiceDefaultServiceId = (practice) => {\n  if (practice.defaultServiceId) {\n    return practice.defaultServiceId\n  }\n  const freeService = practiceFreeService(practice)\n\n  return freeService ? freeService.id : null\n}\n\nexport const getFirstAvailableTimeSlot = (allAvailability) => {\n  for (let i = 0; i < allAvailability.length; i++) {\n    if (allAvailability[i].datetimes.length > 0) {\n      return allAvailability[i].datetimes[0]\n    }\n  }\n}\n","import React from \"react\"\n\nconst YoutubeIcon = ({ height = 32, width = 28, color = \"#55778A\" }) => (\n  <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <title>YouTube</title>\n    <path\n      d=\"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\"\n      fill={color}\n    />\n  </svg>\n)\n\nexport default YoutubeIcon\n","import React, { useState } from \"react\"\nimport { useMutation } from \"urql\"\n\nimport { useToast } from \"../../contexts/ToastContext\"\n\nimport { CheckBox } from \"./Inputs\"\nimport { Link } from \"./Links\"\nimport { AnimatedModal } from \"./Modal\"\n\nexport const ACCEPT_TERMS = `\n  mutation AcceptTerms {\n    acceptTerms {\n      result\n    }\n  }\n`\n\nconst AcceptTermsModal = ({ showModal }) => {\n  const [visible, setVisible] = useState(showModal)\n  const [termsAccepted, setTermsAccepted] = useState(false)\n  const [{ fetching }, acceptTerms] = useMutation(ACCEPT_TERMS)\n\n  const { showToast } = useToast()\n\n  const handleSave = () => {\n    acceptTerms().then((res) => {\n      if (res.data?.acceptTerms?.result === \"success\") {\n        setVisible(false)\n        showToast(\"Terms and conditions accepted\")\n      } else {\n        console.error(res.error) // eslint-disable-line no-console\n        showToast({ content: \"Error accepting terms and conditions\", type: \"error\" })\n      }\n    })\n  }\n\n  return (\n    <AnimatedModal\n      visible={visible}\n      hideModal={() => {}}\n      showFooter={true}\n      hideCloseButton={true}\n      hideCancelButton={true}\n      actionButtonCopy=\"Accept\"\n      saveDisabled={!termsAccepted || fetching}\n      onSave={handleSave}>\n      <div className=\"p-6\">\n        <h2 className=\"mb-4 text-xl font-bold\">Terms and Conditions</h2>\n        <p>\n          Heal.me is now HIPAA and PIPEDIA compliant. Please read and accept our updated{\" \"}\n          <Link href=\"/terms\">terms and conditions</Link>, <Link href=\"/privacy\">privacy policy</Link>, and{\" \"}\n          <Link href=\"/business_associate_agreement\">business associate agreement</Link> to proceed.\n        </p>\n        <div className=\"mt-4\">\n          <CheckBox\n            id=\"acceptTerms\"\n            checked={termsAccepted}\n            onChange={() => setTermsAccepted(!termsAccepted)}\n            label=\"I accept the terms and conditions, privacy policy, and business associate agreement.\"\n          />\n        </div>\n      </div>\n    </AnimatedModal>\n  )\n}\n\nexport default AcceptTermsModal\n","import React, { useEffect, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst AnimatingBackgroundImage = ({\n  url,\n  children,\n  className,\n  style,\n  animationPixels = 100,\n  animationDuration = 250,\n  ...rest\n}) => {\n  const [offsetY, setOffsetY] = useState(0)\n\n  useEffect(() => {\n    let intervalId\n    const startTime = Date.now()\n\n    const incrementOffset = () => {\n      const elapsedTime = Date.now() - startTime\n      const progress = Math.min(elapsedTime / animationDuration, 1)\n\n      setOffsetY(animationPixels * progress)\n\n      if (progress >= 1) {\n        clearInterval(intervalId)\n      }\n    }\n\n    intervalId = setInterval(incrementOffset, 16) // ~60fps\n\n    return () => clearInterval(intervalId)\n  }, [animationPixels, animationDuration])\n\n  return (\n    <div\n      {...rest}\n      className={twMerge(\"bg-cover bg-no-repeat bg-blend-multiply\", className)}\n      style={{\n        ...style,\n        backgroundImage: `url(${url})`,\n        backgroundPosition: `center ${-animationPixels + offsetY}px`\n      }}>\n      {children}\n    </div>\n  )\n}\n\nexport default AnimatingBackgroundImage\n","import PropTypes from \"prop-types\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst Badge = ({ type = \"success\", className, children }) => {\n  const typeClassName =\n    type === \"warning\"\n      ? \"bg-orange-light\"\n      : type === \"error\"\n      ? \"bg-red-light\"\n      : type === \"info\"\n      ? \"bg-gray\"\n      : \"bg-green-light text-green\" // success is the default\n  return (\n    <span\n      className={twMerge(\n        \"rounded-lg px-2.5 py-1 text-[12px] font-extrabold uppercase tracking-[0.045rem] \",\n        typeClassName,\n        className\n      )}>\n      {children}\n    </span>\n  )\n}\n\nBadge.propTypes = {\n  type: PropTypes.oneOf([\"success\", \"warning\", \"error\", \"info\"])\n}\n\nexport const CounterBadge = ({ className, children }) => (\n  <span\n    className={twMerge(\n      \"inline-flex items-center justify-center rounded-full bg-orange text-white\",\n      \"text-[12px] font-bold uppercase\",\n      \"h-4 w-4\",\n      \"leading-4\",\n      \"p-0\",\n      className\n    )}>\n    {children}\n  </span>\n)\n\nCounterBadge.propTypes = {\n  className: PropTypes.string,\n  children: PropTypes.node.isRequired\n}\n\nexport default Badge\n","import React, { useRef, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst ExpandableText = ({\n  text,\n  maxLength,\n  className,\n  quotes = false,\n  allowHtml = false,\n  scrollUpOnClose = false,\n  onExpand,\n  onCollapse\n}) => {\n  const ref = useRef()\n  text ||= \"\"\n\n  const [expanded, setExpanded] = useState(false)\n  const showSeeMore = text.length > maxLength && !expanded\n\n  let displayText = showSeeMore ? text.substring(0, maxLength - 3) + \"...\" : text\n  displayText = quotes ? `“${displayText}”` : displayText\n\n  return (\n    <div className={twMerge(scrollUpOnClose ? \"scroll-mt-24 sm:scroll-mt-16\" : \"\", className)} ref={ref}>\n      {allowHtml ? (\n        <span dangerouslySetInnerHTML={{ __html: expanded ? displayText.replace(/\\n/g, \"<br />\") : displayText }} />\n      ) : (\n        <span>{displayText}</span>\n      )}{\" \"}\n      {showSeeMore && (\n        <button\n          className=\"font-bold underline\"\n          onClick={() => {\n            setExpanded(true)\n            onExpand && onExpand()\n          }}>\n          See more\n        </button>\n      )}\n      {expanded && (\n        <button\n          className=\"font-bold underline\"\n          onClick={(e) => {\n            setExpanded(false)\n            onCollapse && onCollapse()\n            if (scrollUpOnClose) {\n              e.preventDefault()\n              ref.current.scrollIntoView({ behavior: \"smooth\" })\n            }\n          }}>\n          See less\n        </button>\n      )}\n    </div>\n  )\n}\n\nexport default ExpandableText\n","import { PickerDropPane, PickerOverlay } from \"filestack-react\"\nimport React, { useState } from \"react\"\nimport { createPortal } from \"react-dom\"\n\nexport const FilePickerDropArea = ({ onUploadDone }) => {\n  const pickerOptions = {\n    exposeOriginalFile: true,\n    maxFiles: 1,\n    dropPane: {\n      customText: \"Drag ‘n’ drop or choose a file\"\n    }\n  }\n\n  return (\n    <PickerDropPane apikey={process.env.FILESTACK_API_KEY} onUploadDone={onUploadDone} pickerOptions={pickerOptions} />\n  )\n}\n\nexport const FilePicker = ({\n  as = \"div\",\n  onOpen = () => {},\n  onUploadDone,\n  className,\n  maxFiles = 1,\n  disabled,\n  children,\n  transformations,\n  fromSources\n}) => {\n  const [showFileUpload, setShowFileUpload] = useState(false)\n  transformations ||= {\n    crop: {\n      aspectRatio: 1,\n      force: true\n    }\n  }\n\n  const pickerOptions = {\n    onClose: () => setShowFileUpload(false),\n    imageMin: [400, 400],\n    transformations,\n    exposeOriginalFile: true,\n    maxFiles,\n    fromSources,\n    onOpen\n  }\n\n  const Tag = as\n\n  return (\n    <>\n      <Tag role=\"button\" className={className} onClick={disabled ? () => {} : () => setShowFileUpload(true)}>\n        {children}\n      </Tag>\n      {showFileUpload && (\n        <>\n          {createPortal(\n            <PickerOverlay\n              apikey={process.env.FILESTACK_API_KEY}\n              onUploadDone={onUploadDone}\n              pickerOptions={pickerOptions}\n            />,\n            document.body\n          )}\n        </>\n      )}\n    </>\n  )\n}\n","import React, { useState, useRef } from \"react\"\n\nimport { useContainerDimensions } from \"../../hooks/useContainerDimensions\"\nimport useWindowSize from \"../../hooks/useWindowSize\"\n\nimport { AnimatedModal } from \"./Modal\"\n\nconst HoverPopover = ({ children, popoverContent, credentialKind }) => {\n  const ref = useRef(null)\n  const { width } = useWindowSize()\n  const { height } = useContainerDimensions(ref)\n  const [isPopoverVisible, setIsPopoverVisible] = useState(false)\n\n  return (\n    <div className=\"relative flex flex-col items-start\">\n      <div onMouseEnter={() => setIsPopoverVisible(true)} onMouseLeave={() => setIsPopoverVisible(false)} ref={ref}>\n        {children}\n      </div>\n      {isPopoverVisible && (\n        <div\n          className=\"absolute z-9998 rounded-xl border border-gray bg-white p-8 shadow-lg sm:hidden\"\n          onMouseEnter={() => setIsPopoverVisible(true)}\n          onMouseLeave={() => setIsPopoverVisible(false)}\n          style={{ marginTop: height + 2 }}>\n          {popoverContent}\n        </div>\n      )}\n      {width > 0 && width < 640 && (\n        <AnimatedModal\n          visible={isPopoverVisible}\n          hideModal={() => setIsPopoverVisible(false)}\n          header={`Verified ${credentialKind} details`}\n          showFooter={true}\n          hideSaveButton={true}>\n          {popoverContent}\n        </AnimatedModal>\n      )}\n    </div>\n  )\n}\n\nexport default HoverPopover\n","import React, { useState, useEffect, useRef } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { VALIDATION_ERROR_INPUT_CLASSNAMES, ValidationError } from \"./Inputs\"\n\nimport \"react-quill/dist/quill.snow.css\"\n\nconst toolbarOptions = [\n  [{ header: [false, 2, 3, 4] }],\n  [{ list: \"ordered\" }, { list: \"bullet\" }],\n  [\"bold\", \"italic\", \"underline\"],\n  [\"link\"],\n  [{ align: [] }]\n]\n\nconst QuillEditor = (props) => {\n  const [ReactQuill, setReactQuill] = useState(null)\n  const quillRef = useRef(null)\n\n  useEffect(() => {\n    import(\"react-quill\")\n      .then((module) => {\n        setReactQuill(() => module.default)\n      })\n      .catch((error) => console.error(\"Error importing ReactQuill:\", error)) // eslint-disable-line no-console\n  }, [])\n\n  useEffect(() => {\n    if (ReactQuill && quillRef.current) {\n      const quillInstance = quillRef.current.getEditor()\n\n      const updateTooltipPosition = () => {\n        const tooltip = document.querySelector(\".ql-tooltip\")\n        if (tooltip && tooltip.style.left && Number(tooltip.style.left.replace(\"px\", \"\")) < 0) {\n          tooltip.style.left = 0\n        }\n      }\n\n      quillInstance.on(\"selection-change\", updateTooltipPosition)\n\n      return () => {\n        quillInstance.off(\"selection-change\", updateTooltipPosition)\n      }\n    }\n  }, [ReactQuill])\n\n  if (!ReactQuill) {\n    return <div>Loading editor...</div>\n  }\n\n  return (\n    <div>\n      <ReactQuill\n        ref={quillRef}\n        theme=\"snow\"\n        className={twMerge(\"w-full\", props.className, props.validationError && VALIDATION_ERROR_INPUT_CLASSNAMES)}\n        {...props}\n        modules={{\n          toolbar: toolbarOptions\n        }}\n      />\n      {props.validationError && !!props.validationError.length && (\n        <ValidationError>{props.validationError}</ValidationError>\n      )}\n    </div>\n  )\n}\n\nexport default QuillEditor\n","import { StarIcon } from \"@heroicons/react/24/solid\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst ReviewStars = ({ rating, starClassName }) => {\n  rating = Math.round(rating)\n\n  return (\n    <div className=\"flex gap-0.5\">\n      {[...Array(rating)].map((item, index) => (\n        <StarIcon key={index} className={twMerge(\"h-5 w-5 text-orange\", starClassName)} />\n      ))}\n      {rating < 5 && (\n        <>\n          {[...Array(5 - rating)].map((item, index) => (\n            <StarIcon key={index} className=\"h-5 w-5 text-gray\" />\n          ))}\n        </>\n      )}\n    </div>\n  )\n}\n\nexport default ReviewStars\n","import React, { useEffect } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst Toast = ({ children, position, type, visible, setVisible, timeout = 6000 }) => {\n  let timeoutId\n\n  useEffect(() => {\n    if (visible) {\n      if (timeoutId) clearTimeout(timeoutId)\n      timeoutId = setTimeout(() => {\n        setVisible(false)\n      }, timeout)\n    }\n  }, [visible])\n\n  const getPositionClasses = () => {\n    switch (position) {\n      case \"bottomLeft\":\n        return visible ? \"bottom-8 left-8\" : \"bottom-8 -left-[460px]\"\n      case \"topLeft\":\n        return visible ? \"top-8 left-8\" : \"top-8 -left-[460px]\"\n      case \"bottomCenter\":\n        return visible ? \"bottom-8 left-1/2 -translate-x-1/2\" : \"-bottom-32 left-1/2 -translate-x-1/2\"\n      default:\n        return visible ? \"top-8 left-8\" : \"top-8 -left-[460px]\"\n    }\n  }\n\n  return (\n    <div\n      className={twMerge(\n        \"fixed z-[999999] max-w-[460px] rounded border px-6 py-4 duration-500 sm:w-[calc(100%-4rem)] [&>a]:cursor-pointer [&>a]:font-bold [&>a]:underline\",\n        type === \"error\"\n          ? \"border-red bg-red-light\"\n          : type === \"warning\"\n          ? \"border-orange bg-orange-light\"\n          : type === \"info\"\n          ? \"border-gray bg-gray-light\"\n          : \"border-green bg-green-light\",\n        getPositionClasses()\n      )}>\n      {children}\n    </div>\n  )\n}\n\nexport default Toast\n","import React, { createContext, useContext, useState } from \"react\"\n\nimport { urqlClient } from \"../utils/utils\"\n\nconst CURRENT_USER_QUERY = `\n  query CurrentUserContext {\n    currentUser { id name firstName lastName phone email }\n  }\n`\n\nexport const CurrentUserContext = createContext()\n\nexport const CurrentUserProvider = ({ children, defaultUser }) => {\n  const [user, setUser] = useState(defaultUser)\n\n  const fetchUser = () => {\n    urqlClient\n      .query(CURRENT_USER_QUERY)\n      .toPromise()\n      .then((res) => {\n        if (res.data?.currentUser) {\n          setUser(res.data.currentUser)\n        } else {\n          console.error(\"Error fetching current user\", res)\n        }\n      })\n  }\n\n  return <CurrentUserContext.Provider value={{ user, fetchUser, setUser }}>{children}</CurrentUserContext.Provider>\n}\n\nexport const useCurrentUser = () => useContext(CurrentUserContext)\n","import React, { createContext, useContext, useState } from \"react\"\n\nimport Toast from \"../components/shared/Toast\"\n\nexport const ToastContext = createContext()\n\nconst DEFAULT_TOAST_PARAMS = {\n  type: \"success\",\n  position: \"bottomCenter\",\n  timeout: 6000\n}\n\nexport const ToastProvider = ({ children }) => {\n  const [alertState, setAlertState] = useState({\n    visible: false,\n    content: \"\",\n    ...DEFAULT_TOAST_PARAMS\n  })\n\n  const showToast = (params) => {\n    if (typeof params === \"string\") params = { content: params }\n    const { content, type, position, timeout } = { ...DEFAULT_TOAST_PARAMS, ...params }\n    setAlertState({ visible: true, content, type, position, timeout })\n  }\n\n  const hideToast = () => setAlertState((prev) => ({ ...prev, visible: false }))\n\n  return (\n    <ToastContext.Provider value={{ showToast, hideToast }}>\n      <>\n        {children}\n        <Toast\n          visible={alertState.visible}\n          setVisible={(visible) => setAlertState((prev) => ({ ...prev, visible }))}\n          position={alertState.position}\n          type={alertState.type}\n          timeout={alertState.timeout}>\n          {alertState.content}\n        </Toast>\n      </>\n    </ToastContext.Provider>\n  )\n}\n\nexport const useToast = () => useContext(ToastContext)\n","import { useState, useEffect } from \"react\"\n\nexport const useContainerDimensions = (myRef) => {\n  const [dimensions, setDimensions] = useState({ width: 0, height: 0 })\n\n  useEffect(() => {\n    const getDimensions = () => ({\n      width: myRef.current.offsetWidth,\n      height: myRef.current.offsetHeight\n    })\n\n    const handleResize = () => {\n      setDimensions(getDimensions())\n    }\n\n    if (myRef.current) {\n      setDimensions(getDimensions())\n    }\n\n    window.addEventListener(\"resize\", handleResize)\n\n    return () => {\n      window.removeEventListener(\"resize\", handleResize)\n    }\n  }, [myRef])\n\n  return dimensions\n}\n","import { useState, useEffect, useRef } from \"react\"\n\nconst useIntersectionObserver = (threshold = 0.1) => {\n  const [isVisible, setIsVisible] = useState(false)\n  const elementRef = useRef(null)\n\n  useEffect(() => {\n    const observer = new IntersectionObserver(\n      (entries) => {\n        if (entries[0].isIntersecting) {\n          setIsVisible(true)\n          observer.disconnect()\n        }\n      },\n      { threshold }\n    )\n\n    if (elementRef.current) {\n      observer.observe(elementRef.current)\n    }\n\n    return () => {\n      if (elementRef.current) observer.disconnect()\n    }\n  }, [threshold])\n\n  return [isVisible, elementRef]\n}\n\nexport default useIntersectionObserver\n","import { BuildingOfficeIcon, ChatBubbleLeftEllipsisIcon, CheckIcon, VideoCameraIcon } from \"@heroicons/react/24/outline\"\nimport React from \"react\"\n\nimport Typography from \"../../components/shared/Typography\"\nimport { joinWithAnd } from \"../../utils/utils\"\n\nimport AskQuestionButton from \"./AskQuestionButton\"\nimport ScrollToSection from \"./ScrollToSection\"\n\nconst AboutSection = ({ practice }) => {\n  const languages = joinWithAnd(practice.languages.map((l) => l.name))\n  const ageWorkWiths = joinWithAnd(practice.ageWorkWiths.map((a) => a.name.toLowerCase()))\n  const workWiths = joinWithAnd(practice.workWiths.map((w) => w.name.toLowerCase()))\n  const officeLocation = practice.locations.find((l) => l.kind === \"office\")\n  const virtualLocation = practice.locations.find((l) => l.kind === \"virtual\")\n\n  return (\n    <>\n      <ScrollToSection id=\"about\" className=\"border-none\">\n        <Typography variant=\"capitalHeading\" as=\"h2\">\n          {practice.user.firstName}&apos;s practice\n        </Typography>\n        <div className=\"mt-4 grid grid-cols-2 gap-2 sm:grid-cols-1\">\n          {officeLocation && (\n            <div className=\"flex items-start gap-2\">\n              <BuildingOfficeIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>In-person sessions</div>\n            </div>\n          )}\n          {virtualLocation && (\n            <div className=\"flex items-start gap-2\">\n              <VideoCameraIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Virtual sessions</div>\n            </div>\n          )}\n          {languages && (\n            <div className=\"flex items-start gap-2\">\n              <ChatBubbleLeftEllipsisIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Speaks {languages}</div>\n            </div>\n          )}\n          {ageWorkWiths && (\n            <div className=\"flex items-start gap-2\">\n              <CheckIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Works with {ageWorkWiths}</div>\n            </div>\n          )}\n          {workWiths && (\n            <div className=\"flex items-start gap-2\">\n              <CheckIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Works with {workWiths}</div>\n            </div>\n          )}\n        </div>\n        <div className=\"mt-4\">\n          <AskQuestionButton practice={practice} />\n          <Typography variant=\"smSubtitle\" as=\"div\" className=\"mt-2\">\n            Responds in ~24 hours\n          </Typography>\n        </div>\n      </ScrollToSection>\n    </>\n  )\n}\n\nexport default AboutSection\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport { ChevronDownIcon } from \"@heroicons/react/24/outline\"\nimport dayjs from \"dayjs\"\nimport React, { useEffect, useRef, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\nimport { useQuery } from \"urql\"\n\nimport { BASE_INPUT_CLASSNAMES, Label } from \"../../components/shared/Inputs\"\nimport { Box } from \"../../components/shared/Layout\"\nimport LoadingSpinner from \"../../components/shared/LoadingSpinner\"\nimport { RadioWithLabel } from \"../../components/shared/RadioButtons\"\nimport Typography from \"../../components/shared/Typography\"\nimport { formatPrice } from \"../../utils/utils\"\n\nconst AVAILABILITY_QUERY = `\n  query bookingAvailability($serviceId: ID!, $locationId: ID!) {\n    bookingAvailability(serviceId: $serviceId, locationId: $locationId) {\n      timeZone\n      availableSlots { date datetimes }\n    }\n  }\n`\n\nconst BookingWidget = ({ practice, selectedService }) => {\n  const [selectedLocation, setSelectedLocation] = useState(selectedService.locations[0])\n  const [top, setTop] = useState(0)\n  const [position, setPosition] = useState(\"static\")\n  const [offsetLeft, setOffsetLeft] = useState(0)\n  const [isScrolledIntoFooter, setIsScrolledIntoFooter] = useState(false)\n  const [bottom, setBottom] = useState(0)\n  const [hiddenOnMobile, setHiddenOnMobile] = useState(true)\n  const ref = useRef(null)\n  const practitioner = practice.user\n  const highlyRated =\n    practice.reviews.length >= 3 && practice.reviews.filter((r) => r.rating === 5).length === practice.reviews.length\n\n  const [{ data, fetching, error }, refetchQuery] = useQuery({\n    query: AVAILABILITY_QUERY,\n    variables: { serviceId: selectedService.id, locationId: selectedLocation.id }\n  })\n\n  if (error) console.error(error)\n\n  const availableSlots = data?.bookingAvailability?.availableSlots?.filter((day) => day.datetimes.length > 0)?.[0]\n  const timeZone =\n    selectedLocation.kind === \"virtual\"\n      ? Intl.DateTimeFormat().resolvedOptions().timeZone\n      : selectedLocation?.formattedTimeZone\n  const timeZoneAbbr =\n    selectedLocation.kind === \"virtual\"\n      ? new Date().toLocaleTimeString(\"en-us\", { timeZoneName: \"short\" }).split(\" \")[2]\n      : selectedLocation?.timeZoneAbbr\n  const firstSlot =\n    availableSlots && (dayjs(availableSlots.datetimes[0]) || dayjs(availableSlots.datetimes[0]).tz(timeZone))\n  const momentDate = availableSlots && dayjs(availableSlots.date)\n  const dateFormat = \"dddd, MMMM Do\"\n  const isToday = momentDate && dayjs().format(dateFormat) === momentDate.format(dateFormat)\n  const isTomorrow = momentDate && dayjs().add(1, \"days\").format(dateFormat) === momentDate.format(dateFormat)\n\n  const handleResize = () => {\n    if (ref.current) {\n      setOffsetLeft(ref.current.offsetLeft)\n    }\n  }\n\n  const handleScroll = () => {\n    const scrollHeight = document.documentElement.scrollHeight\n    const navHeight = document.querySelector(\"nav\").offsetHeight\n    const footerHeight = document.querySelector(\"footer\").offsetHeight\n    const footerOffsetTop = document.querySelector(\"footer\").offsetTop\n    const widgetHeight = document.getElementById(\"booking-widget-desktop\").offsetHeight\n    const distanceFromTop = navHeight + 32 // 32 is the padding of the widget\n    const footerTop = scrollHeight - footerHeight - widgetHeight - distanceFromTop\n    const bottom = window.innerHeight - (footerOffsetTop - window.scrollY)\n    setBottom(bottom)\n    setIsScrolledIntoFooter(footerTop < window.scrollY)\n    setHiddenOnMobile(false)\n\n    const offsetTop = ref.current.offsetTop\n    if (window.scrollY > offsetTop - distanceFromTop) {\n      setPosition(\"fixed\")\n      setTop(distanceFromTop)\n    } else {\n      setPosition(\"static\")\n    }\n  }\n\n  useEffect(() => {\n    window.addEventListener(\"resize\", handleResize)\n    window.addEventListener(\"scroll\", handleScroll)\n    const timeout = setTimeout(() => {\n      setHiddenOnMobile(false)\n    }, 3000)\n\n    return () => {\n      window.removeEventListener(\"resize\", handleResize)\n      window.removeEventListener(\"scroll\", handleScroll)\n      clearTimeout(timeout)\n    }\n  }, [ref])\n\n  const widgetStyle = { position }\n  if (isScrolledIntoFooter) {\n    widgetStyle.bottom = bottom\n  } else {\n    widgetStyle.top = top\n    widgetStyle.offsetLeft = offsetLeft\n  }\n\n  return (\n    <>\n      <div className=\"w-[400px] md:hidden\" ref={ref}>\n        <Box\n          id=\"booking-widget-desktop\"\n          as=\"section\"\n          className=\"z-50 w-[400px] shadow-lg\"\n          style={ref.current ? widgetStyle : null}>\n          <WebAppBookNow\n            practiceId={practice.id}\n            buttonClasses={twMerge(BASE_INPUT_CLASSNAMES, \"border-gray-light px-5 py-4\")}\n            serviceId={selectedService.id}\n            locationId={selectedLocation.id}\n            buttonCopy={\n              <div className=\"flex items-center justify-between gap-2\">\n                <div className=\"text-left\">\n                  <div className=\"font-bold\">\n                    {selectedService.name.length > 67\n                      ? `${selectedService.name.substring(0, 67)}...`\n                      : selectedService.name}\n                  </div>\n                  <div className=\"text-sm\">\n                    <span className=\"text-sm font-bold\">\n                      {selectedService.amountCents === 0\n                        ? \"Free\"\n                        : `${formatPrice(selectedService.amountCents)}${\n                            practice.defaultCurrency !== \"USD\" ? practice.defaultCurrency : \"\"\n                          }`}\n                    </span>{\" \"}\n                    <span className=\"text-gray\">&bull;</span> {selectedService.timeLength} min\n                  </div>\n                </div>\n                <div>\n                  <ChevronDownIcon className=\"h-5 w-5 text-gray-dark\" aria-hidden=\"true\" />\n                </div>\n              </div>\n            }\n          />\n          {selectedService.locations.length > 1 && (\n            <div className=\"mt-4 flex flex-col\">\n              <Label>Location</Label>\n              {selectedService.locations.map((location) => (\n                <RadioWithLabel\n                  id={`location-radio-${location.id}}`}\n                  className=\"my-1\"\n                  key={location.id}\n                  value={`${location}`}\n                  label={location.displayAddress}\n                  checked={location === selectedLocation}\n                  onChange={() => {\n                    setSelectedLocation(location)\n                    refetchQuery({ requestPolicy: \"network-only\" })\n                  }}\n                />\n              ))}\n            </div>\n          )}\n          {fetching ? (\n            <LoadingSpinner />\n          ) : availableSlots ? (\n            <div>\n              <div className=\"mt-4 text-sm font-bold\">\n                {isToday\n                  ? `Today, ${firstSlot.format(\"MMMM D\")} (${timeZoneAbbr})`\n                  : isTomorrow\n                  ? `Tomorrow, ${firstSlot.format(\"MMMM D\")} (${timeZoneAbbr})`\n                  : `${firstSlot.format(dateFormat)} (${timeZoneAbbr})`}\n              </div>\n              <div className=\"my-2 grid grid-cols-3 gap-3\">\n                {availableSlots.datetimes.slice(0, 6).map((slot) => (\n                  <div key={slot}>\n                    <WebAppBookNow\n                      practiceId={practice.id}\n                      serviceId={selectedService.id}\n                      locationId={selectedLocation.id}\n                      dateTime={slot}\n                      buttonCopy={dayjs(slot).tz(timeZone).format(\"h:mma\")}\n                      buttonClasses=\"h-10 rounded border px-4 font-bold focus:outline-none focus:ring-2 focus:ring-blue border-gray w-full bg-white hover:shadow active:bg-gray-light\"\n                    />\n                  </div>\n                ))}\n              </div>\n              <WebAppBookNow\n                practiceId={practice.id}\n                locationId={selectedLocation.id}\n                serviceId={selectedService.id}\n                buttonCopy=\"Show more times\"\n                buttonClasses=\"text-gray-dark underline font-bold\"\n              />\n            </div>\n          ) : (\n            <div className=\"mt-4\">No availability in the next 45 days. Please check back later.</div>\n          )}\n          <WebAppBookNow\n            practiceId={practice.id}\n            locationId={selectedLocation.id}\n            serviceId={selectedService.id}\n            buttonCopy=\"Continue booking\"\n            buttonClasses=\"h-12 w-full rounded border px-4 font-bold focus:outline-none focus:ring-2 focus:ring-blue border-teal bg-teal text-white hover:shadow active:bg-teal-dark mt-6\"\n          />\n          {highlyRated && (\n            <div className=\"mt-6 flex items-center gap-2\">\n              <div className=\"flex h-12 w-12 items-center justify-center rounded-2xl bg-gray-ultralight\">\n                <img className=\"h-10 w-10 rounded-2xl\" src=\"/images/icons/gem-red.png\" alt=\"Highly rated\" />\n              </div>\n              <div>\n                <div className=\"font-bold\">Highly rated</div>\n                <Typography variant=\"smSubtitle\">{practitioner.firstName} has all 5-star reviews</Typography>\n              </div>\n            </div>\n          )}\n          {practice.loyalClients && (\n            <div className={`flex items-center gap-2 ${highlyRated ? \"mt-4\" : \"mt-6\"}`}>\n              <div className=\"flex h-12 w-12 items-center justify-center rounded-2xl bg-gray-ultralight\">\n                <img className=\"h-10 w-10 rounded-2xl\" src=\"/images/icons/gem-blue.png\" alt=\"Highly rated\" />\n              </div>\n              <div>\n                <div className=\"font-bold\">Loyal clients</div>\n                <Typography variant=\"smSubtitle\">{practitioner.firstName}&apos;s clients rebook often</Typography>\n              </div>\n            </div>\n          )}\n        </Box>\n      </div>\n      <div\n        className={`fixed bottom-0 z-50 -ml-6 hidden w-full border-t border-gray-light bg-white px-6 py-5 duration-500 ease-in-out md:block ${\n          hiddenOnMobile ? \"translate-y-[128px]\" : \"translate-y-0\"\n        }`}>\n        <WebAppBookNow\n          practiceId={practice.id}\n          buttonCopy=\"View availability\"\n          buttonClasses=\"h-10 w-full rounded border px-4 font-bold focus:outline-none focus:ring-2 focus:ring-blue border-teal bg-teal text-white hover:shadow active:bg-teal-dark\"\n        />\n        <div className=\"mt-2 flex items-center justify-between\">\n          {highlyRated && (\n            <div className=\"flex items-center gap-2\">\n              <div className=\"flex h-10 w-10 items-center justify-center rounded-2xl bg-gray-ultralight\">\n                <img className=\"h-10 w-10 rounded-2xl\" src=\"/images/icons/gem-red.png\" alt=\"Highly rated\" />\n              </div>\n              <div className=\"text-sm font-bold\">Highly rated</div>\n            </div>\n          )}\n          {practice.loyalClients && (\n            <div className=\"flex items-center gap-2\">\n              <div className=\"flex h-10 w-10 items-center justify-center rounded-2xl bg-gray-ultralight\">\n                <img className=\"h-10 w-10 rounded-2xl\" src=\"/images/icons/gem-blue.png\" alt=\"Highly rated\" />\n              </div>\n              <div className=\"text-sm font-bold\">Loyal clients</div>\n            </div>\n          )}\n        </div>\n      </div>\n    </>\n  )\n}\n\nexport default BookingWidget\n","import { VideoCameraIcon } from \"@heroicons/react/24/outline\"\nimport { CheckBadgeIcon } from \"@heroicons/react/24/solid\"\nimport React from \"react\"\n\nimport ReviewStars from \"../../components/shared/ReviewStars\"\n\nimport { scrollToId } from \"./ScrollToSection\"\n\nconst VideoIcon = () => (\n  <div className=\"flex items-center justify-center rounded-full bg-gray-light p-1\">\n    <VideoCameraIcon className=\"h-4 w-4 stroke-2 text-gray-dark\" />\n  </div>\n)\n\nconst DesktopHeaderSection = ({ practice }) => {\n  const practitioner = practice.user\n  const reviews = practice.reviews\n  const roundedAverageRating = Math.round(practice.averageRating)\n  const proCredential = practice.proCredentials[0]\n  const proIsVirtualOnly = practice.locations.every((location) => location.kind === \"virtual\")\n\n  const scrollToCredentials = (e) => scrollToId(e, \"credentials\")\n  const scrollToReviews = (e) => scrollToId(e, \"reviews\")\n\n  return (\n    <section className=\"w-full bg-gray-ultralight py-8 md:hidden\">\n      <div className=\"mx-auto flex w-[368px] flex-col items-center gap-1 text-center md:hidden\">\n        <div className=\"flex-none\">\n          <img\n            src={practitioner.profilePhotoUrl}\n            alt={practitioner.name}\n            className=\"h-[320px] w-[320px] rounded-lg sm:h-[80px] sm:w-[80px]\"\n          />\n        </div>\n        <h1 className=\"mt-3 flex w-full items-center justify-center gap-2\">\n          <div className=\"text-[18px] font-bold\">{practitioner.name}</div>\n          <img className=\"h-6 w-6 text-teal\" src=\"/images/icons/verified.svg\" alt=\"Verified\" />\n        </h1>\n        <div>{practitioner.title}</div>\n        <div className=\"mt-3 flex items-center gap-2\">\n          <ReviewStars rating={roundedAverageRating} />\n          <div>\n            <button className=\"font-bold text-teal underline\" onClick={scrollToReviews}>\n              {reviews.length} reviews\n            </button>\n          </div>\n        </div>\n        <div className=\"flex items-center gap-2\">\n          <span className=\"sm:hidden\">\n            {practice.city}, {practice.stateAbbreviation}\n          </span>\n          {proIsVirtualOnly && <VideoIcon />}\n        </div>\n        {proCredential && (\n          <div className=\"mt-1 flex items-center gap-2\">\n            <div className=\"flex w-fit items-center gap-1 rounded-lg border border-gray bg-white px-2 py-1\">\n              <CheckBadgeIcon className=\"h-5 w-5 flex-none text-gray-dark opacity-[0.64]\" />\n              <div className=\"text-sm\">{proCredential.credential.name}</div>\n            </div>\n            {practice.proCredentials.length > 1 && (\n              <button className=\"flex-none text-sm\" onClick={scrollToCredentials}>\n                +{practice.proCredentials.length - 1} more\n              </button>\n            )}\n          </div>\n        )}\n      </div>\n    </section>\n  )\n}\n\nexport default DesktopHeaderSection\n","import { BuildingOfficeIcon, VideoCameraIcon } from \"@heroicons/react/24/outline\"\nimport { GoogleMap, LoadScript, Marker, Circle } from \"@react-google-maps/api\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport Typography from \"../../components/shared/Typography\"\n\nimport ScrollToSection from \"./ScrollToSection\"\n\nconst travelDistanceInMeters = (distanceInMiles) => Number(distanceInMiles) * 1609.34\n\n// There are approximately 69 miles in one latitude degree. The 0.9 comes from estimating the half the size of the\n// icon we're using to hide address at map zoom level 11. This will not work properly if you change the map zoom level!\nconst HIDE_LOCATION_ICON_ADJUSTMENT = 0.9 / 69\n\nconst LocationSection = ({ practice, className, showVirtualLocation = true }) => {\n  const physicalLocations = practice.locations\n    .filter((l) => (l.kind === \"office\" || l.kind === \"home\") && l.latitude !== null && l.longitude !== null)\n    .sort((a, b) => b.kind.localeCompare(a.kind))\n\n  const virtualLocation = practice.locations.filter((l) => l.kind === \"virtual\")[0]\n\n  return (\n    <ScrollToSection id=\"location\" className=\"mt-[40px]\">\n      <div className={twMerge(\"flex flex-wrap justify-between gap-y-6 sm:flex-col\", className)}>\n        {physicalLocations.map((location) => {\n          const markerPosition = { lat: location.latitude, lng: location.longitude }\n          const mapCenter = { lat: location.latitude, lng: location.longitude }\n\n          if (location.hideAddress) {\n            // northern hemisphere\n            if (location.latitude > 0) {\n              mapCenter.lat = mapCenter.lat + HIDE_LOCATION_ICON_ADJUSTMENT\n              markerPosition.lat = markerPosition.lat - HIDE_LOCATION_ICON_ADJUSTMENT\n            } else {\n              mapCenter.lat = mapCenter.lat + HIDE_LOCATION_ICON_ADJUSTMENT\n              markerPosition.lat = markerPosition.lat - HIDE_LOCATION_ICON_ADJUSTMENT\n            }\n          }\n\n          return (\n            <div key={`location-${location.id}`}>\n              <div className=\"h-[200px] w-[356px] sm:w-full\">\n                <LoadScript googleMapsApiKey=\"AIzaSyBJzO3o3qx-4b53mVm0BA23J1z_Aj7MWmE\">\n                  <GoogleMap\n                    mapContainerStyle={{ width: \"100%\", height: \"100%\" }}\n                    center={mapCenter}\n                    zoom={location.kind === \"home\" ? 10 : !location.hideAddress ? 15 : 11}\n                    options={{ disableDefaultUI: true }}>\n                    {location.kind === \"home\" ? (\n                      <Circle\n                        center={markerPosition}\n                        radius={travelDistanceInMeters(5)}\n                        options={{ strokeColor: \"#0D9DA4\" }}\n                      />\n                    ) : location.hideAddress ? (\n                      <Marker position={markerPosition} icon=\"/defaults/m5.png\" />\n                    ) : (\n                      <Marker position={markerPosition} icon=\"/defaults/default-map-pin.svg\" />\n                    )}\n                  </GoogleMap>\n                </LoadScript>\n              </div>\n              <div className=\"mt-4 flex items-start gap-2\">\n                {location.kind === \"office\" ? (\n                  <>\n                    <div className=\"flex flex-none items-center justify-center rounded-full bg-gray-light p-1\">\n                      <BuildingOfficeIcon className=\"h-6 w-6 text-gray-dark\" />\n                    </div>\n                    <div className=\"flex flex-col\">\n                      {!location.hideAddress && <div>{location.address}</div>}\n                      <div>\n                        {location.city}, {location.stateAbbreviation} {location.zip}\n                      </div>\n                      {location.hideAddress && (\n                        <Typography variant=\"smSubtitle\" as=\"div\">\n                          Address shown after booking\n                        </Typography>\n                      )}\n                    </div>\n                  </>\n                ) : (\n                  <>\n                    <div className=\"flex flex-none items-center justify-center rounded-full bg-gray-light p-0.5\">\n                      <img src=\"/images/icons/car.svg\" alt=\"Car\" className=\"h-7 w-7 text-gray-dark\" />\n                    </div>\n                    <div className=\"flex flex-col\">\n                      <div>\n                        {location.city}, {location.stateAbbreviation} {location.zip}\n                      </div>\n                      <Typography variant=\"smSubtitle\" as=\"div\">\n                        I come to you\n                      </Typography>\n                    </div>\n                  </>\n                )}\n              </div>\n            </div>\n          )\n        })}\n      </div>\n      {showVirtualLocation && virtualLocation && (\n        <div className=\"mt-4 flex items-center gap-2\">\n          <div className=\"flex flex-none items-center justify-center rounded-full bg-gray-light p-1\">\n            <VideoCameraIcon className=\"h-6 w-6 text-gray-dark\" />\n          </div>\n          <div>I offer video sessions</div>\n        </div>\n      )}\n    </ScrollToSection>\n  )\n}\n\nexport default LocationSection\n","import { VideoCameraIcon } from \"@heroicons/react/24/outline\"\nimport { CheckBadgeIcon } from \"@heroicons/react/24/solid\"\nimport React from \"react\"\n\nimport ReviewStars from \"../../components/shared/ReviewStars\"\n\nimport EndorsementsSection from \"./EndorsementsSection\"\nimport { scrollToId } from \"./ScrollToSection\"\n\nconst VideoIcon = () => (\n  <div className=\"flex items-center justify-center rounded-full bg-gray-light p-1\">\n    <VideoCameraIcon className=\"h-4 w-4 stroke-2 text-gray-dark\" />\n  </div>\n)\n\nconst MobileHeaderSection = ({ practice }) => {\n  const practitioner = practice.user\n  const reviews = practice.reviews\n  const roundedAverageRating = Math.round(practice.averageRating)\n  const proCredential = practice.proCredentials[0]\n  const proIsVirtualOnly = practice.locations.every((location) => location.kind === \"virtual\")\n\n  const scrollToCredentials = (e) => scrollToId(e, \"credentials\")\n  const scrollToReviews = (e) => scrollToId(e, \"reviews\")\n\n  return (\n    <section className=\"hidden flex-col gap-2 md:flex\">\n      <div className=\"-ml-6 w-[calc(100%+3rem)]\">\n        <img src={practitioner.profilePhotoUrl} alt={practitioner.name} className=\"aspect-square w-full\" />\n      </div>\n      <h1 className=\"mt-2 flex items-center gap-2\">\n        <div className=\"text-[18px] font-bold\">{practitioner.name}</div>\n        <img className=\"h-6 w-6 text-teal\" src=\"/images/icons/verified.svg\" alt=\"Verified\" />\n      </h1>\n      <div>{practitioner.title}</div>\n      <div className=\"mt-2 flex items-center gap-2\">\n        <ReviewStars rating={roundedAverageRating} />\n        <button className=\"font-bold text-teal underline\" onClick={scrollToReviews}>\n          {reviews.length} reviews\n        </button>\n      </div>\n      <div className=\"flex items-center gap-2\">\n        {practice.city}, {practice.stateAbbreviation}\n        {proIsVirtualOnly && <VideoIcon />}\n      </div>\n      {proCredential && (\n        <div className=\"flex items-center gap-2\">\n          <div className=\"flex w-fit items-center gap-1 rounded-lg border border-gray px-2 py-1\">\n            <CheckBadgeIcon className=\"h-5 w-5 text-gray-dark opacity-[0.64]\" />\n            <div className=\"text-sm\">{proCredential.credential.name}</div>\n          </div>\n          {practice.proCredentials.length > 1 && (\n            <button className=\"text-sm\" onClick={scrollToCredentials}>\n              +{practice.proCredentials.length - 1} more\n            </button>\n          )}\n        </div>\n      )}\n      <EndorsementsSection skills={practice.skills} showAllButton={false} count={2} className=\"mt-2\" />\n    </section>\n  )\n}\n\nexport default MobileHeaderSection\n","import React from \"react\"\n\nimport Badge from \"../../components/shared/Badge\"\nimport { Box } from \"../../components/shared/Layout\"\n\nimport ReviewCardSignature from \"./ReviewCardSignature\"\nimport { scrollToId } from \"./ScrollToSection\"\n\nconst ReviewsHeaderSection = ({ reviews, practitionerName, seeAllCopy }) => {\n  const filteredReviews = reviews.filter((r) => r.review)\n  const review = filteredReviews.sort((a, b) => b.timesBooked - a.timesBooked)[0]\n\n  if (!review) return null\n\n  let reviewText = review.review.trim()\n  if (reviewText.length > 240) {\n    reviewText = reviewText.slice(0, 240) + \"...\"\n  }\n  const scrollToReviews = (e) => scrollToId(e, \"reviews\")\n\n  return (\n    <section className=\"md:-ml-6 md:mt-8 md:w-[calc(100%+3rem)]\">\n      <Box className=\"flex w-full flex-col gap-4 p-6 md:rounded-none md:border-none md:bg-gray-ultralight sm:rounded-none sm:border-none sm:p-6\">\n        <div>&ldquo;{reviewText}&rdquo;</div>\n        <div className=\"flex items-center justify-between sm:flex-col sm:items-start sm:gap-4\">\n          <ReviewCardSignature review={review} reviewsCount={reviews.length} practitionerName={practitionerName}>\n            {review.timesBooked > 1 && (\n              <Badge\n                type=\"info\"\n                className=\"w-fit border border-gray-light bg-white py-[3px] text-[12px] font-bold normal-case tracking-normal\">\n                Booked {review.timesBooked} times\n              </Badge>\n            )}\n          </ReviewCardSignature>\n          <div className=\"hidden flex-none md:block\">\n            {reviews.length > 1 && (\n              <button className=\"font-bold text-teal underline\" onClick={scrollToReviews}>\n                {seeAllCopy}\n              </button>\n            )}\n          </div>\n        </div>\n      </Box>\n    </section>\n  )\n}\n\nexport default ReviewsHeaderSection\n","import React, { useState } from \"react\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport Typography from \"../../components/shared/Typography\"\n\nimport EndorsementsSection from \"./EndorsementsSection\"\nimport ReviewCard from \"./ReviewCard\"\nimport ScrollToSection, { scrollToId } from \"./ScrollToSection\"\n\nconst ReviewsSection = ({ reviews, skills, practitionerName }) => {\n  const [showAllReviews, setShowAllReviews] = useState(false)\n  const displayedReviews = showAllReviews ? reviews : reviews.slice(0, 10)\n\n  return (\n    <ScrollToSection id=\"reviews\">\n      <Typography variant=\"h4\" as=\"h2\">\n        {reviews.length} verified {reviews.length === 1 ? \"review\" : \"reviews\"}\n      </Typography>\n      <Typography variant=\"subtitle\">\n        Practitioners can&apos;t pay to alter or remove, but they can reply to reviews.\n      </Typography>\n      <EndorsementsSection skills={skills} showAllButton={true} count={10} />\n      <div className=\"mt-6 flex flex-col gap-4\">\n        {displayedReviews.map((review) => (\n          <ReviewCard key={`review-${review.id}`} review={review} practitionerName={practitionerName} />\n        ))}\n        {reviews.length > 10 && (\n          <Button\n            type=\"tertiary\"\n            className=\"w-fit sm:w-full\"\n            onClick={(e) => {\n              setShowAllReviews(!showAllReviews)\n              if (showAllReviews) {\n                scrollToId(e, \"reviews\")\n              }\n            }}>\n            {showAllReviews ? \"See less\" : \"See all reviews\"}\n          </Button>\n        )}\n      </div>\n    </ScrollToSection>\n  )\n}\n\nexport default ReviewsSection\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React, { Fragment } from \"react\"\n\nimport Typography from \"../../components/shared/Typography\"\nimport { formatPrice } from \"../../utils/utils\"\n\nimport NextAvailableSlot from \"./NextAvailableSlot\"\nimport ScrollToSection from \"./ScrollToSection\"\n\nconst DesktopService = ({ service, practiceId, currency }) => {\n  const displayText =\n    service.description.length > 180 ? service.description.substring(0, 180 - 3) + \"...\" : service.description\n\n  return (\n    <div key={service.id} className=\"flex gap-8 sm:hidden\">\n      <div className=\"flex flex-1 flex-col gap-4\">\n        <Typography variant=\"body\" className=\"font-bold\" as=\"h4\">\n          {service.name}\n        </Typography>\n        <div>\n          {service.package ? (\n            <>\n              <span className=\"text-teal\">\n                {formatPrice(service.amountCents)}\n                {currency !== \"USD\" ? currency : \"\"}\n              </span>\n              <span className=\"text-gray-dark\">\n                {\" \"}\n                / {service.numberOfSessions} sessions &bull; {service.timeLength} min{\" \"}\n              </span>\n            </>\n          ) : (\n            <>\n              <span className=\"text-teal\">\n                {formatPrice(service.amountCents)} {currency == \"CAD\" ? \" CAD\" : \"\"}\n              </span>{\" \"}\n              <span className=\"text-gray-dark\"> / {service.timeLength} min </span>\n            </>\n          )}\n        </div>\n        <div>\n          {displayText}\n          {service.description.length > 180 && (\n            <WebAppBookNow\n              practiceId={practiceId}\n              serviceId={service.id}\n              buttonCopy=\"See more\"\n              buttonClasses=\"font-bold underline\"\n              openServiceDetail={true}\n            />\n          )}\n        </div>\n\n        <div className=\"flex items-center gap-2 sm:flex-col sm:items-start sm:gap-2\">\n          <WebAppBookNow\n            practiceId={practiceId}\n            serviceId={service.id}\n            buttonCopy={service.package ? \"Buy Package\" : \"See availability\"}\n            buttonClasses=\"h-10 w-fit rounded border border-teal px-4 font-bold focus:outline-none focus:ring-2 focus:ring-blue border-teal bg-teal text-white sm:w-full hover:shadow active:bg-teal-dark\"\n          />\n          {!service.package && <NextAvailableSlot service={service} />}\n        </div>\n      </div>\n      {service.mediumWebpUrl && (\n        <div className=\"flex-none\">\n          <img\n            src={service.mediumWebpUrl}\n            alt={service.name}\n            className=\"h-[136px] w-[136px] rounded-lg sm:h-[80px] sm:w-[80px]\"\n          />\n        </div>\n      )}\n    </div>\n  )\n}\n\nconst MobileService = ({ service, practiceId, currency }) => {\n  const displayText =\n    service.description.length > 180 ? service.description.substring(0, 180 - 3) + \"...\" : service.description\n\n  return (\n    <div key={service.id} className=\"hidden flex-col gap-4 sm:flex\">\n      <div>\n        {service.mediumWebpUrl && (\n          <img\n            src={service.mediumWebpUrl}\n            alt={service.name}\n            className=\"float-right mb-8 ml-8 inline-block h-[80px] w-[80px] rounded-lg\"\n          />\n        )}\n        <Typography variant=\"body\" className=\"mb-4 font-bold\" as=\"h4\">\n          {service.name}\n        </Typography>\n        {displayText}\n        {service.description.length > 180 && (\n          <WebAppBookNow\n            practiceId={practiceId}\n            serviceId={service.id}\n            buttonCopy=\"See more\"\n            buttonClasses=\"font-bold underline\"\n            openServiceDetail={true}\n          />\n        )}\n      </div>\n      {service.package ? (\n        <div>\n          <span className=\"text-teal\">\n            {formatPrice(service.amountCents)} {currency === \"CAD\" ? \" CAD\" : \"\"}\n          </span>{\" \"}\n          <span className=\"text-gray-dark\">\n            {\" \"}\n            / {service.numberOfSessions} sessions &bull; {service.timeLength} min{\" \"}\n          </span>\n        </div>\n      ) : (\n        <div>\n          <span className=\"text-teal\">\n            {formatPrice(service.amountCents)} {currency === \"CAD\" ? \" CAD\" : \"\"}\n          </span>{\" \"}\n          <span className=\"text-gray-dark\"> / {service.timeLength} min </span>\n        </div>\n      )}\n      <WebAppBookNow\n        practiceId={practiceId}\n        serviceId={service.id}\n        buttonCopy=\"See availability\"\n        buttonClasses=\"h-10 w-fit rounded border border-teal px-4 font-bold focus:outline-none focus:ring-2 focus:ring-blue border-teal bg-teal text-white sm:w-full hover:shadow active:bg-teal-dark\"\n      />\n      {!service.package && <NextAvailableSlot service={service} />}\n    </div>\n  )\n}\n\nconst ServicesSection = ({ practiceId, services, currency }) => {\n  const displayedServices = services.slice(0, 3)\n\n  return (\n    <ScrollToSection id=\"services\" className=\"mt-4\">\n      <div className=\"flex flex-col gap-10 sm:gap-8\">\n        {displayedServices.map((service) => (\n          <Fragment key={`service-${service.id}`}>\n            <DesktopService service={service} practiceId={practiceId} currency={currency} />\n            <MobileService service={service} practiceId={practiceId} currency={currency} />\n          </Fragment>\n        ))}\n      </div>\n      {services.length > 3 && (\n        <WebAppBookNow\n          practiceId={practiceId}\n          buttonCopy=\"See all services\"\n          buttonClasses=\"rounded border px-4 font-bold focus:outline-none focus:ring-2 focus:ring-blue border-gray bg-white active:bg-gray-light h-8 sm:w-full mt-6\"\n        />\n      )}\n    </ScrollToSection>\n  )\n}\n\nexport default ServicesSection\n","import React from \"react\"\n\nimport YoutubeIcon from \"../../components/icons/YoutubeIcon\"\nimport Typography from \"../../components/shared/Typography\"\n\nconst WebsiteAndSocial = ({ practice }) => {\n  if (\n    !practice.website &&\n    !practice.facebook &&\n    !practice.instagram &&\n    !practice.twitter &&\n    !practice.linkedin &&\n    !practice.tiktok &&\n    !practice.youtube\n  ) {\n    return null\n  }\n\n  return (\n    <section className=\"mb-2\">\n      <Typography variant=\"h4\" as=\"h2\">\n        Website & Social\n      </Typography>\n      <div className=\"mt-4 flex flex-wrap items-center gap-y-4\">\n        {practice.website && (\n          <a\n            target=\"_blank\"\n            className=\"mb-0 mr-2 block w-fit rounded-lg border border-gray bg-white px-4 font-bold leading-loose hover:shadow active:bg-gray-light sm:w-full\"\n            href={practice.website}\n            rel=\"noreferrer\">\n            {practice.website.replace(/(^\\w+:|^)\\/\\//, \"\")}\n          </a>\n        )}\n        <div className=\"flex items-center sm:w-full sm:justify-center\">\n          {practice.instagram && (\n            <a target=\"_blank\" className=\"flex items-center justify-center\" href={practice.instagram} rel=\"noreferrer\">\n              <img src=\"/images/icons/instagram.svg\" alt=\"Instagram\" />\n            </a>\n          )}\n          {practice.tiktok && (\n            <a target=\"_blank\" className=\"flex items-center justify-center\" href={practice.tiktok} rel=\"noreferrer\">\n              <img src=\"/images/icons/tiktok.svg\" alt=\"TikTok\" />\n            </a>\n          )}\n          {practice.twitter && (\n            <a target=\"_blank\" className=\"flex items-center justify-center\" href={practice.twitter} rel=\"noreferrer\">\n              <img src=\"/images/icons/twitter.svg\" alt=\"Twitter\" />\n            </a>\n          )}\n          {practice.linkedin && (\n            <a target=\"_blank\" className=\"flex items-center justify-center\" href={practice.linkedin} rel=\"noreferrer\">\n              <img src=\"/images/icons/linkedin.svg\" alt=\"LinkedIn\" />\n            </a>\n          )}\n          {practice.facebook && (\n            <a target=\"_blank\" className=\"flex items-center justify-center\" href={practice.facebook} rel=\"noreferrer\">\n              <img src=\"/images/icons/facebook.svg\" alt=\"Facebook\" />\n            </a>\n          )}\n          {practice.youtube && (\n            <a target=\"_blank\" className=\"flex items-center justify-center\" href={practice.youtube} rel=\"noreferrer\">\n              <YoutubeIcon />\n            </a>\n          )}\n        </div>\n      </div>\n    </section>\n  )\n}\n\nexport default WebsiteAndSocial\n","import React, { useEffect } from \"react\"\n\nimport ExpandableText from \"../components/shared/ExpandableText\"\nimport { CurrentUserProvider } from \"../contexts/CurrentUserContext\"\nimport { ToastProvider } from \"../contexts/ToastContext\"\nimport useWindowSize from \"../hooks/useWindowSize\"\nimport GraphQLProvider from \"../providers/GraphQLProvider\"\n\nimport AboutSection from \"./ProProfile/AboutSection\"\nimport BookingWidget from \"./ProProfile/BookingWidget\"\nimport CredentialsSection from \"./ProProfile/CredentialsSection\"\nimport DesktopHeaderSection from \"./ProProfile/DesktopHeaderSection\"\nimport EndorsementsSection from \"./ProProfile/EndorsementsSection\"\nimport GalleryImagesSection from \"./ProProfile/GalleryImagesSection\"\nimport LocationSection from \"./ProProfile/LocationSection\"\nimport MobileHeaderSection from \"./ProProfile/MobileHeaderSection\"\nimport ReviewsHeaderSection from \"./ProProfile/ReviewsHeaderSection\"\nimport ReviewsSection from \"./ProProfile/ReviewsSection\"\nimport { scrollToId } from \"./ProProfile/ScrollToSection\"\nimport ServicesSection from \"./ProProfile/ServicesSection\"\nimport WebsiteAndSocial from \"./ProProfile/WebsiteAndSocial\"\n\nconst ProProfile = ({ practice, currentUser }) => {\n  const freeConsult = practice.services.find((service) => service.amountCents === 0)\n  const selectedService = freeConsult || practice.services[0]\n  const practitioner = practice.user\n  const reviews = practice.reviews\n\n  practice.skills =\n    practice.skills.filter((skill) => skill.endorsementsCount > 0).length === 0\n      ? practice.skills.sort((a, b) => a.position - b.position)\n      : practice.skills\n          .filter((skill) => skill.endorsementsCount > 0)\n          .sort((a, b) => b.endorsementsCount - a.endorsementsCount || a.specialty.name.localeCompare(b.specialty.name))\n\n  const { width } = useWindowSize()\n\n  useEffect(() => {\n    if (width > 0 && width < 640) {\n      document.body.classList.remove(\"has-navbar-fixed-top\")\n      document.querySelector(\"nav\").classList.remove(\"fixed\")\n    } else {\n      document.body.classList.add(\"has-navbar-fixed-top\")\n      document.querySelector(\"nav\").classList.add(\"fixed\")\n    }\n  }, [width])\n\n  const endorsementsCount = practice.skills.reduce((acc, skill) => acc + skill.endorsementsCount, 0)\n  let seeAllCopy = \"See all \"\n  if (practice.reviews.length > 0) {\n    seeAllCopy += `${practice.reviews.length} reviews`\n  }\n  if (endorsementsCount > 0) {\n    seeAllCopy += `${practice.reviews.length > 0 ? \" & \" : \"\"}${endorsementsCount} endorsements`\n  }\n\n  return (\n    <GraphQLProvider>\n      <ToastProvider>\n        <CurrentUserProvider defaultUser={currentUser}>\n          <main>\n            <DesktopHeaderSection practice={practice} />\n            <div className=\"mx-auto max-w-[1264px] p-8 md:px-6 md:pt-0\">\n              <MobileHeaderSection practice={practice} />\n              <div className=\"flex w-full justify-between gap-4\">\n                <section className=\"max-w-[736px] flex-1 md:w-full\">\n                  <ReviewsHeaderSection\n                    reviews={reviews}\n                    practitionerName={practitioner.firstName}\n                    skills={practice.skills}\n                    seeAllCopy={seeAllCopy}\n                  />\n                  <div className=\"md:hidden\">\n                    <EndorsementsSection skills={practice.skills} showAllButton={false} count={8} />\n                    {(practice.reviews.length > 0 || endorsementsCount > 0) && (\n                      <button className=\"mt-4 font-bold text-teal underline\" onClick={(e) => scrollToId(e, \"reviews\")}>\n                        {seeAllCopy}\n                      </button>\n                    )}\n                  </div>\n                  {practice.galleryImages.length > 0 && <GalleryImagesSection images={practice.galleryImages} />}\n                  {practice.about && (\n                    <div className=\"mt-6\">\n                      <ExpandableText text={practice.about} maxLength={280} allowHtml={true} scrollUpOnClose={true} />\n                    </div>\n                  )}\n                  <LocationSection practice={practice} />\n                  <ServicesSection\n                    practiceId={practice.id}\n                    services={practice.services}\n                    currency={practice.defaultCurrency}\n                  />\n                  <ReviewsSection\n                    reviews={reviews}\n                    skills={practice.skills}\n                    averageRating={practice.averageRating}\n                    practitionerName={practitioner.firstName}\n                  />\n                  <CredentialsSection proCredentials={practice.proCredentials} practitioner={practitioner} />\n                  <AboutSection practice={practice} />\n                  <WebsiteAndSocial practice={practice} />\n                </section>\n                {selectedService && <BookingWidget practice={practice} selectedService={selectedService} />}\n              </div>\n            </div>\n          </main>\n        </CurrentUserProvider>\n      </ToastProvider>\n    </GraphQLProvider>\n  )\n}\n\nexport default ProProfile\n","import React, { useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\nimport { useMutation } from \"urql\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport { Input, InputWithLabel, Label, TextArea } from \"../../components/shared/Inputs\"\nimport { AnimatedModal } from \"../../components/shared/Modal\"\nimport Typography from \"../../components/shared/Typography\"\nimport { useCurrentUser } from \"../../contexts/CurrentUserContext\"\nimport { useToast } from \"../../contexts/ToastContext\"\n\nconst PHONE_AUTH_MUTATION = `\n  mutation($phone: String!) {\n    phoneVerification(phone: $phone) { result errors }\n  }\n`\n\nconst PHONE_LOGIN_MUTATION = `\n  mutation($phone: String!, $code: String!, $device: String!, $firstName: String, $email: String) {\n    phoneLogin(phone: $phone, code: $code, device: $device, firstName: $firstName, email: $email) {\n      result\n      token\n      errors\n    }\n  }\n`\n\nconst SEND_MESSAGE_MUTATION = `\n  mutation SendMessage($practitionerId: ID!, $message: String!) {\n    sendMessage(practitionerId: $practitionerId, message: $message) {\n      result\n      errors\n    }\n  }\n`\n\nconst AskQuestionButton = ({ practice, className }) => {\n  const [showQuestionModal, setShowQuestionModal] = useState(false)\n  const [showOtpInput, setShowOtpInput] = useState(false)\n  const [submitting, setSubmitting] = useState(false)\n  const [firstName, setFirstName] = useState(\"\")\n  const [phone, setPhone] = useState(\"\")\n  const [code, setCode] = useState(\"\")\n  const [email, setEmail] = useState(\"\")\n  const [question, setQuestion] = useState(\"\")\n  const [validationError, setValidationError] = useState(null)\n  const { user, fetchUser } = useCurrentUser()\n  const { showToast } = useToast()\n\n  const [{ fetching: phoneVerificationFetching, error: phoneVerificationError }, phoneVerification] =\n    useMutation(PHONE_AUTH_MUTATION)\n  const [{ fetching: phoneLoginFetching, error: phoneLoginError }, phoneLogin] = useMutation(PHONE_LOGIN_MUTATION)\n  const [{ fetching: sendMessageFetching, error: sendMessageError }, sendMessage] = useMutation(SEND_MESSAGE_MUTATION)\n  const error = phoneVerificationError || phoneLoginError || sendMessageError\n  const fetching = phoneVerificationFetching || phoneLoginFetching || sendMessageFetching || submitting\n\n  const closeModal = () => {\n    setFirstName(\"\")\n    setPhone(\"\")\n    setCode(\"\")\n    setQuestion(\"\")\n    setValidationError(null)\n    setShowOtpInput(false)\n    setShowQuestionModal(false)\n    setSubmitting(false)\n  }\n\n  const submitMessage = () => {\n    sendMessage({ practitionerId: practice.user.id, message: question }).then((result) => {\n      if (result.data?.sendMessage?.result === \"success\") {\n        closeModal()\n        showToast(\"Your message has been sent! 🎉\")\n      } else {\n        setValidationError(result.data?.sendMessage?.errors.toString() || \"There was an error submitting your question\")\n        console.error(result)\n      }\n    })\n  }\n\n  const onSave = () => {\n    if (user) {\n      submitMessage()\n    } else if (showOtpInput) {\n      setSubmitting(true)\n      const variables = { phone, code, firstName, device: \"web\" }\n      if (email) variables.email = email\n      phoneLogin(variables).then((result) => {\n        if (result.data?.phoneLogin?.result === \"success\") {\n          fetchUser()\n          submitMessage()\n        } else {\n          setSubmitting(false)\n          setValidationError(result.data?.phoneLogin?.errors.toString() || \"There was an error submitting your code\")\n          console.error(result)\n        }\n      })\n    } else {\n      phoneVerification({ phone }).then((result) => {\n        if (result.data?.phoneVerification?.result === \"success\") {\n          setShowOtpInput(true)\n        } else {\n          setValidationError(\n            result.data?.phoneVerification?.errors.toString() ||\n              \"There was an error submitting your name and phone number\"\n          )\n          console.error(result)\n        }\n      })\n    }\n  }\n\n  if (error) console.error(error)\n\n  return (\n    <>\n      <Button\n        type=\"secondary\"\n        size=\"large\"\n        className={twMerge(\"sm:w-full\", className)}\n        onClick={() => setShowQuestionModal(true)}>\n        Ask {practice.user.firstName} a question\n      </Button>\n      <AnimatedModal\n        visible={showQuestionModal}\n        hideModal={closeModal}\n        header={`Ask ${practice.user.firstName} a question`}\n        showFooter={true}\n        actionButtonCopy=\"Ask question\"\n        onSave={onSave}\n        saveDisabled={fetching}>\n        <div className=\"flex flex-col gap-4\">\n          <div className=\"text-gray-dark\">\n            {showOtpInput\n              ? \"Enter the 6 digit code we sent to your phone to log in and finish sending your message.\"\n              : \"Typically responds in 24 hours.\"}\n          </div>\n          {validationError && (\n            <div>\n              <span className=\"text-red\">{validationError}</span>{\" \"}\n              <button\n                className=\"font-bold text-teal underline\"\n                onClick={() => {\n                  setValidationError(\"\")\n                  setCode(\"\")\n                  setShowOtpInput(false)\n                }}>\n                Update info\n              </button>\n            </div>\n          )}\n          {showOtpInput ? (\n            <div className=\"flex justify-center\">\n              <InputWithLabel className=\"w-1/2\" label=\"Code\" value={code} onChange={(e) => setCode(e.target.value)} />\n            </div>\n          ) : (\n            <>\n              {!user && (\n                <>\n                  <div className=\"flex gap-4 sm:flex-col\">\n                    <InputWithLabel\n                      className=\"w-1/2 sm:w-full\"\n                      label=\"First name\"\n                      value={firstName}\n                      onChange={(e) => setFirstName(e.target.value)}\n                    />\n                    <InputWithLabel\n                      className=\"w-1/2 sm:w-full\"\n                      type=\"phone\"\n                      label=\"Phone\"\n                      value={phone}\n                      onChange={(e) => setPhone(e.target.value)}\n                    />\n                  </div>\n                  <div>\n                    <div className=\"flex justify-between\">\n                      <Label htmlFor=\"email\">Email</Label>\n                      <div className=\"text-sm text-gray-dark\">Optional</div>\n                    </div>\n                    <Input\n                      id=\"email\"\n                      type=\"email\"\n                      value={email}\n                      onChange={(e) => setEmail(e.target.value)}\n                      explanatorySubtext={`Not required, but ${practice.user.firstName} will respond to you via text message or phone call.`}\n                    />\n                  </div>\n                </>\n              )}\n              <div>\n                <Label htmlFor=\"question\">Your question</Label>\n                <TextArea id=\"question\" value={question} onChange={(e) => setQuestion(e.target.value)} />\n                <Typography variant=\"micro\" className=\"-mt-0.5\" as=\"div\">\n                  Do not share personal health information. Please book a discovery call for that.\n                </Typography>\n              </div>\n            </>\n          )}\n        </div>\n      </AnimatedModal>\n    </>\n  )\n}\n\nexport default AskQuestionButton\n","import { AcademicCapIcon, CheckBadgeIcon } from \"@heroicons/react/24/outline\"\nimport { CheckBadgeIcon as CheckBadgeSolidIcon } from \"@heroicons/react/24/solid\"\nimport dayjs from \"dayjs\"\nimport capitalize from \"lodash/capitalize\"\nimport React from \"react\"\n\nimport HoverPopover from \"../../components/shared/HoverPopover\"\nimport Typography from \"../../components/shared/Typography\"\n\nimport ScrollToSection from \"./ScrollToSection\"\n\nexport const LicensePopover = ({ proCredential, practitioner }) => (\n  <div className=\"relative h-[240px] w-[480px] sm:h-fit sm:w-full\">\n    <img\n      className=\"absolute left-0 top-6 h-[120px] w-[120px] rounded-full border-2 border-white sm:static sm:mx-auto sm:block\"\n      src={practitioner.profilePhotoUrl}\n      alt={practitioner.firstName}\n    />\n    <CheckBadgeSolidIcon className=\"absolute left-[40px] top-[122px] h-[40px] w-[40px] text-teal sm:static sm:mx-auto sm:mt-[-24px]\" />\n    <CheckBadgeIcon className=\"absolute left-[39px] top-[121px] h-[42px] w-[42px] text-white sm:static sm:mx-auto sm:mt-[-41px]\" />\n    <img\n      src=\"/images/email/logo--center.png\"\n      alt=\"Heal.me\"\n      className=\"absolute bottom-0 left-0 h-[40px] w-[40px] sm:hidden\"\n    />\n    <div className=\"-ml-6 -mt-6 box-content h-[48px] w-full rounded-t-xl bg-gray-ultralight p-6 sm:hidden\">\n      <div className=\"absolute left-[150px] top-6\">\n        <div className=\"font-bold\">{proCredential.credential.name}</div>\n        <div>\n          State of {capitalize(proCredential.stateIssued)} #{proCredential.licenseNumber}\n        </div>\n      </div>\n    </div>\n    <div className=\"mt-4 hidden sm:block\">\n      <div className=\"font-bold\">{proCredential.credential.name}</div>\n      <div>\n        State of {capitalize(proCredential.stateIssued)} #{proCredential.licenseNumber}\n      </div>\n    </div>\n    <div className=\"absolute left-[150px] top-[96px] mt-6 grid w-[330px] grid-cols-2 grid-rows-2 justify-between sm:static sm:mt-4\">\n      <div className=\"sm:border-t sm:border-gray-light sm:py-4\">\n        <Typography variant=\"smSubtitle\" className=\"font-bold\">\n          First name\n        </Typography>\n        <div>{practitioner.firstName}</div>\n      </div>\n      <div className=\"sm:border-t sm:border-gray-light sm:py-4\">\n        <Typography variant=\"smSubtitle\" className=\"font-bold\">\n          Last name\n        </Typography>\n        <div>{practitioner.lastName}</div>\n      </div>\n      <div className=\"border-t border-gray-light pt-4\">\n        {proCredential.expiresAt && (\n          <>\n            <Typography variant=\"smSubtitle\" className=\"font-bold\">\n              Expiration date\n            </Typography>\n            <div>{dayjs(proCredential.expiresAt).format(\"MM/DD/YYYY\")}</div>\n          </>\n        )}\n      </div>\n      <div className=\"border-t border-gray-light pt-4\"></div>\n    </div>\n    <div className=\"hidden sm:block\">\n      <Typography variant=\"smSubtitle\">\n        Heal.me has verified Lauren’s name, identity, and license with the State of{\" \"}\n        {capitalize(proCredential.stateIssued)}.\n      </Typography>\n    </div>\n  </div>\n)\n\nexport const CredentialPopover = ({ proCredential }) => (\n  <div className=\"relative flex h-[496px] w-[496px] items-center justify-center bg-gray-ultralight sm:h-fit sm:w-full\">\n    {proCredential.filestackDocumentName.endsWith(\".pdf\") ? (\n      <iframe className=\"h-full max-h-full w-full max-w-full\" src={proCredential.filestackDocument} />\n    ) : (\n      <img\n        className=\"max-h-full max-w-full\"\n        src={proCredential.filestackDocument}\n        alt={proCredential.credential.name}\n      />\n    )}\n  </div>\n)\n\nconst CredentialsSection = ({ proCredentials, practitioner }) => (\n  <ScrollToSection id=\"credentials\" className=\"mb-0 border-none pb-8\">\n    <Typography variant=\"h4\" as=\"h2\">\n      Credentials\n    </Typography>\n    <Typography variant=\"subtitle\">Heal.me verifies all credentials before publishing.</Typography>\n    <div className=\"mt-4 grid grid-cols-2 gap-2 sm:grid-cols-1\">\n      {proCredentials.map((proCredential) => (\n        <div key={`credential-${proCredential.credential.name}`} className=\"flex items-start gap-2\">\n          {proCredential.kind === \"degree\" ? (\n            <AcademicCapIcon className=\"h-6 w-6 flex-none text-gray-dark\" />\n          ) : (\n            <CheckBadgeIcon className=\"h-6 w-6 flex-none text-gray-dark\" />\n          )}\n          <div>\n            {proCredential.kind === \"license\" || proCredential.filestackDocumentName ? (\n              <HoverPopover\n                credentialKind={proCredential.kind}\n                popoverContent={\n                  proCredential.kind === \"license\" ? (\n                    <LicensePopover proCredential={proCredential} practitioner={practitioner} />\n                  ) : (\n                    <CredentialPopover proCredential={proCredential} />\n                  )\n                }>\n                <span className=\"cursor-pointer border-b-2 border-dashed border-gray-light\">\n                  {proCredential.credential.name}\n                </span>\n              </HoverPopover>\n            ) : (\n              <a\n                className=\"border-b-2 border-dashed border-gray-light\"\n                target=\"_blank\"\n                href={proCredential.filestackDocument}\n                rel=\"noreferrer\">\n                {proCredential.credential.name}\n              </a>\n            )}\n            {proCredential.licenseNumber && proCredential.stateIssued && (\n              <Typography variant=\"smSubtitle\">\n                State of {capitalize(proCredential.stateIssued)} #{proCredential.licenseNumber}\n              </Typography>\n            )}\n          </div>\n        </div>\n      ))}\n    </div>\n  </ScrollToSection>\n)\n\nexport default CredentialsSection\n","import React, { useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { Button } from \"../../components/shared/Buttons\"\n\nimport { scrollToId } from \"./ScrollToSection\"\n\nconst EndorsementsSection = ({ skills, showAllButton, count, className, listClasses, buttonClasses }) => {\n  const [showAllEndorsements, setShowAllEndorsements] = useState(false)\n  const numSkills = skills.length\n  const displayedSkills = showAllEndorsements ? skills : skills.slice(0, count)\n\n  const scrollToReviews = (e) => scrollToId(e, \"reviews\")\n\n  return (\n    <section className={twMerge(\"mt-4 flex flex-col gap-4\", className)}>\n      <div className={twMerge(\"flex flex-wrap gap-2\", listClasses)}>\n        {displayedSkills.map((skill) => (\n          <div key={skill.id} className=\"flex items-stretch justify-center text-sm\">\n            <div\n              className={`rounded-l-lg border border-gray-light bg-gray-light px-3 py-1 ${\n                skill.endorsementsCount === 0 ? \"rounded-lg\" : \"\"\n              }`}>\n              {skill.specialty.name}\n            </div>\n            {skill.endorsementsCount > 0 && (\n              <div className=\"flex items-center rounded-r-lg border border-gray-light px-3 py-1\">\n                {skill.endorsementsCount}\n              </div>\n            )}\n          </div>\n        ))}\n        {!showAllButton && numSkills > 4 && (\n          <button className=\"text-sm\" onClick={scrollToReviews}>\n            +{numSkills - 1} more\n          </button>\n        )}\n      </div>\n      {showAllButton && numSkills > count && (\n        <Button\n          type=\"tertiary\"\n          className={twMerge(\"w-fit sm:w-full\", buttonClasses)}\n          onClick={(e) => {\n            setShowAllEndorsements(!showAllEndorsements)\n            if (showAllEndorsements) {\n              scrollToReviews(e)\n            }\n          }}>\n          {showAllEndorsements ? \"See less\" : \"See all endorsements\"}\n        </Button>\n      )}\n    </section>\n  )\n}\n\nexport default EndorsementsSection\n","import React, { useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport { ModalBackdrop } from \"../../components/shared/Modal\"\n\nconst GalleryImagesSection = ({ images, sectionClasses }) => {\n  const [showImagesModal, setShowImagesModal] = useState(false)\n\n  const galleryImages = images\n    .filter((image) => image.filestackPhoto)\n    .map((image) => {\n      const handle = image.filestackPhoto.large?.webp || image.filestackPhoto.original?.any\n      return { id: image.id, url: `https://cdn.filestackcontent.com/${handle}` }\n    })\n\n  let firstImages = galleryImages.slice(0, 3)\n\n  const onClick = () => setShowImagesModal(true)\n\n  return (\n    <>\n      <section className={twMerge(\"mt-8\", sectionClasses)}>\n        <div\n          className={`relative flex gap-[23px] md:-mr-6 md:overflow-x-auto md:pr-6 ${\n            firstImages.length > 2 ? \"justify-between\" : \"\"\n          }`}>\n          {firstImages.map((image) => (\n            <div\n              key={image.id}\n              className=\"aspect-square max-w-[230px] flex-1 md:w-[180px] md:flex-none md:shrink-0\"\n              onClick={onClick}\n              role=\"button\">\n              <img\n                src={image.url}\n                alt={image.altText || \"Gallery image\"}\n                className=\"h-full w-full rounded-lg object-cover\"\n              />\n            </div>\n          ))}\n          {images.length > 3 && (\n            <Button type=\"tertiary\" className=\"absolute bottom-4 right-4 md:hidden\" onClick={onClick}>\n              See all photos\n            </Button>\n          )}\n        </div>\n      </section>\n      <ModalBackdrop hideModal={() => setShowImagesModal(false)} visible={showImagesModal}>\n        <div className=\"flex w-full flex-col items-center justify-center gap-4 py-16 sm:-ml-6 sm:box-content sm:px-6 sm:py-0\">\n          {galleryImages.map((image) => (\n            <div\n              key={image.id}\n              className=\"h-[600px] w-[600px] rounded-lg md:aspect-square md:h-auto md:w-full sm:rounded-none\">\n              <img\n                src={image.url}\n                alt={image.altText || \"Gallery image\"}\n                className=\"h-full w-full rounded-lg object-cover sm:rounded-none\"\n              />\n            </div>\n          ))}\n        </div>\n      </ModalBackdrop>\n    </>\n  )\n}\n\nexport default GalleryImagesSection\n","import dayjs from \"dayjs\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\nimport { useQuery } from \"urql\"\n\nconst NEXT_AVAILABLE_SLOT_QUERY = `\n  query NextAvailableSlot($serviceId: ID!) {\n    nextAvailableSlot(serviceId: $serviceId)\n  }\n`\n\nconst formatDateTime = (dateTime) => {\n  const now = dayjs()\n  const inputDate = dayjs(dateTime)\n  const daysFromNow = inputDate.startOf(\"day\").diff(now.startOf(\"day\"), \"days\")\n  let formattedTime = inputDate.format(\"h:mma\") // e.g. 8:00am\n\n  if (daysFromNow === 0) {\n    return `Today @ ${formattedTime}`\n  } else if (daysFromNow === 1) {\n    return `Tomorrow @ ${formattedTime}`\n  } else if (daysFromNow > 1 && daysFromNow <= 6) {\n    return `${inputDate.format(\"dddd\")} @ ${formattedTime}`\n  } else {\n    return inputDate.format(\"MMM D @ \") + formattedTime\n  }\n}\n\nconst NextAvailableSlot = ({ service, className }) => {\n  const [{ data, fetching, error }] = useQuery({\n    query: NEXT_AVAILABLE_SLOT_QUERY,\n    variables: { serviceId: service.id }\n  })\n\n  const nextAvailableSlot = data?.nextAvailableSlot\n\n  if (fetching || !nextAvailableSlot) return null\n  if (error) console.error(error) // eslint-disable-line no-console\n\n  return (\n    <div className={twMerge(\"flex gap-1 sm:flex-col\", className)}>\n      <div>Next available:</div>\n      <div className=\"font-bold\">{formatDateTime(nextAvailableSlot)}</div>\n    </div>\n  )\n}\n\nexport default NextAvailableSlot\n","import React from \"react\"\n\nimport Badge from \"../../components/shared/Badge\"\nimport ExpandableText from \"../../components/shared/ExpandableText\"\nimport { Box } from \"../../components/shared/Layout\"\n\nimport ReviewCardSignature from \"./ReviewCardSignature\"\n\nconst ReviewCard = ({ review, practitionerName }) => {\n  const reviewText = review.review?.trim()\n\n  return (\n    <Box keepBorderInMobile={true} className=\"flex flex-col gap-4 break-words p-6\">\n      {reviewText && <ExpandableText text={reviewText} maxLength={240} quotes={true} />}\n      <ReviewCardSignature review={review} />\n      {review.timesBooked > 1 && (\n        <Badge type=\"info\" className=\"w-fit bg-gray-light\">\n          Booked {review.timesBooked} times\n        </Badge>\n      )}\n      {review.reviewReply && (\n        <div className=\"flex gap-4\">\n          <div className=\"w-1 flex-none rounded bg-gray text-gray\">|</div>\n          <div>\n            <div className=\"text-sm font-bold\">Reply from {practitionerName}</div>\n            <div>&ldquo;{review.reviewReply.message}&rdquo;</div>\n          </div>\n        </div>\n      )}\n    </Box>\n  )\n}\n\nexport default ReviewCard\n","import React from \"react\"\n\nimport ReviewStars from \"../../components/shared/ReviewStars\"\nimport Typography from \"../../components/shared/Typography\"\n\nconst ReviewCardSignature = ({ review, children }) => {\n  const isAnonymous = review.isAnonymous\n  const name = review.client?.firstName || review.user?.firstName || review.unverifiedName\n  const lastName = review.client?.lastName || review.user?.lastName\n  const firstName = name && name.split(\" \")[0]\n  const lastInitial = lastName ? `${lastName[0]}.`.toUpperCase() : \"\"\n\n  return (\n    <div className=\"flex w-full flex-wrap items-center gap-2\">\n      <Typography variant=\"small\" as=\"div\" className=\"hidden text-gray-dark sm:block\">\n        {isAnonymous ? \"Anonymous\" : firstName} • {review.createdAtAgoInWords}\n      </Typography>\n      <Typography variant=\"small\" as=\"div\" className=\"text-gray-dark sm:hidden\">\n        {isAnonymous ? \"Anonymous\" : `${firstName} ${lastInitial}`} • {review.createdAtAgoInWords}\n      </Typography>\n      <ReviewStars rating={review.rating} />\n      {children}\n    </div>\n  )\n}\n\nexport default ReviewCardSignature\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst ScrollToSection = ({ children, className, ...props }) => (\n  <section\n    className={twMerge(\"mb-[40px] scroll-mt-24 border-b border-gray-light pb-[40px] sm:scroll-mt-16\", className)}\n    {...props}>\n    {children}\n  </section>\n)\n\nexport default ScrollToSection\n\nexport const scrollToId = (e, id) => {\n  e.preventDefault()\n  document.getElementById(id)?.scrollIntoView({ behavior: \"smooth\" })\n  window.location.hash = id\n}\n","import { AcademicCapIcon, CheckBadgeIcon } from \"@heroicons/react/24/outline\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport HoverPopover from \"../../components/shared/HoverPopover\"\nimport Typography from \"../../components/shared/Typography\"\nimport { capitalize } from \"../../utils/utils\"\nimport { CredentialPopover, LicensePopover } from \"../ProProfile/CredentialsSection\"\n\nconst CredentialsSection = ({ practice, theme, className, gridClasses, backgroundColor, enablePopover = false }) => {\n  backgroundColor ||= theme.colorBgLight\n\n  return (\n    <div className={twMerge(\"p-6\", className)} style={{ backgroundColor }}>\n      <div className={twMerge(\"grid grid-cols-1 gap-4\", gridClasses)}>\n        {practice.proCredentials.slice(0, 6).map((proCredential) => (\n          <div key={`credential-${proCredential.credential.name}`} className=\"flex items-start gap-2\">\n            {proCredential.kind === \"degree\" ? (\n              <AcademicCapIcon className=\"h-6 w-6 flex-none text-gray-dark\" />\n            ) : (\n              <CheckBadgeIcon className=\"h-6 w-6 flex-none text-gray-dark\" />\n            )}\n            <div>\n              {enablePopover ? (\n                <>\n                  {proCredential.kind === \"license\" || proCredential.filestackDocumentName ? (\n                    <HoverPopover\n                      credentialKind={proCredential.kind}\n                      popoverContent={\n                        proCredential.kind === \"license\" ? (\n                          <LicensePopover proCredential={proCredential} practitioner={practice.user} />\n                        ) : (\n                          <CredentialPopover proCredential={proCredential} />\n                        )\n                      }>\n                      <span className=\"cursor-pointer border-b-2 border-dashed border-gray-light\">\n                        {proCredential.credential.name}\n                      </span>\n                    </HoverPopover>\n                  ) : (\n                    <a\n                      className=\"border-b-2 border-dashed border-gray-light\"\n                      target=\"_blank\"\n                      href={proCredential.filestackDocument}\n                      rel=\"noreferrer\">\n                      {proCredential.credential.name}\n                    </a>\n                  )}\n                </>\n              ) : (\n                <span className=\"border-b-2 border-dashed border-gray-light\">{proCredential.credential.name}</span>\n              )}\n              {proCredential.licenseNumber && proCredential.stateIssued && (\n                <Typography variant=\"smSubtitle\">\n                  State of {capitalize(proCredential.stateIssued)} #{proCredential.licenseNumber}\n                </Typography>\n              )}\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default CredentialsSection\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { practiceCtaText, practiceDefaultServiceId } from \"../../@core/practice/practice.utils\"\nimport { stripHTMLTags } from \"../../utils/utils\"\nimport { nl2br } from \"../ProProfileThemeFive/AboutSection\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nimport CredentialsSection from \"./CredentialsSection\"\nimport SectionTitle from \"./SectionTitle\"\n\nconst truncateText = (text, textLimit) => {\n  if (!text) return \"\"\n\n  const length = text.length - stripHTMLTags(text).length\n  const adjustedTextLimit = textLimit + length\n\n  if (text.length > adjustedTextLimit) {\n    return text.slice(0, text.lastIndexOf(\".\", adjustedTextLimit)) + \".\"\n  }\n  return text\n}\n\nconst AboutMeContainer = ({\n  practice,\n  theme,\n  isVisible,\n  className,\n  highlight,\n  cardBackgroundColor,\n  viewingInBuilder,\n  credentialsGridClassName,\n  credentialsClassName,\n  credentialsBackgroundColor,\n  reverseAnimation = false\n}) => (\n  <div\n    className={twMerge(\n      \"p-10 transition-all duration-[1500ms] md:px-5 min_md:w-1/2\",\n      className,\n      isVisible\n        ? \"translate-x-0 translate-y-0 opacity-100\"\n        : `opacity-0 min_sm:translate-x-full min_sm:translate-y-full ${\n            reverseAnimation ? \"min_sm:-translate-x-full\" : \"min_sm:translate-x-full\"\n          }`\n    )}\n    style={{ backgroundColor: cardBackgroundColor }}>\n    <SectionTitle theme={theme} className=\"md:text-center\">\n      About me\n    </SectionTitle>\n    <p\n      className={twMerge(\n        \"wysiwyg-content mt-10\",\n        highlight === \"about\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\",\n        highlight === \"about\" ? \"mx-auto w-fit p-2\" : \"\"\n      )}\n      dangerouslySetInnerHTML={{\n        __html: nl2br(truncateText(practice.about, 1420))\n      }}\n    />\n    <WebAppBookNow\n      practiceId={practice.id}\n      serviceId={practiceDefaultServiceId(practice)}\n      buttonCopy={practiceCtaText(practice)}\n      buttonClasses={twMerge(\n        \"mb-10 mt-6 w-fit rounded border border-[var(--bg-color)] px-6 py-3 transition duration-150 ease-out hover:border-[var(--hover-color)] sm:w-full\",\n        viewingInBuilder ? \"pointer-events-none\" : \"\"\n      )}\n      style={{\n        color: theme.colorTextLight,\n        backgroundColor: theme.colorAccent,\n        \"--bg-color\": theme.colorAccent,\n        \"--hover-color\": theme.colorTextLight\n      }}\n    />\n    <CredentialsSection\n      practice={practice}\n      theme={theme}\n      gridClasses={credentialsGridClassName}\n      className={credentialsClassName}\n      backgroundColor={credentialsBackgroundColor}\n    />\n  </div>\n)\n\nexport default AboutMeContainer\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport useIntersectionObserver from \"../../hooks/useIntersectionObserver\"\n\nimport AboutMeContainer from \"./AboutMeContainer\"\n\nconst AboutSection = ({\n  practice,\n  theme,\n  highlight,\n  viewingInBuilder,\n  backgroundColor,\n  cardBackgroundColor,\n  credentialsBackgroundColor,\n  credentialsClassName,\n  cardClassName\n}) => {\n  backgroundColor ||= theme.colorBgLight\n  const [isVisible, containerRef] = useIntersectionObserver()\n\n  const alt = practice.websiteMetadata?.primaryModality\n    ? `${practice.user.name} practicing ${practice.websiteMetadata.primaryModality} in ${practice.city}, ${practice.stateAbbreviation}`\n    : `${practice.user.name} in ${practice.city}, ${practice.stateAbbreviation}`\n\n  return (\n    <section id=\"about\" style={{ backgroundColor, color: theme.colorTextDark }}>\n      <div\n        className=\"container mx-auto flex items-center justify-between py-10 md:flex-col md:gap-0 md:px-5\"\n        ref={containerRef}>\n        <img\n          src={practice.user.profilePhotoUrl}\n          alt={alt}\n          className={twMerge(\n            \"aspect-square w-1/2 transition-all duration-[1500ms] md:mt-8 md:w-[240px]\",\n            highlight === \"Headshot\" ? \"rounded ring-4 ring-teal\" : \"\",\n            isVisible\n              ? \"translate-x-0 translate-y-0 opacity-100\"\n              : \"opacity-0 min_sm:-translate-x-full min_sm:-translate-y-full\"\n          )}\n        />\n        <AboutMeContainer\n          practice={practice}\n          theme={theme}\n          isVisible={isVisible}\n          className={cardClassName}\n          cardBackgroundColor={cardBackgroundColor}\n          credentialsBackgroundColor={credentialsBackgroundColor}\n          credentialsClassName={credentialsClassName}\n          viewingInBuilder={viewingInBuilder}\n        />\n      </div>\n    </section>\n  )\n}\n\nexport default AboutSection\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { stripHTMLTags } from \"../../utils/utils\"\nimport { nl2br } from \"../ProProfileThemeFive/AboutSection\"\n\nconst AdditionalContent = ({ valueStatement }) => {\n  if (!valueStatement) return null\n\n  const characterCount = stripHTMLTags(valueStatement).length\n\n  return (\n    <div\n      className={twMerge(\n        \"wysiwyg-content\",\n        characterCount < 400\n          ? \"wysiwyg-content-large\"\n          : characterCount < 720\n          ? \"wysiwyg-content-medium\"\n          : \"wysiwyg-content-normal\"\n      )}\n      dangerouslySetInnerHTML={{\n        __html: nl2br(valueStatement)\n      }}\n    />\n  )\n}\n\nexport default AdditionalContent\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport useIntersectionObserver from \"../../hooks/useIntersectionObserver\"\n\nconst AnimatedSection = ({ children, className, threshold = 0.1, ...rest }) => {\n  const [isVisible, containerRef] = useIntersectionObserver(threshold)\n\n  return (\n    <div\n      ref={containerRef}\n      className={twMerge(\n        \"transition-all duration-1000\",\n        isVisible ? \"translate-y-0 opacity-100\" : \"translate-y-24 opacity-0\",\n        className\n      )}\n      {...rest}>\n      {children}\n    </div>\n  )\n}\n\nexport default AnimatedSection\n","import React, { useEffect, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst BackgroundImage = ({\n  id,\n  overlayColor,\n  className,\n  imageUrl,\n  ClipPath,\n  ClipPathTwo,\n  parallax = false,\n  maxOffset = \"420px\",\n  children\n}) => {\n  const [offsetY, setOffsetY] = useState(0)\n\n  const handleScroll = () => {\n    setOffsetY(Math.min(window.pageYOffset, maxOffset))\n  }\n\n  useEffect(() => {\n    window.addEventListener(\"scroll\", handleScroll)\n\n    return () => window.removeEventListener(\"scroll\", handleScroll)\n  }, [])\n\n  const imageStyle = {\n    backgroundImage: `url(${imageUrl.replace(/\\+/g, \"%20\").replace(/\\(/g, \"%28\").replace(/\\)/g, \"%29\")})`\n  }\n\n  if (parallax) {\n    imageStyle.backgroundAttachment = \"fixed\"\n    imageStyle.backgroundPosition = `center ${offsetY * 0.5}px`\n  }\n\n  return (\n    <div\n      id={id}\n      className={twMerge(\n        \"relative flex min-h-[700px] items-center justify-center bg-cover bg-no-repeat bg-blend-multiply\",\n        className\n      )}\n      style={imageStyle}>\n      <div className=\"container z-10 mx-auto\">{children}</div>\n      {overlayColor && <div className=\"absolute inset-0 h-full w-full\" style={{ backgroundColor: overlayColor }} />}\n      {ClipPath && <ClipPath />}\n      {ClipPathTwo && <ClipPathTwo />}\n    </div>\n  )\n}\n\nexport default BackgroundImage\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport uniq from \"lodash/uniq\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { practiceCtaText, practiceDefaultServiceId } from \"../../@core/practice/practice.utils\"\nimport { OPACITY_40 } from \"../../utils/utils\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nimport AnimatedSection from \"./AnimatedSection\"\nimport BackgroundImage from \"./BackgroundImage\"\n\nconst locationMapping = {\n  office: \"in-person\",\n  virtual: \"virtual\",\n  home: \"at-home\"\n}\n\nconst BottomCTA = ({\n  practice,\n  theme,\n  highlight,\n  className,\n  viewingInBuilder,\n  overlayColor = \"#000000\" + OPACITY_40,\n  ClipPath,\n  ClipPathTwo\n}) => {\n  const locationKinds = uniq(practice.locations.map((location) => locationMapping[location.kind]))\n  const locationsSentence =\n    locationKinds.length === 1\n      ? locationKinds[0]\n      : locationKinds.length === 2\n      ? locationKinds.join(\" and \")\n      : `${locationKinds.slice(0, -1).join(\", \")}, and ${locationKinds.slice(-1)}`\n\n  let subtitle = `I'm based in ${practice.city}, ${practice.stateAbbreviation} and offer ${locationsSentence} appointments.`\n\n  // HARDCODE TO HELP THE PRO - remove this when an edit feature of the subtitle is implemented\n  if (practice.id === 18180) {\n    subtitle = \"I Offer Virtual Appointments.\"\n  }\n\n  return (\n    <section className=\"scroll-mt-24\" id=\"bottom-cta\">\n      <BackgroundImage\n        className={twMerge(\n          \"py-24 pb-12 text-center md:px-5\",\n          className,\n          highlight === \"Footer hero image\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\"\n        )}\n        imageUrl={practice.footerHeroImageUrl}\n        overlayColor={overlayColor}\n        ClipPath={ClipPath}\n        ClipPathTwo={ClipPathTwo}>\n        <AnimatedSection>\n          <h2\n            className=\"text-[56px] leading-[72px] lg:text-4xl lg:leading-[48px]\"\n            style={{ fontFamily: theme.fontHeading, fontWeight: theme.fontHeadingWeight, color: theme.colorTextLight }}>\n            Schedule an appointment now\n          </h2>\n          <p className=\"mt-4 text-lg\" style={{ color: theme.colorTextLight }}>\n            {subtitle}\n          </p>\n          <WebAppBookNow\n            practiceId={practice.id}\n            serviceId={practiceDefaultServiceId(practice)}\n            buttonCopy={practiceCtaText(practice)}\n            buttonClasses={twMerge(\n              \"mb-20 mt-[30px] border border-[var(--bg-color)] px-10 py-3 transition duration-150 ease-out hover:border-[var(--hover-color)]\",\n              highlight === \"ctaButtonText\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\",\n              theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n              viewingInBuilder ? \"pointer-events-none\" : \"\"\n            )}\n            style={{\n              color: theme.colorTextLight,\n              backgroundColor: theme.colorAccent,\n              \"--bg-color\": theme.colorAccent,\n              \"--hover-color\": theme.colorTextLight\n            }}\n          />\n        </AnimatedSection>\n      </BackgroundImage>\n    </section>\n  )\n}\n\nexport default BottomCTA\n","import React, { useState } from \"react\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport { InputWithLabel } from \"../../components/shared/Inputs\"\nimport { urqlClient } from \"../../utils/utils\"\n\nconst PhoneValidation = ({ onSuccess }) => {\n  const [phone, setPhone] = useState(\"\")\n  const [validationError, setValidationError] = useState(null)\n\n  const sendVerification = () => {\n    if (!phone.trim()) {\n      setValidationError(\"Please enter your phone number\")\n      return\n    }\n\n    const formattedPhone = phone.replace(/\\D/g, \"\")\n    const e164Phone = formattedPhone.startsWith(\"1\") ? `+${formattedPhone}` : `+1${formattedPhone}`\n\n    urqlClient\n      .mutation(\n        `mutation($phone: String!) {\n          phoneVerification(phone: $phone) { result errors }\n        }`,\n        { phone: e164Phone }\n      )\n      .toPromise()\n      .then((result) => {\n        if (result.data?.phoneVerification?.result === \"success\") {\n          onSuccess()\n        } else {\n          setValidationError(result.data?.phoneVerification?.errors?.[0] || \"Failed to send verification code\")\n        }\n      })\n      .catch((error) => {\n        console.log(error)\n        setValidationError(\"Failed to send verification code. Please try again.\")\n      })\n  }\n\n  return (\n    <div>\n      <InputWithLabel label=\"Phone\" type=\"tel\" value={phone} onChange={(e) => setPhone(e.target.value)} />\n      {validationError && <p className=\"text-sm text-red\">{validationError}</p>}\n      <Button onClick={sendVerification} className=\"w-full\">\n        Send Verification\n      </Button>\n    </div>\n  )\n}\n\nexport default PhoneValidation\n","import React, { useState, useEffect } from \"react\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport { InputWithLabel, TextArea } from \"../../components/shared/Inputs\"\nimport Typography from \"../../components/shared/Typography\"\nimport { urqlClient } from \"../../utils/utils\"\n\nimport PhoneValidation from \"./PhoneValidation\"\n\nconst ChatWidget = ({ practice, currentUser, toast }) => {\n  const [isOpen, setIsOpen] = useState(false)\n  const [showOtpInput, setShowOtpInput] = useState(false)\n  const [firstName, setFirstName] = useState(\"\")\n  const [email, setEmail] = useState(\"\")\n  const [phone, setPhone] = useState(\"\")\n  const [code, setCode] = useState(\"\")\n  const [question, setQuestion] = useState(\"\")\n  const [hasAgreed, setHasAgreed] = useState(false)\n  const [showNotification, setShowNotification] = useState(false)\n  const [quickMessage, setQuickMessage] = useState(\"\")\n  const [showQuickChat, setShowQuickChat] = useState(true)\n  const [showFullForm, setShowFullForm] = useState(false)\n  const [validationError, setValidationError] = useState(null)\n  const [fieldErrors, setFieldErrors] = useState({\n    firstName: \"\",\n    email: \"\",\n    phone: \"\",\n    question: \"\"\n  })\n  const [showThankYou, setShowThankYou] = useState(false)\n  const [showPhoneValidation, setShowPhoneValidation] = useState(false)\n  const [countdown, setCountdown] = useState(45)\n  const [isModalOpen, setIsModalOpen] = useState(false)\n\n  const user = currentUser?.user\n  const showToast = toast?.showToast || (() => {})\n\n  useEffect(() => {\n    const handleScroll = () => {\n      const aboutSection = document.getElementById(\"about\")\n      if (aboutSection) {\n        const rect = aboutSection.getBoundingClientRect()\n        const isVisible = rect.top >= 0 && rect.top <= window.innerHeight\n\n        if (isVisible && !showNotification && !isOpen) {\n          setShowNotification(true)\n        }\n      }\n    }\n\n    window.addEventListener(\"scroll\", handleScroll)\n    return () => window.removeEventListener(\"scroll\", handleScroll)\n  }, [showNotification, isOpen])\n\n  useEffect(() => {\n    if (showOtpInput) {\n      setIsModalOpen(true)\n      setCountdown(45)\n      const timer = setInterval(() => {\n        setCountdown((prev) => {\n          if (prev <= 1) {\n            clearInterval(timer)\n            return 0\n          }\n          return prev - 1\n        })\n      }, 1000)\n      return () => clearInterval(timer)\n    }\n  }, [showOtpInput])\n\n  const resetForm = () => {\n    setFirstName(\"\")\n    setEmail(\"\")\n    setPhone(\"\")\n    setCode(\"\")\n    setQuestion(\"\")\n    setHasAgreed(false)\n    setShowOtpInput(false)\n  }\n\n  const validateForm = () => {\n    const errors = {}\n    let isValid = true\n\n    if (!firstName.trim()) {\n      errors.firstName = \"First name is required\"\n      isValid = false\n    }\n    if (!email.trim()) {\n      errors.email = \"Email is required\"\n      isValid = false\n    }\n    if (!phone.trim()) {\n      errors.phone = \"Phone number is required\"\n      isValid = false\n    }\n    if (!question.trim()) {\n      errors.question = \"Message is required\"\n      isValid = false\n    }\n    if (!hasAgreed) {\n      errors.agreement = \"Please confirm you are a client or prospective client\"\n      isValid = false\n    }\n\n    setFieldErrors(errors)\n    return isValid\n  }\n\n  const handleSubmit = async () => {\n    if (!validateForm()) {\n      return\n    }\n\n    if (user) {\n      await submitMessage()\n    } else if (showOtpInput) {\n      verifyCode()\n    } else {\n      sendVerification()\n    }\n  }\n\n  const sendVerification = () => {\n    if (!phone.trim()) {\n      setValidationError(\"Please enter your phone number\")\n      return\n    }\n\n    const formattedPhone = phone.replace(/\\D/g, \"\")\n    const e164Phone = formattedPhone.startsWith(\"1\") ? `+${formattedPhone}` : `+1${formattedPhone}`\n\n    urqlClient\n      .mutation(\n        `mutation($phone: String!) {\n          phoneVerification(phone: $phone) { result errors }\n        }`,\n        { phone: e164Phone }\n      )\n      .toPromise()\n      .then((result) => {\n        if (result.data?.phoneVerification?.result === \"success\") {\n          setShowOtpInput(true)\n          setValidationError(null)\n        } else {\n          setValidationError(result.data?.phoneVerification?.errors?.[0] || \"Failed to send verification code\")\n        }\n      })\n      .catch((error) => {\n        console.log(error) // eslint-disable-line no-console\n        setValidationError(\"Failed to send verification code. Please try again.\")\n      })\n  }\n\n  const verifyCode = () => {\n    if (!code.trim()) {\n      setValidationError(\"Please enter the verification code\")\n      return\n    }\n\n    const formattedPhone = phone.replace(/\\D/g, \"\")\n    const e164Phone = formattedPhone.startsWith(\"1\") ? `+${formattedPhone}` : `+1${formattedPhone}`\n\n    urqlClient\n      .mutation(\n        `mutation($phone: String!, $code: String!, $device: String!, $firstName: String, $email: String) {\n          phoneLogin(phone: $phone, code: $code, device: $device, firstName: $firstName, email: $email) {\n            result\n            token\n            errors\n          }\n        }`,\n        {\n          phone: e164Phone,\n          code: code.trim(),\n          device: \"web\",\n          firstName: firstName.trim(),\n          email: email.trim()\n        }\n      )\n      .toPromise()\n      .then((result) => {\n        if (result.data?.phoneLogin?.result === \"success\") {\n          submitMessage()\n          setValidationError(null)\n        } else {\n          setValidationError(result.data?.phoneLogin?.errors?.[0] || \"Verification failed\")\n        }\n      })\n      .catch((error) => {\n        console.log(error) // eslint-disable-line no-console\n        setValidationError(\"Verification failed. Please try again.\")\n      })\n  }\n\n  const submitMessage = async () => {\n    if (!question.trim()) {\n      setValidationError(\"Please enter a message\")\n      return\n    }\n\n    const practitionerId = practice.user.id\n    const messageArgs = {\n      practitionerId,\n      message: question,\n      senderName: firstName.trim(),\n      senderEmail: email.trim(),\n      senderPhone: phone.trim()\n    }\n\n    const result = await urqlClient\n      .mutation(\n        `mutation($practitionerId: ID!, $message: String!, $senderName: String!, $senderEmail: String!, $senderPhone: String!) {\n          sendMessage(practitionerId: $practitionerId, message: $message, senderName: $senderName, senderEmail: $senderEmail, senderPhone: $senderPhone) {\n            result\n            errors\n          }\n        }`,\n        messageArgs\n      )\n      .toPromise()\n\n    if (result.data?.sendMessage?.result === \"success\") {\n      setShowThankYou(true)\n      showToast(\"Your message has been sent! 🎉\")\n      setTimeout(() => {\n        setIsOpen(false)\n        resetForm()\n        setShowThankYou(false)\n      }, 3000)\n    } else {\n      setValidationError(result.data?.sendMessage?.errors?.toString())\n    }\n  }\n\n  const handleNotificationClick = () => {\n    setIsOpen(true)\n    setShowNotification(false)\n    setShowQuickChat(true)\n    setShowFullForm(false)\n  }\n\n  const handleQuickMessageSubmit = () => {\n    if (!quickMessage.trim()) return\n    setQuestion(quickMessage)\n    setShowQuickChat(false)\n    setShowFullForm(true)\n  }\n\n  const handlePhoneValidationSuccess = () => {\n    setShowPhoneValidation(false)\n    setShowOtpInput(true)\n  }\n\n  const handleNextStep = () => {\n    handleSubmit()\n  }\n\n  const handleResendCode = () => {\n    sendVerification()\n    setCountdown(45)\n  }\n\n  const handleCloseModal = () => {\n    setShowOtpInput(false)\n    setIsModalOpen(false)\n  }\n\n  useEffect(() => {\n    const handleKeyPress = (event) => {\n      if (event.shiftKey && event.key === \"Enter\") {\n        event.preventDefault()\n        handleNextStep()\n      }\n    }\n\n    window.addEventListener(\"keydown\", handleKeyPress)\n    return () => {\n      window.removeEventListener(\"keydown\", handleKeyPress)\n    }\n  }, [])\n\n  if (!practice) return null\n\n  return (\n    <>\n      {showPhoneValidation ? (\n        <PhoneValidation onSuccess={handlePhoneValidationSuccess} />\n      ) : (\n        <>\n          {showNotification && !isOpen && (\n            <div\n              className=\"fixed bottom-24 right-6 z-[9999] flex cursor-pointer items-center gap-3 rounded-lg bg-white p-4 shadow-lg transition-opacity duration-200\"\n              style={{ maxWidth: \"min(300px, calc(100vw-48px))\", transform: \"translateX(0)\" }}\n              onClick={handleNotificationClick}>\n              <div className=\"relative\">\n                <div className=\"h-12 w-12 overflow-hidden rounded-full\">\n                  <img\n                    src={practice.user?.profilePhotoUrl}\n                    alt={practice.user?.firstName}\n                    className=\"h-full w-full object-cover\"\n                  />\n                </div>\n                <div className=\"absolute -right-1 -top-1 h-4 w-4 rounded-full border-2 border-white bg-teal\"></div>\n              </div>\n              <div className=\"grow\">\n                <Typography>Let me know if you have any questions!</Typography>\n              </div>\n              <button\n                onClick={(e) => {\n                  e.stopPropagation()\n                  setShowNotification(false)\n                }}\n                className=\"absolute right-2 top-2 text-gray-dark hover:text-gray-dark\">\n                ✕\n              </button>\n            </div>\n          )}\n\n          {isOpen && (\n            <div className=\"fixed inset-0 z-[9999] flex items-end justify-end pb-24 pr-6 sm:items-center sm:justify-center sm:p-0\">\n              <div className=\"fixed inset-0 bg-black/20\" onClick={() => setIsOpen(false)} />\n              <div className=\"relative w-[400px] max-w-[calc(100vw-48px)] overflow-hidden rounded-lg bg-white shadow-xl sm:rounded-lg\">\n                <div className=\"flex h-14 items-center justify-between bg-teal px-4\">\n                  <div className=\"flex items-center gap-2\">\n                    <div className=\"relative\">\n                      <div className=\"h-8 w-8 overflow-hidden rounded-full border-2 border-white\">\n                        <img\n                          src={practice.user?.profilePhotoUrl}\n                          alt={practice.user?.firstName}\n                          className=\"h-full w-full object-cover\"\n                        />\n                      </div>\n                      <div className=\"absolute -right-0.5 -top-0.5 h-3 w-3 rounded-full border-2 border-white bg-green\"></div>\n                    </div>\n                    <div className=\"flex flex-col\">\n                      <span className=\"text-sm font-semibold text-white\">{practice.user?.firstName}</span>\n                      <span className=\"text-xs text-white\">Online</span>\n                    </div>\n                  </div>\n                  <button\n                    className=\"h-8 w-8 rounded-md text-white hover:bg-teal-dark/20\"\n                    onClick={() => setIsOpen(false)}>\n                    ✕\n                  </button>\n                </div>\n\n                {showThankYou ? (\n                  <div className=\"flex flex-col items-center justify-center space-y-4 p-8\">\n                    <div className=\"text-2xl\">Thank You! 🎉</div>\n                    <p className=\"text-center text-gray-dark\">\n                      Your message has been sent to {practice.user?.firstName}.\n                      {\" You will get an email when a response is received.\"}\n                    </p>\n                  </div>\n                ) : (\n                  <div className=\"flex flex-col space-y-4 p-4\">\n                    <div className=\"flex items-start gap-2\">\n                      <div className=\"h-8 w-8 overflow-hidden rounded-full\">\n                        <img\n                          src={practice.user?.profilePhotoUrl}\n                          alt={practice.user?.firstName}\n                          className=\"h-full w-full object-cover\"\n                        />\n                      </div>\n                      <div className=\"flex flex-col gap-2\">\n                        <div className=\"rounded-lg rounded-tl-none bg-gray-ultralight px-3 py-2 text-sm\">\n                          Let me know if you have any questions!\n                        </div>\n                      </div>\n                    </div>\n\n                    {showQuickChat && !showFullForm && (\n                      <div className=\"flex items-center gap-2\">\n                        <div className=\"relative flex-1\">\n                          <TextArea\n                            value={quickMessage}\n                            onChange={(e) => setQuickMessage(e.target.value)}\n                            placeholder=\"Write a message...\"\n                            className=\"min-h-10 resize-none rounded-lg border bg-white px-3 py-2 text-sm ring-offset-white placeholder:text-gray-dark focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n                            rows={1}\n                          />\n                        </div>\n                        <button\n                          onClick={handleQuickMessageSubmit}\n                          className=\"inline-flex h-12 w-12 items-center justify-center whitespace-nowrap rounded-full bg-teal text-sm font-medium text-white ring-offset-white transition-colors hover:bg-teal-dark focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\"\n                          disabled={!quickMessage.trim()}>\n                          <svg\n                            xmlns=\"http://www.w3.org/2000/svg\"\n                            viewBox=\"0 0 24 24\"\n                            fill=\"currentColor\"\n                            className=\"h-5 w-5\">\n                            <path d=\"M3.478 2.404a.75.75 0 00-.926.941l2.432 7.905H13.5a.75.75 0 010 1.5H4.984l-2.432 7.905a.75.75 0 00.926.94 60.519 60.519 0 0018.445-8.986.75.75 0 000-1.218A60.517 60.517 0 003.478 2.404z\" />\n                          </svg>\n                        </button>\n                      </div>\n                    )}\n\n                    {showFullForm && (\n                      <div className=\"flex flex-col space-y-4\">\n                        {!currentUser && (\n                          <>\n                            <InputWithLabel\n                              label=\"First Name\"\n                              value={firstName}\n                              onChange={(e) => setFirstName(e.target.value)}\n                              error={fieldErrors.firstName}\n                              validationError={fieldErrors.firstName}\n                            />\n                            <InputWithLabel\n                              label=\"Email\"\n                              type=\"email\"\n                              value={email}\n                              onChange={(e) => setEmail(e.target.value)}\n                              error={fieldErrors.email}\n                              validationError={fieldErrors.email}\n                            />\n                            <InputWithLabel\n                              label=\"Phone\"\n                              type=\"tel\"\n                              value={phone}\n                              onChange={(e) => setPhone(e.target.value)}\n                              error={fieldErrors.phone}\n                              validationError={fieldErrors.phone}\n                            />\n                            <TextArea\n                              label=\"Message\"\n                              value={question}\n                              onChange={(e) => setQuestion(e.target.value)}\n                              error={fieldErrors.question}\n                              validationError={fieldErrors.question}\n                              rows={4}\n                            />\n                            {showOtpInput && isModalOpen && (\n                              <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\">\n                                <div className=\"rounded-lg bg-white p-6 text-center shadow-lg\">\n                                  <p className=\"mb-4\">Enter the verification code we sent to your phone:</p>\n                                  <InputWithLabel\n                                    label=\"Verification Code\"\n                                    value={code}\n                                    onChange={(e) => setCode(e.target.value)}\n                                    maxLength={6}\n                                    validationError={validationError}\n                                  />\n                                  <p className=\"mt-2 text-sm text-gray-dark\">\n                                    {countdown > 0 ? (\n                                      `Resend code in ${countdown} seconds`\n                                    ) : (\n                                      <span className=\"cursor-pointer text-teal\" onClick={handleResendCode}>\n                                        Resend Code\n                                      </span>\n                                    )}\n                                  </p>\n                                  <div className=\"mt-4 flex items-center justify-center gap-4\">\n                                    <Button onClick={handleNextStep}>Verify Code</Button>\n                                    <button onClick={handleCloseModal} className=\"text-xs text-gray-dark\">\n                                      Cancel\n                                    </button>\n                                  </div>\n                                </div>\n                              </div>\n                            )}\n                          </>\n                        )}\n                        <div className=\"flex items-start gap-2\">\n                          <input\n                            type=\"checkbox\"\n                            id=\"agreement\"\n                            checked={hasAgreed}\n                            onChange={(e) => setHasAgreed(e.target.checked)}\n                            className=\"mt-1\"\n                          />\n                          <label htmlFor=\"agreement\" className=\"text-sm text-gray-dark\">\n                            I confirm I am a client or prospective client of {practice.user?.firstName}\n                          </label>\n                        </div>\n                        {fieldErrors.agreement && <p className=\"text-sm text-red\">{fieldErrors.agreement}</p>}\n                        {validationError && <p className=\"text-sm text-red\">{validationError}</p>}\n                        <Button onClick={handleNextStep} className=\"w-full\">\n                          Send Message\n                        </Button>\n                      </div>\n                    )}\n                  </div>\n                )}\n              </div>\n            </div>\n          )}\n\n          <button\n            onClick={() => {\n              setIsOpen(!isOpen)\n              setShowNotification(false)\n              setShowQuickChat(true)\n              setShowFullForm(false)\n            }}\n            className=\"fixed bottom-6 right-6 z-[9999] flex h-16 w-16 items-center justify-center rounded-full bg-teal text-white shadow-lg hover:bg-teal-dark\"\n            style={{ transform: \"translateX(0)\" }}>\n            <svg className=\"h-8 w-8\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n              <path\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                strokeWidth={2}\n                d=\"M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z\"\n              />\n            </svg>\n          </button>\n        </>\n      )}\n    </>\n  )\n}\n\nexport default ChatWidget\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst EndorsementsSection = ({ practice, theme, backgroundColor, color, className, titleClassName }) => {\n  backgroundColor ||= theme.colorBgLight\n  color ||= theme.colorTextDark\n\n  const skills = practice.skills\n    .map((skill) => ({\n      name: skill.specialty?.name,\n      position: skill.position\n    }))\n    .sort((a, b) => a.position - b.position)\n\n  if (skills.length === 0) return null\n\n  return (\n    <section\n      id=\"endorsements\"\n      className={twMerge(\"mt-[-1px] pb-24 pt-20 md:px-5 md:pb-16\", className)}\n      style={{ backgroundColor, color, fontFamily: theme.fontHeading }}>\n      <div className=\"container mx-auto\">\n        <div className={twMerge(\"mb-10 text-center text-2xl font-bold\", titleClassName)}>I help with</div>\n        <div className=\"grid grid-cols-2 gap-4 min_md:mx-48 min_md:grid-cols-3\">\n          {skills.map((skill, index) => (\n            <div key={index}>{skill.name}</div>\n          ))}\n        </div>\n      </div>\n    </section>\n  )\n}\n\nexport default EndorsementsSection\n","import React from \"react\"\n\nconst FacebookIcon = ({ height = 32, width = 24, color = \"#55778A\" }) => (\n  <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z\"\n      fill={color}\n    />\n  </svg>\n)\n\nexport default FacebookIcon\n","import React from \"react\"\n\nconst InstagramIcon = ({ height = 32, width = 32, color = \"#55778A\" }) => (\n  <svg width={width} height={height} viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M15.9984 8.13079C18.5616 8.13079 18.8656 8.14039 19.8784 8.18679C22.48 8.30519 23.6952 9.53959 23.8136 12.122C23.86 13.134 23.8688 13.438 23.8688 16.0012C23.8688 18.5652 23.8592 18.8684 23.8136 19.8804C23.6944 22.4604 22.4824 23.6972 19.8784 23.8156C18.8656 23.862 18.5632 23.8716 15.9984 23.8716C13.4352 23.8716 13.1312 23.862 12.1192 23.8156C9.51124 23.6964 8.30244 22.4564 8.18404 19.8796C8.13764 18.8676 8.12804 18.5644 8.12804 16.0004C8.12804 13.4372 8.13844 13.134 8.18404 12.1212C8.30324 9.53959 9.51524 8.30439 12.1192 8.18599C13.132 8.14039 13.4352 8.13079 15.9984 8.13079ZM15.9984 6.40039C13.3912 6.40039 13.0648 6.41159 12.0408 6.45799C8.55444 6.61799 6.61684 8.55239 6.45684 12.042C6.40964 13.0668 6.39844 13.3932 6.39844 16.0004C6.39844 18.6076 6.40964 18.9348 6.45604 19.9588C6.61604 23.4452 8.55044 25.3828 12.04 25.5428C13.0648 25.5892 13.3912 25.6004 15.9984 25.6004C18.6056 25.6004 18.9328 25.5892 19.9568 25.5428C23.44 25.3828 25.3824 23.4484 25.54 19.9588C25.5872 18.9348 25.5984 18.6076 25.5984 16.0004C25.5984 13.3932 25.5872 13.0668 25.5408 12.0428C25.384 8.55959 23.4472 6.61879 19.9576 6.45879C18.9328 6.41159 18.6056 6.40039 15.9984 6.40039ZM15.9984 11.0708C13.276 11.0708 11.0688 13.278 11.0688 16.0004C11.0688 18.7228 13.276 20.9308 15.9984 20.9308C18.7208 20.9308 20.928 18.7236 20.928 16.0004C20.928 13.278 18.7208 11.0708 15.9984 11.0708ZM15.9984 19.2004C14.2312 19.2004 12.7984 17.7684 12.7984 16.0004C12.7984 14.2332 14.2312 12.8004 15.9984 12.8004C17.7656 12.8004 19.1984 14.2332 19.1984 16.0004C19.1984 17.7684 17.7656 19.2004 15.9984 19.2004ZM21.1232 9.72439C20.4864 9.72439 19.9704 10.2404 19.9704 10.8764C19.9704 11.5124 20.4864 12.0284 21.1232 12.0284C21.7592 12.0284 22.2744 11.5124 22.2744 10.8764C22.2744 10.2404 21.7592 9.72439 21.1232 9.72439Z\"\n      fill={color}\n    />\n  </svg>\n)\n\nexport default InstagramIcon\n","import React from \"react\"\n\nconst LinkedinIcon = ({ height = 32, width = 22, color = \"#55778A\" }) => (\n  <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\"\n      fill={color}\n    />\n  </svg>\n)\n\nexport default LinkedinIcon\n","import React from \"react\"\n\nconst TikTokIcon = ({ height = 32, width = 32, color = \"#55778A\" }) => (\n  <svg width={width} height={height} viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M19.8575 6.40039V6.41653C19.8585 6.70882 19.9441 10.9343 24.3784 11.1978C24.3784 15.1289 24.3804 11.1978 24.3804 14.4627C24.0473 14.4825 21.4616 14.2956 19.8526 12.8605L19.8476 19.2163C19.8874 22.0943 18.2853 24.9166 15.2859 25.4854C14.4456 25.6446 13.689 25.6625 12.4188 25.385C5.10158 23.1961 7.53303 12.3434 14.8802 13.5049C14.8802 17.0086 14.8822 13.5039 14.8822 17.0086C11.847 16.562 10.8317 19.087 11.6382 20.895C12.3722 22.5408 15.3943 22.8978 16.4485 20.5758C16.5678 20.1213 16.6275 19.6031 16.6275 19.0213V6.40039H19.8575Z\"\n      fill={color}\n    />\n  </svg>\n)\n\nexport default TikTokIcon\n","import React from \"react\"\n\nconst XTwitterIcon = ({ height = 32, width = 21, color = \"#55778A\" }) => (\n  <svg width={width} height={height} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path\n      d=\"M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z\"\n      fill={color}\n    />\n  </svg>\n)\n\nexport default XTwitterIcon\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { practiceDefaultServiceId } from \"../../@core/practice/practice.utils\"\nimport FacebookIcon from \"../../components/icons/FacebookIcon\"\nimport InstagramIcon from \"../../components/icons/InstagramIcon\"\nimport LinkedinIcon from \"../../components/icons/LinkedinIcon\"\nimport TikTokIcon from \"../../components/icons/TikTokIcon\"\nimport XTwitterIcon from \"../../components/icons/XTwitterIcon\"\nimport YoutubeIcon from \"../../components/icons/YoutubeIcon\"\nimport { scrollToId } from \"../ProProfile/ScrollToSection\"\n\nimport HealMeVerifiedBadge from \"./HealMeVerifiedBadge\"\n\nconst Footer = ({ practice, theme, backgroundColor, color, viewingInBuilder }) => {\n  backgroundColor ||= theme.colorPrimary\n  color ||= theme.colorTextDark\n\n  return (\n    <div className=\"py-16 md:px-5\" style={{ backgroundColor, color }}>\n      <div className=\"container mx-auto flex items-center justify-between lg:flex-col lg:gap-14\">\n        <div>\n          <div className=\"text-xl font-bold\">{practice.user.name}</div>\n          <div className=\"max-w-xl text-lg\">{practice.user.title}</div>\n        </div>\n        <div className=\"flex gap-8 lg:flex-col md:w-full\">\n          <button\n            className=\"border-b border-transparent transition duration-150 ease-out hover:border-[var(--hover-color)] active:border-b-2\"\n            style={{ \"--hover-color\": theme.colorAccent }}\n            onClick={(e) => scrollToId(e, \"about\")}>\n            About\n          </button>\n          <button\n            className=\"border-b border-transparent transition duration-150 ease-out hover:border-[var(--hover-color)] active:border-b-2\"\n            style={{ \"--hover-color\": theme.colorAccent }}\n            onClick={(e) => scrollToId(e, \"services\")}>\n            Services\n          </button>\n          <button\n            className=\"border-b border-transparent transition duration-150 ease-out hover:border-[var(--hover-color)] active:border-b-2\"\n            style={{ \"--hover-color\": theme.colorAccent }}\n            onClick={(e) => scrollToId(e, \"reviews\")}>\n            Reviews\n          </button>\n          <button\n            className=\"border-b border-transparent transition duration-150 ease-out hover:border-[var(--hover-color)] active:border-b-2\"\n            style={{ \"--hover-color\": theme.colorAccent }}\n            onClick={(e) => scrollToId(e, \"about\")}>\n            Credentials\n          </button>\n\n          <WebAppBookNow\n            practiceId={practice.id}\n            buttonCopy=\"Book Now\"\n            serviceId={practiceDefaultServiceId(practice)}\n            buttonClasses={twMerge(\n              \"border bg-transparent px-8 py-2 transition duration-150 ease-out hover:border-[var(--hover-border-color)] hover:bg-[var(--hover-bg)] hover:text-[var(--hover-color)] md:w-full\",\n              practice.theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n              viewingInBuilder ? \"pointer-events-none\" : \"\"\n            )}\n            style={{\n              borderColor: color,\n              color,\n              \"--hover-border-color\": theme.colorBgLight,\n              \"--hover-bg\": theme.colorAccent,\n              \"--hover-color\": theme.colorBgLight\n            }}\n          />\n        </div>\n      </div>\n      <div className=\"my-24 flex justify-center gap-8\">\n        {practice.instagram && (\n          <a href={practice.instagram} className=\"flex justify-center\" target=\"_blank\" rel=\"noreferrer\">\n            <InstagramIcon height={32} width={32} color={color} />\n          </a>\n        )}\n        {practice.facebook && (\n          <a href={practice.facebook} className=\"flex justify-center\" target=\"_blank\" rel=\"noreferrer\">\n            <FacebookIcon height={32} width={24} color={color} />\n          </a>\n        )}\n        {practice.tiktok && (\n          <a href={practice.tiktok} className=\"flex justify-center\" target=\"_blank\" rel=\"noreferrer\">\n            <TikTokIcon height={32} width={32} color={color} />\n          </a>\n        )}\n        {practice.linkedin && (\n          <a href={practice.linkedin} className=\"flex justify-center\" target=\"_blank\" rel=\"noreferrer\">\n            <LinkedinIcon height={32} width={22} color={color} />\n          </a>\n        )}\n        {practice.twitter && (\n          <a href={practice.twitter} className=\"flex justify-center\" target=\"_blank\" rel=\"noreferrer\">\n            <XTwitterIcon height={32} width={21} color={color} />\n          </a>\n        )}\n        {practice.youtube && (\n          <a href={practice.youtube} className=\"flex justify-center\" target=\"_blank\" rel=\"noreferrer\">\n            <YoutubeIcon height={32} width={28} color={color} />\n          </a>\n        )}\n      </div>\n      <div className=\"flex justify-center\">\n        <HealMeVerifiedBadge\n          theme={theme}\n          text=\"Powered by Heal.me\"\n          backgroundColor={backgroundColor}\n          showBadgeIcon={false}\n          color={color}\n          link=\"https://heal.me\"\n        />\n      </div>\n    </div>\n  )\n}\n\nexport default Footer\n","import React, { useEffect, useRef, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nimport AnimatedSection from \"./AnimatedSection\"\nimport SeeMore from \"./SeeMore\"\n\nconst GallerySection = ({\n  practice,\n  theme,\n  highlight,\n  style,\n  imageClassName,\n  containerClassName,\n  maxHeight = window.innerWidth < 768 ? \"336px\" : \"280px\"\n}) => {\n  style ||= { backgroundColor: theme.colorGreyLightest }\n  imageClassName ||= \"aspect-square max-w-[275.5px] md:w-[160px] md:aspect-square\"\n  const [expanded, setExpanded] = useState(false)\n  const imageContainerRef = useRef(null)\n\n  useEffect(() => {\n    if (imageContainerRef.current) {\n      imageContainerRef.current.style.maxHeight = expanded ? `${imageContainerRef.current.scrollHeight}px` : maxHeight\n    }\n  }, [expanded, practice.galleryImages])\n\n  return (\n    <section style={style} id=\"gallery-photos\" className=\"scroll-mt-24\">\n      <div className={twMerge(\"container mx-auto py-24 md:px-5 md:py-16\", highlight ? DEFAULT_HIGHLIGHT_CLASSES : \"\")}>\n        <AnimatedSection threshold={0.3} className={twMerge(\"flex flex-wrap justify-center gap-4\", containerClassName)}>\n          <div\n            ref={imageContainerRef}\n            style={{ maxHeight }}\n            className={twMerge(\n              \"flex flex-wrap justify-center gap-4 overflow-hidden transition-[max-height] duration-1000 ease-in-out\",\n              containerClassName\n            )}>\n            {practice.galleryImages.map((image) => (\n              <div key={image.id} className={imageClassName}>\n                <img\n                  src={image.defaultPhotoUrl}\n                  alt={image.altText || \"Gallery image\"}\n                  className=\"h-full w-full object-cover md:aspect-square\"\n                />\n              </div>\n            ))}\n          </div>\n        </AnimatedSection>\n        {practice.galleryImages.length > 4 && (\n          <SeeMore\n            className=\"mt-8\"\n            buttonClassName=\"hover:text-[var(--hover-color)]\"\n            buttonStyle={{ color: theme.colorTextDark, \"--hover-color\": theme.colorAccent }}\n            onClick={() => {\n              if (expanded) document.getElementById(\"gallery-photos\").scrollIntoView({ behavior: \"smooth\" })\n              setExpanded(!expanded)\n            }}\n          />\n        )}\n      </div>\n    </section>\n  )\n}\n\nexport default GallerySection\n","import { CheckBadgeIcon } from \"@heroicons/react/24/outline\"\nimport React from \"react\"\n\nconst HealMeVerifiedBadge = ({\n  theme,\n  text = \"Reviews are Heal.me verified\",\n  backgroundColor,\n  color,\n  showBadgeIcon = true,\n  link\n}) => {\n  backgroundColor ||= theme.colorGreyLightest\n  color ||= theme.colorTextDark\n\n  const badgeContent = (\n    <div\n      className=\"-ml-3 inline-flex w-fit items-center justify-center gap-2 rounded-full px-3 pl-6\"\n      style={{ backgroundColor, color }}>\n      <div className=\"text-xs font-bold uppercase leading-[18px] tracking-wide\">{text}</div>\n      {showBadgeIcon && <CheckBadgeIcon className=\"h-6 w-6\" />}\n    </div>\n  )\n\n  return (\n    <div className=\"flex h-10 flex-row-reverse items-center\">\n      {link ? (\n        <a href={link} target=\"_blank\" rel=\"noreferrer\">\n          {badgeContent}\n        </a>\n      ) : (\n        badgeContent\n      )}\n      <div className=\"z-10 inline-flex h-10 w-10 items-center justify-center\">\n        <a href=\"https://heal.me\" target=\"_blank\" rel=\"noreferrer\">\n          <img src=\"/images/icons/heal-me-logo-color.png\" alt=\"Heal.me\" className=\"h-10 w-10 rounded\" />\n        </a>\n      </div>\n    </div>\n  )\n}\n\nexport default HealMeVerifiedBadge\n","import { practiceDefaultServiceId, practiceCtaText } from \"@core/practice/practice.utils\"\nimport { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport AnimatingBackgroundImage from \"../../components/shared/AnimatingBackgroundImage\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nimport AnimatedSection from \"./AnimatedSection\"\nimport ReviewStars from \"./ReviewStars\"\n\nconst HeroSection = ({ practice, theme, highlight, ClipPath, Navigation, viewingInBuilder, showStars = false }) => {\n  const defaultServiceId = practiceDefaultServiceId(practice)\n  const ctaText = practiceCtaText(practice)\n  const url = practice.headerHeroImageUrl.replace(/\\+/g, \"%20\").replace(/\\(/g, \"%28\").replace(/\\)/g, \"%29\")\n\n  return (\n    <AnimatingBackgroundImage\n      id=\"hero-section\"\n      animationDuration={350}\n      url={url}\n      className={twMerge(\n        \"relative flex min-h-[700px] items-center justify-center text-center\",\n        highlight === \"Hero image\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\"\n      )}\n      style={{ color: theme.colorTextLight }}>\n      <AnimatedSection className=\"container z-10 mx-auto delay-[350ms] md:p-8\">\n        <h1\n          className={twMerge(\n            \"text-[56px] leading-[72px] lg:text-4xl lg:leading-[48px]\",\n            highlight === \"websiteHeadline\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\"\n          )}\n          style={{ fontFamily: theme.fontHeading, fontWeight: theme.fontHeadingWeight, color: theme.colorTextLight }}>\n          {practice.websiteHeadline}\n        </h1>\n        <p\n          className={twMerge(\n            \"mt-4 text-xl leading-8\",\n            highlight === \"subHeadline\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\",\n            highlight === \"subHeadline\" ? \"mx-auto w-fit px-8 py-2\" : \"\"\n          )}>\n          {practice.subHeadline}\n        </p>\n        <div className=\"mx-auto my-7 text-center\">\n          <WebAppBookNow\n            practiceId={practice.id}\n            serviceId={defaultServiceId}\n            buttonCopy={ctaText}\n            buttonClasses={twMerge(\n              \"border border-[var(--bg-color)] px-10 py-3 transition duration-150 ease-out hover:border-[var(--hover-color)]\",\n              highlight === \"ctaButtonText\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\",\n              theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n              viewingInBuilder ? \"pointer-events-none\" : \"\"\n            )}\n            style={{\n              color: theme.colorTextLight,\n              backgroundColor: theme.colorAccent,\n              \"--bg-color\": theme.colorAccent,\n              \"--hover-color\": theme.colorTextLight\n            }}\n          />\n        </div>\n        {showStars && (\n          <div className=\"flex items-center justify-center gap-4\">\n            <ReviewStars rating={practice.averageRating} starColor={theme.colorReviewStars} />\n            <span>{practice.reviews.length} reviews</span>\n          </div>\n        )}\n      </AnimatedSection>\n      <Navigation />\n      <div className=\"absolute inset-0 h-full w-full bg-black-real/40\" />\n      {ClipPath && <ClipPath />}\n    </AnimatingBackgroundImage>\n  )\n}\n\nexport default HeroSection\n","import { BuildingOfficeIcon, DevicePhoneMobileIcon } from \"@heroicons/react/24/outline\"\nimport { Circle, GoogleMap, InfoWindow, LoadScript, Marker } from \"@react-google-maps/api\"\nimport React, { useState } from \"react\"\n\nimport { formatPhone } from \"../../utils/utils\"\nconst travelDistanceInMeters = (distanceInMiles) => Number(distanceInMiles) * 1609.34\n\nconst MILES_PER_DEGREE = 69.17\n// The 0.9 comes from estimating the half the size of the icon we're using to hide address at map zoom level 12.\n// This will not work properly if you change the map zoom level!\nconst HIDE_LOCATION_ICON_ADJUSTMENT = 0.9 / MILES_PER_DEGREE\n\nconst Map = ({ practice, theme, ClipPath, ClipPathTwo }) => {\n  const [infoWindowLocation, setInfoWindowLocation] = useState(null)\n\n  const physicalLocations = practice.locations.filter(\n    (location) => location.kind === \"office\" || location.kind === \"home\"\n  )\n  if (physicalLocations.length === 0) return null\n\n  let mapCenter, zoom, latDelta, longDelta\n  const travelDistance = physicalLocations.find((location) => location.kind === \"home\")?.travelDistance || 0\n\n  if (physicalLocations.length === 1) {\n    const location = physicalLocations[0]\n    mapCenter = { lat: location.latitude, lng: location.longitude }\n    latDelta = location.latitude - location.latitude + travelDistance / MILES_PER_DEGREE\n    longDelta = location.longitude - location.longitude + travelDistance / MILES_PER_DEGREE\n    if (location.hideAddress && location.kind !== \"home\") {\n      // northern hemisphere\n      if (location.latitude > 0) {\n        mapCenter.lat = mapCenter.lat + HIDE_LOCATION_ICON_ADJUSTMENT\n      } else {\n        mapCenter.lat = mapCenter.lat + HIDE_LOCATION_ICON_ADJUSTMENT\n      }\n    }\n  } else {\n    const latitudes = physicalLocations.map((location) => location.latitude).filter((lat) => lat !== null)\n    const longitudes = physicalLocations.map((location) => location.longitude).filter((lng) => lng !== null)\n    const minLatitude = Math.min(...latitudes)\n    const maxLatitude = Math.max(...latitudes)\n    const minLongitude = Math.min(...longitudes)\n    const maxLongitude = Math.max(...longitudes)\n    mapCenter = {\n      lat: (minLatitude + maxLatitude) / 2,\n      lng: (minLongitude + maxLongitude) / 2\n    }\n    latDelta = maxLatitude - minLatitude + travelDistance / MILES_PER_DEGREE\n    longDelta = maxLongitude - minLongitude + travelDistance / MILES_PER_DEGREE\n  }\n\n  const latZoom = Math.floor(Math.log2(360 / latDelta))\n  const longZoom = Math.floor(Math.log2(360 / longDelta))\n\n  if (latDelta === 0 || longDelta === 0) {\n    zoom = physicalLocations.some((location) => location.hideAddress) ? 12 : 11\n  } else {\n    zoom = Math.min(latZoom, longZoom)\n    zoom = Math.max(zoom, 5)\n  }\n\n  return (\n    <div className=\"relative h-[594px] w-full\">\n      <LoadScript googleMapsApiKey=\"AIzaSyBJzO3o3qx-4b53mVm0BA23J1z_Aj7MWmE\">\n        <GoogleMap\n          mapContainerStyle={{ width: \"100%\", height: \"100%\" }}\n          center={mapCenter}\n          zoom={zoom}\n          options={{ disableDefaultUI: true }}>\n          {physicalLocations.map((location) => {\n            const markerPosition = { lat: location?.latitude, lng: location?.longitude }\n\n            return (\n              <React.Fragment key={location.id}>\n                {location.kind === \"home\" ? (\n                  <Circle\n                    center={markerPosition}\n                    radius={travelDistanceInMeters(location.travelDistance)}\n                    options={{ strokeColor: \"#0D9DA4\" }}\n                  />\n                ) : location.hideAddress ? (\n                  <Marker position={markerPosition} icon=\"/defaults/m5.png\" />\n                ) : (\n                  <Marker position={markerPosition} onClick={() => setInfoWindowLocation(location)} />\n                )}\n                {infoWindowLocation === location && (\n                  <InfoWindow position={markerPosition} onCloseClick={() => setInfoWindowLocation(null)}>\n                    <div className=\"flex flex-col gap-4 p-4 pt-0 text-[12px] text-gray-dark\">\n                      <div className=\"flex items-center gap-2\">\n                        <BuildingOfficeIcon className=\"h-4 w-4\" />\n                        <span>{location.address}</span>\n                      </div>\n                      {practice.user.phone && (\n                        <div className=\"flex items-center gap-2\">\n                          <DevicePhoneMobileIcon className=\"h-4 w-4\" />\n                          <span>{formatPhone(practice.user.phone)}</span>\n                        </div>\n                      )}\n                      <a\n                        className=\"w-fit rounded border border-[var(--bg-color)] px-6 py-2 text-center\"\n                        style={{\n                          color: theme.colorTextLight,\n                          backgroundColor: theme.colorAccent,\n                          \"--bg-color\": theme.colorAccent\n                        }}\n                        href={`https://maps.google.com/maps?daddr=${location.latitude},${location.longitude}`}\n                        target=\"_blank\"\n                        rel=\"noopener noreferrer\">\n                        Get directions\n                      </a>\n                    </div>\n                  </InfoWindow>\n                )}\n              </React.Fragment>\n            )\n          })}\n        </GoogleMap>\n      </LoadScript>\n      {ClipPath && <ClipPath />}\n      {ClipPathTwo && <ClipPathTwo />}\n    </div>\n  )\n}\n\nexport default Map\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport { Bars3Icon, XMarkIcon } from \"@heroicons/react/24/solid\"\nimport React, { useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { practiceDefaultServiceId } from \"../../@core/practice/practice.utils\"\nimport { scrollToId } from \"../ProProfile/ScrollToSection\"\n\nimport AnimatedSection from \"./AnimatedSection\"\n\nconst Navigation = ({ practice, theme, className, color, viewingInBuilder, ClipPath, ClipPathTwo }) => {\n  const [isMenuOpen, setIsMenuOpen] = useState(false)\n  color ||= theme.colorTextLight\n\n  const toggleMenu = () => {\n    setIsMenuOpen(!isMenuOpen)\n  }\n\n  return (\n    <AnimatedSection\n      style={{ color }}\n      className={twMerge(\n        \"absolute top-0 z-10 flex w-full items-center justify-between px-12 py-6 delay-[250ms] md:p-4\",\n        className\n      )}>\n      <div className=\"text-left\">\n        <div\n          className=\"text-[27px] md:text-lg\"\n          style={{ fontFamily: theme.fontHeading, fontWeight: theme.fontHeadingWeight }}>\n          {practice.user.name}\n        </div>\n        {/* <div className=\"text-sm\">{practice.user.title}</div> */}\n      </div>\n      <div className=\"flex gap-8 md:hidden\">\n        <button\n          className=\"border-b border-transparent transition duration-150 ease-out hover:border-[var(--hover-color)] active:border-b-2\"\n          style={{ \"--hover-color\": theme.colorAccent }}\n          onClick={(e) => scrollToId(e, \"about\")}>\n          About\n        </button>\n        <button\n          className=\"border-b border-transparent transition duration-150 ease-out hover:border-[var(--hover-color)] active:border-b-2\"\n          style={{ \"--hover-color\": theme.colorAccent }}\n          onClick={(e) => scrollToId(e, \"services\")}>\n          Services\n        </button>\n        <button\n          className=\"border-b border-transparent transition duration-150 ease-out hover:border-[var(--hover-color)] active:border-b-2\"\n          style={{ \"--hover-color\": theme.colorAccent }}\n          onClick={(e) => scrollToId(e, \"reviews\")}>\n          Reviews\n        </button>\n        <button\n          className=\"border-b border-transparent transition duration-150 ease-out hover:border-[var(--hover-color)] active:border-b-2\"\n          style={{ \"--hover-color\": theme.colorAccent }}\n          onClick={(e) => scrollToId(e, \"about\")}>\n          Credentials\n        </button>\n        <WebAppBookNow\n          practiceId={practice.id}\n          serviceId={practiceDefaultServiceId(practice)}\n          buttonCopy=\"Book Now\"\n          buttonClasses={twMerge(\n            \"border bg-transparent px-8 py-2 transition duration-150 ease-out hover:border-[var(--hover-color)] hover:bg-[var(--hover-color)]\",\n            theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n            viewingInBuilder ? \"pointer-events-none\" : \"\"\n          )}\n          style={{ \"--hover-color\": theme.colorAccent, borderColor: color }}\n        />\n      </div>\n      {/* Mobile Navigation */}\n      <div className=\"hidden md:block\">\n        <button onClick={toggleMenu}>\n          <Bars3Icon className=\"h-6 w-6\" />\n        </button>\n        <div\n          style={{ backgroundColor: theme.colorBgLight, color: theme.colorTextDark }}\n          className={`fixed right-0 top-0 z-50 flex h-screen w-full flex-col items-center justify-center gap-8 overflow-hidden transition-transform duration-300 ease-in-out md:px-5 ${\n            isMenuOpen ? \"translate-x-0\" : \"translate-x-full\"\n          }`}>\n          <div className=\"absolute right-4 top-4 z-10\">\n            <XMarkIcon className=\"h-6 w-6 cursor-pointer\" onClick={toggleMenu} />\n          </div>\n          <div>\n            <div className=\"text-lg font-semibold\">{practice.user.name}</div>\n            <div className=\"mt-2 text-sm\" style={{ color: theme.colorGrey }}>\n              {practice.user.title}\n            </div>\n          </div>\n          <div className=\"flex flex-col items-center justify-center gap-4\">\n            <button\n              onClick={(e) => {\n                scrollToId(e, \"about\")\n                toggleMenu()\n              }}>\n              About\n            </button>\n            <button\n              onClick={(e) => {\n                scrollToId(e, \"services\")\n                toggleMenu()\n              }}>\n              Services\n            </button>\n            <button\n              onClick={(e) => {\n                scrollToId(e, \"reviews\")\n                toggleMenu()\n              }}>\n              Reviews\n            </button>\n            <button\n              onClick={(e) => {\n                scrollToId(e, \"about\")\n                toggleMenu()\n              }}>\n              Credentials\n            </button>\n          </div>\n          <div className=\"w-full\">\n            <WebAppBookNow\n              practiceId={practice.id}\n              serviceId={practice.defaultServiceId}\n              buttonCopy=\"Book Now\"\n              buttonClasses={twMerge(\n                \"w-full border px-8 py-2\",\n                theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n                viewingInBuilder ? \"pointer-events-none\" : \"\"\n              )}\n              style={{\n                color: theme.colorTextLight,\n                backgroundColor: theme.colorAccent\n              }}\n            />\n          </div>\n          {ClipPath && <ClipPath />}\n          {ClipPathTwo && <ClipPathTwo />}\n        </div>\n      </div>\n    </AnimatedSection>\n  )\n}\n\nexport default Navigation\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nimport AnimatedSection from \"./AnimatedSection\"\n\nconst Quote = ({ id, theme, text, highlight, className, author, backgroundColor, color }) => {\n  backgroundColor ||= theme.colorGreyLightest\n  color ||= theme.colorTextDark\n\n  return (\n    <section\n      id={id}\n      className={twMerge(\"scroll-mt-24 py-24 md:px-5\", className)}\n      style={{ backgroundColor, fontFamily: theme.fontHeading, fontWeight: theme.fontHeadingWeight, color }}>\n      <AnimatedSection\n        className={twMerge(\n          \"container mx-auto text-center text-[28px] leading-10\",\n          highlight ? DEFAULT_HIGHLIGHT_CLASSES : \"\"\n        )}>\n        {text && `“${text}”`}\n        {author && <div className=\"mt-4 text-base font-semibold\">- {author}</div>}\n      </AnimatedSection>\n    </section>\n  )\n}\n\nexport default Quote\n","import dayjs from \"dayjs\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport Badge from \"../../components/shared/Badge\"\nimport ExpandableText from \"../../components/shared/ExpandableText\"\nimport Typography from \"../../components/shared/Typography\"\n\nimport ReviewStars from \"./ReviewStars\"\n\nconst Review = ({\n  review,\n  practice,\n  starColor,\n  className,\n  showEndorsements = false,\n  showReplies = false,\n  onExpand,\n  onCollapse\n}) => {\n  const reviewText = review.review?.trim()\n  const isAnonymous = review.isAnonymous\n  const name = review.client?.firstName || review.user?.firstName || review.unverifiedName\n  const lastName = review.client?.lastName || review.user?.lastName\n  const firstName = name && name.split(\" \")[0]\n  const lastInitial = lastName ? `${lastName[0]}.`.toUpperCase() : \"\"\n  const practitionerName = practice.user.name\n  const rating = Math.round(review.rating)\n\n  return (\n    <div className={twMerge(\"flex flex-col gap-4 break-words p-0\", className)}>\n      {reviewText && (\n        <ExpandableText\n          text={reviewText}\n          maxLength={200}\n          quotes={true}\n          className=\"leading-7\"\n          onExpand={onExpand}\n          onCollapse={onCollapse}\n        />\n      )}\n      {showEndorsements && review.endorsedSkills.length > 0 && (\n        <div className=\"flex gap-2\">\n          {review.endorsedSkills.slice(0, 3).map((skill, index) => (\n            <React.Fragment key={`${review.id}-${skill}`}>\n              <div key={skill} className=\"font-bold\">\n                {skill}\n              </div>\n              {index < Math.min(review.endorsedSkills.length - 1, 2) && <div>|</div>}\n            </React.Fragment>\n          ))}\n        </div>\n      )}\n      <div>\n        <Typography variant=\"small\" as=\"div\" className=\"mb-2\">\n          {isAnonymous ? \"Anonymous\" : `${firstName} ${lastInitial}`} • {dayjs(review.createdAt).format(\"MMMM D, YYYY\")}\n        </Typography>\n        <ReviewStars rating={rating} starColor={starColor} />\n      </div>\n      {review.timesBooked > 1 && (\n        <Badge type=\"info\" className=\"w-fit border bg-transparent\">\n          Booked {review.timesBooked} times\n        </Badge>\n      )}\n      {showReplies && review.reviewReply && (\n        <div className=\"flex gap-4\">\n          <div className=\"w-1 flex-none rounded bg-gray\"></div>\n          <div>\n            <div className=\"text-sm font-bold\">Reply from {practitionerName}</div>\n            <div>&ldquo;{review.reviewReply.message}&rdquo;</div>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport default Review\n","import { StarIcon } from \"@heroicons/react/24/solid\"\nimport React from \"react\"\n\nconst ReviewStars = ({ rating, starColor }) => {\n  rating = Math.round(rating)\n\n  return (\n    <div className=\"flex gap-0.5\">\n      {[...Array(rating)].map((item, index) => (\n        <StarIcon key={index} className=\"h-5 w-5\" style={{ color: starColor }} />\n      ))}\n      {rating < 5 && (\n        <>\n          {[...Array(5 - rating)].map((item, index) => (\n            <StarIcon key={index} className=\"h-5 w-5 text-gray\" />\n          ))}\n        </>\n      )}\n    </div>\n  )\n}\n\nexport default ReviewStars\n","import React, { useEffect, useRef, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport AnimatedSection from \"./AnimatedSection\"\nimport HealMeVerifiedBadge from \"./HealMeVerifiedBadge\"\nimport Review from \"./Review\"\nimport ReviewStars from \"./ReviewStars\"\nimport SectionTitle from \"./SectionTitle\"\nimport SeeMore from \"./SeeMore\"\n\nconst ReviewsSectionVariationOne = ({ practice, theme, className, backgroundColor, color, starsClassName }) => {\n  backgroundColor ||= theme.colorBgLight\n  color ||= theme.colorTextDark\n\n  const isMobile = window.innerWidth < 768\n  const defaultReviewsShown = isMobile ? 4 : 10\n  const reviews = practice.reviews.filter((review) => review.review)\n  const [expanded, setExpanded] = useState(false)\n  const [expandedReviewSwitch, setExpandedReviewSwitch] = useState(false)\n\n  const reviewsContainerRef = useRef(null)\n\n  const reviewsImage = practice.imageAssets.find((asset) => asset.description === \"reviews_section\")\n\n  useEffect(() => {\n    if (reviewsContainerRef.current) {\n      reviewsContainerRef.current.style.maxHeight = expanded ? `${reviewsContainerRef.current.scrollHeight}px` : \"0px\"\n    }\n  }, [expanded, reviews, expandedReviewSwitch])\n\n  // Trick to update the maxHeight of the reviews container when a review is expanded/collapsed\n  const onExpand = () => {\n    setExpandedReviewSwitch((prev) => !prev)\n  }\n\n  return (\n    <section id=\"reviews\" className={twMerge(\"pt-24 md:px-5 md:pt-16\", className)} style={{ backgroundColor, color }}>\n      <AnimatedSection className=\"container mx-auto\">\n        <div className=\"hidden md:block\">\n          <img src={reviewsImage.resizedImageUrl} alt={reviewsImage.altText} className=\"w-full object-cover\" />\n        </div>\n        <SectionTitle className=\"mb-4 md:mb-0 md:mt-8 md:text-center\" theme={theme}>\n          My Reviews\n        </SectionTitle>\n        <div className={twMerge(\"flex items-center justify-center gap-4\", starsClassName)}>\n          <ReviewStars rating={practice.averageRating} starColor={theme.colorReviewStars} />\n          <span>{practice.reviews.length} reviews</span>\n        </div>\n        <div className=\"my-8 hidden justify-center md:flex\">\n          <HealMeVerifiedBadge theme={theme} backgroundColor={backgroundColor} color={color} />\n        </div>\n        <div className=\"flex gap-16 md:w-full\" style={{ color }}>\n          <div className=\"flex w-1/2 flex-col gap-10 md:w-full md:gap-8\">\n            <div className=\"mt-10 flex justify-start md:hidden\">\n              <HealMeVerifiedBadge theme={theme} backgroundColor={backgroundColor} color={color} />\n            </div>\n            {reviews.slice(0, 3).map((review) => (\n              <Review\n                key={`review-${review.id}`}\n                review={review}\n                practice={practice}\n                starColor={theme.colorReviewStars}\n                onExpand={onExpand}\n                onCollapse={onExpand}\n              />\n            ))}\n          </div>\n          <div className=\"w-1/2 md:hidden\">\n            <img src={reviewsImage.resizedImageUrl} alt={reviewsImage.altText} className=\"w-full object-cover\" />\n          </div>\n        </div>\n        <div className=\"mt-16 grid grid-cols-2 gap-16 md:mt-8 md:grid-cols-1 md:gap-8\">\n          {reviews.slice(3, defaultReviewsShown).map((review) => (\n            <Review\n              key={`review-${review.id}`}\n              review={review}\n              practice={practice}\n              starColor={theme.colorReviewStars}\n              onExpand={onExpand}\n              onCollapse={onExpand}\n            />\n          ))}\n        </div>\n        {expanded && <div className=\"h-10 md:h-8\" />}\n        <div\n          ref={reviewsContainerRef}\n          className=\"grid grid-cols-2 gap-16 overflow-hidden transition-all duration-1000 lg:grid-cols-1 md:gap-8\"\n          style={{ maxHeight: 0 }}>\n          {reviews.slice(defaultReviewsShown).map((review) => (\n            <Review\n              key={`review-${review.id}`}\n              review={review}\n              practice={practice}\n              starColor={theme.colorReviewStars}\n              onExpand={onExpand}\n              onCollapse={onExpand}\n            />\n          ))}\n        </div>\n        {reviews.length > defaultReviewsShown && (\n          <SeeMore\n            className=\"pt-10 text-opacity-50\"\n            buttonClassName=\"hover:text-[var(--hover-color)]\"\n            buttonStyle={{ color, \"--hover-color\": theme.colorAccent }}\n            buttonText=\"See more reviews\"\n            onClick={() => {\n              if (expanded) document.getElementById(\"reviews\").scrollIntoView({ behavior: \"smooth\" })\n              setExpanded(!expanded)\n            }}\n          />\n        )}\n      </AnimatedSection>\n    </section>\n  )\n}\n\nexport default ReviewsSectionVariationOne\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst SectionTitle = ({ className, theme, color, children }) => {\n  const fontFamily = theme.fontHeading\n  const fontWeight = theme.fontHeadingWeight\n\n  return (\n    <h2\n      className={twMerge(\"text-[40px] leading-[48px] lg:text-[27px] lg:leading-loose\", className)}\n      style={{ color, fontFamily, fontWeight }}>\n      {children}\n    </h2>\n  )\n}\n\nexport default SectionTitle\n","import { ChevronDownIcon, ChevronUpIcon } from \"@heroicons/react/24/outline\"\nimport React, { useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst SeeMore = ({ onClick, className, style, buttonClassName, buttonStyle, buttonText = \"See more\" }) => {\n  const [expanded, setExpanded] = useState(false)\n\n  return (\n    <div className={twMerge(\"mx-auto text-center\", className)} style={style}>\n      <button\n        className={twMerge(\"transition duration-150 ease-out\", buttonClassName)}\n        style={buttonStyle}\n        onClick={() => {\n          setExpanded(!expanded)\n          onClick()\n        }}>\n        {expanded ? \"See less\" : buttonText}\n        <br />\n        {expanded ? <ChevronUpIcon className=\"mx-auto h-6 w-6\" /> : <ChevronDownIcon className=\"mx-auto h-6 w-6\" />}\n      </button>\n    </div>\n  )\n}\n\nexport default SeeMore\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst CardTitle = ({ className, style, children }) => (\n  <h3 className={twMerge(\"truncate text-[27px] font-bold leading-loose lg:text-[22px]\", className)} style={style}>\n    {children}\n  </h3>\n)\n\nexport default CardTitle\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { formatPrice, truncate } from \"../../utils/utils\"\nimport NextAvailableSlot from \"../ProProfile/NextAvailableSlot\"\n\nimport CardTitle from \"./CardTitle\"\n\nconst ServiceCard = ({ service, practice, theme, cardBackgroundColor, viewingInBuilder }) => (\n  <div\n    className=\"p-8 text-left md:p-6\"\n    style={{ backgroundColor: cardBackgroundColor, color: theme.colorTextDark }}\n    id={`service-card-${service.name.replace(/\\s+/g, \"-\")}`}>\n    <CardTitle className=\"mb-4\" style={{ fontFamily: theme.fontHeading, fontWeight: theme.fontHeadingWeight }}>\n      {service.name}\n    </CardTitle>\n    <div className=\"mb-2 min-h-[72px]\">\n      <span\n        className=\"wysiwyg-content\"\n        dangerouslySetInnerHTML={{\n          __html: truncate(service.description, 160).replace(/<\\/?(p|h2|h3|h4|ul|ol|li)[^>]*>/g, \" \")\n        }}\n      />\n      {service.description.length > 160 && (\n        <WebAppBookNow\n          practiceId={practice.id}\n          serviceId={service.id}\n          buttonCopy=\"See more\"\n          style={{ fontWeight: theme.fontParagraphBoldWeight }}\n          buttonClasses={twMerge(\"ml-1 underline\", viewingInBuilder ? \"pointer-events-none\" : \"\")}\n          openServiceDetail={true}\n        />\n      )}\n    </div>\n    <p className=\"leading-loose\">\n      {service.amountCents === 0 ? \"Free\" : formatPrice(service.amountCents)} ·{\" \"}\n      {service.package ? ` ${service.numberOfSessions} sessions · ` : \"\"}\n      {service.timeLength} minutes{service.package ? \" each\" : \"\"}\n    </p>\n    <div className=\"mt-8 flex items-center gap-2 sm:flex-col sm:items-start sm:gap-4\">\n      <WebAppBookNow\n        practiceId={practice.id}\n        serviceId={service.id}\n        buttonCopy=\"Book now\"\n        buttonClasses={twMerge(\n          \"rounded border bg-transparent px-6 py-3 transition duration-150 ease-out hover:bg-[var(--hover-bg)] hover:text-[var(--hover-color)] sm:w-full\",\n          viewingInBuilder ? \"pointer-events-none\" : \"\"\n        )}\n        style={{\n          color: theme.colorAccent,\n          borderColor: theme.colorAccent,\n          \"--hover-color\": theme.colorBgLight,\n          \"--hover-bg\": theme.colorAccent\n        }}\n      />\n      {!service.package && !viewingInBuilder && (\n        <div className=\"flex gap-2\">\n          <span>→</span>\n          <NextAvailableSlot service={service} />\n        </div>\n      )}\n    </div>\n  </div>\n)\n\nexport default ServiceCard\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport AnimatedSection from \"./AnimatedSection\"\nimport SectionTitle from \"./SectionTitle\"\nimport ServiceCard from \"./ServiceCard\"\n\nconst ServicesSection = ({\n  id = \"services\",\n  practice,\n  theme,\n  viewingInBuilder,\n  showTitle = true,\n  includeImage = false,\n  buttonLeft = false,\n  hideImageInMobile = false,\n  animateTitle = false,\n  backgroundColor,\n  cardBackgroundColor,\n  className,\n  titleClassName,\n  imageClassName,\n  mobileImageClassName\n}) => {\n  backgroundColor ||= theme.colorBgLight\n  cardBackgroundColor ||= theme.colorGreyLightest\n  const isMobile = window.innerWidth < 768\n  const numServicesShown = isMobile ? 4 : includeImage ? 5 : 6\n  const services = practice.services.slice(0, numServicesShown)\n  const serviceImage = practice.imageAssets.find((asset) => asset.description === \"services_section\")\n\n  if (includeImage) {\n    services.splice(1, 0, { id: \"image\", url: serviceImage.resizedImageUrl })\n  }\n\n  return (\n    <section id={id} style={{ backgroundColor }} className={twMerge(\"w-full py-24 text-center md:py-16\", className)}>\n      {!hideImageInMobile && (\n        <div className=\"hidden md:block\">\n          <img\n            src={serviceImage.resizedImageUrl}\n            alt={serviceImage.altText}\n            className={twMerge(\"mb-16 w-full object-cover px-5\", mobileImageClassName)}\n          />\n        </div>\n      )}\n      <div className=\"container mx-auto md:px-5\">\n        {showTitle && (\n          <>\n            {animateTitle ? (\n              <AnimatedSection>\n                <SectionTitle theme={theme} className={titleClassName}>\n                  My Services\n                </SectionTitle>\n              </AnimatedSection>\n            ) : (\n              <SectionTitle theme={theme} className={titleClassName}>\n                My Services\n              </SectionTitle>\n            )}\n          </>\n        )}\n        <div className=\"my-10 md:mb-0\">\n          <AnimatedSection className=\"grid grid-cols-2 gap-10 lg:grid-cols-1\">\n            {services.map((service) => (\n              <React.Fragment key={service.id}>\n                {service.id === \"image\" ? (\n                  <div className=\"relative md:hidden\">\n                    <img\n                      src={serviceImage.resizedImageUrl}\n                      alt={serviceImage.altText}\n                      className={twMerge(\"h-[328px] w-full object-cover\", imageClassName)}\n                    />\n                  </div>\n                ) : (\n                  <ServiceCard\n                    key={service.id}\n                    service={service}\n                    practice={practice}\n                    theme={theme}\n                    viewingInBuilder={viewingInBuilder}\n                    cardBackgroundColor={cardBackgroundColor}\n                  />\n                )}\n              </React.Fragment>\n            ))}\n          </AnimatedSection>\n          {practice.services.length > numServicesShown && (\n            <div className={`mt-10 ${buttonLeft ? \"text-left md:text-center\" : \"mx-auto\"}`}>\n              <WebAppBookNow\n                practiceId={practice.id}\n                buttonCopy={`See all ${practice.services.length} services`}\n                buttonClasses={twMerge(\n                  \"border px-10 py-3 hover:bg-[var(--hover-color)] hover:text-white\",\n                  theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n                  viewingInBuilder ? \"pointer-events-none\" : \"\"\n                )}\n                style={{\n                  \"--hover-color\": theme.colorAccent,\n                  borderColor: theme.colorAccent,\n                  color: theme.colorAccent\n                }}\n              />\n            </div>\n          )}\n        </div>\n      </div>\n    </section>\n  )\n}\n\nexport default ServicesSection\n","import { ChevronDownIcon } from \"@heroicons/react/24/outline\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { scrollToId } from \"../ProProfile/ScrollToSection\"\n\nimport AnimatedSection from \"./AnimatedSection\"\nimport Review from \"./Review\"\n\nconst TopReviewsSection = ({ practice, theme, className, backgroundColor, color }) => {\n  color ||= theme.colorTextDark\n  backgroundColor ||= theme.colorPrimary\n  const reviews = practice.reviews.filter((review) => review.review).slice(0, 2)\n  const reviewsCount = practice.reviews.length\n\n  return (\n    <section className={twMerge(\"py-16 md:px-5\", className)} style={{ color, backgroundColor }}>\n      <div className=\"container relative mx-auto\">\n        <AnimatedSection className=\"grid grid-cols-2 gap-10 lg:grid-cols-1\">\n          {reviews.map((review) => (\n            <Review\n              key={`top-review-${review.id}`}\n              review={review}\n              practice={practice}\n              showEndorsements={false}\n              starColor={theme.colorReviewStars}\n            />\n          ))}\n        </AnimatedSection>\n        <div className=\"mt-8 text-center\">\n          <button\n            onClick={(e) => scrollToId(e, \"reviews\")}\n            style={{ color, \"--hover-color\": theme.colorAccent }}\n            className=\"hover:text-[var(--hover-color)]\">\n            See {reviewsCount - 2} more\n            <br />\n            <ChevronDownIcon className=\"mx-auto h-6 w-6\" />\n          </button>\n        </div>\n      </div>\n    </section>\n  )\n}\n\nexport default TopReviewsSection\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport useIntersectionObserver from \"../../hooks/useIntersectionObserver\"\nimport AboutMeContainer from \"../ProProfileShared/AboutMeContainer\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nexport const nl2br = (text) => text?.replace(/>\\n/g, \">\")?.replace(/\\n/g, \"<br />\")\n\nconst AboutSection = ({ practice, theme, highlight, className, viewingInBuilder }) => {\n  const [isVisible, containerRef] = useIntersectionObserver()\n\n  const alt = practice.websiteMetadata?.primaryModality\n    ? `${practice.user.name} practicing ${practice.websiteMetadata.primaryModality} in ${practice.city}, ${practice.stateAbbreviation}`\n    : `${practice.user.name} in ${practice.city}, ${practice.stateAbbreviation}`\n\n  return (\n    <section\n      id=\"about\"\n      style={{ color: theme.colorTextDark, backgroundColor: theme.colorSecondary }}\n      className={twMerge(\"py-24 lg:px-32 lg:pb-8 md:px-12 sm:px-0\", className)}>\n      <div className=\"relative mx-auto flex items-center lg:block\" ref={containerRef}>\n        <img\n          src={practice.user.profilePhotoUrl}\n          alt={alt}\n          className={twMerge(\n            \"right-[60%] aspect-square w-[782px] transition-all duration-[1500ms] lg:relative lg:right-unset lg:z-20 lg:mx-auto lg:-mb-4 lg:w-[240px]\",\n            highlight === \"Headshot\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\",\n            isVisible\n              ? \"translate-x-0 translate-y-0 opacity-100\"\n              : \"opacity-0 min_sm:-translate-x-full min_sm:-translate-y-full\"\n          )}\n        />\n        <AboutMeContainer\n          practice={practice}\n          theme={theme}\n          isVisible={isVisible}\n          className=\"absolute left-[45%] z-10 w-[760px] lg:static lg:w-full\"\n          cardBackgroundColor={theme.colorGreyLightest}\n          viewingInBuilder={viewingInBuilder}\n          credentialsGridClassName=\"grid-cols-2 lg:grid-cols-1\"\n          credentialsClassName=\"p-6\"\n        />\n      </div>\n    </section>\n  )\n}\n\nexport default AboutSection\n","import React, { useEffect, useRef, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport AnimatedSection from \"./AnimatedSection\"\nimport HealMeVerifiedBadge from \"./HealMeVerifiedBadge\"\nimport Review from \"./Review\"\nimport ReviewStars from \"./ReviewStars\"\nimport SectionTitle from \"./SectionTitle\"\nimport SeeMore from \"./SeeMore\"\n\nconst ReviewsSection = ({ practice, theme, className, backgroundColor, color, showTitle = true, id = \"reviews\" }) => {\n  backgroundColor ||= theme.colorBgLight\n  color ||= theme.colorTextDark\n\n  const isMobile = window.innerWidth < 768\n  const defaultReviewsShown = isMobile ? 4 : 10\n  const reviews = practice.reviews.filter((review) => review.review)\n  const [expanded, setExpanded] = useState(false)\n  const [expandedReviewSwitch, setExpandedReviewSwitch] = useState(false)\n\n  const reviewsContainerRef = useRef(null)\n\n  useEffect(() => {\n    if (reviewsContainerRef.current) {\n      reviewsContainerRef.current.style.maxHeight = expanded ? `${reviewsContainerRef.current.scrollHeight}px` : \"0px\"\n    }\n  }, [expanded, reviews, expandedReviewSwitch])\n\n  // Trick to update the maxHeight of the reviews container when a review is expanded/collapsed\n  const onExpand = () => {\n    setExpandedReviewSwitch((prev) => !prev)\n  }\n\n  return (\n    <section id={id} className={twMerge(\"scroll-mt-24 pt-24 md:px-5\", className)} style={{ backgroundColor, color }}>\n      <AnimatedSection className=\"container mx-auto\">\n        {showTitle && (\n          <SectionTitle className=\"mb-4 text-center\" theme={theme}>\n            My Reviews\n          </SectionTitle>\n        )}\n        <div className=\"mb-10 flex items-center justify-center gap-4\">\n          <ReviewStars rating={practice.averageRating} starColor={theme.colorReviewStars} />\n          <span>{practice.reviews.length} reviews</span>\n        </div>\n        <div className=\"mb-10 flex w-full justify-center\">\n          <HealMeVerifiedBadge theme={theme} backgroundColor={backgroundColor} color={color} />\n        </div>\n        <div className=\"grid grid-cols-2 gap-10 lg:grid-cols-1\">\n          {reviews.slice(0, defaultReviewsShown).map((review) => (\n            <Review\n              key={`review-${review.id}`}\n              review={review}\n              practice={practice}\n              starColor={theme.colorReviewStars}\n            />\n          ))}\n        </div>\n        <div\n          ref={reviewsContainerRef}\n          className=\"mt-10 grid grid-cols-2 gap-10 overflow-hidden transition-all duration-1000 lg:grid-cols-1\"\n          style={{ maxHeight: 0 }}>\n          {reviews.slice(defaultReviewsShown).map((review) => (\n            <Review\n              key={`review-${review.id}`}\n              review={review}\n              practice={practice}\n              starColor={theme.colorReviewStars}\n              onExpand={onExpand}\n              onCollapse={onExpand}\n            />\n          ))}\n        </div>\n        {reviews.length > defaultReviewsShown && (\n          <SeeMore\n            className=\"pt-10 text-opacity-50\"\n            buttonClassName=\"hover:text-[var(--hover-color)]\"\n            buttonStyle={{ color, \"--hover-color\": theme.colorAccent }}\n            buttonText=\"See more reviews\"\n            onClick={() => {\n              if (expanded) document.getElementById(\"reviews\").scrollIntoView({ behavior: \"smooth\" })\n              setExpanded(!expanded)\n            }}\n          />\n        )}\n      </AnimatedSection>\n    </section>\n  )\n}\n\nexport default ReviewsSection\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst DiagonalDivider = ({ topBackgroundColor, bottomBackgroundColor, className }) => (\n  <div\n    className={twMerge(\"relative top-[-2px] h-24 w-full lg:h-16\", className)}\n    style={{ backgroundColor: topBackgroundColor }}>\n    <div\n      className=\"absolute inset-0 bottom-[-2px] clip-path-diagonal-line\"\n      style={{ backgroundColor: bottomBackgroundColor }}\n    />\n  </div>\n)\n\nexport default DiagonalDivider\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nconst ThemeImage = ({ id, src, alt, highlight, className }) => (\n  <div id={id} className={twMerge(\"my-20 scroll-mt-24 text-center md:mb-10 md:mt-16\", className)}>\n    <img\n      className={twMerge(\"mx-auto w-[757px] object-cover md:w-full\", highlight ? DEFAULT_HIGHLIGHT_CLASSES : \"\")}\n      alt={alt}\n      src={src}\n    />\n  </div>\n)\n\nexport default ThemeImage\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { practiceCtaText, practiceDefaultServiceId } from \"../../@core/practice/practice.utils\"\nimport { useCurrentUser, CurrentUserProvider } from \"../../contexts/CurrentUserContext\"\nimport { ToastProvider, useToast } from \"../../contexts/ToastContext\"\nimport GraphQLProvider from \"../../providers/GraphQLProvider\"\nimport { OPACITY_40 } from \"../../utils/utils\"\nimport AdditionalContent from \"../ProProfileShared/AdditionalContent\"\nimport AnimatedSection from \"../ProProfileShared/AnimatedSection\"\nimport BottomCTA from \"../ProProfileShared/BottomCTA\"\nimport ChatWidget from \"../ProProfileShared/ChatWidget\"\nimport EndorsementsSection from \"../ProProfileShared/EndorsementsSection\"\nimport Footer from \"../ProProfileShared/Footer\"\nimport GallerySection from \"../ProProfileShared/GallerySection\"\nimport HeroSection from \"../ProProfileShared/HeroSection\"\nimport Map from \"../ProProfileShared/Map\"\nimport Quote from \"../ProProfileShared/Quote\"\nimport ReviewsSection from \"../ProProfileShared/ReviewsSection\"\nimport ServicesSection from \"../ProProfileShared/ServicesSection\"\nimport TopReviewsSection from \"../ProProfileShared/TopReviewsSection\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nimport AboutSection from \"./AboutSection\"\nimport DiagonalDivider from \"./DiagonalDivider\"\nimport ThemeFiveNavigation from \"./ThemeFiveNavigation\"\nimport ThemeImage from \"./ThemeImage\"\n\nconst ProProfileThemeFive = ({ practice, highlight, styles, viewingInBuilder }) => {\n  const theme = practice.theme\n  const primaryColor = theme.colorPrimary\n  const secondaryColor = theme.colorSecondary\n  const currentUser = useCurrentUser()\n  const toast = useToast()\n\n  const serviceImage = practice.imageAssets.find((asset) => asset.description === \"services_section\")\n  const reviewsImage = practice.imageAssets.find((asset) => asset.description === \"reviews_section\")\n  const valueStatementImage = practice.imageAssets.find((asset) => asset.description === \"value_statement\")\n\n  return (\n    <CurrentUserProvider>\n      <GraphQLProvider>\n        <ToastProvider>\n          <main style={styles} className=\"md:overflow-x-hidden\">\n            <HeroSection\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n              ClipPath={() => (\n                <div className=\"absolute bottom-0 h-24 w-full bg-transparent lg:h-16\">\n                  <div\n                    className=\"absolute inset-0 bottom-[-2px] clip-path-diagonal-line\"\n                    style={{ backgroundColor: primaryColor }}\n                  />\n                </div>\n              )}\n              Navigation={() => (\n                <ThemeFiveNavigation practice={practice} theme={theme} viewingInBuilder={viewingInBuilder} />\n              )}\n            />\n            <TopReviewsSection practice={practice} theme={theme} className=\"pb-4\" />\n            <DiagonalDivider topBackgroundColor={primaryColor} bottomBackgroundColor={theme.colorBgLight} />\n            <ThemeImage\n              id=\"services\"\n              src={serviceImage.resizedImageUrl}\n              alt={serviceImage.altText}\n              highlight={highlight === \"Services Image\"}\n            />\n            <ServicesSection\n              practice={practice}\n              theme={theme}\n              className=\"pt-0 md:pt-0\"\n              viewingInBuilder={viewingInBuilder}\n              id={undefined}\n              hideImageInMobile={true}\n            />\n            <DiagonalDivider topBackgroundColor={theme.colorBgLight} bottomBackgroundColor={theme.colorGreyLightest} />\n            <div\n              style={{ backgroundColor: theme.colorGreyLightest }}\n              className=\"scroll-mt-24 pb-24 pt-20 md:pb-16\"\n              id=\"value-statement\">\n              <AnimatedSection threshold={0.3}>\n                <ThemeImage\n                  className=\"md:mt-0\"\n                  src={valueStatementImage.resizedImageUrl}\n                  alt={valueStatementImage.altText}\n                  highlight={highlight === \"Value Statement Image\"}\n                />\n                <div\n                  className={twMerge(\n                    \"container mx-auto p-10 md:mx-5 md:mt-10 md:w-[calc(100%-40px)] md:py-5\",\n                    highlight === \"valueStatement\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\"\n                  )}\n                  style={{ backgroundColor: theme.colorBgLight }}>\n                  <AdditionalContent valueStatement={practice.valueStatement} />\n                  <div className=\"mt-8 text-left md:text-center\">\n                    <WebAppBookNow\n                      practiceId={practice.id}\n                      serviceId={practiceDefaultServiceId(practice)}\n                      buttonCopy={practiceCtaText(practice)}\n                      buttonClasses={twMerge(\n                        \"border border-[var(--bg-color)] px-10 py-3 hover:border-[var(--hover-color)] md:w-full\",\n                        theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n                        viewingInBuilder ? \"pointer-events-none\" : \"\"\n                      )}\n                      style={{\n                        color: theme.colorTextLight,\n                        backgroundColor: theme.colorAccent,\n                        \"--bg-color\": theme.colorAccent,\n                        \"--hover-color\": theme.colorTextLight\n                      }}\n                    />\n                  </div>\n                </div>\n              </AnimatedSection>\n            </div>\n            <DiagonalDivider topBackgroundColor={theme.colorGreyLightest} bottomBackgroundColor={secondaryColor} />\n            <AboutSection\n              practice={practice}\n              theme={theme}\n              className=\"py-28\"\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n            />\n            <DiagonalDivider topBackgroundColor={secondaryColor} bottomBackgroundColor={theme.colorBgLight} />\n            <ThemeImage\n              id=\"reviews\"\n              src={reviewsImage.resizedImageUrl}\n              alt={reviewsImage.altText}\n              highlight={highlight === \"Reviews Image\"}\n            />\n            <ReviewsSection practice={practice} theme={theme} className=\"pt-0\" id={undefined} />\n            <EndorsementsSection practice={practice} theme={theme} />\n            <DiagonalDivider topBackgroundColor={theme.colorBgLight} bottomBackgroundColor={theme.colorGreyLightest} />\n            <GallerySection practice={practice} theme={theme} highlight={highlight === \"Gallery photos\"} />\n            <DiagonalDivider topBackgroundColor={theme.colorGreyLightest} bottomBackgroundColor={secondaryColor} />\n            <Quote\n              theme={theme}\n              text={practice.quote}\n              author={practice.quoteAuthor}\n              id=\"quote\"\n              highlight={highlight === \"quote\"}\n              backgroundColor={secondaryColor}\n            />\n            <BottomCTA\n              practice={practice}\n              theme={theme}\n              overlayColor={theme.colorBgDark + OPACITY_40}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n              className=\"pt-[196px]\"\n              ClipPath={() => (\n                <div className=\"absolute top-[-1px] h-24 w-full bg-transparent lg:h-16\">\n                  <div\n                    className=\"absolute inset-0 clip-path-diagonal-line-reversed\"\n                    style={{ backgroundColor: secondaryColor }}\n                  />\n                </div>\n              )}\n              ClipPathTwo={() => (\n                <div className=\"absolute bottom-0 h-24 w-full bg-transparent lg:h-16\">\n                  <div\n                    className=\"absolute inset-0 bottom-[-1px] clip-path-diagonal-line\"\n                    style={{ backgroundColor: primaryColor }}\n                  />\n                </div>\n              )}\n            />\n            <Map\n              practice={practice}\n              theme={theme}\n              ClipPath={() => (\n                <div className=\"absolute top-[-1px] h-24 w-full bg-transparent lg:h-16\">\n                  <div\n                    className=\"absolute inset-0 clip-path-diagonal-line-reversed\"\n                    style={{ backgroundColor: primaryColor }}\n                  />\n                </div>\n              )}\n              ClipPathTwo={() => (\n                <div className=\"absolute bottom-0 h-24 w-full bg-transparent lg:h-16\">\n                  <div\n                    className=\"absolute inset-0 bottom-[-1px] clip-path-diagonal-line\"\n                    style={{ backgroundColor: primaryColor }}\n                  />\n                </div>\n              )}\n            />\n            <Footer practice={practice} theme={theme} viewingInBuilder={viewingInBuilder} />\n            <ChatWidget practice={practice} currentUser={currentUser} toast={toast} />\n          </main>\n        </ToastProvider>\n      </GraphQLProvider>\n    </CurrentUserProvider>\n  )\n}\n\nexport default ProProfileThemeFive\n","import React from \"react\"\n\nimport Navigation from \"../ProProfileShared/Navigation\"\n\nconst ThemeFiveNavigation = ({ practice, theme, viewingInBuilder }) => (\n  <Navigation\n    practice={practice}\n    theme={theme}\n    viewingInBuilder={viewingInBuilder}\n    className=\"bg-transparent\"\n    ClipPath={() => (\n      <div className=\"absolute top-0 h-16 w-full bg-transparent\">\n        <div\n          className=\"absolute inset-0 clip-path-diagonal-line-reversed\"\n          style={{ backgroundColor: practice.theme.colorPrimary }}\n        />\n      </div>\n    )}\n    ClipPathTwo={() => (\n      <div className=\"absolute bottom-0 h-16 w-full bg-transparent\">\n        <div\n          className=\"absolute inset-0 bottom-[-1px] clip-path-diagonal-line\"\n          style={{ backgroundColor: practice.theme.colorSecondary }}\n        />\n      </div>\n    )}\n  />\n)\n\nexport default ThemeFiveNavigation\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst CurvyDivider = ({ topBackgroundColor, bottomBackgroundColor, className }) => (\n  <div style={{ backgroundColor: topBackgroundColor }} className={twMerge(\"h-10 w-full md:h-6\", className)}>\n    <svg\n      viewBox=\"0 0 1425 40\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-full w-full\"\n      preserveAspectRatio=\"none\">\n      <path\n        d=\"M709.986 34C1138.89 34 1349.58 0 1425 0V40H0V0C117.661 0 281.078 34 709.986 34Z\"\n        fill={bottomBackgroundColor}\n      />\n      <path\n        d=\"M709.986 38C1138.89 38 1349.58 4 1425 4V40H0V4C117.661 4 281.078 38 709.986 38Z\"\n        fill={bottomBackgroundColor}\n      />\n    </svg>\n  </div>\n)\n\nexport default CurvyDivider\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst CurvyDividerReversed = ({ topBackgroundColor, bottomBackgroundColor, className }) => (\n  <div style={{ backgroundColor: bottomBackgroundColor }} className={twMerge(\"h-10 w-full md:h-6\", className)}>\n    <svg\n      viewBox=\"0 0 1425 40\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-full w-full\"\n      preserveAspectRatio=\"none\">\n      <path\n        d=\"M709.986 6C1138.89 6 1349.58 40 1425 40V0H0V40C117.661 40 281.078 6 709.986 6Z\"\n        fill={topBackgroundColor}\n      />\n      <path\n        d=\"M709.986 2C1138.89 2 1349.58 36 1425 36V0H0V36C117.661 36 281.078 2 709.986 2Z\"\n        fill={topBackgroundColor}\n      />\n    </svg>\n  </div>\n)\n\nexport default CurvyDividerReversed\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst CurvyDividerWave = ({ topBackgroundColor, bottomBackgroundColor, className }) => (\n  <div style={{ backgroundColor: topBackgroundColor }} className={twMerge(\"h-10 w-full md:h-6\", className)}>\n    <svg\n      viewBox=\"0 0 1425 40\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-full w-full\"\n      preserveAspectRatio=\"none\">\n      <path\n        d=\"M968.94 34C1149.96 34 1349.58 10 1425 10V40H0V20C0 20 174.982 0 408.795 0C642.608 0 787.923 34 968.94 34Z\"\n        fill={bottomBackgroundColor}\n      />\n      <path\n        d=\"M968.94 39C1149.96 39 1349.58 15 1425 15V40H0V25C0 25 174.982 5 408.795 5C642.608 5 787.923 39 968.94 39Z\"\n        fill={bottomBackgroundColor}\n      />\n    </svg>\n  </div>\n)\n\nexport default CurvyDividerWave\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst CurvyDividerWaveReversed = ({ topBackgroundColor, bottomBackgroundColor, className }) => (\n  <div style={{ backgroundColor: bottomBackgroundColor }} className={twMerge(\"h-10 w-full md:h-6\", className)}>\n    <svg\n      viewBox=\"0 0 1425 40\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-full w-full\"\n      preserveAspectRatio=\"none\">\n      <path\n        d=\"M968.94 6C1149.96 6 1349.58 30 1425 30V0H0V20C0 20 174.982 40 408.795 40C642.608 40 787.923 6 968.94 6Z\"\n        fill={topBackgroundColor}\n      />\n      <path\n        d=\"M968.94 1C1149.96 1 1349.58 25 1425 25V0H0V15C0 15 174.982 35 408.795 35C642.608 35 787.923 1 968.94 1Z\"\n        fill={topBackgroundColor}\n      />\n    </svg>\n  </div>\n)\n\nexport default CurvyDividerWaveReversed\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport AdditionalContent from \"../ProProfileShared/AdditionalContent\"\nimport AnimatedSection from \"../ProProfileShared/AnimatedSection\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nconst ValueStatementSection = ({ practice, theme, highlight }) => (\n  <section\n    id=\"value-statement\"\n    className=\"scroll-mt-24 py-24 md:px-5\"\n    style={{\n      backgroundColor: theme.colorBgLight,\n      color: theme.colorTextDark,\n      fontFamily: theme.fontHeading,\n      fontWeight: theme.fontHeadingWeight\n    }}>\n    <AnimatedSection className={twMerge(\"container mx-auto text-center\", highlight ? DEFAULT_HIGHLIGHT_CLASSES : \"\")}>\n      <AdditionalContent valueStatement={practice.valueStatement} />\n    </AnimatedSection>\n  </section>\n)\n\nexport default ValueStatementSection\n","import React from \"react\"\n\nimport { CurrentUserProvider, useCurrentUser } from \"../../contexts/CurrentUserContext\"\nimport { ToastProvider, useToast } from \"../../contexts/ToastContext\"\nimport GraphQLProvider from \"../../providers/GraphQLProvider\"\nimport AboutSection from \"../ProProfileShared/AboutSection\"\nimport BottomCTA from \"../ProProfileShared/BottomCTA\"\nimport ChatWidget from \"../ProProfileShared/ChatWidget\"\nimport EndorsementsSection from \"../ProProfileShared/EndorsementsSection\"\nimport Footer from \"../ProProfileShared/Footer\"\nimport GallerySection from \"../ProProfileShared/GallerySection\"\nimport HeroSection from \"../ProProfileShared/HeroSection\"\nimport Map from \"../ProProfileShared/Map\"\nimport Navigation from \"../ProProfileShared/Navigation\"\nimport Quote from \"../ProProfileShared/Quote\"\nimport ReviewsSectionVariationOne from \"../ProProfileShared/ReviewsSectionVariationOne\"\nimport ServicesSection from \"../ProProfileShared/ServicesSection\"\nimport TopReviewsSection from \"../ProProfileShared/TopReviewsSection\"\n\nimport CurvyDivider from \"./CurvyDivider\"\nimport CurvyDividerReversed from \"./CurvyDividerReversed\"\nimport CurvyDividerWave from \"./CurvyDividerWave\"\nimport CurvyDividerWaveReversed from \"./CurvyDividerWaveReversed\"\nimport ValueStatementSection from \"./ValueStatementSection\"\n\nconst ProProfileThemeFour = ({ practice, highlight, styles, viewingInBuilder }) => {\n  const theme = practice.theme\n  const currentUser = useCurrentUser()\n  const toast = useToast()\n\n  return (\n    <CurrentUserProvider>\n      <GraphQLProvider>\n        <ToastProvider>\n          <main style={styles} className=\"md:overflow-x-hidden\">\n            <HeroSection\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n              showStars={true}\n              Navigation={() => <Navigation practice={practice} theme={theme} viewingInBuilder={viewingInBuilder} />}\n              ClipPath={() => (\n                <CurvyDivider\n                  topBackgroundColor=\"#00000000\"\n                  bottomBackgroundColor={theme.colorBgLight}\n                  className=\"absolute bottom-[-2px] w-full\"\n                />\n              )}\n            />\n            <TopReviewsSection\n              practice={practice}\n              theme={theme}\n              className=\"pb-0\"\n              backgroundColor={theme.colorBgLight}\n            />\n            <CurvyDivider topBackgroundColor={theme.colorBgLight} bottomBackgroundColor={theme.colorGreyLightest} />\n            <ServicesSection\n              practice={practice}\n              theme={theme}\n              backgroundColor={theme.colorGreyLightest}\n              cardBackgroundColor={theme.colorBgLight}\n              viewingInBuilder={viewingInBuilder}\n              includeImage={true}\n              titleClassName=\"mt-10 min_md:mt-32 text-left md:text-center\"\n              className=\"pt-12 md:pb-20 md:pt-0\"\n              imageClassName=\"absolute bottom-0 left-0 h-auto\"\n              mobileImageClassName=\"px-0 mb-0\"\n              animateTitle={true}\n            />\n            <CurvyDividerReversed\n              topBackgroundColor={theme.colorGreyLightest}\n              bottomBackgroundColor={theme.colorBgLight}\n            />\n            <ValueStatementSection practice={practice} theme={theme} highlight={highlight === \"valueStatement\"} />\n            <CurvyDividerWave topBackgroundColor={theme.colorBgLight} bottomBackgroundColor={theme.colorPrimary} />\n            <AboutSection\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              backgroundColor={theme.colorPrimary}\n              cardBackgroundColor={theme.colorBgLight}\n              cardClassName=\"md:mx-5 md:w-[calc(100%-40px)]\"\n              credentialsBackgroundColor={theme.colorBgLight}\n              viewingInBuilder={viewingInBuilder}\n            />\n            <CurvyDividerWaveReversed\n              topBackgroundColor={theme.colorPrimary}\n              bottomBackgroundColor={theme.colorBgLight}\n            />\n            <ReviewsSectionVariationOne\n              practice={practice}\n              theme={theme}\n              className=\"pb-0\"\n              starsClassName=\"justify-start md:justify-center\"\n            />\n            <EndorsementsSection practice={practice} theme={theme} className=\"pt-10\" titleClassName=\"font-medium\" />\n            <CurvyDivider topBackgroundColor={theme.colorBgLight} bottomBackgroundColor={theme.colorGreyLightest} />\n            <GallerySection practice={practice} theme={theme} highlight={highlight === \"Gallery photos\"} />\n            <CurvyDivider topBackgroundColor={theme.colorGreyLightest} bottomBackgroundColor={theme.colorBgLight} />\n            <Quote\n              theme={theme}\n              text={practice.quote}\n              author={practice.quoteAuthor}\n              id=\"quote\"\n              highlight={highlight === \"quote\"}\n              backgroundColor={theme.colorBgLight}\n            />\n            <BottomCTA\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n              ClipPath={() => (\n                <CurvyDividerReversed\n                  topBackgroundColor={theme.colorBgLight}\n                  bottomBackgroundColor=\"#00000000\"\n                  className=\"absolute top-[-1px]\"\n                />\n              )}\n              ClipPathTwo={() => (\n                <CurvyDivider\n                  topBackgroundColor=\"#00000000\"\n                  bottomBackgroundColor={theme.colorSecondary}\n                  className=\"absolute bottom-[-2px]\"\n                />\n              )}\n            />\n            <div className=\"h-10\" style={{ backgroundColor: theme.colorSecondary }} />\n            <Map\n              practice={practice}\n              theme={theme}\n              ClipPath={() => (\n                <CurvyDividerReversed\n                  topBackgroundColor={theme.colorSecondary}\n                  bottomBackgroundColor=\"#00000000\"\n                  className=\"absolute top-[-1px]\"\n                />\n              )}\n              ClipPathTwo={() => (\n                <CurvyDivider\n                  topBackgroundColor=\"#00000000\"\n                  bottomBackgroundColor={theme.colorBgLight}\n                  className=\"absolute bottom-0\"\n                />\n              )}\n            />\n            <Footer\n              practice={practice}\n              theme={theme}\n              backgroundColor={theme.colorBgLight}\n              viewingInBuilder={viewingInBuilder}\n            />\n            <ChatWidget practice={practice} currentUser={currentUser} toast={toast} />\n          </main>\n        </ToastProvider>\n      </GraphQLProvider>\n    </CurrentUserProvider>\n  )\n}\n\nexport default ProProfileThemeFour\n","import React from \"react\"\n\nconst TriangleDivider = ({ topBackgroundColor, bottomBackgroundColor, middleBackgroundColor }) => (\n  <div className=\"relative\">\n    <div\n      className=\"absolute top-[-1px] h-6 w-full clip-path-triangle-bottom\"\n      style={{ backgroundColor: topBackgroundColor }}></div>\n    <div\n      className=\"absolute bottom-[-1px] h-6 w-full clip-path-triangle-top\"\n      style={{ backgroundColor: bottomBackgroundColor }}></div>\n    <div className=\"h-16 w-full\" style={{ backgroundColor: middleBackgroundColor }}></div>\n  </div>\n)\n\nexport default TriangleDivider\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { practiceCtaText, practiceDefaultServiceId } from \"../../@core/practice/practice.utils\"\nimport AdditionalContent from \"../ProProfileShared/AdditionalContent\"\nimport AnimatedSection from \"../ProProfileShared/AnimatedSection\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nconst ValueStatementSection = ({ practice, theme, highlight, viewingInBuilder }) => {\n  const { valueStatement } = practice\n  const valueStatementImage = practice.imageAssets.find((asset) => asset.description === \"value_statement\")\n\n  return (\n    <section\n      id=\"value-statement\"\n      style={{ backgroundColor: theme.colorSecondary }}\n      className=\"w-full py-24 md:px-5 md:py-16\">\n      <AnimatedSection className=\"container mx-auto flex w-full items-center justify-between gap-10 md:flex-col-reverse\">\n        <div className=\"w-1/2 px-6 py-10 md:w-full\" style={{ backgroundColor: theme.colorWhite }}>\n          <div\n            className={twMerge(highlight === \"valueStatement\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\")}\n            style={{ color: theme.colorTextDark }}>\n            <AdditionalContent valueStatement={valueStatement} />\n          </div>\n          <div className=\"mt-8 text-left md:text-center\">\n            <WebAppBookNow\n              practiceId={practice.id}\n              serviceId={practiceDefaultServiceId(practice)}\n              buttonCopy={practiceCtaText(practice)}\n              buttonClasses={twMerge(\n                \"border border-[var(--bg-color)] px-10 py-3 hover:border-[var(--hover-color)] md:w-full\",\n                theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n                viewingInBuilder ? \"pointer-events-none\" : \"\"\n              )}\n              style={{\n                color: theme.colorTextLight,\n                backgroundColor: theme.colorAccent,\n                \"--bg-color\": theme.colorAccent,\n                \"--hover-color\": theme.colorTextLight\n              }}\n            />\n          </div>\n        </div>\n        <div className=\"w-1/2 md:w-full\">\n          <img\n            src={valueStatementImage.resizedImageUrl}\n            alt={valueStatementImage.altText}\n            className=\"aspect-square w-full object-cover\"\n          />\n        </div>\n      </AnimatedSection>\n    </section>\n  )\n}\n\nexport default ValueStatementSection\n","import React from \"react\"\n\nimport { useCurrentUser, CurrentUserProvider } from \"../../contexts/CurrentUserContext\"\nimport { useToast } from \"../../contexts/ToastContext\"\nimport { ToastProvider } from \"../../contexts/ToastContext\"\nimport GraphQLProvider from \"../../providers/GraphQLProvider\"\nimport { OPACITY_25, OPACITY_75 } from \"../../utils/utils\"\nimport AboutSection from \"../ProProfileShared/AboutSection\"\nimport BottomCTA from \"../ProProfileShared/BottomCTA\"\nimport ChatWidget from \"../ProProfileShared/ChatWidget\"\nimport EndorsementsSection from \"../ProProfileShared/EndorsementsSection\"\nimport Footer from \"../ProProfileShared/Footer\"\nimport GallerySection from \"../ProProfileShared/GallerySection\"\nimport HeroSection from \"../ProProfileShared/HeroSection\"\nimport Map from \"../ProProfileShared/Map\"\nimport Navigation from \"../ProProfileShared/Navigation\"\nimport Quote from \"../ProProfileShared/Quote\"\nimport ReviewsSection from \"../ProProfileShared/ReviewsSectionVariationOne\"\nimport ServicesSection from \"../ProProfileShared/ServicesSection\"\nimport TopReviewsSection from \"../ProProfileShared/TopReviewsSection\"\n\nimport TriangleDivider from \"./TriangleDivider\"\nimport ValueStatementSection from \"./ValueStatementSection\"\n\nconst ProProfileThemeOne = ({ practice, highlight, styles, viewingInBuilder }) => {\n  const currentUser = useCurrentUser()\n  const toast = useToast()\n  const theme = practice.theme\n  const primaryColor = theme.colorPrimary\n  const secondaryColor = theme.colorSecondary\n  const isMobile = window.innerWidth < 768\n\n  return (\n    <CurrentUserProvider>\n      <GraphQLProvider>\n        <ToastProvider>\n          <main style={styles} className=\"md:overflow-x-hidden\">\n            <HeroSection\n              theme={theme}\n              practice={practice}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n              Navigation={() => <Navigation practice={practice} theme={theme} viewingInBuilder={viewingInBuilder} />}\n              ClipPath={() => (\n                <div\n                  className=\"absolute bottom-[-2px] h-6 w-full clip-path-triangle-top\"\n                  style={{ backgroundColor: primaryColor }}\n                />\n              )}\n            />\n            <TopReviewsSection practice={practice} className=\"pb-0\" theme={theme} />\n            <TriangleDivider\n              topBackgroundColor={primaryColor}\n              bottomBackgroundColor={theme.colorBgLight}\n              middleBackgroundColor={primaryColor + OPACITY_75}\n            />\n            <ServicesSection\n              practice={practice}\n              theme={theme}\n              includeImage\n              viewingInBuilder={viewingInBuilder}\n              titleClassName=\"mt-10 min_md:mt-32 text-left md:text-center\"\n              className=\"pt-12 md:pb-20 md:pt-0\"\n              imageClassName=\"absolute bottom-0 left-0 h-auto\"\n              mobileImageClassName=\"px-0 mb-0\"\n              animateTitle={true}\n            />\n            <TriangleDivider\n              topBackgroundColor={theme.colorBgLight}\n              bottomBackgroundColor={secondaryColor}\n              middleBackgroundColor={secondaryColor + OPACITY_25}\n            />\n            <ValueStatementSection\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n            />\n            <TriangleDivider\n              topBackgroundColor={secondaryColor}\n              bottomBackgroundColor={theme.colorBgLight}\n              middleBackgroundColor={secondaryColor + OPACITY_75}\n            />\n            <AboutSection\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              cardBackgroundColor={theme.colorWhite}\n              credentialsBackgroundColor={theme.colorBgLight}\n              viewingInBuilder={viewingInBuilder}\n            />\n            <TriangleDivider\n              topBackgroundColor={theme.colorBgLight}\n              bottomBackgroundColor={theme.colorPrimaryDark}\n              middleBackgroundColor={theme.colorPrimaryDark + OPACITY_25}\n            />\n            <ReviewsSection\n              practice={practice}\n              theme={theme}\n              backgroundColor={theme.colorPrimaryDark}\n              color={theme.colorTextLight}\n              starsClassName=\"justify-start md:justify-center\"\n            />\n            <EndorsementsSection\n              practice={practice}\n              theme={theme}\n              backgroundColor={theme.colorPrimaryDark}\n              color={theme.colorTextLight}\n            />\n            <TriangleDivider\n              topBackgroundColor={theme.colorPrimaryDark}\n              bottomBackgroundColor={theme.colorBgLight}\n              middleBackgroundColor={theme.colorPrimaryDark + OPACITY_75}\n            />\n            <GallerySection\n              practice={practice}\n              theme={theme}\n              highlight={highlight === \"Gallery photos\"}\n              style={{ backgroundColor: theme.colorBgLight }}\n              containerClassName=\"gap-16 max-w-[800px] mx-auto md:gap-4\"\n              imageClassName=\"h-[380px] w-[360px] md:w-full md:h-auto\"\n              maxHeight={isMobile ? \"800px\" : \"824px\"}\n            />\n            <TriangleDivider\n              topBackgroundColor={theme.colorBgLight}\n              bottomBackgroundColor={secondaryColor}\n              middleBackgroundColor={secondaryColor + OPACITY_25}\n            />\n            <Quote\n              theme={theme}\n              text={practice.quote}\n              author={practice.quoteAuthor}\n              id=\"quote\"\n              highlight={highlight === \"quote\"}\n              backgroundColor={secondaryColor}\n            />\n            <BottomCTA\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n              ClipPath={() => (\n                <div\n                  className=\"absolute top-[-1px] h-6 w-full clip-path-triangle-bottom\"\n                  style={{ backgroundColor: secondaryColor }}\n                />\n              )}\n              ClipPathTwo={() => (\n                <div\n                  className=\"absolute bottom-[-2px] h-6 w-full clip-path-triangle-top\"\n                  style={{ backgroundColor: secondaryColor }}\n                />\n              )}\n            />\n            <div className=\"h-10 w-full\" style={{ backgroundColor: secondaryColor }}></div>\n            <Map\n              practice={practice}\n              theme={theme}\n              ClipPath={() => (\n                <div\n                  className=\"absolute top-[-1px] h-6 w-full clip-path-triangle-bottom\"\n                  style={{ backgroundColor: secondaryColor }}\n                />\n              )}\n              ClipPathTwo={() => (\n                <div\n                  className=\"absolute bottom-[-1px] h-6 w-full clip-path-triangle-top\"\n                  style={{ backgroundColor: secondaryColor }}\n                />\n              )}\n            />\n            <Footer\n              practice={practice}\n              theme={theme}\n              backgroundColor={secondaryColor}\n              viewingInBuilder={viewingInBuilder}\n            />\n            <ChatWidget practice={practice} currentUser={currentUser} toast={toast} />\n          </main>\n        </ToastProvider>\n      </GraphQLProvider>\n    </CurrentUserProvider>\n  )\n}\n\nexport default ProProfileThemeOne\n","import { practiceDefaultServiceId, practiceCtaText } from \"@core/practice/practice.utils\"\nimport { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport AnimatedSection from \"../ProProfileShared/AnimatedSection\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nconst HeroSection = ({ practice, theme, highlight, Navigation, viewingInBuilder }) => {\n  const highlightClasses = \"rounded border-2 border-teal shadow-lg w-fit\"\n  const defaultServiceId = practiceDefaultServiceId(practice)\n  const ctaText = practiceCtaText(practice)\n\n  return (\n    <div className=\"relative\" style={{ backgroundColor: theme.colorBgLight }} id=\"hero-section\">\n      <AnimatedSection className=\"container mx-auto flex min-h-[700px] items-center justify-between gap-10 pb-14 pt-[102px] md:flex-col md:px-5 md:text-center\">\n        <div className=\"min_md:w-1/2\">\n          <h1\n            className={twMerge(\n              \"text-[56px] leading-[72px] lg:text-4xl lg:leading-[48px]\",\n              highlight === \"websiteHeadline\" ? highlightClasses : \"\"\n            )}\n            style={{ fontFamily: theme.fontHeading, fontWeight: theme.fontHeadingWeight, color: theme.colorTextDark }}>\n            {practice.websiteHeadline}\n          </h1>\n          <p\n            className={twMerge(\n              \"mt-4 text-xl leading-8\",\n              highlight === \"subHeadline\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\",\n              highlight === \"subHeadline\" ? \"mx-auto w-fit px-8 py-2\" : \"\"\n            )}>\n            {practice.subHeadline}\n          </p>\n          <div className=\"mt-8\">\n            <WebAppBookNow\n              practiceId={practice.id}\n              serviceId={defaultServiceId}\n              buttonCopy={ctaText}\n              buttonClasses={twMerge(\n                \"border border-[var(--bg-color)] px-10 py-3 transition duration-150 ease-out hover:border-[var(--hover-color)] md:w-full\",\n                highlight === \"ctaButtonText\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\",\n                theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n                viewingInBuilder ? \"pointer-events-none\" : \"\"\n              )}\n              style={{\n                color: theme.colorTextLight,\n                backgroundColor: theme.colorAccent,\n                \"--bg-color\": theme.colorAccent,\n                \"--hover-color\": theme.colorTextDark\n              }}\n            />\n          </div>\n        </div>\n        <div className=\"min_md:w-1/2\">\n          <img className=\"aspect-square w-full object-cover\" src={practice.headerHeroImageUrl} alt=\"Hero image\" />\n        </div>\n      </AnimatedSection>\n      <Navigation />\n    </div>\n  )\n}\n\nexport default HeroSection\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { practiceCtaText, practiceDefaultServiceId } from \"../../@core/practice/practice.utils\"\nimport AdditionalContent from \"../ProProfileShared/AdditionalContent\"\nimport AnimatedSection from \"../ProProfileShared/AnimatedSection\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nconst ValueStatementSection = ({ practice, theme, highlight, viewingInBuilder }) => {\n  const { valueStatement } = practice\n  const valueStatementImage = practice.imageAssets.find((asset) => asset.description === \"value_statement\")\n\n  return (\n    <section\n      id=\"value-statement\"\n      style={{ backgroundColor: theme.colorWhite }}\n      className=\"w-full py-24 md:px-5 md:py-16\">\n      <AnimatedSection className=\"container mx-auto flex w-full items-center justify-between gap-10 md:flex-col-reverse\">\n        <div className=\"w-1/2 md:w-full\">\n          <div\n            className={twMerge(highlight === \"valueStatement\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\")}\n            style={{ color: theme.colorTextDark }}>\n            <AdditionalContent valueStatement={valueStatement} />\n          </div>\n          <div className=\"mt-8 text-left md:text-center\">\n            <WebAppBookNow\n              practiceId={practice.id}\n              serviceId={practiceDefaultServiceId(practice)}\n              buttonCopy={practiceCtaText(practice)}\n              buttonClasses={twMerge(\n                \"border border-[var(--bg-color)] px-10 py-3 hover:border-[var(--hover-color)] md:w-full\",\n                theme.buttonStyle === \"rounded\" ? \"rounded-full\" : \"rounded\",\n                viewingInBuilder ? \"pointer-events-none\" : \"\"\n              )}\n              style={{\n                color: theme.colorTextLight,\n                backgroundColor: theme.colorAccent,\n                \"--bg-color\": theme.colorAccent,\n                \"--hover-color\": theme.colorTextLight\n              }}\n            />\n          </div>\n        </div>\n        <div className=\"w-1/2 md:w-full\">\n          <img\n            src={valueStatementImage.resizedImageUrl}\n            alt={valueStatementImage.altText}\n            className=\"aspect-square w-full object-cover\"\n          />\n        </div>\n      </AnimatedSection>\n    </section>\n  )\n}\n\nexport default ValueStatementSection\n","import React from \"react\"\n\nimport { CurrentUserProvider, useCurrentUser } from \"../../contexts/CurrentUserContext\"\nimport { ToastProvider, useToast } from \"../../contexts/ToastContext\"\nimport GraphQLProvider from \"../../providers/GraphQLProvider\"\nimport AboutSection from \"../ProProfileShared/AboutSection\"\nimport BottomCTA from \"../ProProfileShared/BottomCTA\"\nimport ChatWidget from \"../ProProfileShared/ChatWidget\"\nimport EndorsementsSection from \"../ProProfileShared/EndorsementsSection\"\nimport Footer from \"../ProProfileShared/Footer\"\nimport GallerySection from \"../ProProfileShared/GallerySection\"\n// import MobileHeroSection from \"../ProProfileShared/HeroSection\"\nimport Map from \"../ProProfileShared/Map\"\nimport Navigation from \"../ProProfileShared/Navigation\"\nimport Quote from \"../ProProfileShared/Quote\"\nimport ReviewsSection from \"../ProProfileShared/ReviewsSectionVariationOne\"\nimport ServicesSection from \"../ProProfileShared/ServicesSection\"\nimport TopReviewsSection from \"../ProProfileShared/TopReviewsSection\"\n\nimport HeroSection from \"./HeroSection\"\nimport ValuesStatementSection from \"./ValueStatementSection\"\n\nconst ProProfileThemeThree = ({ practice, highlight, styles, viewingInBuilder }) => {\n  const theme = practice.theme\n  const secondaryColor = theme.colorSecondaryDark\n  const secondaryTextColor = theme.colorTextLight\n  const primaryColor = theme.colorPrimaryDark\n  const primaryTextColor = theme.colorTextLight\n  const currentUser = useCurrentUser()\n  const toast = useToast()\n\n  return (\n    <CurrentUserProvider>\n      <GraphQLProvider>\n        <ToastProvider>\n          <main style={styles} className=\"md:overflow-x-hidden\">\n            <div>\n              <HeroSection\n                practice={practice}\n                theme={theme}\n                highlight={highlight}\n                viewingInBuilder={viewingInBuilder}\n                Navigation={() => (\n                  <Navigation\n                    practice={practice}\n                    theme={theme}\n                    color={theme.colorTextDark}\n                    viewingInBuilder={viewingInBuilder}\n                  />\n                )}\n              />\n            </div>\n            {/* <div className=\"hidden md:block\">\n            <MobileHeroSection\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n              Navigation={() => <Navigation practice={practice} theme={theme} viewingInBuilder={viewingInBuilder} />}\n            />\n          </div> */}\n            <TopReviewsSection practice={practice} theme={theme} />\n            <ServicesSection\n              practice={practice}\n              theme={theme}\n              includeImage={true}\n              buttonLeft={true}\n              viewingInBuilder={viewingInBuilder}\n              titleClassName=\"mt-10 min_md:mt-32 text-left md:text-center\"\n              className=\"pt-12 md:pb-20 md:pt-0\"\n              imageClassName=\"absolute bottom-0 left-0 h-auto\"\n              mobileImageClassName=\"px-0 mb-0\"\n              animateTitle={true}\n            />\n            <ValuesStatementSection\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n            />\n            <AboutSection\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n              credentialsClassName=\"p-0\"\n            />\n            <ReviewsSection\n              practice={practice}\n              theme={theme}\n              backgroundColor={secondaryColor}\n              color={secondaryTextColor}\n              starsClassName=\"justify-start md:justify-center\"\n            />\n            <EndorsementsSection\n              practice={practice}\n              theme={theme}\n              backgroundColor={secondaryColor}\n              color={secondaryTextColor}\n            />\n            <GallerySection\n              practice={practice}\n              theme={theme}\n              style={{ backgroundColor: theme.colorBgLight }}\n              highlight={highlight === \"Gallery photos\"}\n            />\n            <Quote\n              theme={theme}\n              text={practice.quote}\n              author={practice.quoteAuthor}\n              id=\"quote\"\n              highlight={highlight === \"quote\"}\n              backgroundColor={primaryColor}\n              color={primaryTextColor}\n            />\n            <BottomCTA practice={practice} theme={theme} highlight={highlight} viewingInBuilder={viewingInBuilder} />\n            <Map practice={practice} />\n            <Footer practice={practice} theme={theme} viewingInBuilder={viewingInBuilder} />\n            <ChatWidget practice={practice} currentUser={currentUser} toast={toast} />\n          </main>\n        </ToastProvider>\n      </GraphQLProvider>\n    </CurrentUserProvider>\n  )\n}\n\nexport default ProProfileThemeThree\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport useIntersectionObserver from \"../../hooks/useIntersectionObserver\"\nimport AboutMeContainer from \"../ProProfileShared/AboutMeContainer\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nconst AboutSection = ({ practice, theme, highlight, className, viewingInBuilder }) => {\n  const [isVisible, containerRef] = useIntersectionObserver()\n\n  const alt = practice.websiteMetadata?.primaryModality\n    ? `${practice.user.name} practicing ${practice.websiteMetadata.primaryModality} in ${practice.city}, ${practice.stateAbbreviation}`\n    : `${practice.user.name} in ${practice.city}, ${practice.stateAbbreviation}`\n\n  return (\n    <section\n      id=\"about\"\n      style={{ color: theme.colorTextDark, backgroundColor: theme.colorBgLight }}\n      className={twMerge(\"mx-auto py-24 pt-32 lg:px-32 lg:py-0 md:px-12 sm:px-0\", className)}>\n      <div className=\"container relative mx-auto flex items-center lg:block\" ref={containerRef}>\n        <img\n          src={practice.user.profilePhotoUrl}\n          alt={alt}\n          className={twMerge(\n            \"absolute -top-48 left-[50%] aspect-square w-3/5 transition-all duration-[1500ms] lg:static lg:w-full\",\n            highlight === \"Headshot\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\",\n            isVisible\n              ? \"translate-x-0 translate-y-0 opacity-100\"\n              : \"opacity-0 min_sm:-translate-y-full min_sm:translate-x-full\"\n          )}\n        />\n        <AboutMeContainer\n          practice={practice}\n          theme={theme}\n          isVisible={isVisible}\n          className=\"z-10 lg:w-full min_md:w-3/5\"\n          cardBackgroundColor={theme.colorGreyLightest}\n          viewingInBuilder={viewingInBuilder}\n          credentialsGridClassName=\"grid-cols-2 lg:grid-cols-1\"\n          credentialsClassName=\"p-6\"\n          reverseAnimation={true}\n        />\n      </div>\n    </section>\n  )\n}\n\nexport default AboutSection\n","import React, { useEffect, useRef, useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport AnimatedSection from \"../ProProfileShared/AnimatedSection\"\nimport HealMeVerifiedBadge from \"../ProProfileShared/HealMeVerifiedBadge\"\nimport Review from \"../ProProfileShared/Review\"\nimport ReviewStars from \"../ProProfileShared/ReviewStars\"\nimport SectionTitle from \"../ProProfileShared/SectionTitle\"\nimport SeeMore from \"../ProProfileShared/SeeMore\"\n\nconst ReviewsSection = ({ practice, theme, className, backgroundColor, color, starsClassName }) => {\n  backgroundColor ||= theme.colorPrimaryDark\n  color ||= theme.colorTextLight\n\n  const isMobile = window.innerWidth < 768\n  const defaultReviewsShown = isMobile ? 4 : 11\n  const reviews = practice.reviews.filter((review) => review.review)\n  const [expanded, setExpanded] = useState(false)\n  const [expandedReviewSwitch, setExpandedReviewSwitch] = useState(false)\n\n  const reviewsContainerRef = useRef(null)\n\n  const reviewsImage = practice.imageAssets.find((asset) => asset.description === \"reviews_section\")\n\n  useEffect(() => {\n    if (reviewsContainerRef.current) {\n      reviewsContainerRef.current.style.maxHeight = expanded ? `${reviewsContainerRef.current.scrollHeight}px` : \"0px\"\n    }\n  }, [expanded, reviews, expandedReviewSwitch])\n\n  // Trick to update the maxHeight of the reviews container when a review is expanded/collapsed\n  const onExpand = () => {\n    setExpandedReviewSwitch((prev) => !prev)\n  }\n\n  return (\n    <section\n      id=\"reviews\"\n      className={twMerge(\"scroll-mt-24 py-32 md:pt-0 min_md:mt-20\", className)}\n      style={{ backgroundColor, color }}>\n      <div className=\"container mx-auto\">\n        <div className=\"hidden md:block\">\n          <img src={reviewsImage.resizedImageUrl} alt={reviewsImage.altText} className=\"w-full object-cover\" />\n        </div>\n        <AnimatedSection>\n          <div className=\"flex gap-16 md:w-full md:px-5\">\n            <div className=\"relative w-1/2 md:hidden\">\n              <img\n                src={reviewsImage.resizedImageUrl}\n                alt={reviewsImage.altText}\n                className=\"absolute bottom-0 right-0 object-cover\"\n              />\n            </div>\n            <div className=\"flex w-1/2 flex-col md:w-full\">\n              <SectionTitle className=\"mb-4 md:mb-0 md:mt-8 md:text-center\" theme={theme}>\n                My Reviews\n              </SectionTitle>\n              <div className={twMerge(\"flex items-center gap-4 md:justify-center\", starsClassName)}>\n                <ReviewStars rating={practice.averageRating} starColor={theme.colorReviewStars} />\n                <span>{practice.reviews.length} reviews</span>\n              </div>\n              <div className=\"my-8 flex md:justify-center\">\n                <HealMeVerifiedBadge theme={theme} backgroundColor={backgroundColor} color={color} />\n              </div>\n              {reviews.slice(0, 1).map((review) => (\n                <Review\n                  key={`review-${review.id}`}\n                  review={review}\n                  practice={practice}\n                  starColor={theme.colorReviewStars}\n                  className=\"min_md:min-h-36\"\n                  onExpand={onExpand}\n                  onCollapse={onExpand}\n                />\n              ))}\n            </div>\n          </div>\n          <div className=\"mt-16 grid grid-cols-2 gap-16 md:mt-8 md:grid-cols-1 md:gap-8 md:px-5\">\n            {reviews.slice(1, defaultReviewsShown).map((review) => (\n              <Review\n                key={`review-${review.id}`}\n                review={review}\n                practice={practice}\n                starColor={theme.colorReviewStars}\n                onExpand={onExpand}\n                onCollapse={onExpand}\n              />\n            ))}\n          </div>\n        </AnimatedSection>\n        {expanded && <div className=\"h-10 md:h-8\" />}\n        <div\n          ref={reviewsContainerRef}\n          className=\"grid grid-cols-2 gap-16 overflow-hidden transition-all duration-1000 lg:grid-cols-1 md:gap-8 md:px-5\"\n          style={{ maxHeight: 0 }}>\n          {reviews.slice(defaultReviewsShown).map((review) => (\n            <Review\n              key={`review-${review.id}`}\n              review={review}\n              practice={practice}\n              starColor={theme.colorReviewStars}\n              onExpand={onExpand}\n              onCollapse={onExpand}\n            />\n          ))}\n        </div>\n        {reviews.length > defaultReviewsShown && (\n          <SeeMore\n            className=\"pt-10 text-opacity-50\"\n            buttonClassName=\"hover:text-[var(--hover-color)]\"\n            buttonStyle={{ color, \"--hover-color\": theme.colorAccent }}\n            buttonText=\"See more reviews\"\n            onClick={() => {\n              if (expanded) document.getElementById(\"reviews\").scrollIntoView({ behavior: \"smooth\" })\n              setExpanded(!expanded)\n            }}\n          />\n        )}\n      </div>\n    </section>\n  )\n}\n\nexport default ReviewsSection\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport AdditionalContent from \"../ProProfileShared/AdditionalContent\"\nimport AnimatedSection from \"../ProProfileShared/AnimatedSection\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nconst ValueStatementSection = ({ practice, theme, highlight }) => {\n  const { valueStatement } = practice\n  const valueStatementImage = practice.imageAssets.find((asset) => asset.description === \"value_statement\")\n  const valueStatementImageTwo = practice.imageAssets.find((asset) => asset.description === \"value_statement_two\")\n\n  return (\n    <section\n      id=\"value-statement\"\n      style={{ backgroundColor: theme.colorBgLight }}\n      className=\"mx-auto pb-8 pt-20 md:pb-5\">\n      <AnimatedSection\n        className={twMerge(\n          \"container mx-auto mt-10 py-8 text-center md:mt-0 md:pt-0\",\n          highlight === \"valueStatement\" ? DEFAULT_HIGHLIGHT_CLASSES : \"\"\n        )}\n        style={{ color: theme.colorTextDark }}>\n        <AdditionalContent valueStatement={valueStatement} />\n      </AnimatedSection>\n      <div className=\"mx-auto flex max-w-[1362px] gap-8 md:w-full md:flex-col md:gap-5 md:px-5\">\n        <img\n          src={valueStatementImage.resizedImageUrl}\n          alt={valueStatementImage.altText}\n          className=\"w-[calc(50%-1rem)] object-cover md:w-full\"\n        />\n        {valueStatementImageTwo && (\n          <img\n            src={valueStatementImageTwo.resizedImageUrl}\n            alt={valueStatementImageTwo.altText}\n            className=\"w-[calc(50%-1rem)] object-cover md:w-full\"\n          />\n        )}\n      </div>\n    </section>\n  )\n}\n\nexport default ValueStatementSection\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst WaveDivider = ({ topBackgroundColor, bottomBackgroundColor, className }) => (\n  <div style={{ backgroundColor: topBackgroundColor }} className={twMerge(\"h-24 w-full md:h-16\", className)}>\n    <svg\n      viewBox=\"0 0 1425 96\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      className=\"h-full w-full\"\n      preserveAspectRatio=\"none\">\n      <path\n        d=\"M968.94 81.6C1149.96 81.6 1349.58 24 1425 24V96H0V48C0 48 174.982 0 408.795 0C642.608 0 787.923 81.6 968.94 81.6Z\"\n        fill={bottomBackgroundColor}\n      />\n    </svg>\n  </div>\n)\n\nexport default WaveDivider\n","import React from \"react\"\n\nimport { CurrentUserProvider, useCurrentUser } from \"../../contexts/CurrentUserContext\"\nimport { ToastProvider, useToast } from \"../../contexts/ToastContext\"\nimport GraphQLProvider from \"../../providers/GraphQLProvider\"\nimport BottomCTA from \"../ProProfileShared/BottomCTA\"\nimport ChatWidget from \"../ProProfileShared/ChatWidget\"\nimport EndorsementsSection from \"../ProProfileShared/EndorsementsSection\"\nimport Footer from \"../ProProfileShared/Footer\"\nimport GallerySection from \"../ProProfileShared/GallerySection\"\nimport HeroSection from \"../ProProfileShared/HeroSection\"\nimport Map from \"../ProProfileShared/Map\"\nimport Navigation from \"../ProProfileShared/Navigation\"\nimport Quote from \"../ProProfileShared/Quote\"\nimport ServicesSection from \"../ProProfileShared/ServicesSection\"\nimport TopReviewsSection from \"../ProProfileShared/TopReviewsSection\"\n\nimport AboutSection from \"./AboutSection\"\nimport ReviewsSection from \"./ReviewsSection\"\nimport ValueStatementSection from \"./ValueStatementSection\"\nimport WaveDivider from \"./WaveDivider\"\n\nconst ProProfileThemeTwo = ({ practice, highlight, styles, viewingInBuilder }) => {\n  const theme = practice.theme\n  const isMobile = window.innerWidth < 768\n  const currentUser = useCurrentUser()\n  const toast = useToast()\n\n  return (\n    <CurrentUserProvider>\n      <GraphQLProvider>\n        <ToastProvider>\n          <main style={styles} className=\"md:overflow-x-hidden\">\n            <HeroSection\n              practice={practice}\n              theme={theme}\n              highlight={highlight}\n              viewingInBuilder={viewingInBuilder}\n              Navigation={() => <Navigation practice={practice} theme={theme} viewingInBuilder={viewingInBuilder} />}\n              ClipPath={() => (\n                <WaveDivider\n                  topBackgroundColor=\"#00000000\"\n                  bottomBackgroundColor={theme.colorBgLight}\n                  className=\"absolute bottom-[-2px] w-full\"\n                />\n              )}\n            />\n            <ValueStatementSection practice={practice} theme={theme} highlight={highlight} />\n            <TopReviewsSection\n              practice={practice}\n              theme={theme}\n              backgroundColor={theme.colorSecondaryDark}\n              color={theme.colorTextLight}\n            />\n            <div className=\"relative\">\n              <ServicesSection\n                practice={practice}\n                theme={theme}\n                viewingInBuilder={viewingInBuilder}\n                includeImage={true}\n                titleClassName=\"mt-10 min_md:mt-32 text-left md:text-center\"\n                className=\"pt-12 md:pb-20 md:pt-0\"\n                imageClassName=\"absolute bottom-0 left-0 h-auto\"\n                mobileImageClassName=\"px-0 mb-0\"\n                animateTitle={true}\n              />\n            </div>\n            <AboutSection practice={practice} theme={theme} highlight={highlight} viewingInBuilder={viewingInBuilder} />\n            <ReviewsSection practice={practice} theme={theme} />\n            <EndorsementsSection\n              className=\"pt-0\"\n              practice={practice}\n              theme={theme}\n              backgroundColor={theme.colorPrimaryDark}\n              color={theme.colorTextLight}\n            />\n            <GallerySection\n              practice={practice}\n              theme={theme}\n              highlight={highlight === \"Gallery photos\"}\n              containerClassName=\"gap-16 max-w-[800px] mx-auto md:gap-4\"\n              imageClassName=\"h-[380px] w-[360px] md:w-full md:aspect-square\"\n              maxHeight={isMobile ? \"750px\" : \"824px\"}\n            />\n            <Quote\n              theme={theme}\n              text={practice.quote}\n              author={practice.quoteAuthor}\n              id=\"quote\"\n              highlight={highlight === \"quote\"}\n              backgroundColor={theme.colorPrimaryDark}\n              color={theme.colorTextLight}\n            />\n            <BottomCTA practice={practice} theme={theme} highlight={highlight} viewingInBuilder={viewingInBuilder} />\n            <Map practice={practice} theme={theme} />\n            <Footer\n              practice={practice}\n              theme={theme}\n              backgroundColor={theme.colorBgLight}\n              viewingInBuilder={viewingInBuilder}\n            />\n            <ChatWidget practice={practice} currentUser={currentUser} toast={toast} />\n          </main>\n        </ToastProvider>\n      </GraphQLProvider>\n    </CurrentUserProvider>\n  )\n}\n\nexport default ProProfileThemeTwo\n","import React, { useState } from \"react\"\n\nimport { AnimatedModal } from \"../../components/shared/Modal\"\nimport ScrollToSection from \"../ProProfile/ScrollToSection\"\n\nconst nl2br = (text) => text.replace(/\\n/g, \"<br>\")\n\nconst AboutMeSection = ({ practice }) => {\n  const practitioner = practice.user\n\n  const [isModalVisible, setIsModalVisible] = useState(false)\n\n  const textLimit = 600\n  const truncateText = (text) => {\n    if (!text) return \"\"\n\n    if (text.length > textLimit) {\n      return text.slice(0, text.lastIndexOf(\".\", textLimit)) + \".\"\n    }\n    return text\n  }\n\n  const isTruncated = practice.about?.length > textLimit || false\n\n  return (\n    <ScrollToSection id=\"about\" className=\"mb-0 border-none pb-0\">\n      <div className=\"flex flex-col items-center min_md:flex-row min_md:p-6\">\n        <div className=\"flex w-full justify-end min_md:w-1/2\">\n          <img\n            src={practitioner.profilePhotoUrl}\n            alt={practitioner.name}\n            className=\"h-[500px] w-[500px] lg:h-full lg:w-full\"\n          />\n        </div>\n        <div className=\"pt-6 md:pt-0 min_md:w-1/2 \">\n          <div className=\"bg-green-light p-16 min_md:-mt-16 min_md:max-w-[600px]\">\n            <h2 className=\"mb-4 text-2xl font-bold\">About me</h2>\n            <p\n              dangerouslySetInnerHTML={{\n                __html: nl2br(truncateText(practice.about))\n              }}></p>\n            {isTruncated && (\n              <button onClick={() => setIsModalVisible(true)} className=\"mt-4 inline-block font-bold text-pink\">\n                Read more →\n              </button>\n            )}\n          </div>\n        </div>\n      </div>\n      {isTruncated && (\n        <AnimatedModal\n          visible={isModalVisible}\n          hideModal={() => setIsModalVisible(false)}\n          showFooter={false}\n          header={\"About me\"}\n          fullHeightInMobile={true}\n          dialogClassName=\"overflow-auto max-h-[90vh]\">\n          <p\n            dangerouslySetInnerHTML={{\n              __html: nl2br(practice.about)\n            }}></p>\n        </AnimatedModal>\n      )}\n    </ScrollToSection>\n  )\n}\n\nexport default AboutMeSection\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React from \"react\"\n\nimport Typography from \"../../components/shared/Typography\"\n\nexport default function CTASection({ practice }) {\n  const proIsVirtualOnly = practice.locations.every((location) => location.kind === \"virtual\")\n  const hasFreeConsultation = practice.services.some((service) => service.amountCents === 0)\n\n  const title = hasFreeConsultation ? \"Schedule a free discovery call now.\" : \"Schedule an appointment now.\"\n\n  const subtitle = `I'm based in ${practice.city}, ${practice.stateAbbreviation}, and offer ${\n    proIsVirtualOnly ? \"virtual\" : \"in-person and video\"\n  } sessions.`\n\n  const ctaText = hasFreeConsultation ? \"Book your free discovery call\" : \"Book your appointment now\"\n\n  let imgUrl =\n    practice.galleryImages.length > 1 && practice.galleryImages[1]?.filestackPhoto?.large?.webp\n      ? `https://cdn.filestackcontent.com/${practice.galleryImages[1]?.filestackPhoto?.large?.webp}`\n      : \"/images/homepage/hero_images/image-5.webp\"\n\n  return (\n    <section className=\"min-h-[50vh]\">\n      <div\n        className=\"min-h-[50vh] bg-cover bg-center bg-no-repeat bg-blend-multiply\"\n        style={{ backgroundImage: `url(${imgUrl})` }}>\n        <div className=\"flex h-full min-h-[50vh] w-full items-center bg-purple bg-opacity-[0.64] backdrop-blur-md\">\n          <div className=\"mx-auto flex h-full max-w-splash-container items-end justify-center hplg:px-8 sm:px-6\">\n            <div className=\"flex h-full max-w-3xl flex-col items-center gap-4 py-24 text-center sm:pb-16\">\n              <Typography variant=\"h2\" className=\"font-profilePage leading-tight text-white\">\n                {title}\n              </Typography>\n              <Typography variant=\"h4\" as=\"p\" className=\"mb-4 font-normal leading-normal text-white\">\n                {subtitle}\n              </Typography>\n              <WebAppBookNow\n                practiceId={practice.id}\n                buttonCopy={ctaText}\n                buttonClasses=\"md:w-full rounded-lg border-pink bg-pink font-bold px-8 py-4 text-white\"\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  )\n}\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport React, { useEffect, useState } from \"react\"\n\nimport ReviewStars from \"../../components/shared/ReviewStars\"\nimport { scrollToAbout, scrollToCredentials, scrollToReviews, scrollToServices } from \"../ProProfileV2\"\n\nfunction StickyHeader({ practitioner, practice, isVisible }) {\n  return (\n    <div\n      className={`fixed top-0 z-50 w-full bg-blue-dark/80 backdrop-blur-lg transition-transform duration-300 ${\n        isVisible ? \"translate-y-0 opacity-100\" : \"-translate-y-full opacity-0\"\n      }`}>\n      <div className=\"mx-auto flex max-w-7xl flex-row items-center p-8 text-white md:px-6\">\n        <div className=\"max-w-[50%]\">\n          <div className=\"font-profilePage text-2xl\">{practitioner.name}</div>\n        </div>\n        <div className=\"ml-auto flex flex-row items-center min_md:gap-8\">\n          <button onClick={scrollToAbout} className=\"md:hidden\">\n            About\n          </button>\n          <button onClick={scrollToServices} className=\"md:hidden\">\n            Services\n          </button>\n          <button onClick={scrollToReviews} className=\"md:hidden\">\n            Reviews\n          </button>\n          <button onClick={scrollToCredentials} className=\"md:hidden\">\n            Credentials\n          </button>\n          <WebAppBookNow\n            practiceId={practice.id}\n            buttonCopy=\"Book now\"\n            buttonClasses=\"rounded-lg border-pink bg-pink font-bold px-4 py-1\"\n          />\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default function HeroSection({ practice }) {\n  const practitioner = practice.user\n  const reviews = practice.reviews\n  const roundedAverageRating = Math.round(practice.averageRating)\n\n  const hasFreeConsultation = practice.services.some((service) => service.amountCents === 0)\n\n  const ctaText = hasFreeConsultation ? \"Book your free discovery call\" : \"Book your appointment now\"\n\n  const [showStickyHeader, setShowStickyHeader] = useState(false)\n\n  const fontSize = \"clamp(24px, 24px + 2.25vw, 56px)\"\n\n  useEffect(() => {\n    const handleScroll = () => {\n      if (window.scrollY > 200) {\n        setShowStickyHeader(true)\n      } else {\n        setShowStickyHeader(false)\n      }\n    }\n\n    window.addEventListener(\"scroll\", handleScroll)\n    return () => {\n      window.removeEventListener(\"scroll\", handleScroll)\n    }\n  }, [])\n\n  let heroImgUrl =\n    practice.galleryImages?.length > 0 && practice.galleryImages[0].filestackPhoto?.large?.webp\n      ? `https://cdn.filestackcontent.com/${practice.galleryImages[0].filestackPhoto?.large?.webp}`\n      : \"/images/homepage/hero_images/image-5.webp\"\n\n  return (\n    <>\n      <StickyHeader practitioner={practitioner} practice={practice} isVisible={showStickyHeader} />\n      <section className=\"min-h-[50vh] md:mb-10\">\n        <div\n          className=\"mb-10 min-h-[50vh] bg-cover bg-center bg-no-repeat bg-blend-multiply sm:mb-5\"\n          style={{ backgroundImage: `url(${heroImgUrl})` }}>\n          <div className=\"h-full min-h-[50vh] w-full bg-purple bg-opacity-[0.64] backdrop-blur-md\">\n            <div className=\"mx-auto flex max-w-7xl flex-row items-center p-8 text-white md:px-6\">\n              <div className=\"max-w-[50%]\">\n                <div className=\"font-profilePage text-2xl font-bold\">{practitioner.name}</div>\n                <div>{practitioner.title}</div>\n              </div>\n              <div className=\"ml-auto flex flex-row items-center min_md:gap-8\">\n                <button onClick={scrollToAbout} className=\"md:hidden\">\n                  About\n                </button>\n                <button onClick={scrollToServices} className=\"md:hidden\">\n                  Services\n                </button>\n                <button onClick={scrollToReviews} className=\"md:hidden\">\n                  Reviews\n                </button>\n                <button onClick={scrollToCredentials} className=\"md:hidden\">\n                  Credentials\n                </button>\n                <WebAppBookNow\n                  practiceId={practice.id}\n                  buttonCopy=\"Book now\"\n                  buttonClasses=\"rounded-lg border-pink bg-pink font-bold px-4 py-1\"\n                />\n              </div>\n            </div>\n            <div className=\"mx-auto flex h-full max-w-splash-container flex-row items-center justify-center hplg:px-8 md:flex-col min_md:pb-10 sm:px-6\">\n              <div className=\"flex max-w-3xl flex-col items-start gap-4 md:pb-16 min_md:w-1/2 min_md:py-24\">\n                <div className=\"font-profilePage font-bold leading-tight text-white\" style={{ fontSize }}>\n                  {practice.headline}\n                </div>\n                <WebAppBookNow\n                  practiceId={practice.id}\n                  buttonCopy={ctaText}\n                  buttonClasses=\"md:w-full rounded-lg border-pink bg-pink font-bold px-8 py-4 text-white\"\n                />\n                {reviews && reviews.length > 0 && (\n                  <div className=\"flex items-center gap-2\">\n                    <ReviewStars rating={roundedAverageRating} />\n                    <div>\n                      <button className=\"font-bold text-white underline\" onClick={scrollToReviews}>\n                        {reviews.length} reviews\n                      </button>\n                    </div>\n                  </div>\n                )}\n              </div>\n              <div className=\"flex justify-end md:-mb-10 min_md:ml-10 min_md:w-1/2\">\n                <img src={heroImgUrl} alt=\"Gallery image\" className=\"w-full max-w-[480px]\" />\n              </div>\n            </div>\n          </div>\n        </div>\n      </section>\n    </>\n  )\n}\n","import { BuildingOfficeIcon, VideoCameraIcon } from \"@heroicons/react/24/outline\"\nimport { GoogleMap, LoadScript, Marker, Circle } from \"@react-google-maps/api\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport Typography from \"../../components/shared/Typography\"\nimport ScrollToSection from \"../ProProfile/ScrollToSection\"\n\nconst travelDistanceInMeters = (distanceInMiles) => Number(distanceInMiles) * 1609.34\n\n// There are approximately 69 miles in one latitude degree. The 0.9 comes from estimating the half the size of the\n// icon we're using to hide address at map zoom level 11. This will not work properly if you change the map zoom level!\nconst HIDE_LOCATION_ICON_ADJUSTMENT = 0.9 / 69\n\nconst LocationSectionV2 = ({ practice, className, showVirtualLocation = true }) => {\n  const physicalLocations = practice.locations\n    .filter((l) => (l.kind === \"office\" || l.kind === \"home\") && l.latitude !== null && l.longitude !== null)\n    .sort((a, b) => b.kind.localeCompare(a.kind))\n\n  const virtualLocation = practice.locations.filter((l) => l.kind === \"virtual\")[0]\n\n  return (\n    <ScrollToSection id=\"location\" className=\"mb-[40px] border-none pb-0\">\n      <div className={twMerge(\"flex flex-wrap justify-between gap-y-6 sm:flex-col\", className)}>\n        {physicalLocations.map((location) => {\n          const markerPosition = { lat: location.latitude, lng: location.longitude }\n          const mapCenter = { lat: location.latitude, lng: location.longitude }\n\n          if (location.hideAddress) {\n            // northern hemisphere\n            if (location.latitude > 0) {\n              mapCenter.lat = mapCenter.lat + HIDE_LOCATION_ICON_ADJUSTMENT\n              markerPosition.lat = markerPosition.lat - HIDE_LOCATION_ICON_ADJUSTMENT\n            } else {\n              mapCenter.lat = mapCenter.lat + HIDE_LOCATION_ICON_ADJUSTMENT\n              markerPosition.lat = markerPosition.lat - HIDE_LOCATION_ICON_ADJUSTMENT\n            }\n          }\n\n          return (\n            <div key={`location-${location.id}`}>\n              <div className=\"h-[200px] w-[356px] sm:w-full\">\n                <LoadScript googleMapsApiKey=\"AIzaSyBJzO3o3qx-4b53mVm0BA23J1z_Aj7MWmE\">\n                  <GoogleMap\n                    mapContainerStyle={{ width: \"100%\", height: \"100%\" }}\n                    center={mapCenter}\n                    zoom={location.kind === \"home\" ? 10 : !location.hideAddress ? 15 : 11}\n                    options={{ disableDefaultUI: true }}>\n                    {location.kind === \"home\" ? (\n                      <Circle\n                        center={markerPosition}\n                        radius={travelDistanceInMeters(5)}\n                        options={{ strokeColor: \"#BC5894\" }}\n                      />\n                    ) : location.hideAddress ? (\n                      <Marker position={markerPosition} icon=\"/defaults/m5.png\" />\n                    ) : (\n                      <Marker position={markerPosition} icon=\"/defaults/default-map-pin.svg\" />\n                    )}\n                  </GoogleMap>\n                </LoadScript>\n              </div>\n              <div className=\"mt-4 flex items-start gap-2\">\n                {location.kind === \"office\" ? (\n                  <>\n                    <div className=\"flex flex-none items-center justify-center rounded-full bg-pink/20 p-1\">\n                      <BuildingOfficeIcon className=\"h-6 w-6 text-purple\" />\n                    </div>\n                    <div className=\"flex flex-col\">\n                      {!location.hideAddress && <div>{location.address}</div>}\n                      <div>\n                        {location.city}, {location.stateAbbreviation} {location.zip}\n                      </div>\n                      {location.hideAddress && (\n                        <Typography variant=\"smSubtitle\" as=\"div\">\n                          Address shown after booking\n                        </Typography>\n                      )}\n                    </div>\n                  </>\n                ) : (\n                  <>\n                    <div className=\"flex flex-none items-center justify-center rounded-full bg-pink/20 p-0.5\">\n                      <img src=\"/images/icons/car.svg\" alt=\"Car\" className=\"h-7 w-7 text-purple\" />\n                    </div>\n                    <div className=\"flex flex-col\">\n                      <div>\n                        {location.city}, {location.stateAbbreviation} {location.zip}\n                      </div>\n                      <Typography variant=\"smSubtitle\" as=\"div\">\n                        I come to you\n                      </Typography>\n                    </div>\n                  </>\n                )}\n              </div>\n            </div>\n          )\n        })}\n      </div>\n      {showVirtualLocation && virtualLocation && (\n        <div className=\"mt-4 flex items-center gap-2\">\n          <div className=\"flex flex-none items-center justify-center rounded-full bg-gray-light p-1\">\n            <VideoCameraIcon className=\"h-6 w-6 text-gray-dark\" />\n          </div>\n          <div>I offer video sessions</div>\n        </div>\n      )}\n    </ScrollToSection>\n  )\n}\n\nexport default LocationSectionV2\n","import { AcademicCapIcon, CheckBadgeIcon } from \"@heroicons/react/24/outline\"\nimport React from \"react\"\n\nimport HoverPopover from \"../../components/shared/HoverPopover\"\nimport Typography from \"../../components/shared/Typography\"\nimport { capitalize } from \"../../utils/utils\"\nimport { CredentialPopover, LicensePopover } from \"../ProProfile/CredentialsSection\"\nimport ScrollToSection from \"../ProProfile/ScrollToSection\"\n\nconst MyCredentialsSection = ({ practice }) => {\n  const proCredentials = practice.proCredentials\n\n  return (\n    <ScrollToSection id=\"credentials\" className=\"mb-0 border-none pb-0\">\n      <div className=\"mx-auto max-w-4xl py-12\">\n        <h2 className=\"mb-1 text-center font-profilePage text-2xl\">MY CREDENTIALS</h2>\n        <div className=\"mb-8 flex flex-row items-center justify-center gap-2\">\n          <img src=\"/images/healme_logo.svg\" alt=\"Logo\" className=\"h-6 w-6 rounded border border-gray-dark p-1\" />\n          <div className=\"text-sm text-gray-dark\">Heal.me verified</div>\n        </div>\n\n        <div className=\"mt-4 grid grid-cols-2 gap-2 sm:grid-cols-1\">\n          {proCredentials.map((proCredential) => (\n            <div key={`credential-${proCredential.credential.name}`} className=\"flex items-start gap-2\">\n              {proCredential.kind === \"degree\" ? (\n                <AcademicCapIcon className=\"h-6 w-6 flex-none text-gray-dark\" />\n              ) : (\n                <CheckBadgeIcon className=\"h-6 w-6 flex-none text-gray-dark\" />\n              )}\n              <div>\n                {proCredential.kind === \"license\" || proCredential.filestackDocumentName ? (\n                  <HoverPopover\n                    credentialKind={proCredential.kind}\n                    popoverContent={\n                      proCredential.kind === \"license\" ? (\n                        <LicensePopover proCredential={proCredential} practitioner={practice.user} />\n                      ) : (\n                        <CredentialPopover proCredential={proCredential} />\n                      )\n                    }>\n                    <span className=\"cursor-pointer border-b-2 border-dashed border-gray-light\">\n                      {proCredential.credential.name}\n                    </span>\n                  </HoverPopover>\n                ) : (\n                  <a\n                    className=\"border-b-2 border-dashed border-gray-light\"\n                    target=\"_blank\"\n                    href={proCredential.filestackDocument}\n                    rel=\"noreferrer\">\n                    {proCredential.credential.name}\n                  </a>\n                )}\n                {proCredential.licenseNumber && proCredential.stateIssued && (\n                  <Typography variant=\"smSubtitle\">\n                    State of {capitalize(proCredential.stateIssued)} #{proCredential.licenseNumber}\n                  </Typography>\n                )}\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n    </ScrollToSection>\n  )\n}\n\nexport default MyCredentialsSection\n","import {\n  BuildingOfficeIcon,\n  ChatBubbleLeftEllipsisIcon,\n  CheckIcon,\n  HomeIcon,\n  VideoCameraIcon\n} from \"@heroicons/react/24/outline\"\nimport React from \"react\"\n\nimport Typography from \"../../components/shared/Typography\"\nimport { joinWithAnd } from \"../../utils/utils\"\nimport AskQuestionButton from \"../ProProfile/AskQuestionButton\"\nimport ScrollToSection from \"../ProProfile/ScrollToSection\"\n\nconst MyPracticeSection = ({ practice }) => {\n  const languages = joinWithAnd(practice.languages.map((l) => l.name))\n  const ageWorkWiths = joinWithAnd(practice.ageWorkWiths.map((a) => a.name.toLowerCase()))\n  const workWiths = joinWithAnd(practice.workWiths.map((w) => w.name.toLowerCase()))\n  const officeLocation = practice.locations.find((l) => l.kind === \"office\")\n  const virtualLocation = practice.locations.find((l) => l.kind === \"virtual\")\n  const homeLocation = practice.locations.find((l) => l.kind === \"home\")\n\n  return (\n    <ScrollToSection id=\"about\" className=\"mb-0 border-none pb-0\">\n      <div className=\"mx-auto max-w-4xl py-12\">\n        <h2 className=\"mb-8 text-center font-profilePage text-2xl\">MY PRACTICE</h2>\n\n        <div className=\"mt-4 grid grid-cols-2 gap-2 sm:grid-cols-1\">\n          {officeLocation && (\n            <div className=\"flex items-start gap-2\">\n              <BuildingOfficeIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Offers in-person sessions</div>\n            </div>\n          )}\n          {homeLocation && (\n            <div className=\"flex items-start gap-2\">\n              <HomeIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Offers in-your-home sessions</div>\n            </div>\n          )}\n          {virtualLocation && (\n            <div className=\"flex items-start gap-2\">\n              <VideoCameraIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Offers virtual sessions</div>\n            </div>\n          )}\n          {languages && (\n            <div className=\"flex items-start gap-2\">\n              <ChatBubbleLeftEllipsisIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Speaks {languages}</div>\n            </div>\n          )}\n          {ageWorkWiths && (\n            <div className=\"flex items-start gap-2\">\n              <CheckIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Works with {ageWorkWiths}</div>\n            </div>\n          )}\n          {workWiths && (\n            <div className=\"flex items-start gap-2\">\n              <CheckIcon className=\"mt-0.5 h-5 w-5 flex-none text-gray-dark\" />\n              <div>Works with {workWiths}</div>\n            </div>\n          )}\n        </div>\n        <div className=\"mt-8 flex flex-col items-center\">\n          <AskQuestionButton practice={practice} className=\"rounded-lg border-pink text-pink\" />\n          <Typography variant=\"smSubtitle\" as=\"div\" className=\"mt-2\">\n            I respond in ~24 hours\n          </Typography>\n        </div>\n      </div>\n    </ScrollToSection>\n  )\n}\n\nexport default MyPracticeSection\n","import React, { useState } from \"react\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport EndorsementsSection from \"../ProProfile/EndorsementsSection\"\nimport ReviewCard from \"../ProProfile/ReviewCard\"\nimport ScrollToSection, { scrollToId } from \"../ProProfile/ScrollToSection\"\n\nconst MyReviewsSection = ({ practice }) => {\n  const reviews = practice.reviews\n  const skills = practice.skills\n  const practitionerName = practice.user.name\n\n  const [showAllReviews, setShowAllReviews] = useState(false)\n  const displayedReviews = showAllReviews ? reviews : reviews.slice(0, 10)\n\n  return (\n    <ScrollToSection id=\"reviews\" className=\"mb-0 border-none pb-0\">\n      <div className=\"mx-auto max-w-4xl py-12\">\n        <h2 className=\"mb-1 text-center font-profilePage text-2xl\">MY REVIEWS</h2>\n        <div className=\"mb-8 flex flex-row items-center justify-center gap-2\">\n          <img src=\"/images/healme_logo.svg\" alt=\"Logo\" className=\"h-6 w-6 rounded border border-gray-dark p-1\" />\n          <div className=\"text-sm text-gray-dark \">Heal.me verified</div>\n        </div>\n        <div className=\"flex justify-center\">\n          <EndorsementsSection\n            skills={skills}\n            showAllButton={true}\n            count={10}\n            className=\"items-center\"\n            listClasses=\"justify-center\"\n            buttonClasses=\"border-none underline text-sm focus:ring-0 active:bg-transparent\"\n          />\n        </div>\n        <div className=\"mt-6 flex flex-col gap-4\">\n          {displayedReviews.map((review) => (\n            <ReviewCard key={`review-${review.id}`} review={review} practitionerName={practitionerName} />\n          ))}\n          {reviews.length > 10 && (\n            <Button\n              type=\"tertiary\"\n              className=\"w-fit border-none text-sm underline focus:ring-0 active:bg-transparent sm:w-full\"\n              onClick={(e) => {\n                setShowAllReviews(!showAllReviews)\n                if (showAllReviews) {\n                  scrollToId(e, \"reviews\")\n                }\n              }}>\n              {showAllReviews ? \"See less\" : \"See all reviews\"}\n            </Button>\n          )}\n        </div>\n      </div>\n    </ScrollToSection>\n  )\n}\n\nexport default MyReviewsSection\n","import { WebAppBookNow } from \"@heal-me/healme-widget\"\nimport { ArrowRightIcon } from \"@heroicons/react/24/outline\"\nimport React from \"react\"\n\nimport { formatPrice, truncate } from \"../../utils/utils\"\nimport NextAvailableSlot from \"../ProProfile/NextAvailableSlot\"\nimport ScrollToSection from \"../ProProfile/ScrollToSection\"\n\nconst BookNowText = (\n  <>\n    <span className=\"underline\">Book now</span>\n    <span className=\"ml-2\">\n      <ArrowRightIcon className=\"h-4 w-4\" />\n    </span>\n  </>\n)\n\nconst MyServicesSection = ({ practice }) => {\n  const services = practice.services.slice(0, 5)\n\n  const formattedPrice = (amount, currency) => {\n    if (amount === 0) {\n      return \"Free\"\n    }\n    return `${formatPrice(amount)} ${currency == \"CAD\" ? \" CAD\" : \"\"}`\n  }\n\n  const largeImageUrl = (service) => {\n    const handle = service.photoHandles?.large?.webp || service.photoHandles?.original?.any\n    return handle ? `https://cdn.filestackcontent.com/${handle}` : null\n  }\n\n  return (\n    <ScrollToSection id=\"services\" className=\"mb-0 border-none pb-0\">\n      <div className=\"mx-auto max-w-4xl px-6 py-8\">\n        <h2 className=\"mb-8 text-center font-profilePage text-2xl\">MY SERVICES</h2>\n        {services.map((service, index) => (\n          <div key={index} className=\"mb-12 flex flex-col items-start rounded-lg bg-white py-6 min_md:flex-row\">\n            <div className=\"w-full min_md:w-3/4\">\n              <h3 className=\"mb-2 font-profilePage text-3xl font-semibold\">{service.name}</h3>\n              <div className=\"mb-2 text-lg\">\n                <span\n                  className=\"wysiwyg-content\"\n                  dangerouslySetInnerHTML={{\n                    __html: truncate(service.description, 180).replace(/<\\/?(p|h2|h3|h4|ul|ol|li)[^>]*>/g, \" \")\n                  }}\n                />\n                {service.description.length > 180 && (\n                  <WebAppBookNow\n                    practiceId={practice.id}\n                    serviceId={service.id}\n                    buttonCopy=\"See more\"\n                    buttonClasses=\"font-bold underline\"\n                    openServiceDetail={true}\n                  />\n                )}\n              </div>\n              <p className=\"mb-2 mt-6 text-lg\">\n                <span className=\"font-bold\">{formattedPrice(service.amountCents, practice.defaultCurrency)} ·</span>{\" \"}\n                <span>{service.timeLength} minutes</span>\n                {service.package && <span> · {service.numberOfSessions} sessions</span>}\n              </p>\n              <div className=\"flex items-baseline gap-12 md:flex-col md:gap-4\">\n                <div className=\"mt-4 inline-block font-bold text-pink\">\n                  <WebAppBookNow\n                    practiceId={practice.id}\n                    serviceId={service.id}\n                    buttonCopy={BookNowText}\n                    buttonClasses=\"flex items-center\"\n                  />\n                </div>\n                {!service.package && <NextAvailableSlot service={service} />}\n              </div>\n            </div>\n            <div className=\"mt-6 flex w-full justify-center min_md:mt-0 min_md:w-1/4\">\n              {largeImageUrl(service) && (\n                <img src={largeImageUrl(service)} alt={service.name} className=\"h-[200px] w-[200px] rounded-lg\" />\n              )}\n            </div>\n          </div>\n        ))}\n        <WebAppBookNow\n          practiceId={practice.id}\n          buttonCopy=\"See all services\"\n          buttonClasses=\"border-pink border rounded py-1 px-4 font-bold bg-white text-pink\"\n        />\n      </div>\n    </ScrollToSection>\n  )\n}\n\nexport default MyServicesSection\n","import React from \"react\"\n\nimport YoutubeIcon from \"../../components/icons/YoutubeIcon\"\nimport { scrollToAbout, scrollToCredentials, scrollToReviews, scrollToServices } from \"../ProProfileV2\"\n\nconst ProProfileFooter = ({ practice }) => (\n  <footer className=\"bg-pink/10 px-6 py-20\">\n    <div className=\"mx-auto flex max-w-6xl flex-col justify-between min_md:flex-row\">\n      <div className=\"text-center min_md:text-left\">\n        <h1 className=\"mb-2 font-profilePage text-3xl font-bold\">{practice.user.name}</h1>\n        <p className=\"text-lg\">\n          {practice.city}, {practice.stateAbbreviation}\n        </p>\n      </div>\n      <div className=\"flex flex-1 flex-col items-center justify-between min_md:items-end\">\n        <div className=\"mt-4 flex justify-between gap-4 md:flex-col min_md:mt-0\">\n          <button onClick={scrollToServices} className=\"text-center text-lg font-semibold\">\n            Services\n          </button>\n          <button onClick={scrollToAbout} className=\"text-center text-lg font-semibold\">\n            About\n          </button>\n          <button onClick={scrollToReviews} className=\"text-center text-lg font-semibold\">\n            Reviews\n          </button>\n          <button onClick={scrollToCredentials} className=\"text-center text-lg font-semibold\">\n            Credentials\n          </button>\n          {practice.instagram && (\n            <a href={practice.instagram} className=\"flex justify-center\">\n              <img src=\"/images/icons/instagram.svg\" alt=\"Instagram\" />\n            </a>\n          )}\n          {practice.facebook && (\n            <a href={practice.facebook} className=\"flex justify-center\">\n              <img src=\"/images/icons/facebook.svg\" alt=\"Facebook\" />\n            </a>\n          )}\n          {practice.tiktok && (\n            <a href={practice.tiktok} className=\"flex justify-center\">\n              <img src=\"/images/icons/tiktok.svg\" alt=\"TikTok\" />\n            </a>\n          )}\n          {practice.linkedin && (\n            <a href={practice.linkedin} className=\"flex justify-center\">\n              <img src=\"/images/icons/linkedin.svg\" alt=\"LinkedIn\" />\n            </a>\n          )}\n          {practice.twitter && (\n            <a href={practice.twitter} className=\"flex justify-center\">\n              <img src=\"/images/icons/twitter.svg\" alt=\"Twitter\" />\n            </a>\n          )}\n          {practice.youtube && (\n            <a href={practice.youtube} className=\"flex justify-center\">\n              <YoutubeIcon />\n            </a>\n          )}\n        </div>\n        <div className=\"mt-4 flex items-end rounded-md border bg-white px-3 py-2\">\n          <div>\n            Powered by <span className=\"font-bold\">Heal.me</span>\n          </div>\n        </div>\n      </div>\n    </div>\n  </footer>\n)\n\nexport default ProProfileFooter\n","import React from \"react\"\n\nimport { CurrentUserProvider } from \"../contexts/CurrentUserContext\"\nimport { ToastProvider } from \"../contexts/ToastContext\"\nimport GraphQLProvider from \"../providers/GraphQLProvider\"\n\nimport GalleryImagesSection from \"./ProProfile/GalleryImagesSection\"\nimport { scrollToId } from \"./ProProfile/ScrollToSection\"\nimport AboutMeSection from \"./ProProfileV2/AboutMeSection\"\nimport CTASection from \"./ProProfileV2/CTASection\"\nimport HeroSection from \"./ProProfileV2/HeroSection\"\nimport LocationSectionV2 from \"./ProProfileV2/LocationSectionV2\"\nimport MyCredentialsSection from \"./ProProfileV2/MyCredentialsSection\"\nimport MyPracticeSection from \"./ProProfileV2/MyPracticeSection\"\nimport MyReviewsSection from \"./ProProfileV2/MyReviewsSection\"\nimport MyServicesSection from \"./ProProfileV2/MyServicesSection\"\nimport ProProfileFooter from \"./ProProfileV2/ProProfileFooter\"\n\nexport const scrollToAbout = (e) => scrollToId(e, \"about\")\nexport const scrollToReviews = (e) => scrollToId(e, \"reviews\")\nexport const scrollToServices = (e) => scrollToId(e, \"services\")\nexport const scrollToCredentials = (e) => scrollToId(e, \"credentials\")\n\nconst ProProfileV2 = ({ practice, currentUser }) => {\n  practice.skills =\n    practice.skills.filter((skill) => skill.endorsementsCount > 0).length === 0\n      ? practice.skills.sort((a, b) => a.position - b.position)\n      : practice.skills\n          .filter((skill) => skill.endorsementsCount > 0)\n          .sort((a, b) => b.endorsementsCount - a.endorsementsCount || a.specialty.name.localeCompare(b.specialty.name))\n\n  return (\n    <GraphQLProvider>\n      <ToastProvider>\n        <CurrentUserProvider defaultUser={currentUser}>\n          <main>\n            <HeroSection practice={practice} />\n            <MyServicesSection practice={practice} />\n            <AboutMeSection practice={practice} />\n            <div className=\"mx-auto max-w-7xl p-8 md:px-6 md:pt-0\">\n              {practice.galleryImages.length > 0 && (\n                <GalleryImagesSection\n                  images={practice.galleryImages}\n                  sectionClasses=\"flex justify-center min_md:mt-0 mb-8\"\n                />\n              )}\n              <MyReviewsSection practice={practice} />\n              <MyCredentialsSection practice={practice} />\n              <MyPracticeSection practice={practice} />\n              <LocationSectionV2 practice={practice} className=\"justify-center gap-4\" showVirtualLocation={false} />\n            </div>\n            <CTASection practice={practice} />\n            <ProProfileFooter practice={practice} />\n          </main>\n        </CurrentUserProvider>\n      </ToastProvider>\n    </GraphQLProvider>\n  )\n}\n\nexport default ProProfileV2\n","import React, { useCallback, useRef, useEffect } from \"react\"\n\nimport { EditableValue, Label, TextArea } from \"../../components/shared/Inputs\"\nimport { stripHTMLTags } from \"../../utils/utils\"\n\nimport { useWebsiteBuilder } from \"./WebsiteBuilderContext\"\n\nconst ContentInput = ({\n  name,\n  fieldName,\n  text,\n  scrollToId,\n  maxLength,\n  InputTag = TextArea,\n  textAreaRows = 1,\n  inputLabel,\n  inputValue,\n  onChange,\n  children\n}) => {\n  const { practice, setPractice, openField, setOpenField, lastSavedPractice, fetching, onSave, setHighlightedField } =\n    useWebsiteBuilder()\n  fieldName ||= name.toLowerCase()\n  const inputRef = useRef(null)\n  const editableValueRef = useRef(null)\n  const containerRef = useRef(null)\n\n  const getNestedValue = (obj, path) => path.split(\".\").reduce((acc, part) => acc && acc[part], obj)\n\n  const setNestedValue = (obj, path, value) => {\n    const parts = path.split(\".\")\n    const lastPart = parts.pop()\n    const target = parts.reduce((acc, part) => {\n      if (!acc[part]) acc[part] = {}\n      return acc[part]\n    }, obj)\n    target[lastPart] = value\n  }\n\n  const deepClone = (obj) => JSON.parse(JSON.stringify(obj))\n\n  const characterCount = stripHTMLTags(getNestedValue(practice, fieldName))?.length || 0\n  const isMaxReached = maxLength && characterCount >= maxLength\n\n  const handleInputChange = useCallback(\n    (e) => {\n      const newValue = e.target.value\n      const truncatedValue = maxLength ? newValue.slice(0, maxLength) : newValue\n      setPractice((currentPractice) => {\n        const newPractice = deepClone(currentPractice)\n        setNestedValue(newPractice, fieldName, truncatedValue)\n        return newPractice\n      })\n    },\n    [maxLength, fieldName, setPractice]\n  )\n\n  useEffect(() => {\n    const handleClickOutside = (event) => {\n      if (containerRef.current && !containerRef.current.contains(event.target) && openField === name) {\n        // setOpenField(null)\n        // editableValueRef.current?.setEditing?.(false)\n        // setHighlightedField(null)\n      }\n    }\n\n    document.addEventListener(\"mousedown\", handleClickOutside)\n    return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n  }, [openField, name, setOpenField])\n\n  return (\n    <div ref={containerRef}>\n      <EditableValue\n        ref={editableValueRef}\n        name={name}\n        value={inputValue || getNestedValue(practice, fieldName) || \"\"}\n        saveDisabled={\n          getNestedValue(practice, fieldName) === getNestedValue(lastSavedPractice, fieldName) ||\n          getNestedValue(practice, fieldName)?.length < 2\n        }\n        disabled={fetching || (openField && openField !== name)}\n        onOpened={() => {\n          setOpenField(name)\n          setHighlightedField(fieldName)\n          document.getElementById(scrollToId)?.scrollIntoView({ behavior: \"smooth\" })\n          setTimeout(() => inputRef.current?.focus(), 500)\n        }}\n        onClosed={() => setHighlightedField(null)}\n        onSave={onSave}\n        onCancel={() => {\n          setOpenField(null)\n          setPractice(deepClone(lastSavedPractice))\n        }}>\n        {text && <p className=\"mb-4 text-sm text-gray-dark\">{text}</p>}\n        {inputLabel && <Label htmlFor={`${name}-input`}>{inputLabel}</Label>}\n        <div className=\"flex flex-col items-end gap-1\">\n          <InputTag\n            ref={inputRef}\n            id={`${name}-input`}\n            name={name}\n            value={inputValue || getNestedValue(practice, fieldName) || \"\"}\n            onChange={onChange || handleInputChange}\n            rows={textAreaRows}\n          />\n          {maxLength && (\n            <div className={`text-xs ${isMaxReached ? \"text-red\" : \"text-gray-dark\"}`}>\n              {characterCount}/{maxLength}\n            </div>\n          )}\n        </div>\n        {children}\n      </EditableValue>\n    </div>\n  )\n}\n\nexport default ContentInput\n","export const generateCustomSource = (sourceUrlsArray) => ({\n  label: \"Heal.me Images\",\n  name: \"CUSTOM_SOURCE_KEY_NAME\",\n  icon: '<svg height=\"36\" viewBox=\"0 0 36 36\" width=\"36\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><circle cx=\"18\" cy=\"18\" fill=\"#eee\" r=\"18\"/><path d=\"m9.9 18c0-1.71 1.39-3.1 3.1-3.1h4v-1.9h-4c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9h-4c-1.71 0-3.1-1.39-3.1-3.1zm4.1 1h8v-2h-8zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4v1.9h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\" fill=\"#000\" fill-opacity=\".7\"/></g></svg>',\n  mounted: (element, actions) => {\n    const list = document.createElement(\"ul\")\n    list.setAttribute(\"class\", \"fsp-picker--custom-source\")\n\n    const handleImageClick = (e) => {\n      e.stopPropagation()\n\n      const element = e.currentTarget\n      const idx = parseInt(element.dataset.idx)\n      const file = sourceUrlsArray[idx]\n\n      if (file) {\n        element.classList.add(\"file-selected\")\n      } else {\n        return\n      }\n\n      actions.fetchAndAddUrl(file.url).then(() => {\n        actions.showSummaryView()\n      })\n\n      return false\n    }\n\n    // Create the list of files\n    sourceUrlsArray.forEach((element, idx) => {\n      const li = document.createElement(\"li\")\n      const span = document.createElement(\"span\")\n\n      li.dataset.idx = idx\n      li.setAttribute(\"id\", `file-${idx}`)\n\n      const thumb = document.createElement(\"img\")\n      thumb.setAttribute(\"src\", element.url)\n      thumb.width = \"20\"\n      thumb.height = \"20\"\n\n      li.appendChild(thumb)\n      span.innerHTML = `${element.name}`\n      li.appendChild(span)\n\n      li.addEventListener(\"click\", handleImageClick)\n      list.appendChild(li)\n    })\n\n    // Add header to change view type\n    const divHeader = document.createElement(\"div\")\n    divHeader.setAttribute(\"class\", \"fsp-picker--custom-source-header\")\n\n    let buttonViewType = document.createElement(\"span\")\n    buttonViewType.classList.add(\"view-type\")\n\n    divHeader.appendChild(buttonViewType)\n\n    const handleViewTypeClick = (e) => {\n      e.stopPropagation()\n      if (element.classList.contains(\"grid\")) {\n        element.classList.remove(\"grid\")\n      } else {\n        element.classList.add(\"grid\")\n      }\n    }\n\n    buttonViewType.addEventListener(\"click\", handleViewTypeClick)\n    buttonViewType.click() // Default to grid view\n    const content = document.querySelector(\".fsp-content\")\n    content.setAttribute(\"style\", \"overflow: auto;\")\n\n    // Add the header and list to the element\n    element.appendChild(divHeader)\n    element.appendChild(list)\n\n    // Automatically select the first image and go to cropping area\n    if (sourceUrlsArray.length > 0) {\n      const firstFile = sourceUrlsArray[0]\n      actions.fetchAndAddUrl(firstFile.url).then(() => {\n        // will automatically go to crop view if enabled\n      })\n    }\n  },\n  unmounted: () => {}\n})\n\n// Switch to custom source by clicking on the custom source icon\nexport const switchToCustomSourceOnOpen = () => {\n  const startTime = Date.now()\n\n  const switchToCustomSource = () => {\n    const customSource = document.querySelector(\".fsp-custom-icon\")\n\n    if (customSource) {\n      customSource.click()\n    } else if (Date.now() - startTime < 10000) {\n      setTimeout(switchToCustomSource, 100)\n    }\n  }\n\n  switchToCustomSource()\n}\n","import { ArrowUpTrayIcon } from \"@heroicons/react/24/outline\"\nimport { PickerOverlay } from \"filestack-react\"\nimport React, { useState } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport { FilePicker } from \"../../components/shared/FileStackWidgets\"\nimport { BASE_INPUT_CLASSNAMES } from \"../../components/shared/Inputs\"\nimport { TabNavLink } from \"../../components/shared/Links\"\nimport { AnimatedModal } from \"../../components/shared/Modal\"\nimport Typography from \"../../components/shared/Typography\"\n\nimport { generateCustomSource, switchToCustomSourceOnOpen } from \"./customPickerUtils\"\n\nconst tabs = [\n  { id: \"uploaded\", label: \"Uploaded images\" },\n  { id: \"upload\", label: \"Upload new\" },\n  { id: \"stock\", label: \"Curated photos\" }\n]\n\nexport default function ImageUploadButton({\n  practice,\n  handleUploadImage,\n  fetching,\n  showCurateTab = true,\n  hideS3Images = false,\n  aspectRatio = null\n}) {\n  const [isOpen, setIsOpen] = useState(false)\n  const [selectedImage, setSelectedImage] = useState(null)\n  const initialTab = practice.allUploadedImages.length === 0 ? \"upload\" : \"uploaded\"\n  const [activeTab, setActiveTab] = useState(initialTab)\n  const [cropModalOpen, setCropModalOpen] = useState(false)\n\n  const handleImageSelect = (imageUrl) => {\n    setSelectedImage(imageUrl === selectedImage ? null : imageUrl)\n  }\n\n  const handleSave = () => {\n    setIsOpen(false)\n    setSelectedImage(null)\n    const handle = selectedImage.split(\"/\").pop()\n    const provider = selectedImage.includes(\"amazonaws.com\") ? \"amazon_s3\" : \"filestack\"\n    handleUploadImage({ handles: [handle], provider })\n  }\n\n  const filteredTabs = showCurateTab ? tabs : tabs.filter((tab) => tab.id !== \"stock\")\n  const uploadedImages = practice.allUploadedImages.filter(\n    (imageUrl) => !hideS3Images || !imageUrl.includes(\"amazonaws.com\")\n  )\n\n  const renderTabContent = () => {\n    switch (activeTab) {\n      case \"upload\":\n        return (\n          <div className=\"p-2\">\n            <Typography variant=\"body\" className=\"mb-4\">\n              Click below to upload a new image.\n            </Typography>\n            <FilePicker\n              as=\"button\"\n              onUploadDone={(res) => {\n                const handles = res.filesUploaded.map((file) => file.handle)\n                handleUploadImage({ handles, provider: \"filestack\" })\n                setIsOpen(false)\n              }}\n              disabled={fetching}\n              transformations={aspectRatio ? { crop: { aspectRatio, force: true } } : { crop: { force: true } }}\n              className={twMerge(BASE_INPUT_CLASSNAMES, \"flex h-8 w-fit items-center gap-2 font-bold\")}\n              maxFiles={1}>\n              <ArrowUpTrayIcon className=\"h-4 w-4\" />\n              Upload\n            </FilePicker>\n          </div>\n        )\n      case \"uploaded\":\n        return (\n          <div className=\"mt-4 h-[calc(100vh-300px)] overflow-y-auto\">\n            <div className=\"grid grid-cols-3 items-center gap-4 p-2\">\n              {uploadedImages &&\n                uploadedImages.map((imageUrl, index) => {\n                  const thumbUrl = imageUrl.replace(\"amazonaws.com\", \"amazonaws.com/thumbnails\")\n                  return (\n                    <div\n                      key={index}\n                      className={`flex cursor-pointer transition-all duration-200 ${\n                        selectedImage === imageUrl ? \"h-fit rounded shadow-lg ring-4 ring-teal\" : \"\"\n                      }`}\n                      onClick={() => handleImageSelect(imageUrl)}>\n                      <img\n                        src={thumbUrl}\n                        alt={`Uploaded image ${index + 1}`}\n                        className=\"w-full self-center rounded object-cover\"\n                      />\n                    </div>\n                  )\n                })}\n            </div>\n            {/* Empty state */}\n            {practice.allUploadedImages.length === 0 && (\n              <div className=\"flex h-full items-center justify-center\">\n                <Typography variant=\"body\" className=\"text-gray-dark\">\n                  No images uploaded yet.\n                </Typography>\n              </div>\n            )}\n          </div>\n        )\n      case \"stock\":\n        return (\n          <div className=\"flex h-[calc(100vh-300px)] flex-col\">\n            <div className=\"grow overflow-y-auto\">\n              <div className=\"grid grid-cols-3 gap-4 p-2 pb-4\">\n                {practice.defaultHeroImages.map((imageUrl, index) => {\n                  const thumbUrl = imageUrl.replace(\"amazonaws.com\", \"amazonaws.com/thumbnails\")\n                  return (\n                    <div\n                      key={index}\n                      className={`cursor-pointer transition-all duration-200 ${\n                        selectedImage === imageUrl ? \"rounded shadow-lg ring-4 ring-teal\" : \"\"\n                      }`}\n                      onClick={() => handleImageSelect(imageUrl)}>\n                      <img\n                        src={thumbUrl}\n                        alt={`Default hero image ${index + 1}`}\n                        className=\"w-full rounded object-cover\"\n                      />\n                    </div>\n                  )\n                })}\n              </div>\n            </div>\n          </div>\n        )\n      default:\n        return null\n    }\n  }\n\n  function CropModal({ imageUrl }) {\n    const customSource = generateCustomSource([{ url: imageUrl, name: \"Selected Image\" }])\n    return createPortal(\n      <PickerOverlay\n        apikey={process.env.FILESTACK_API_KEY}\n        onUploadDone={(res) => {\n          const handles = res.filesUploaded.map((file) => file.handle)\n          handleUploadImage({ handles, provider: \"filestack\" })\n          setIsOpen(false)\n        }}\n        pickerOptions={{\n          transformations: aspectRatio ? { crop: { aspectRatio, force: true } } : { crop: { force: true } },\n          fromSources: [\"local_file_system\", customSource],\n          onOpen: switchToCustomSourceOnOpen,\n          onClose: () => setCropModalOpen(false)\n        }}\n      />,\n      document.body\n    )\n  }\n\n  return (\n    <>\n      <Button type=\"tertiary\" onClick={() => setIsOpen(true)} className=\"flex items-center gap-2\" disabled={fetching}>\n        <ArrowUpTrayIcon className=\"h-4 w-4\" />\n        {initialTab === \"uploaded\" ? \"Change\" : \"Upload\"}\n      </Button>\n\n      {/* Image upload modal */}\n      <AnimatedModal\n        visible={isOpen}\n        hideModal={() => setIsOpen(false)}\n        showFooter={true}\n        actionButtonCopy={activeTab === \"uploaded\" ? \"Use as is\" : \"Save\"}\n        footerButtons={[\n          {\n            label: \"Crop\",\n            type: \"primary\",\n            onClick: () => setCropModalOpen(true),\n            show: activeTab === \"uploaded\",\n            disabled: !selectedImage\n          }\n        ]}\n        saveDisabled={selectedImage === null || fetching}\n        onSave={handleSave}\n        dialogClassName=\"max-h-[100vh] flex flex-col w-[720px] md:w-full\">\n        <div className=\"flex h-full flex-col\">\n          <Typography variant=\"h5\" className=\"mb-4\">\n            Image Selection\n          </Typography>\n\n          <div className=\"mb-4 flex gap-8 border-b border-gray-light\">\n            {filteredTabs.map((tab) => (\n              <TabNavLink\n                key={tab.id}\n                href=\"#\"\n                className=\"cursor-pointer\"\n                active={tab.id === activeTab}\n                onClick={(e) => {\n                  e.preventDefault()\n                  setActiveTab(tab.id)\n                }}>\n                {tab.label}\n              </TabNavLink>\n            ))}\n          </div>\n\n          <div className=\"grow overflow-hidden\">{renderTabContent()}</div>\n        </div>\n        {/* Crop modal */}\n        {cropModalOpen && <CropModal imageUrl={selectedImage} />}\n      </AnimatedModal>\n    </>\n  )\n}\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nconst Thumbnail = ({ photoUrl, className }) => (\n  <div className={twMerge(\"flex h-12 w-12 items-center justify-center rounded-lg border border-gray\", className)}>\n    {photoUrl ? (\n      <img src={photoUrl} alt=\"Headshot\" className=\"aspect-square w-[calc(100%-4px)] rounded-lg\" />\n    ) : (\n      <div className=\"aspect-square w-[calc(100%-4px)] rounded-lg bg-gray-light\" />\n    )}\n  </div>\n)\n\nexport default Thumbnail\n","import { XMarkIcon } from \"@heroicons/react/24/outline\"\nimport React, { useState, useRef, useEffect } from \"react\"\nimport { ReactSortable } from \"react-sortablejs\"\nimport { twMerge } from \"tailwind-merge\"\nimport { useMutation } from \"urql\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport { Label, TextArea } from \"../../components/shared/Inputs\"\nimport { AnimatedModal } from \"../../components/shared/Modal\"\nimport Typography from \"../../components/shared/Typography\"\nimport { useToast } from \"../../contexts/ToastContext\"\n\nimport ImageUploadButton from \"./ImageUploadButton\"\nimport Thumbnail from \"./Thumbnail\"\nimport { useWebsiteBuilder } from \"./WebsiteBuilderContext\"\n\nconst REMOVE_GALLERY_IMAGE_MUTATION = `\n  mutation RemoveGalleryImage($galleryId: ID!) {\n    removeGalleryImage(galleryId: $galleryId) {\n      result\n      errors\n    }\n  }\n`\n\nconst UPLOAD_GALLERY_IMAGES_MUTATION = `\n  mutation AddGalleryImage($handles: [String!]!) {\n    uploadGalleryImages(handles: $handles) {\n      result\n      errors\n      galleryImages {\n        id\n        defaultPhotoUrl\n        position\n        altText\n        filestackPhoto { large { webp } original { any } }\n      }\n    }\n  }\n`\n\nconst REORDER_GALLERY_IMAGES_MUTATION = `\n  mutation ReorderGalleryImages($photosArray: [String!]!) {\n    reorderGalleryImages(photosArray: $photosArray) {\n      result\n    }\n  }\n`\n\nconst UPDATE_GALLERY_IMAGE_MUTATION = `\n  mutation UpdateGalleryImage($id: ID!, $altText: String!) {\n    updateGalleryImage(id: $id, altText: $altText) {\n      result\n    }\n  }\n`\n\nconst GalleryUpload = () => {\n  const [editing, setEditing] = useState(false)\n  const [deleteModalVisible, setDeleteModalVisible] = useState(false)\n  const [deleteImageId, setDeleteImageId] = useState(null)\n  const [galleryImage, setGalleryImage] = useState(null)\n  const [altText, setAltText] = useState(\"\")\n  const containerRef = useRef(null)\n\n  const { practice, setPractice, openField, setOpenField, lastSavedPractice, setHighlightedField, aspectRatios } =\n    useWebsiteBuilder()\n  const [{ fetching: removeImageFetching }, removeGalleryImage] = useMutation(REMOVE_GALLERY_IMAGE_MUTATION)\n  const [{ fetching: uploadImages }, uploadGalleryImages] = useMutation(UPLOAD_GALLERY_IMAGES_MUTATION)\n  const [, reorderGalleryImages] = useMutation(REORDER_GALLERY_IMAGES_MUTATION)\n  const [{ fetching: updateGalleryImageFetching }, updateGalleryImage] = useMutation(UPDATE_GALLERY_IMAGE_MUTATION)\n  const { showToast } = useToast()\n\n  const name = \"Gallery photos\"\n  const fetching = removeImageFetching || uploadImages\n  const disabled = openField && openField !== name\n  const photos = practice.galleryImages\n\n  const aspectRatio = aspectRatios?.[practice.theme.name]?.[\"gallery\"] ?? null\n\n  useEffect(() => {\n    const handleClickOutside = (event) => {\n      if (containerRef.current && !containerRef.current.contains(event.target) && openField === name) {\n        // setEditing(false)\n        // setOpenField(null)\n        // setHighlightedField(null)\n      }\n    }\n\n    document.addEventListener(\"mousedown\", handleClickOutside)\n    return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n  }, [openField, name, setOpenField, setHighlightedField])\n\n  const onCancel = () => {\n    setOpenField(null)\n    setPractice(lastSavedPractice)\n    setHighlightedField(null)\n  }\n\n  const onOpened = () => setOpenField(name)\n\n  const handleSave = async () => {\n    if (galleryImage && altText !== galleryImage.altText) {\n      const result = await updateGalleryImage({\n        id: galleryImage.id,\n        altText\n      })\n\n      if (result?.data?.updateGalleryImage?.result === \"success\") {\n        setPractice((prev) => ({\n          ...prev,\n          galleryImages: prev.galleryImages.map((img) => (img.id === galleryImage.id ? { ...img, altText } : img))\n        }))\n      } else {\n        showToast({\n          type: \"error\",\n          content: \"Failed to update alt text\"\n        })\n        return\n      }\n    }\n\n    showToast(\"Your image alt text has been saved.\")\n  }\n\n  const handleUploadImage = ({ handles }) => {\n    uploadGalleryImages({\n      handles\n    }).then((result) => {\n      if (result?.data?.uploadGalleryImages?.result === \"success\") {\n        setPractice((prev) => ({\n          ...prev,\n          galleryImages: result.data.uploadGalleryImages.galleryImages\n        }))\n        showToast(\"Your photo has been saved.\")\n      } else {\n        console.error(result) // eslint-disable-line no-console\n        let errorMessage = \"There was an error saving your profile photo. Please try again later or contact support.\"\n        if (result.data?.uploadGalleryImages?.errors) errorMessage += ` ${result.data.uploadGalleryImages.errors}`\n        showToast({\n          type: \"error\",\n          content: errorMessage\n        })\n      }\n    })\n  }\n\n  const removePhoto = (galleryId) => {\n    removeGalleryImage({ galleryId }).then((result) => {\n      if (result?.data?.removeGalleryImage?.result === \"success\") {\n        setPractice((prev) => ({\n          ...prev,\n          galleryImages: prev.galleryImages.filter((photo) => photo.id !== galleryId)\n        }))\n        showToast(\"Successfully deleted photo\")\n      } else {\n        showToast({ type: \"error\", content: \"Failed to delete photo\" })\n        console.error(result) // eslint-disable-line no-console\n      }\n    })\n  }\n\n  return (\n    <>\n      <div ref={containerRef} className={twMerge(\"bg-white\", disabled ? \"opacity-50\" : \"\")}>\n        {editing ? (\n          <div>\n            <div className=\"mb-2\">\n              <div className=\"mb-1 font-bold\">{name}</div>\n            </div>\n            <p className=\"mb-4 text-sm text-gray-dark\">\n              Showcase your work, environment, or results with a selection of high-quality images that tell your story.\n            </p>\n            <ReactSortable\n              className=\"flex flex-wrap gap-2\"\n              list={photos}\n              setList={(newPositions) => {\n                if (JSON.stringify(newPositions) !== JSON.stringify(photos)) {\n                  const newOrder = newPositions.map((photo, i) => JSON.stringify({ id: photo.id, position: i + 1 }))\n                  reorderGalleryImages({ photosArray: newOrder }).then((result) => {\n                    if (result?.data?.reorderGalleryImages?.result !== \"success\") {\n                      console.error(result) // eslint-disable-line no-console\n                      showToast({\n                        type: \"error\",\n                        content:\n                          \"There was error reordering your credentials. Please try again later or contact support if the error persists.\"\n                      })\n                    }\n                  })\n                  setPractice((prev) => ({\n                    ...prev,\n                    galleryImages: newPositions\n                  }))\n                }\n              }}>\n              {photos.map((photo) => (\n                <div\n                  key={photo.id}\n                  className={`relative flex h-20 w-20 cursor-grab items-center justify-center rounded-lg border ${\n                    galleryImage?.id === photo.id ? \"border-teal\" : \"border-gray\"\n                  } hover:border-teal`}\n                  onClick={() => {\n                    setGalleryImage(photo)\n                    setAltText(photo.altText)\n                  }}>\n                  <button\n                    className=\"absolute right-1.5 top-1.5 flex h-4 w-4 items-center justify-center rounded bg-white text-gray-dark hover:bg-teal hover:text-white\"\n                    onClick={() => {\n                      setDeleteImageId(photo.id)\n                      setDeleteModalVisible(true)\n                    }}>\n                    <XMarkIcon className=\"h-full w-full stroke-2\" />\n                  </button>\n                  <img\n                    src={photo.defaultPhotoUrl}\n                    alt=\"Gallery photo\"\n                    className=\"aspect-square w-[calc(100%-4px)] rounded-lg\"\n                  />\n                </div>\n              ))}\n            </ReactSortable>\n            {galleryImage && (\n              <div className=\"mt-4\">\n                <Label htmlFor=\"alt-text\">Alt text</Label>\n                <TextArea id=\"alt-text\" value={altText} onChange={(e) => setAltText(e.target.value)} />\n              </div>\n            )}\n            <div className=\"mt-4 flex justify-between\">\n              <ImageUploadButton\n                practice={practice}\n                handleUploadImage={handleUploadImage}\n                fetching={fetching}\n                showCurateTab={false}\n                hideS3Images={true}\n                aspectRatio={aspectRatio}\n              />\n              <div className=\"flex justify-end gap-4\">\n                <Button\n                  disabled={fetching}\n                  type=\"tertiary\"\n                  size=\"small\"\n                  onClick={() => {\n                    setEditing(false)\n                    onCancel()\n                  }}>\n                  Cancel\n                </Button>\n                <Button disabled={fetching || updateGalleryImageFetching} size=\"small\" onClick={handleSave}>\n                  Save\n                </Button>\n              </div>\n            </div>\n          </div>\n        ) : (\n          <div className=\"flex\">\n            <div className=\"mr-4 flex-1\">\n              <Typography variant=\"title\">{name}</Typography>\n              <div className=\"flex flex-wrap gap-2\">\n                {photos.map((photo) => (\n                  <Thumbnail key={photo.id} photoUrl={photo.defaultPhotoUrl} />\n                ))}\n              </div>\n            </div>\n            <div className=\"flex-none\">\n              <button\n                className={twMerge(\"font-bold text-teal underline\", disabled ? \"pointer-events-none\" : \"\")}\n                onClick={() => {\n                  if (disabled) return\n                  setEditing(true)\n                  onOpened(name)\n                  setHighlightedField(name)\n                  document.getElementById(\"gallery-photos\")?.scrollIntoView({ behavior: \"smooth\" })\n                }}>\n                Edit\n              </button>\n            </div>\n          </div>\n        )}\n      </div>\n\n      {/* Delete gallery image modal */}\n      <AnimatedModal\n        visible={deleteModalVisible}\n        hideModal={() => {\n          setDeleteModalVisible(false)\n          setDeleteImageId(null)\n        }}\n        showFooter={true}\n        header=\"Delete gallery image\"\n        actionButtonCopy=\"Delete\"\n        actionButtonType=\"destructive\"\n        onSave={() => {\n          setDeleteModalVisible(false)\n          removePhoto(deleteImageId)\n        }}>\n        <div>\n          <Typography variant=\"body\">Are you sure you want to delete this image?</Typography>\n        </div>\n      </AnimatedModal>\n    </>\n  )\n}\n\nexport default GalleryUpload\n","import React, { useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\nimport { useMutation } from \"urql\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport Typography from \"../../components/shared/Typography\"\nimport { useToast } from \"../../contexts/ToastContext\"\n\nimport ImageUploadButton from \"./ImageUploadButton\"\nimport Thumbnail from \"./Thumbnail\"\nimport { useWebsiteBuilder } from \"./WebsiteBuilderContext\"\n\nconst UPDATE_USER_PHOTO_MUTATION = `\n  mutation UpdateUserPhoto($handle: String!) {\n    updateUserPhoto(handle: $handle) {\n      result\n      errors\n      photoUrl\n    }\n  }\n`\n\nconst HeadshotUpload = () => {\n  const [editing, setEditing] = useState(false)\n  const {\n    practice,\n    setPractice,\n    openField,\n    setOpenField,\n    lastSavedPractice,\n    onSave,\n    setHighlightedField,\n    aspectRatios\n  } = useWebsiteBuilder()\n  const [{ fetching }, updateUserPhoto] = useMutation(UPDATE_USER_PHOTO_MUTATION)\n\n  const name = \"Headshot\"\n  const photoUrl = practice.user.profilePhotoUrl\n  const disabled = openField && openField !== name\n\n  const aspectRatio = aspectRatios?.[practice.theme.name]?.[\"headshot\"] ?? null\n\n  const onCancel = () => {\n    setOpenField(null)\n    setPractice(lastSavedPractice)\n    setHighlightedField(null)\n  }\n\n  const { showToast } = useToast()\n\n  const handleUploadImage = ({ handles }) => {\n    updateUserPhoto({\n      handle: handles[0]\n    }).then((result) => {\n      setOpenField(null)\n      if (result?.data?.updateUserPhoto?.result === \"success\") {\n        setPractice((prev) => ({\n          ...prev,\n          user: {\n            ...prev.user,\n            profilePhotoUrl: result.data.updateUserPhoto.photoUrl\n          }\n        }))\n        showToast(\"Your profile photo has been saved.\")\n      } else {\n        console.error(result) // eslint-disable-line no-console\n        let errorMessage = \"There was an error saving your profile photo. Please try again later or contact support.\"\n        if (result.data?.updateUserPhoto?.errors) errorMessage += ` ${result.data.updateUserPhoto.errors}`\n        showToast({\n          type: \"error\",\n          content: errorMessage\n        })\n      }\n    })\n  }\n\n  return (\n    <div className={twMerge(\"bg-white\", disabled ? \"opacity-50\" : \"\")}>\n      {editing ? (\n        <div>\n          <div className=\"mb-2\">\n            <div className=\"mb-1 font-bold\">{name}</div>\n          </div>\n          <p className=\"mb-4 text-sm text-gray-dark\">\n            Upload a professional headshot to introduce yourself and make a personal connection.\n          </p>\n          <Thumbnail photoUrl={photoUrl} className=\"h-20 w-20\" />\n          <div className=\"mt-4 flex justify-between\">\n            <ImageUploadButton\n              practice={practice}\n              handleUploadImage={handleUploadImage}\n              fetching={fetching}\n              showCurateTab={false}\n              hideS3Images={true}\n              aspectRatio={aspectRatio}\n            />\n            <div className=\"flex justify-end gap-4\">\n              <Button\n                type=\"tertiary\"\n                size=\"small\"\n                onClick={() => {\n                  setEditing(false)\n                  onCancel()\n                }}>\n                Cancel\n              </Button>\n              <Button\n                disabled={fetching}\n                size=\"small\"\n                onClick={() => {\n                  setEditing(false)\n                  onSave()\n                  setHighlightedField(null)\n                }}>\n                Save\n              </Button>\n            </div>\n          </div>\n        </div>\n      ) : (\n        <div className=\"flex\">\n          <div className=\"mr-4 flex-1\">\n            <Typography variant=\"title\">{name}</Typography>\n            <Thumbnail photoUrl={photoUrl} />\n          </div>\n          <div className=\"flex-none\">\n            <button\n              className={twMerge(\"font-bold text-teal underline\", disabled ? \"pointer-events-none\" : \"\")}\n              onClick={() => {\n                if (disabled) return\n                setEditing(true)\n                setOpenField(name)\n                setHighlightedField(name)\n                document.getElementById(\"about\")?.scrollIntoView({ behavior: \"smooth\" })\n              }}>\n              Edit\n            </button>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport default HeadshotUpload\n","import camelCase from \"lodash/camelCase\"\nimport React, { useState, useRef, useEffect } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\nimport { useMutation } from \"urql\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport { Label, TextArea } from \"../../components/shared/Inputs\"\nimport Typography from \"../../components/shared/Typography\"\nimport { useToast } from \"../../contexts/ToastContext\"\n\nimport ImageUploadButton from \"./ImageUploadButton\"\nimport Thumbnail from \"./Thumbnail\"\nimport { useWebsiteBuilder } from \"./WebsiteBuilderContext\"\n\nexport const UPLOAD_IMAGE_MUTATION = `\n  mutation UploadImage($handle: String!, $description: String!, $provider: String) {\n    uploadImage(handle: $handle, description: $description, provider: $provider) {\n      result\n      errors\n      photoUrl\n      altText\n    }\n  }\n`\n\nexport const UPDATE_IMAGE_ASSET_MUTATION = `\n  mutation UpdateImageAsset($id: ID!, $altText: String!) {\n    updateImageAsset(id: $id, altText: $altText) {\n      result\n      errors\n    }\n  }\n`\n\nconst HeroImageUpload = ({ name, fieldName, description, scrollToId, showAltText = true }) => {\n  const [editing, setEditing] = useState(false)\n  const containerRef = useRef(null)\n  const { practice, setPractice, openField, setOpenField, setHighlightedField, aspectRatios, isImpersonating } =\n    useWebsiteBuilder()\n  const [{ fetching }, uploadImage] = useMutation(UPLOAD_IMAGE_MUTATION)\n  const [{ fetching: updating }, updateImageAsset] = useMutation(UPDATE_IMAGE_ASSET_MUTATION)\n\n  let photoUrl = practice[fieldName]\n  const imageAsset = practice.imageAssets.find((image) => image.description === description)\n  const [altText, setAltText] = useState(imageAsset?.altText)\n  if (!photoUrl) {\n    photoUrl = imageAsset?.resizedImageUrl\n  }\n  const disabled = openField && openField !== name\n\n  const aspectRatio = aspectRatios?.[practice.theme.name]?.[camelCase(description)] ?? null\n\n  const { showToast } = useToast()\n\n  const handleUploadImage = ({ handles, provider }) => {\n    uploadImage({\n      handle: handles[0],\n      description,\n      provider\n    }).then((result) => {\n      if (result?.data?.uploadImage?.result === \"success\") {\n        const existingImage = practice.imageAssets.find((img) => img.description === description)\n\n        if (existingImage) {\n          setPractice((prev) => ({\n            ...prev,\n            imageAssets: prev.imageAssets.map((img) =>\n              img.id === existingImage.id\n                ? {\n                    ...img,\n                    altText: result.data.uploadImage.altText,\n                    resizedImageUrl: result.data.uploadImage.photoUrl\n                  }\n                : img\n            )\n          }))\n          setAltText(result.data.uploadImage.altText)\n        } else if (practice[fieldName]) {\n          setPractice((prev) => ({\n            ...prev,\n            [fieldName]: result.data.uploadImage.photoUrl\n          }))\n        } else {\n          setPractice((prev) => {\n            const newImageAsset = {\n              id: imageAsset?.id,\n              description,\n              altText: result.data.uploadImage.altText,\n              resizedImageUrl: result.data.uploadImage.photoUrl\n            }\n\n            return {\n              ...prev,\n              imageAssets: [...prev.imageAssets, newImageAsset]\n            }\n          })\n          setAltText(result.data.uploadImage.altText)\n        }\n\n        setAltText(result.data.uploadImage.altText)\n        showToast(\"Your image has been saved.\")\n      } else {\n        console.error(result) // eslint-disable-line no-console\n        let errorMessage = \"There was an error saving your hero image. Please try again later or contact support.\"\n        if (result.data?.uploadImage?.errors) errorMessage += ` ${result.data.uploadImage.errors}`\n        showToast({\n          type: \"error\",\n          content: errorMessage\n        })\n      }\n    })\n  }\n\n  const handleSave = async () => {\n    if (imageAsset && altText !== imageAsset.altText) {\n      const result = await updateImageAsset({\n        id: imageAsset.id,\n        altText\n      })\n\n      if (result?.data?.updateImageAsset?.result === \"success\") {\n        setPractice((prev) => ({\n          ...prev,\n          imageAssets: prev.imageAssets.map((img) => (img.id === imageAsset.id ? { ...img, altText } : img))\n        }))\n      } else {\n        showToast({\n          type: \"error\",\n          content: \"Failed to update alt text\"\n        })\n        return\n      }\n    }\n\n    showToast(\"Your image alt text has been saved.\")\n  }\n\n  useEffect(() => {\n    const handleClickOutside = (event) => {\n      if (containerRef.current && !containerRef.current.contains(event.target) && openField === name) {\n        // setEditing(false)\n        // setOpenField(null)\n        // setHighlightedField(null)\n      }\n    }\n\n    document.addEventListener(\"mousedown\", handleClickOutside)\n    return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n  }, [openField, name, setOpenField, setHighlightedField])\n\n  return (\n    <div ref={containerRef} className={twMerge(\"bg-white\", disabled ? \"opacity-50\" : \"\")}>\n      {editing ? (\n        <div>\n          <div className=\"mb-2\">\n            <div className=\"mb-1 font-bold\">{name}</div>\n          </div>\n          <p className=\"mb-4 text-sm text-gray-dark\">\n            Select a striking hero image that sets the tone and draws visitors into your website.\n          </p>\n          <Thumbnail photoUrl={photoUrl} className=\"h-20 w-20\" />\n          {showAltText &&\n            isImpersonating &&\n            imageAsset &&\n            !imageAsset?.resizedImageUrl.startsWith(\"https://healme-hero-images.s3.amazonaws.com\") && (\n              <div className=\"mt-4\">\n                <Label htmlFor=\"alt-text\">Alt text</Label>\n                <TextArea id=\"alt-text\" value={altText} onChange={(e) => setAltText(e.target.value)} />\n              </div>\n            )}\n          <div className=\"mt-4 flex justify-between\">\n            <ImageUploadButton\n              practice={practice}\n              handleUploadImage={handleUploadImage}\n              fetching={fetching}\n              aspectRatio={aspectRatio}\n            />\n            <div className=\"flex justify-end gap-4\">\n              {showAltText &&\n                isImpersonating &&\n                imageAsset &&\n                !imageAsset?.resizedImageUrl.startsWith(\"https://healme-hero-images.s3.amazonaws.com\") && (\n                  <Button\n                    disabled={fetching || updating || altText === imageAsset.altText}\n                    size=\"small\"\n                    onClick={handleSave}>\n                    Save Alt Text\n                  </Button>\n                )}\n              <Button\n                disabled={fetching || updating}\n                size=\"small\"\n                type=\"tertiary\"\n                onClick={() => {\n                  setEditing(false)\n                  setOpenField(null)\n                  setHighlightedField(null)\n                }}>\n                Done\n              </Button>\n            </div>\n          </div>\n        </div>\n      ) : (\n        <div className=\"flex\">\n          <div className=\"mr-4 flex-1\">\n            <Typography variant=\"title\">{name}</Typography>\n            <Thumbnail photoUrl={photoUrl} />\n          </div>\n          <div className=\"flex-none\">\n            <button\n              className={twMerge(\"font-bold text-teal underline\", disabled ? \"pointer-events-none\" : \"\")}\n              onClick={() => {\n                if (disabled) return\n                setEditing(true)\n                setOpenField(name)\n                setHighlightedField(name)\n                document.getElementById(scrollToId)?.scrollIntoView({ behavior: \"smooth\" })\n              }}>\n              Edit\n            </button>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport default HeroImageUpload\n","import React from \"react\"\n\nimport { practiceCtaText, practiceDefaultServiceId } from \"../../@core/practice/practice.utils\"\nimport { Select, Label, InputWithLabel } from \"../../components/shared/Inputs\"\nimport { Divider } from \"../../components/shared/Layout\"\nimport QuillEditor from \"../../components/shared/QuillEditor\"\n\nimport ContentInput from \"./ContentInput\"\nimport GalleryUpload from \"./GalleryUpload\"\nimport HeadshotUpload from \"./HeadshotUpload\"\nimport HeroImageUpload from \"./HeroImageUpload\"\nimport { useWebsiteBuilder } from \"./WebsiteBuilderContext\"\n\nconst ContentTab = () => {\n  const { practice, setPractice } = useWebsiteBuilder()\n\n  return (\n    <div>\n      <div>\n        <ContentInput name=\"Name\" fieldName=\"user.name\" />\n        <Divider />\n        <HeroImageUpload\n          name=\"Hero image\"\n          fieldName=\"headerHeroImageUrl\"\n          description=\"header_hero_image\"\n          scrollToId=\"hero-section\"\n          showAltText={false}\n        />\n        <Divider />\n        <ContentInput\n          name=\"Headline\"\n          fieldName=\"websiteHeadline\"\n          text=\"Create a powerful headline that instantly captures attention and communicates your core message.\"\n          scrollToId=\"hero-section\"\n        />\n        <Divider />\n        <ContentInput\n          name=\"Subheadline\"\n          fieldName=\"subHeadline\"\n          textAreaRows={3}\n          text=\"Add a brief subheadline to expand on your main message and engage visitors.\"\n          scrollToId=\"hero-section\"\n        />\n        <Divider />\n        <ContentInput\n          name=\"Call to action button\"\n          fieldName=\"ctaButtonText\"\n          inputValue={practiceCtaText(practice)}\n          inputLabel=\"Call to action text\"\n          text=\"Select a clear and compelling call-to-action that guides visitors toward the next step you want them to take.\"\n          scrollToId=\"hero-section\">\n          <div className=\"mt-4\">\n            <Label htmlFor=\"service-select\">Service</Label>\n            <Select\n              id=\"service-select\"\n              options={practice.services.map((service) => ({\n                value: service.id,\n                label: service.name\n              }))}\n              defaultOption=\"-- select a service --\"\n              onChange={(e) => setPractice((prev) => ({ ...prev, defaultServiceId: e.target.value }))}\n              value={Number(practiceDefaultServiceId(practice)) || \"\"}\n            />\n            <p className=\"mt-2 text-sm text-gray-dark\">Go to your Services to add additional options.</p>\n          </div>\n        </ContentInput>\n        <Divider />\n        <HeroImageUpload\n          name=\"Services Image\"\n          fieldName=\"servicesSectionImageUrl\"\n          description=\"services_section\"\n          scrollToId=\"services\"\n        />\n        <Divider />\n        <HeroImageUpload\n          name=\"Additional Content Image\"\n          fieldName=\"valueStatementImageUrl\"\n          description=\"value_statement\"\n          scrollToId=\"value-statement\"\n        />\n        <Divider />\n        <HeroImageUpload\n          name=\"Additional Content Image Two\"\n          fieldName=\"valueStatementImageTwoUrl\"\n          description=\"value_statement_two\"\n          scrollToId=\"value-statement\"\n        />\n        <Divider />\n        <ContentInput\n          InputTag={QuillEditor}\n          inputValue={practice.valueStatement}\n          onChange={(e) => setPractice((prev) => ({ ...prev, valueStatement: e }))}\n          scrollToId=\"value-statement\"\n          name=\"Additional Content\"\n          fieldName=\"valueStatement\"\n          text=\"Write a statement about how you assist clients and the specific benefits they can expect from your services.\"\n        />\n        <Divider />\n        <HeadshotUpload />\n        <Divider />\n        <ContentInput\n          name=\"About me\"\n          fieldName=\"about\"\n          scrollToId=\"about\"\n          InputTag={QuillEditor}\n          inputValue={practice.about}\n          onChange={(e) => setPractice((prev) => ({ ...prev, about: e }))}\n          maxLength={1420}\n          text=\"Share a brief bio that highlights your background, your values, and your unique approach to working with clients.\"\n        />\n        <Divider />\n        <HeroImageUpload\n          name=\"Reviews Image\"\n          fieldName=\"reviewsSectionImageUrl\"\n          description=\"reviews_section\"\n          scrollToId=\"reviews\"\n        />\n        <Divider />\n        <ContentInput\n          name=\"Quote\"\n          textAreaRows={3}\n          scrollToId=\"quote\"\n          text=\"Include a meaningful or testimonial quote to build trust and create a deeper connection with your audience.\">\n          <InputWithLabel\n            className=\"mt-2\"\n            label=\"Author\"\n            value={practice.quoteAuthor || \"\"}\n            onChange={(e) => setPractice((prev) => ({ ...prev, quoteAuthor: e.target.value }))}\n          />\n        </ContentInput>\n        <Divider />\n        <GalleryUpload />\n        <Divider />\n        <HeroImageUpload\n          name=\"Footer hero image\"\n          fieldName=\"footerHeroImageUrl\"\n          description=\"footer_hero_image\"\n          scrollToId=\"bottom-cta\"\n          showAltText={false}\n        />\n        <Divider />\n      </div>\n    </div>\n  )\n}\n\nexport default ContentTab\n","import difference from \"lodash/difference\"\nimport React, { useState } from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { Button } from \"../../components/shared/Buttons\"\n\nimport { useWebsiteBuilder } from \"./WebsiteBuilderContext\"\n\nconst excludedValues = [\"id\", \"practiceId\", \"name\", \"buttonStyle\", \"preview\", \"createdAt\", \"updatedAt\", \"fontUrlParams\"]\n\nexport const isStyleSelected = (practice, selectedTheme) =>\n  difference(Object.keys(practice.theme), excludedValues).every((key) => practice.theme[key] === selectedTheme[key])\n\nconst StyleTab = () => {\n  const {\n    allStyles,\n    practice,\n    setPractice,\n    updateTheme,\n    isPreviewing,\n    setIsPreviewing,\n    selectedStyleName,\n    setSelectedStyleName\n  } = useWebsiteBuilder()\n  const [previewedStyleName, setPreviewedStyleName] = useState(null)\n\n  return (\n    <div>\n      <div className=\"flex flex-col\">\n        {allStyles.map((theme, index) => (\n          <div\n            key={`${index}-styles`}\n            className=\"w-full py-2\"\n            onMouseEnter={() => {\n              if (selectedStyleName === theme.name) return\n\n              setPreviewedStyleName(theme.name)\n              const newTheme = {\n                ...theme,\n                name: practice.theme.name\n              }\n              setPractice((prev) => ({\n                ...prev,\n                theme: newTheme\n              }))\n              setIsPreviewing(true)\n            }}\n            onMouseLeave={() => {\n              setIsPreviewing(false)\n              setPreviewedStyleName(null)\n              const newTheme = {\n                ...allStyles.find((style) => style.name === selectedStyleName),\n                name: practice.theme.name\n              }\n              setPractice((prev) => ({\n                ...prev,\n                theme: newTheme\n              }))\n            }}>\n            <div\n              onClick={() => {\n                const newTheme = {\n                  ...theme,\n                  name: practice.theme.name,\n                  buttonStyle: practice.theme.buttonStyle\n                }\n                setPractice((prev) => ({\n                  ...prev,\n                  theme: newTheme\n                }))\n                setIsPreviewing(false)\n                setPreviewedStyleName(null)\n                setSelectedStyleName(theme.name)\n                updateTheme(newTheme)\n              }}\n              className={twMerge(\n                \"inline-flex h-[117px] w-full cursor-pointer items-center justify-start gap-4 rounded-xl border border-gray-light bg-white p-4 transition duration-300 ease-out md:h-fit\",\n                selectedStyleName === theme.name && previewedStyleName !== theme.name\n                  ? \"border-teal bg-gray-ultralight\"\n                  : \"border-gray-light\",\n                !isStyleSelected(practice, theme) && isPreviewing ? \"opacity-25\" : \"\"\n              )}>\n              <div className=\"inline-flex shrink grow basis-0 flex-col items-start justify-start gap-1\">\n                <div style={{ fontFamily: theme.fontHeading, fontWeight: theme.fontHeadingWeight }}>\n                  Headline font style\n                </div>\n                <div\n                  style={{ fontFamily: theme.fontParagraph }}\n                  className={twMerge(\n                    \"self-stretch text-sm font-normal leading-[21px] text-gray-dark\",\n                    theme.fontParagraphRegularWeight === \"300\" ? \"font-light\" : \"\"\n                  )}>\n                  Description font style\n                </div>\n                <div className=\"inline-flex items-center justify-start gap-2.5 pt-2\">\n                  <div className=\"flex h-6 w-6 items-center justify-center\">\n                    <div\n                      style={{ backgroundColor: theme.colorPrimary || theme.colorPrimaryDark }}\n                      className=\"h-6 w-6 rounded-full border border-gray shadow-inner\"\n                    />\n                  </div>\n                  <div className=\"flex h-6 w-6 items-center justify-center\">\n                    <div\n                      style={{ backgroundColor: theme.colorSecondary || theme.colorSecondaryDark }}\n                      className=\"h-6 w-6 rounded-full border border-gray shadow-inner\"\n                    />\n                  </div>\n                  <div className=\"flex h-6 w-6 items-center justify-center\">\n                    <div\n                      style={{ backgroundColor: theme.colorAccent }}\n                      className=\"h-6 w-6 rounded-full border border-gray shadow-inner\"\n                    />\n                  </div>\n                  <div className=\"flex h-6 w-6 items-center justify-center\">\n                    <div\n                      style={{ backgroundColor: theme.colorBgLight }}\n                      className=\"h-6 w-6 rounded-full border border-gray shadow-inner\"\n                    />\n                  </div>\n                </div>\n              </div>\n              {selectedStyleName === theme.name && previewedStyleName !== theme.name ? (\n                <div className=\"inline-flex flex-col items-start justify-start gap-2\">\n                  <div className=\"inline-flex items-center justify-center gap-2 self-stretch rounded bg-black px-4 font-bold leading-loose text-white\">\n                    Selected\n                  </div>\n                </div>\n              ) : (\n                <div className=\"inline-flex flex-col items-start justify-start gap-2\">\n                  <Button className=\"self-stretch\">Select</Button>\n                </div>\n              )}\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default StyleTab\n","import React, { createContext, useContext, useState } from \"react\"\nimport { useMutation } from \"urql\"\n\nimport { useToast } from \"../../contexts/ToastContext\"\n\nimport { isStyleSelected } from \"./StyleTab\"\n\nexport const WebsiteBuilderContext = createContext()\n\nconst UPDATE_INFO_MUTATION = `\n  mutation UpdateInfo(\n    $name: String,\n    $headline: String,\n    $websiteHeadline: String,\n    $subHeadline: String,\n    $ctaButtonText: String,\n    $defaultServiceId: ID\n    $valueStatement: String,\n    $quote: String,\n    $quoteAuthor: String,\n    $about: String,\n  ) {\n    updateInfo(\n      name: $name,\n      headline: $headline,\n      websiteHeadline: $websiteHeadline,\n      subHeadline: $subHeadline,\n      ctaButtonText: $ctaButtonText,\n      defaultServiceId: $defaultServiceId\n      valueStatement: $valueStatement,\n      quote: $quote,\n      quoteAuthor: $quoteAuthor,\n      about: $about,\n    ) {\n      result\n      errors\n      profileDetails { headline websiteHeadline subHeadline ctaButtonText defaultServiceId valueStatement quote quoteAuthor about name }\n    }\n  }\n`\n\nconst SAVE_THEME_MUTATION = `\n  mutation SaveTheme(\n    $name: String,\n    $colorBgDark: String,\n    $colorBgLight: String,\n    $colorAccent: String,\n    $colorPrimary: String,\n    $colorSecondary: String,\n    $colorPrimaryDark: String,\n    $colorSecondaryDark: String,\n    $colorTextDark: String,\n    $colorTextLight: String,\n    $colorWhite: String,\n    $colorGreyLightest: String,\n    $colorGreyLight: String,\n    $colorGrey: String,\n    $colorGreyDark: String,\n    $colorGreyDarkest: String,\n    $colorBlack: String,\n    $colorReviewStars: String,\n    $fontHeading: String,\n    $fontParagraph: String\n    $preview: Boolean\n   ) {\n    saveTheme(\n      name: $name,\n      colorBgDark: $colorBgDark,\n      colorBgLight: $colorBgLight,\n      colorAccent: $colorAccent,\n      colorPrimary: $colorPrimary,\n      colorSecondary: $colorSecondary,\n      colorPrimaryDark: $colorPrimaryDark,\n      colorSecondaryDark: $colorSecondaryDark,\n      colorTextDark: $colorTextDark,\n      colorTextLight: $colorTextLight,\n      colorWhite: $colorWhite,\n      colorGreyLightest: $colorGreyLightest,\n      colorGreyLight: $colorGreyLight,\n      colorGrey: $colorGrey,\n      colorGreyDark: $colorGreyDark,\n      colorGreyDarkest: $colorGreyDarkest,\n      colorBlack: $colorBlack,\n      colorReviewStars: $colorReviewStars,\n      fontHeading: $fontHeading,\n      fontParagraph: $fontParagraph,\n      preview: $preview\n    ) {\n      result\n      errors\n      theme {\n        name\n        colorBgDark\n        colorBgLight\n        colorAccent\n        colorPrimary\n        colorSecondary\n        colorPrimaryDark\n        colorSecondaryDark\n        colorTextDark\n        colorTextLight\n        colorWhite\n        colorGreyLightest\n        colorGreyLight\n        colorGrey\n        colorGreyDark\n        colorGreyDarkest\n        colorBlack\n        colorReviewStars\n        fontHeading\n        fontParagraph\n      }\n    }\n  }\n`\n\nexport const WebsiteBuilderProvider = ({\n  practice: practiceProp,\n  defaultThemeStyles,\n  allStyles,\n  aspectRatios,\n  isImpersonating,\n  children\n}) => {\n  const [practice, setPractice] = useState(practiceProp)\n  const [lastSavedPractice, setLastSavedPractice] = useState(practiceProp)\n  const [selectedTheme, setSelectedTheme] = useState(defaultThemeStyles[practice.theme.name])\n  const [previewedTheme, setPreviewedTheme] = useState(selectedTheme)\n  const [isPreviewing, setIsPreviewing] = useState(false)\n  const [openField, setOpenField] = useState(null)\n  const [highlightedField, setHighlightedField] = useState(null)\n  const [selectedStyleName, setSelectedStyleName] = useState(\n    allStyles.find((theme) => isStyleSelected(lastSavedPractice, theme))?.name\n  )\n\n  const [{ fetching: updateInfoFetching }, updateInfo] = useMutation(UPDATE_INFO_MUTATION)\n  const [{ fetching: saveThemeFetching }, saveTheme] = useMutation(SAVE_THEME_MUTATION)\n  const fetching = updateInfoFetching || saveThemeFetching\n  const { showToast } = useToast()\n\n  const onSave = () => {\n    const {\n      headline,\n      subHeadline,\n      ctaButtonText,\n      defaultServiceId,\n      valueStatement,\n      quote,\n      quoteAuthor,\n      about,\n      websiteHeadline\n    } = practice\n\n    updateInfo({\n      name: practice.user.name,\n      headline,\n      subHeadline,\n      ctaButtonText,\n      defaultServiceId,\n      valueStatement,\n      quote,\n      quoteAuthor,\n      about,\n      websiteHeadline\n    }).then((result) => {\n      setOpenField(null)\n      if (result?.data?.updateInfo?.result === \"success\") {\n        setLastSavedPractice(practice)\n        showToast(\"Your profile details have been saved.\")\n      } else {\n        console.error(result) // eslint-disable-line no-console\n        let errorMessage = \"There was an error saving your profile details. Please try again later or contact support.\"\n        if (result.data?.updateInfo?.errors) errorMessage += ` ${result.data.updateInfo.errors}`\n        showToast({\n          type: \"error\",\n          content: errorMessage\n        })\n      }\n    })\n  }\n\n  const updateTheme = ({ preview, ...theme }) => {\n    saveTheme({ preview, ...theme }).then((result) => {\n      if (result?.data?.saveTheme?.result === \"success\") {\n        setLastSavedPractice({ ...practice, theme })\n        if (!preview) showToast(\"Your theme has been saved.\")\n      } else {\n        console.error(result) // eslint-disable-line no-console\n        let errorMessage = \"There was an error saving your theme. Please try again later or contact support.\"\n        if (result.data?.saveTheme?.errors) errorMessage += ` ${result.data.saveTheme.errors}`\n        showToast({\n          type: \"error\",\n          content: errorMessage\n        })\n      }\n    })\n  }\n\n  const value = {\n    defaultThemeStyles,\n    allStyles,\n    aspectRatios,\n    practice,\n    setPractice,\n    lastSavedPractice,\n    setLastSavedPractice,\n    selectedTheme,\n    setSelectedTheme,\n    previewedTheme,\n    setPreviewedTheme,\n    isPreviewing,\n    setIsPreviewing,\n    openField,\n    setOpenField,\n    highlightedField,\n    setHighlightedField,\n    fetching,\n    onSave,\n    updateTheme,\n    selectedStyleName,\n    setSelectedStyleName,\n    isImpersonating\n  }\n\n  return <WebsiteBuilderContext.Provider value={value}>{children}</WebsiteBuilderContext.Provider>\n}\n\nexport const useWebsiteBuilder = () => useContext(WebsiteBuilderContext)\n","import capitalize from \"lodash/capitalize\"\nimport React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { Button } from \"../../components/shared/Buttons\"\n\nimport { useWebsiteBuilder } from \"./WebsiteBuilderContext\"\n\nconst THEME_DESCRIPTIONS = {\n  vitality: \"Vibrant and energetic, with bright, uplifting colors.\", // Theme 5\n  harmony: \"Balanced and flowing, perfect for mind-body-spirit integration.\", // Theme 4\n  serenity: \"Calm and tranquil design with soft, soothing colors.\", // Theme 3\n  balance: \"Clean and minimalist, emphasizing stability and clarity.\", // Theme 2\n  zen: \"Simple and mindful, with open space and calm tones.\" // Theme 1\n}\n\nconst ThemeTab = () => {\n  const {\n    setPractice,\n    selectedTheme,\n    setSelectedTheme,\n    previewedTheme,\n    setPreviewedTheme,\n    defaultThemeStyles,\n    updateTheme,\n    setIsPreviewing,\n    setSelectedStyleName\n  } = useWebsiteBuilder()\n\n  return (\n    <div>\n      <div className=\"flex flex-col\">\n        {Object.values(defaultThemeStyles).map((theme) => (\n          <div\n            key={theme.name}\n            className=\"w-full py-2\"\n            onMouseEnter={() => {\n              setPreviewedTheme(theme)\n              setIsPreviewing(true)\n              setPractice((prev) => ({\n                ...prev,\n                theme\n              }))\n            }}\n            onMouseLeave={() => {\n              setPreviewedTheme(selectedTheme)\n              setIsPreviewing(false)\n              setPractice((prev) => ({\n                ...prev,\n                theme: selectedTheme\n              }))\n            }}>\n            <div\n              onClick={() => {\n                setSelectedTheme(theme)\n                setPreviewedTheme(theme)\n                setIsPreviewing(false)\n                setPractice((prev) => ({\n                  ...prev,\n                  theme\n                }))\n                setSelectedStyleName(theme.name)\n                updateTheme(theme)\n              }}\n              role=\"button\"\n              className={twMerge(\n                \"inline-flex h-[104px] w-full cursor-pointer items-center justify-start gap-4 rounded-xl border bg-white p-4 transition duration-300 ease-out md:h-fit\",\n                theme === selectedTheme ? \"border-teal bg-gray-ultralight\" : \"border-gray-light\",\n                previewedTheme && previewedTheme !== selectedTheme && previewedTheme !== theme ? \"opacity-25\" : \"\"\n              )}>\n              <div className=\"flex h-16 w-16 items-center justify-center rounded-lg border border-gray shadow-inner\">\n                <img\n                  className=\"h-[60px] w-[60px] rounded-lg\"\n                  src={`/images/theme_thumbnails/${theme.name.toLowerCase()}.png`}\n                  alt={theme.name}\n                />\n              </div>\n              <div className=\"inline-flex shrink grow basis-0 flex-col items-start justify-start gap-1\">\n                <div className=\"self-stretch font-bold leading-normal\">{capitalize(theme.name)}</div>\n                <div className=\"self-stretch text-sm font-normal leading-[21px] text-gray-dark\">\n                  {THEME_DESCRIPTIONS[theme.name]}\n                </div>\n              </div>\n              {theme === selectedTheme ? (\n                <div className=\"inline-flex flex-col items-start justify-start gap-2\">\n                  <div className=\"inline-flex items-center justify-center gap-2 self-stretch rounded bg-black px-4 font-bold leading-loose text-white\">\n                    Selected\n                  </div>\n                </div>\n              ) : (\n                <div className=\"inline-flex flex-col items-start justify-start gap-2\">\n                  <Button className=\"self-stretch\">Select</Button>\n                </div>\n              )}\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  )\n}\n\nexport default ThemeTab\n","import { CubeIcon, NewspaperIcon, SparklesIcon } from \"@heroicons/react/24/outline\"\nimport { ChevronDownIcon, ChevronUpIcon } from \"@heroicons/react/24/solid\"\nimport React, { useState } from \"react\"\n\nimport { ToastProvider } from \"../../contexts/ToastContext\"\nimport GraphQLProvider from \"../../providers/GraphQLProvider\"\n\nimport ContentTab from \"./ContentTab\"\nimport StyleTab from \"./StyleTab\"\nimport ThemeTab from \"./ThemeTab\"\nimport { useWebsiteBuilder, WebsiteBuilderProvider } from \"./WebsiteBuilderContext\"\nimport WebsitePreviewView from \"./WebsitePreviewView\"\n\nimport \"../../components/shared/wysiwyg.sass\"\n\nexport const DEFAULT_HIGHLIGHT_CLASSES = \"rounded border-2 border-teal shadow-diffuse bg-teal/10\"\n\nconst AnimatedSection = ({ section, isActive, toggleSection }) => (\n  <div className=\"overflow-hidden\">\n    <button\n      className=\"inline-flex h-14 w-full items-center justify-between border-b border-gray bg-gray-ultralight px-8 py-4 transition-colors\"\n      onClick={() => toggleSection(section)}>\n      <span className=\"flex items-center gap-3\">\n        {section === \"Theme\" && <CubeIcon className=\"h-6 w-6\" />}\n        {section === \"Style\" && <SparklesIcon className=\"h-6 w-6\" />}\n        {section === \"Content\" && <NewspaperIcon className=\"h-6 w-6\" />}\n        <span className=\"text-lg font-bold leading-snug\">{section}</span>\n      </span>\n      {isActive ? <ChevronUpIcon className=\"h-5 w-5\" /> : <ChevronDownIcon className=\"h-5 w-5\" />}\n    </button>\n    <div\n      className={`transition-all duration-300 ease-in-out ${\n        isActive ? \"max-h-[5000px] opacity-100\" : \"max-h-0 opacity-0\"\n      }`}>\n      <div className=\"px-8 py-4\">\n        {section === \"Theme\" && <ThemeTab />}\n        {section === \"Style\" && <StyleTab />}\n        {section === \"Content\" && <ContentTab />}\n      </div>\n    </div>\n  </div>\n)\n\nconst WebsiteBuilder = () => {\n  const { setIsPreviewing, setOpenField, practice, setHighlightedField } = useWebsiteBuilder()\n  const [activeSection, setActiveSection] = useState(practice.showContentTab ? \"Content\" : \"Theme\")\n\n  const sections = [\"Theme\", \"Style\", \"Content\"]\n\n  const toggleSection = (section) => {\n    setActiveSection(activeSection === section ? null : section)\n    setIsPreviewing(false)\n    setOpenField(null)\n    setHighlightedField(null)\n  }\n\n  return (\n    <div>\n      {sections.map((section) => (\n        <AnimatedSection\n          key={section}\n          section={section}\n          isActive={activeSection === section}\n          toggleSection={toggleSection}\n        />\n      ))}\n    </div>\n  )\n}\n\nexport default function WebsiteBuilderPage(props) {\n  return (\n    <ToastProvider>\n      <GraphQLProvider>\n        <WebsiteBuilderProvider {...props}>\n          <WebsitePreviewView>\n            <WebsiteBuilder />\n          </WebsitePreviewView>\n        </WebsiteBuilderProvider>\n      </GraphQLProvider>\n    </ToastProvider>\n  )\n}\n","import { ComputerDesktopIcon, DevicePhoneMobileIcon } from \"@heroicons/react/24/outline\"\nimport React, { useState } from \"react\"\n\nimport AcceptTermsModal from \"../../components/shared/AcceptTermsModal\"\nimport { Box } from \"../../components/shared/Layout\"\nimport ProProfileThemeFive from \"../ProProfileThemeFive/ProProfileThemeFive\"\nimport ProProfileThemeFour from \"../ProProfileThemeFour/ProProfileThemeFour\"\nimport ProProfileThemeOne from \"../ProProfileThemeOne/ProProfileThemeOne\"\nimport ProProfileThemeThree from \"../ProProfileThemeThree/ProProfileThemeThree\"\nimport ProProfileThemeTwo from \"../ProProfileThemeTwo/ProProfileThemeTwo\"\nimport { useWebsiteBuilder } from \"../WebsiteBuilder/WebsiteBuilderContext\"\n\nimport \"../../components/shared/wysiwyg.sass\"\n\nconst WebsitePreviewView = ({ children }) => {\n  const { practice, previewedTheme, highlightedField } = useWebsiteBuilder()\n  const [viewMode, setViewMode] = useState(\"desktop\")\n\n  const viewportWidth = window.innerWidth\n\n  const scale = (viewportWidth - 696) / viewportWidth\n  const invertScale = 1 / scale\n  const contentStyles = {\n    width: `calc((100vw - 696px) / ${scale})`,\n    transform: `scale(${scale})`,\n    transformOrigin: \"top left\",\n    height: `calc(100vh*${invertScale})`,\n    overflow: \"auto\"\n  }\n  const wrapperStyles = {\n    width: `calc((100vw - 696px))`,\n    height: `calc(100vh)`,\n    overflow: \"hidden\"\n  }\n\n  const renderTheme = () => {\n    switch (previewedTheme.name) {\n      case \"zen\":\n        return (\n          <ProProfileThemeOne\n            practice={practice}\n            highlight={highlightedField}\n            styles={contentStyles}\n            viewingInBuilder={true}\n          />\n        )\n      case \"balance\":\n        return (\n          <ProProfileThemeTwo\n            practice={practice}\n            highlight={highlightedField}\n            styles={contentStyles}\n            viewingInBuilder={true}\n          />\n        )\n      case \"serenity\":\n        return (\n          <ProProfileThemeThree\n            practice={practice}\n            highlight={highlightedField}\n            styles={contentStyles}\n            viewingInBuilder={true}\n          />\n        )\n      case \"harmony\":\n        return (\n          <ProProfileThemeFour\n            practice={practice}\n            highlight={highlightedField}\n            styles={contentStyles}\n            viewingInBuilder={true}\n          />\n        )\n      case \"vitality\":\n        return (\n          <ProProfileThemeFive\n            practice={practice}\n            highlight={highlightedField}\n            styles={contentStyles}\n            viewingInBuilder={true}\n          />\n        )\n    }\n  }\n\n  return (\n    <div className=\"flex justify-between\">\n      <style>\n        {`\n          .font-paragraph {\n            font-family: ${practice.theme.fontParagraph} !important;\n            font-weight: ${practice.theme.fontParagraphRegularWeight} !important;\n          }\n        `}\n      </style>\n      <div className=\"fixed left-[200px] right-[496px] top-[34px] z-30 flex items-center justify-center md:hidden\">\n        <button\n          className={`h-10 px-2 pb-4 ${viewMode === \"desktop\" ? \"text-gray\" : \"border-b-4 border-black text-black\"}`}\n          onClick={() => setViewMode(\"mobile\")}>\n          <DevicePhoneMobileIcon className=\"h-6 w-6\" />\n        </button>\n        <button\n          className={`h-10 px-2 pb-4 ${viewMode === \"mobile\" ? \"text-gray\" : \"border-b-4 border-black text-black\"}`}\n          onClick={() => setViewMode(\"desktop\")}>\n          <ComputerDesktopIcon className=\"h-6 w-6\" />\n        </button>\n      </div>\n      <div className=\"font-paragraph overflow-hidden md:hidden\" style={wrapperStyles}>\n        {viewMode === \"desktop\" ? (\n          <>{renderTheme()}</>\n        ) : (\n          <div className=\"relative flex h-[calc(100vh-72px)] w-full flex-col items-center bg-gray-ultralight\">\n            <div className=\"flex w-full justify-center\">\n              <Box className=\"my-8 bg-orange-light p-6\">Editing is disabled while previewing mobile</Box>\n            </div>\n            <iframe\n              width={390}\n              height={844}\n              src={`/${practice.user.vanitySlug || practice.user.slug}?iframe_preview=true`}\n            />\n          </div>\n        )}\n      </div>\n      <div\n        className={`fixed right-0 h-screen min-h-100 w-[496px] flex-none overflow-y-scroll border-l border-gray-light bg-white pb-24 md:w-full ${\n          viewMode === \"mobile\" ? \"pointer-events-none opacity-25\" : \"\"\n        }`}>\n        {children}\n      </div>\n      <AcceptTermsModal showModal={practice.showTermsModal} />\n    </div>\n  )\n}\n\nexport default WebsitePreviewView\n","import React from \"react\"\nimport { Provider } from \"urql\"\n\nimport { urqlClient } from \"../utils/utils\"\n\nconst GraphQLProvider = ({ children }) => <Provider value={urqlClient}>{children}</Provider>\n\nexport default GraphQLProvider\n"],"names":["practiceFreeService","practice","services","find","service","amountCents","practiceCtaText","ctaButtonText","practiceDefaultServiceId","defaultServiceId","freeService","id","getFirstAvailableTimeSlot","allAvailability","i","length","datetimes","YoutubeIcon","height","width","color","React","viewBox","fill","xmlns","d","AcceptTermsModal","showModal","visible","setVisible","useState","termsAccepted","setTermsAccepted","fetching","acceptTerms","useMutation","showToast","useToast","AnimatedModal","hideModal","showFooter","hideCloseButton","hideCancelButton","actionButtonCopy","saveDisabled","onSave","handleSave","then","res","data","result","console","error","content","type","className","Link","href","CheckBox","checked","onChange","label","AnimatingBackgroundImage","url","children","style","animationPixels","animationDuration","rest","offsetY","setOffsetY","useEffect","intervalId","startTime","Date","now","setInterval","incrementOffset","elapsedTime","progress","Math","min","clearInterval","Object","assign","twMerge","backgroundImage","backgroundPosition","CounterBadge","Badge","typeClassName","ExpandableText","text","maxLength","quotes","allowHtml","scrollUpOnClose","onExpand","onCollapse","ref","useRef","expanded","setExpanded","showSeeMore","displayText","substring","dangerouslySetInnerHTML","__html","replace","onClick","e","preventDefault","current","scrollIntoView","behavior","FilePickerDropArea","onUploadDone","PickerDropPane","apikey","process","pickerOptions","exposeOriginalFile","maxFiles","dropPane","customText","FilePicker","as","onOpen","disabled","transformations","fromSources","showFileUpload","setShowFileUpload","crop","aspectRatio","force","onClose","imageMin","Tag","role","createPortal","PickerOverlay","document","body","HoverPopover","popoverContent","credentialKind","useWindowSize","useContainerDimensions","isPopoverVisible","setIsPopoverVisible","onMouseEnter","onMouseLeave","marginTop","header","hideSaveButton","toolbarOptions","list","align","props","ReactQuill","setReactQuill","quillRef","module","default","catch","quillInstance","getEditor","updateTooltipPosition","tooltip","querySelector","left","Number","on","off","theme","validationError","VALIDATION_ERROR_INPUT_CLASSNAMES","modules","toolbar","ValidationError","ReviewStars","rating","starClassName","round","Array","map","item","index","StarIcon","key","Toast","position","timeout","timeoutId","clearTimeout","setTimeout","getPositionClasses","CurrentUserContext","createContext","CurrentUserProvider","defaultUser","user","setUser","Provider","value","fetchUser","urqlClient","query","toPromise","currentUser","useCurrentUser","useContext","ToastContext","DEFAULT_TOAST_PARAMS","ToastProvider","alertState","setAlertState","params","hideToast","prev","myRef","dimensions","setDimensions","getDimensions","offsetWidth","offsetHeight","handleResize","window","addEventListener","removeEventListener","useIntersectionObserver","threshold","isVisible","setIsVisible","elementRef","observer","IntersectionObserver","entries","isIntersecting","disconnect","observe","AboutSection","languages","joinWithAnd","l","name","ageWorkWiths","a","toLowerCase","workWiths","w","officeLocation","locations","kind","virtualLocation","ScrollToSection","Typography","variant","firstName","BuildingOfficeIcon","VideoCameraIcon","ChatBubbleLeftEllipsisIcon","CheckIcon","AskQuestionButton","BookingWidget","selectedService","selectedLocation","setSelectedLocation","top","setTop","setPosition","offsetLeft","setOffsetLeft","isScrolledIntoFooter","setIsScrolledIntoFooter","bottom","setBottom","hiddenOnMobile","setHiddenOnMobile","practitioner","highlyRated","reviews","filter","r","refetchQuery","useQuery","variables","serviceId","locationId","availableSlots","bookingAvailability","day","timeZone","Intl","DateTimeFormat","resolvedOptions","formattedTimeZone","timeZoneAbbr","toLocaleTimeString","timeZoneName","split","firstSlot","dayjs","tz","momentDate","date","dateFormat","isToday","format","isTomorrow","add","handleScroll","scrollHeight","documentElement","navHeight","footerHeight","footerOffsetTop","offsetTop","distanceFromTop","footerTop","getElementById","innerHeight","scrollY","widgetStyle","Box","WebAppBookNow","practiceId","buttonClasses","BASE_INPUT_CLASSNAMES","buttonCopy","formatPrice","defaultCurrency","timeLength","ChevronDownIcon","Label","location","RadioWithLabel","displayAddress","requestPolicy","LoadingSpinner","slice","slot","dateTime","src","alt","loyalClients","VideoIcon","DesktopHeaderSection","roundedAverageRating","averageRating","proCredential","proCredentials","proIsVirtualOnly","every","profilePhotoUrl","title","scrollToId","city","stateAbbreviation","CheckBadgeIcon","credential","HIDE_LOCATION_ICON_ADJUSTMENT","LocationSection","showVirtualLocation","physicalLocations","latitude","longitude","sort","b","localeCompare","markerPosition","lat","lng","mapCenter","hideAddress","LoadScript","googleMapsApiKey","GoogleMap","mapContainerStyle","center","zoom","options","disableDefaultUI","Circle","radius","distanceInMiles","strokeColor","Marker","icon","address","zip","MobileHeaderSection","EndorsementsSection","skills","showAllButton","count","ReviewsHeaderSection","practitionerName","seeAllCopy","review","timesBooked","reviewText","trim","ReviewCardSignature","reviewsCount","ReviewsSection","showAllReviews","setShowAllReviews","displayedReviews","ReviewCard","Button","DesktopService","currency","description","package","numberOfSessions","openServiceDetail","NextAvailableSlot","mediumWebpUrl","MobileService","ServicesSection","displayedServices","Fragment","WebsiteAndSocial","website","facebook","instagram","twitter","linkedin","tiktok","youtube","target","rel","ProProfile","skill","endorsementsCount","specialty","classList","remove","reduce","acc","GraphQLProvider","galleryImages","GalleryImagesSection","images","about","CredentialsSection","showQuestionModal","setShowQuestionModal","showOtpInput","setShowOtpInput","submitting","setSubmitting","setFirstName","phone","setPhone","code","setCode","email","setEmail","question","setQuestion","setValidationError","phoneVerificationFetching","phoneVerificationError","phoneVerification","phoneLoginFetching","phoneLoginError","phoneLogin","sendMessageFetching","sendMessageError","sendMessage","closeModal","submitMessage","practitionerId","message","errors","toString","size","device","InputWithLabel","htmlFor","Input","explanatorySubtext","TextArea","LicensePopover","CheckBadgeSolidIcon","capitalize","stateIssued","licenseNumber","lastName","expiresAt","CredentialPopover","filestackDocumentName","endsWith","filestackDocument","AcademicCapIcon","listClasses","showAllEndorsements","setShowAllEndorsements","numSkills","displayedSkills","scrollToReviews","sectionClasses","showImagesModal","setShowImagesModal","image","filestackPhoto","handle","large","webp","original","any","firstImages","altText","ModalBackdrop","nextAvailableSlot","inputDate","daysFromNow","startOf","diff","formattedTime","formatDateTime","keepBorderInMobile","reviewReply","isAnonymous","client","unverifiedName","lastInitial","toUpperCase","createdAtAgoInWords","hash","gridClasses","backgroundColor","enablePopover","colorBgLight","truncateText","textLimit","adjustedTextLimit","stripHTMLTags","lastIndexOf","AboutMeContainer","highlight","cardBackgroundColor","viewingInBuilder","credentialsGridClassName","credentialsClassName","credentialsBackgroundColor","reverseAnimation","SectionTitle","DEFAULT_HIGHLIGHT_CLASSES","nl2br","colorTextLight","colorAccent","cardClassName","containerRef","websiteMetadata","primaryModality","colorTextDark","AdditionalContent","valueStatement","characterCount","AnimatedSection","BackgroundImage","overlayColor","imageUrl","ClipPath","ClipPathTwo","parallax","maxOffset","pageYOffset","imageStyle","backgroundAttachment","locationMapping","office","virtual","home","BottomCTA","OPACITY_40","locationKinds","uniq","locationsSentence","join","subtitle","footerHeroImageUrl","fontFamily","fontHeading","fontWeight","fontHeadingWeight","buttonStyle","PhoneValidation","onSuccess","sendVerification","formattedPhone","e164Phone","startsWith","mutation","log","ChatWidget","toast","isOpen","setIsOpen","hasAgreed","setHasAgreed","showNotification","setShowNotification","quickMessage","setQuickMessage","showQuickChat","setShowQuickChat","showFullForm","setShowFullForm","fieldErrors","setFieldErrors","showThankYou","setShowThankYou","showPhoneValidation","setShowPhoneValidation","countdown","setCountdown","isModalOpen","setIsModalOpen","aboutSection","rect","getBoundingClientRect","timer","handleSubmit","async","validateForm","isValid","agreement","verifyCode","messageArgs","senderName","senderEmail","senderPhone","handleNextStep","handleKeyPress","event","shiftKey","handlePhoneValidationSuccess","maxWidth","transform","handleNotificationClick","stopPropagation","placeholder","rows","handleQuickMessageSubmit","handleResendCode","handleCloseModal","stroke","strokeLinecap","strokeLinejoin","strokeWidth","titleClassName","FacebookIcon","InstagramIcon","LinkedinIcon","TikTokIcon","fillRule","clipRule","XTwitterIcon","Footer","colorPrimary","borderColor","HealMeVerifiedBadge","showBadgeIcon","link","GallerySection","imageClassName","containerClassName","maxHeight","innerWidth","colorGreyLightest","imageContainerRef","defaultPhotoUrl","SeeMore","buttonClassName","badgeContent","HeroSection","Navigation","showStars","ctaText","headerHeroImageUrl","websiteHeadline","subHeadline","starColor","colorReviewStars","MILES_PER_DEGREE","Map","infoWindowLocation","setInfoWindowLocation","latDelta","longDelta","travelDistance","latitudes","longitudes","minLatitude","maxLatitude","max","minLongitude","maxLongitude","latZoom","floor","log2","longZoom","some","InfoWindow","onCloseClick","DevicePhoneMobileIcon","formatPhone","isMenuOpen","setIsMenuOpen","toggleMenu","Bars3Icon","XMarkIcon","colorGrey","Quote","author","Review","showEndorsements","showReplies","endorsedSkills","createdAt","ReviewsSectionVariationOne","starsClassName","defaultReviewsShown","expandedReviewSwitch","setExpandedReviewSwitch","reviewsContainerRef","reviewsImage","imageAssets","asset","resizedImageUrl","buttonText","ChevronUpIcon","CardTitle","ServiceCard","truncate","fontParagraphBoldWeight","showTitle","includeImage","buttonLeft","hideImageInMobile","animateTitle","mobileImageClassName","numServicesShown","serviceImage","splice","TopReviewsSection","colorSecondary","DiagonalDivider","topBackgroundColor","bottomBackgroundColor","ThemeImage","ProProfileThemeFive","styles","primaryColor","secondaryColor","valueStatementImage","ThemeFiveNavigation","undefined","quote","quoteAuthor","colorBgDark","CurvyDivider","preserveAspectRatio","CurvyDividerReversed","CurvyDividerWave","CurvyDividerWaveReversed","ValueStatementSection","ProProfileThemeFour","TriangleDivider","middleBackgroundColor","colorWhite","ProProfileThemeOne","isMobile","OPACITY_75","OPACITY_25","colorPrimaryDark","ProProfileThemeThree","colorSecondaryDark","secondaryTextColor","primaryTextColor","ValuesStatementSection","valueStatementImageTwo","WaveDivider","ProProfileThemeTwo","AboutMeSection","isModalVisible","setIsModalVisible","isTruncated","fullHeightInMobile","dialogClassName","CTASection","hasFreeConsultation","imgUrl","StickyHeader","scrollToAbout","scrollToServices","scrollToCredentials","showStickyHeader","setShowStickyHeader","heroImgUrl","fontSize","headline","LocationSectionV2","MyCredentialsSection","MyPracticeSection","homeLocation","HomeIcon","MyReviewsSection","BookNowText","ArrowRightIcon","MyServicesSection","largeImageUrl","photoHandles","amount","formattedPrice","ProProfileFooter","ProProfileV2","ContentInput","fieldName","InputTag","textAreaRows","inputLabel","inputValue","setPractice","openField","setOpenField","lastSavedPractice","setHighlightedField","useWebsiteBuilder","inputRef","editableValueRef","getNestedValue","obj","path","part","deepClone","JSON","parse","stringify","isMaxReached","handleInputChange","useCallback","newValue","truncatedValue","currentPractice","newPractice","setNestedValue","parts","lastPart","pop","handleClickOutside","contains","EditableValue","onOpened","focus","onClosed","onCancel","switchToCustomSourceOnOpen","switchToCustomSource","customSource","click","tabs","ImageUploadButton","handleUploadImage","showCurateTab","hideS3Images","selectedImage","setSelectedImage","initialTab","allUploadedImages","activeTab","setActiveTab","cropModalOpen","setCropModalOpen","handleImageSelect","filteredTabs","tab","uploadedImages","includes","CropModal","sourceUrlsArray","mounted","element","actions","createElement","setAttribute","handleImageClick","currentTarget","idx","parseInt","dataset","file","fetchAndAddUrl","showSummaryView","forEach","li","span","thumb","appendChild","innerHTML","divHeader","buttonViewType","firstFile","unmounted","handles","filesUploaded","provider","ArrowUpTrayIcon","footerButtons","show","TabNavLink","active","renderTabContent","thumbUrl","defaultHeroImages","Thumbnail","photoUrl","GalleryUpload","editing","setEditing","deleteModalVisible","setDeleteModalVisible","deleteImageId","setDeleteImageId","galleryImage","setGalleryImage","setAltText","aspectRatios","removeImageFetching","removeGalleryImage","uploadImages","uploadGalleryImages","reorderGalleryImages","updateGalleryImageFetching","updateGalleryImage","photos","ReactSortable","setList","newPositions","newOrder","photo","photosArray","errorMessage","img","actionButtonType","galleryId","HeadshotUpload","updateUserPhoto","HeroImageUpload","showAltText","isImpersonating","uploadImage","updating","updateImageAsset","imageAsset","camelCase","existingImage","newImageAsset","ContentTab","Divider","Select","defaultOption","QuillEditor","excludedValues","isStyleSelected","selectedTheme","difference","keys","StyleTab","allStyles","updateTheme","isPreviewing","setIsPreviewing","selectedStyleName","setSelectedStyleName","previewedStyleName","setPreviewedStyleName","newTheme","fontParagraph","fontParagraphRegularWeight","WebsiteBuilderContext","WebsiteBuilderProvider","practiceProp","defaultThemeStyles","setLastSavedPractice","setSelectedTheme","previewedTheme","setPreviewedTheme","highlightedField","updateInfoFetching","updateInfo","saveThemeFetching","saveTheme","preview","THEME_DESCRIPTIONS","vitality","harmony","serenity","balance","zen","ThemeTab","values","section","isActive","toggleSection","CubeIcon","SparklesIcon","NewspaperIcon","WebsiteBuilder","activeSection","setActiveSection","showContentTab","WebsiteBuilderPage","WebsitePreviewView","viewMode","setViewMode","viewportWidth","scale","contentStyles","transformOrigin","overflow","wrapperStyles","ComputerDesktopIcon","renderTheme","vanitySlug","slug","showTermsModal"],"sourceRoot":""}