{"version":3,"file":"_id_-3neUQWTM.js","sources":["../../src/components/products/deliverySelector.tsx","../../src/components/products/navbar.tsx","../../src/components/products/optionGroups.tsx","../../src/components/products/linkedProduct.tsx","../../src/components/products/availableOptions.tsx","../../src/pages/products/[id].tsx"],"sourcesContent":["import {Tooltip} from '@/components/tooltip';\nimport {Product} from '@/lib/sdk';\nimport {createEffect, on, Show} from 'solid-js';\n\ninterface Props {\n product: Product;\n delivery?: string;\n onChange?: (value: string) => void;\n}\n\nexport function ProductSupportSelector(props: Props) {\n function hasSupport(support: string) {\n\tconst variants = props.product.variants;\n\n\treturn variants.some((variant) => variant.support === support);\n }\n\n const hasReload = () => hasSupport('RELOAD');\n const hasTicket = () => hasSupport('TICKET');\n const hasMobile = () => hasSupport('MOBILE');\n\n createEffect(\n\t on(\n\t\t () => props.product,\n\t\t () => {\n\t\t\tif (props.delivery) return;\n\t\t\tif (hasReload()) return props.onChange('RELOAD');\n\t\t\tif (hasTicket()) return props.onChange('TICKET');\n\t\t\tif (hasMobile()) return props.onChange('MOBILE');\n\t\t },\n\t ),\n );\n\n const hasMultipleSupport = () => {\n\tconst supports = props.product.variants.reduce((acc, variant) => {\n\t if (variant.support !== null) {\n\t\tacc.push(variant.support);\n\t }\n\t return acc;\n\t}, []);\n\n\tconst uniqueSupports = [...new Set(supports)];\n\n\treturn uniqueSupports.length > 1;\n };\n\n const displaySupport = () => {\n\tif (hasMultipleSupport()) {\n\t return true;\n\t}\n\n\tif (!hasReload()) return true;\n };\n\n return (\n\t <Show when={displaySupport()}>\n\t\t<fieldset class=\"mt-4 flex flex-col\">\n\t\t <Show when={hasMultipleSupport()}>\n\t\t\t<div class=\"flex items-center justify-center gap-x-3 text-center font-semibold\">\n\t\t\t <span>Choisissez votre support</span>\n\t\t\t <Tooltip\n\t\t\t\t placement=\"bottom\"\n\t\t\t\t title=\"Choisissez votre support\"\n\t\t\t\t icon={\n\t\t\t\t\t<svg class=\"h-5 \" viewBox=\"0 0 30 30\">\n\t\t\t\t\t <path\n\t\t\t\t\t\t d=\"M15,0A15,15,0,1,1,0,15,15,15,0,0,1,15,0Zm0,1.5A13.5,13.5,0,1,0,28.5,15,13.49,13.49,0,0,0,15,1.5ZM14.56,19a1.52,1.52,0,0,1,0,3,1.52,1.52,0,0,1,0-3Zm.25-11.51c2.53,0,4.21,1.4,4.21,3.26s-1.68,3.2-2.21,3.61a2.48,2.48,0,0,0-1.11,2.47c0,.37-.2.81-1.16.81-.81,0-1.09-.3-1.09-1.33a3.64,3.64,0,0,1,1.32-3c.65-.55,1.76-1.16,1.76-2.23,0-.91-.79-1.34-1.78-1.34-2,0-1.58,1.52-2.64,1.52a1.14,1.14,0,0,1-1.19-1.13C10.92,9.05,12.15,7.47,14.81,7.47Z\"/>\n\t\t\t\t\t</svg>\n\t\t\t\t }\n\t\t\t >\n\t\t\t\t<main class=\"relative grid w-full max-w-xs gap-4 text-left text-sm\">\n\t\t\t\t <ul class=\"grid list-disc pl-4\">\n\t\t\t\t\t<li>\n\t\t\t\t\t SUR TICKET : Il s'agit du ticket non-nominatif\n\t\t\t\t\t <br/>\n\t\t\t\t\t Il est rechargeable 10 fois du même titre.\n\t\t\t\t\t</li>\n\n\t\t\t\t\t<li class=\"mt-4\">\n\t\t\t\t\t SUR CARTE TBM : Il s'agit de la carte TBM nominative\n\t\t\t\t\t <br/>\n\t\t\t\t\t Vous pouvez la recharger autant de fois que vous le\n\t\t\t\t\t souhaitez\n\t\t\t\t\t</li>\n\t\t\t\t </ul>\n\t\t\t\t</main>\n\t\t\t </Tooltip>\n\t\t\t</div>\n\t\t </Show>\n\n\t\t <div class=\"mt-4 flex flex-col space-y-4 lg:col-start-3 lg:flex-row lg:gap-x-4 lg:space-y-0\">\n\t\t\t<Show when={hasMobile()}>\n\t\t\t <div class=\"sm:hidden\">\n\t\t\t\t<input\n\t\t\t\t\tclass=\"peer sr-only\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"delivery\"\n\t\t\t\t\tvalue=\"MOBILE\"\n\t\t\t\t\tid=\"mobile\"\n\t\t\t\t\tchecked={props.delivery === 'MOBILE'}\n\t\t\t\t\tonChange={[props.onChange, 'MOBILE']}\n\t\t\t\t/>\n\t\t\t\t<label\n\t\t\t\t\tfor=\"mobile\"\n\t\t\t\t\tclass=\"block w-full cursor-pointer rounded-lg border border-gray-300 py-6 text-center text-gray-500 peer-checked:border-primary peer-checked:bg-primary peer-checked:text-white peer-focus:ring\"\n\t\t\t\t>\n\t\t\t\t Sur mobile\n\t\t\t\t</label>\n\t\t\t </div>\n\t\t\t</Show>\n\n\t\t\t<Show when={hasReload()}>\n\t\t\t <div class=\"flex-1\">\n\t\t\t\t<input\n\t\t\t\t\tclass=\"peer sr-only\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"delivery\"\n\t\t\t\t\tid=\"card\"\n\t\t\t\t\tvalue=\"RELOAD\"\n\t\t\t\t\tchecked={props.delivery === 'RELOAD'}\n\t\t\t\t\tonChange={[props.onChange, 'RELOAD']}\n\t\t\t\t/>\n\t\t\t\t<label\n\t\t\t\t\tfor=\"card\"\n\t\t\t\t\tclass=\"block w-full cursor-pointer rounded-lg border border-gray-300 py-6 text-center text-gray-800 peer-checked:border-primary peer-checked:bg-primary peer-checked:text-white peer-focus:ring lg:py-4 lg:text-sm\"\n\t\t\t\t>\n\t\t\t\t Sur carte TBM\n\t\t\t\t</label>\n\t\t\t </div>\n\t\t\t</Show>\n\n\t\t\t<Show when={hasTicket()}>\n\t\t\t <div class=\"flex-1\">\n\t\t\t\t<input\n\t\t\t\t\tclass=\"peer sr-only\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tname=\"delivery\"\n\t\t\t\t\tid=\"ticket\"\n\t\t\t\t\tvalue=\"TICKET\"\n\t\t\t\t\tchecked={props.delivery === 'TICKET'}\n\t\t\t\t\tonChange={[props.onChange, 'TICKET']}\n\t\t\t\t/>\n\t\t\t\t<label\n\t\t\t\t\tfor=\"ticket\"\n\t\t\t\t\tclass=\"block w-full cursor-pointer rounded-lg border border-gray-300 py-6 text-center text-gray-800 peer-checked:border-primary peer-checked:bg-primary peer-checked:text-white peer-focus:ring lg:py-4 lg:text-sm\"\n\t\t\t\t>\n\t\t\t\t Sur ticket\n\t\t\t\t</label>\n\t\t\t </div>\n\t\t\t</Show>\n\t\t </div>\n\t\t</fieldset>\n\t </Show>\n );\n}\n","import { Product } from '@/lib/sdk';\nimport { useGlobalStore } from '@/stores';\nimport { cleanProductTitle } from '@/utils/cleanProductTitle';\nimport { A } from '@solidjs/router';\nimport { Show, createMemo } from 'solid-js';\n\ninterface Props {\n product: Product;\n}\n\nexport function ProductNavbar(props: Props) {\n const [globalStore] = useGlobalStore();\n\n const category = createMemo(() => {\n if (!props.product) {\n return;\n }\n\n return globalStore.categories.find(\n (category) => category.id === props.product.categoryId,\n );\n });\n\n return (\n <ul class=\"mx-auto flex max-w-5xl flex-wrap space-x-2 px-4 text-sm\">\n <li>\n <A href=\"/\" class=\"whitespace-nowrap hover:underline focus:underline\">\n Accueil {'>'}\n </A>\n </li>\n <Show when={category()}>\n <Show when={category().parent}>\n <li>\n <A\n href={`/categories/${category().parent.id}`}\n class=\"whitespace-nowrap hover:underline focus:underline\"\n >\n {category().parent.name} {'>'}\n </A>\n </li>\n </Show>\n <li>\n <A\n href={`/categories/${category()?.parent?.id ?? category().id}`}\n class=\"whitespace-nowrap hover:underline focus:underline\"\n >\n {category().name} {'>'}\n </A>\n </li>\n </Show>\n <li>\n <A\n href={`/products/${props.product.id}`}\n class=\"whitespace-nowrap hover:underline focus:underline\"\n >\n {cleanProductTitle(props.product.title)}\n </A>\n </li>\n </ul>\n );\n}\n","import { Tooltip } from '@/components/tooltip';\nimport { Product } from '@/lib/sdk';\nimport { formatPrice } from '@/utils/formatPrice';\nimport { For, Show } from 'solid-js';\n\ninterface Props {\n product: Product;\n options: Record<number, number | null>;\n onChange: (value: Record<number, number>) => void;\n}\n\nexport function ProductOptionGroups(props: Props) {\n const optionGroups = props.product.allowedOptionGroups;\n\n function isSelected(id: number | null, optionGroupId: number): boolean {\n return props.options[optionGroupId] === id;\n }\n\n function isTouched(optionGroupId: number): boolean {\n const keys = Object.keys(props.options);\n\n return keys.includes(String(optionGroupId));\n }\n\n function handleChange(e: Event, optionGroupId: number) {\n const target = e.target as HTMLInputElement;\n const optionId = parseInt(target.value) || null;\n\n const newOptions = { ...props.options, [optionGroupId]: optionId };\n\n return props.onChange(newOptions);\n }\n\n return (\n <section class=\"mt-4 flex flex-col space-y-4 lg:col-start-3\">\n <h3 class=\"text-center font-semibold lg:col-span-2\">\n Besoin d'une option ?\n </h3>\n\n <For each={optionGroups}>\n {(optionGroup) => (\n <fieldset>\n <legend class=\"flex space-x-2 lg:col-span-2\">\n <span class=\"font-semibold\"> {optionGroup.name} </span>\n <Tooltip\n placement=\"bottom\"\n title=\"Choisissez votre support\"\n icon={\n <svg class=\"h-5 \" viewBox=\"0 0 30 30\">\n <path d=\"M15,0A15,15,0,1,1,0,15,15,15,0,0,1,15,0Zm0,1.5A13.5,13.5,0,1,0,28.5,15,13.49,13.49,0,0,0,15,1.5ZM14.56,19a1.52,1.52,0,0,1,0,3,1.52,1.52,0,0,1,0-3Zm.25-11.51c2.53,0,4.21,1.4,4.21,3.26s-1.68,3.2-2.21,3.61a2.48,2.48,0,0,0-1.11,2.47c0,.37-.2.81-1.16.81-.81,0-1.09-.3-1.09-1.33a3.64,3.64,0,0,1,1.32-3c.65-.55,1.76-1.16,1.76-2.23,0-.91-.79-1.34-1.78-1.34-2,0-1.58,1.52-2.64,1.52a1.14,1.14,0,0,1-1.19-1.13C10.92,9.05,12.15,7.47,14.81,7.47Z\" />\n </svg>\n }\n >\n {optionGroup.tooltip}\n </Tooltip>\n </legend>\n\n <div class=\"mt-2 flex space-x-2 text-sm\">\n <For each={optionGroup.products}>\n {(option) => (\n <label\n class=\"flex flex-1 cursor-pointer flex-col justify-center rounded-md border p-4 text-center shadow-sm focus:outline-none\"\n classList={{\n 'border-primary ring-2 ring-primary': isSelected(\n option.id,\n optionGroup.id,\n ),\n 'border-gray-300': !isSelected(option.id, optionGroup.id),\n 'bg-gray-200':\n !isSelected(option.id, optionGroup.id) &&\n isTouched(optionGroup.id),\n }}\n >\n <input\n value={option.id}\n name={`option-${optionGroup.id}`}\n required\n type=\"radio\"\n class=\"h-px opacity-0\"\n checked={isSelected(option.id, optionGroup.id)}\n onChange={(e) => handleChange(e, optionGroup.id)}\n />\n <span>{option.title}</span>\n\n <Show when={option.price}>\n <span class=\" whitespace-nowrap font-semibold\">\n + {formatPrice(option.price)}/an\n </span>\n </Show>\n </label>\n )}\n </For>\n\n <label\n class=\"flex flex-1 cursor-pointer flex-col justify-center rounded-lg border p-4 text-center shadow-sm focus:outline-none\"\n classList={{\n 'border-primary ring-2 ring-primary': isSelected(\n null,\n optionGroup.id,\n ),\n 'border-gray-300': !isSelected(null, optionGroup.id),\n 'bg-gray-200':\n !isSelected(null, optionGroup.id) &&\n isTouched(optionGroup.id),\n }}\n >\n <input\n type=\"radio\"\n value={null}\n name={`option-${optionGroup.id}`}\n class=\"h-px opacity-0\"\n required\n checked={isSelected(null, optionGroup.id)}\n onChange={(e) => handleChange(e, optionGroup.id)}\n />\n Sans option\n </label>\n </div>\n </fieldset>\n )}\n </For>\n </section>\n );\n}\n","import { ProductCard } from './card';\nimport { Product } from '@/lib/sdk';\nimport { useSdk } from '@/stores/sdk';\nimport { cleanProductTitle } from '@/utils/cleanProductTitle';\nimport { Show, createResource } from 'solid-js';\n\ninterface Props {\n product: Product;\n}\n\nexport function LinkedProduct(props: Props) {\n const [sdk] = useSdk();\n\n const [linkedProduct] = createResource(() => {\n return sdk.catalog.details(props.product.linkedProductId);\n });\n\n return (\n <Show when={linkedProduct()?.id}>\n <section class=\"mx-auto mt-4 block max-w-5xl overflow-hidden px-4 lg:mt-8\">\n <h1 class=\"mt-8 text-2xl font-bold text-gray-800 lg:text-3xl\">\n {cleanProductTitle(linkedProduct().title)}\n </h1>\n\n <ProductCard product={linkedProduct()} isLinkedProduct />\n </section>\n </Show>\n );\n}\n","import { Product } from '@/lib/sdk';\nimport { formatPrice } from '@/utils/formatPrice';\nimport sd from 'snarkdown';\nimport { Icon } from 'solid-heroicons';\nimport { cog } from 'solid-heroicons/outline';\nimport { For, Show } from 'solid-js';\n\ninterface Props {\n product: Product;\n}\n\nexport function ProductAvailableOptions(props: Props) {\n const availableOptions = () => {\n const options: Product[] = [];\n\n for (const group of props.product.allowedOptionGroups) {\n options.push(...group.products);\n }\n return options;\n };\n\n return (\n <section class=\"mx-auto mt-8 max-w-5xl space-y-4 px-4\">\n <div class=\"flex items-center space-x-2 text-lg font-semibold\">\n <Icon path={cog} class=\"h-6 text-primary\" />\n <h2>Options disponibles</h2>\n </div>\n\n <div class=\"grid gap-4 lg:grid-cols-2\">\n <For each={availableOptions()}>\n {(option) => (\n <article class=\"grid flex-1 grid-cols-[auto,1fr] gap-x-4 rounded-lg border p-4\">\n <img\n src={option.image}\n class=\"col-start-1 row-start-1 h-20 rounded-full\"\n />\n\n <div class=\"col-start-2 row-start-1 flex items-center justify-between\">\n <h3 class=\"text-lg font-semibold\">{option.title}</h3>\n\n <Show when={option.price} fallback={<span>Gratuit</span>}>\n <span>{formatPrice(option.price)}/an</span>\n </Show>\n </div>\n\n <div\n class=\"prose prose-sm col-start-2 row-start-2 text-sm\"\n innerHTML={sd(option.shortText || '')}\n />\n </article>\n )}\n </For>\n </div>\n </section>\n );\n}\n","import faq1 from '@/assets/faq/faq.svg';\nimport Button from '@/components/button';\nimport CheckBox from '@/components/checkbox';\nimport Counter from '@/components/counter';\nimport Input from '@/components/input';\nimport Loader from '@/components/loader';\nimport {\n LinkedProduct,\n OptionInfoModal,\n ProductAvailableOptions,\n ProductNavbar,\n ProductOptionGroups,\n ProductPictos,\n ProductSupportSelector,\n} from '@/components/products';\nimport Select from '@/components/select';\nimport {SmartContextContainer} from '@/components/smart-context';\nimport {Product} from '@/lib/sdk';\nimport {useGlobalStore} from '@/stores';\nimport {useAuth} from '@/stores/auth';\nimport {useSdk} from '@/stores/sdk';\nimport {useTunnel} from '@/stores/tunnel';\nimport {cleanProductTitle} from '@/utils/cleanProductTitle';\nimport {formatPrice} from '@/utils/formatPrice';\nimport {\n dispatchGAEvent,\n dispatchGAPage,\n formatCategoryIdForGA,\n formatItemVariantForGA,\n formatPriceForGA,\n} from '@/utils/googleAnalytics';\nimport {Title} from '@solidjs/meta';\nimport {A, Navigate, useLocation, useNavigate, useParams, useSearchParams,} from '@solidjs/router';\nimport {add, format, format as formatDate} from 'date-fns';\nimport {fr as LocaleFR} from 'date-fns/esm/locale';\nimport sd from 'snarkdown';\nimport {Icon} from 'solid-heroicons';\nimport {cog} from 'solid-heroicons/outline';\nimport {createEffect, createMemo, createResource, createSignal, For, on, Show,} from 'solid-js';\nimport {createStore} from 'solid-js/store';\nimport 'animate.css';\nfunction HARDCODED_BORDEAUX_REDIRECTION() {\n let app = '';\n let location = '';\n\n if (\n\t navigator.userAgent.match(/iPhone/i) ||\n\t navigator.userAgent.match(/iPad/i)\n ) {\n\tapp = 'tbm-tram-bus-bat3-v3-p-r://';\n\tlocation =\n\t\t'https://apps.apple.com/fr/app/tbm-tram-bus-bat3-v3-p-r/id1492096341';\n }\n\n if (navigator.userAgent.match(/android/i)) {\n\tapp = 'tbm-tram-bus-bat3-v3-p-r://';\n\tlocation =\n\t\t'https://play.google.com/store/apps/details?id=com.infotbm.tbm&gl=FR';\n }\n\n function openApp() {\n\twindow.location.replace(app);\n }\n\n function fallbackToStore() {\n\twindow.location.replace(location);\n }\n\n openApp();\n fallbackToStore();\n}\n\nexport default function ProductDetails() {\n const [sdk] = useSdk();\n const [auth, authActions] = useAuth();\n const go = useNavigate();\n const params = useParams();\n const location = useLocation();\n const [globalStore, actions] = useGlobalStore();\n const [__, tunnelActions] = useTunnel();\n const [searchParams, setSearchParams] = useSearchParams();\n\n\n if (params.id === '14') {\n\treturn <Navigate href=\"/products/140\"/>\n }\n\n const [product] = createResource(() => params.id, sdk.catalog.details);\n\n createEffect(() => {\n\tif (product.error?.cause) {\n\t return go('/');\n\t}\n });\n\n const initialForm = () => ({\n\tquantity: 1,\n\tdelivery: null,\n\tprofile: 0,\n\tproduct: null as Product,\n\toptions: {} as Record<number, number | null>,\n\tstartDates: [] as string[],\n });\n\n const [error, setError] = createSignal('');\n const [form, setForm] = createStore(initialForm());\n\n createEffect(\n\t on(\n\t\t () => location.pathname,\n\t\t () => {\n\t\t\tsetForm(initialForm());\n\t\t\tsetError('');\n\n\t\t\tif (params.id === '4') {\n\t\t\t setError('Vous devez sélectionner un profil pour commander ce titre.')\n\t\t\t}\n\t\t },\n\t ),\n );\n\n const isAExternalLink = () => !!product()?.externalLink;\n const isV3Product = () => {\n\treturn product()?.title.toLowerCase().includes('v3');\n };\n const isYearlySubscription = () => product()?.isYearlySubscription;\n const isMonthlySubscription = () => product()?.isMonthlySubscription;\n const isSchoolSubscription = () => product()?.isScodi;\n const isEmployeePass = () => product()?.isOrganizationLink;\n const isSubscription = () => {\n\treturn (\n\t\tisMonthlySubscription() ||\n\t\tisYearlySubscription() ||\n\t\tisSchoolSubscription()\n\t);\n };\n\n const isCykleo = () => {\n\treturn product()?.variants.some((variant) => variant.providerId === \"CYKLEO\");\n }\n\n const smartContextTag = () => {\n\tif (product().smartContextTag) {\n\t return product().smartContextTag;\n\t}\n\n\tif (category().smartContextTag) {\n\t return category().smartContextTag;\n\t}\n\n\tif (category()?.parent?.smartContextTag) {\n\t return category().parent.smartContextTag;\n\t}\n\n\treturn '';\n };\n\n const selectedProfile = () => {\n\tif (!product()?.shopProfiles) {\n\t return null;\n\t}\n\n\treturn product().shopProfiles.find(\n\t\t(profile) => form.profile === profile.id,\n\t);\n };\n\n const category = createMemo(() => {\n\tif (!product()) {\n\t return;\n\t}\n\n\treturn globalStore.categories.find(\n\t\t(category) => category.id === product().categoryId,\n\t);\n });\n\n const isSaleable = () => {\n\tif (product().isNotSaleable) {\n\t return false;\n\t}\n\n\tconst hasSaleableVariants = product().variants.some((variant) => {\n\t if (variant.salesStart && new Date(variant.salesStart) > new Date()) {\n\t\treturn false;\n\t }\n\t if (variant.salesEnd && new Date(variant.salesEnd) < new Date()) {\n\t\treturn false;\n\t }\n\n\t return true;\n\t});\n\n\treturn hasSaleableVariants;\n };\n\n const availableStartDates = initAvailableStartDates();\n\n const callActionLabel = () => {\n\tif (!product().isNotSaleable) return 'Commander';\n\tif (product().unsaleableButtonLabel) return product().unsaleableButtonLabel;\n\n\treturn product().externalLink ? 'En savoir plus' : 'Commander';\n };\n\n const selectedBikeOption = () => {\n\tconst groups = product().allowedOptionGroups;\n\n\t//DIRTY HACK\n\tconst group = groups?.find((group) => {\n\t if (group.name.toLowerCase().includes('le vélo')) {\n\t\treturn true;\n\t }\n\n\t if (group.name.toLowerCase().includes('le velo')) {\n\t\treturn true;\n\t }\n\n\t if (group.name.toLowerCase().includes('v3')) {\n\t\treturn true;\n\t }\n\n\t return false;\n\t});\n\n\tif (!group) return undefined;\n\n\tconst optionId = form.options[group.id];\n\n\tif (!optionId) return undefined;\n\n\tconst option = group?.products.find((option) => optionId === option.id);\n\n\treturn option;\n };\n\n /**\n * Determined if the \"add to cart\" button should be disabled or not\n *\n * @returns {boolean} - Whether the submit button should be disabled or not\n */\n function isSubmitDisabled(): boolean {\n\tif (globalStore.closureStatus?.closed) {\n\t return true;\n\t}\n\n\tif (product()?.shopProfiles?.length && !form.profile) {\n\t return true;\n\t}\n\n\tif (\n\t\tisSubscription() &&\n\t\t!isSchoolSubscription() &&\n\t\t!form.startDates.length\n\t) {\n\t return true;\n\t}\n\n\tif (!isSaleable() && !product().externalLink) {\n\t return true;\n\t}\n\n\tconst productInCart = globalStore.cart.find((cartItem) => cartItem.item.product.id === product().id);\n\n\tif (Boolean(productInCart) && (productInCart.item.quantity + form.quantity) > product().maxCardQuantity) {\n\t return true;\n\t}\n\n\tif (auth.isReadOnly && !isAExternalLink()) {\n\t return true\n\t}\n\n\treturn false;\n }\n\n //Handle redirect from auth\n createEffect(\n\t on(product, () => {\n\t\tif (!product()) return;\n\n\t\tif (searchParams.action !== 'associate') return;\n\n\t\tsetForm('product', product());\n\n\t\tif (searchParams.quantity) {\n\t\t setForm('quantity', +searchParams.quantity);\n\t\t}\n\n\t\tif (searchParams.options) {\n\t\t setForm('options', JSON.parse(searchParams.options));\n\t\t}\n\n\t\tif (searchParams.startDates) {\n\t\t setForm('startDates', searchParams.startDates.split(','));\n\t\t}\n\n\t\tif (searchParams.profile) {\n\t\t setForm('profile', +searchParams.profile);\n\t\t}\n\n\t\tif (searchParams.delivery) {\n\t\t setForm('delivery', searchParams.delivery);\n\t\t}\n\n\t\tsetSearchParams({\n\t\t action: '',\n\t\t quantity: '',\n\t\t delivery: null,\n\t\t product: '',\n\t\t startDates: '',\n\t\t options: '',\n\t\t});\n\n\t\tif (!isSubmitDisabled() && isSaleable()) {\n\t\t return handleSubmit();\n\t\t}\n\t }),\n );\n\n //Init product\n createEffect(\n\t on(product, () => {\n\t\tif (product.loading || !product()) {\n\t\t return;\n\t\t}\n\n\t\tsetForm('product', product());\n\n\t\tif (isYearlySubscription() && actions.totalCart() > 0) {\n\t\t setError(\n\t\t\t 'Vous ne pouvez pas ajouter ce produit au panier, les modes de paiements ne sont pas compatibles.\\nVeuillez effectuer deux commandes séparées.',\n\t\t );\n\t\t}\n\n\t\tif (actions.hasIsolatedProductInCart()) {\n\t\t setError(\n\t\t\t 'Vous ne pouvez pas ajouter ce produit au panier, les modes de paiements ne sont pas compatibles. Veuillez effectuer deux commandes séparées.',\n\t\t );\n\t\t}\n\n\t\tdispatchGAPage('product', auth.user);\n\t\tdispatchGAEvent('view_item', null, auth.user, {\n\t\t ecommerce: {\n\t\t\tvalue: formatPriceForGA(product().price),\n\t\t\tcurrency: 'EUR',\n\t\t\titems: [\n\t\t\t {\n\t\t\t\titem_id: product().id,\n\t\t\t\titem_name: product().title,\n\t\t\t\titem_brand: category()?.name,\n\t\t\t\titem_list_id: formatCategoryIdForGA(category().id),\n\t\t\t\titem_list_name: category()?.name,\n\t\t\t\tprice: formatPriceForGA(product().price),\n\t\t\t\tcurrency: 'EUR',\n\t\t\t\tquantity: '1',\n\t\t\t\tindex: 1,\n\t\t\t\titem_category: category()?.name,\n\t\t\t },\n\t\t\t],\n\t\t },\n\t\t});\n\n\t\treturn;\n\t }),\n );\n\n createEffect(() => {\n\tif (isYearlySubscription() && !isSchoolSubscription()) {\n\t setForm('startDates', [\n\t\tformat(\n\t\t\tadd(new Date(), {days: product().subscriptionDelay ?? 1}),\n\t\t\t'yyyy-MM-dd',\n\t\t),\n\t ]);\n\t}\n });\n\n // Ajust Quantity on delivery change\n createEffect(\n\t on(\n\t\t () => form.delivery,\n\t\t () => {\n\t\t\tif (\n\t\t\t\tform.delivery === 'RELOAD' &&\n\t\t\t\tform.quantity > product().maxCardQuantity\n\t\t\t) {\n\t\t\t setForm('quantity', product().maxCardQuantity);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tform.delivery === 'TICKET' &&\n\t\t\t\tform.quantity > product().maxTicketQuantity\n\t\t\t) {\n\t\t\t setForm('quantity', product().maxTicketQuantity);\n\t\t\t}\n\t\t },\n\t ),\n );\n\n const [showOptionModal, setShowOptionModal] = createSignal(undefined);\n\n // Redirect to auth with backup of product form\n async function handleSubmit(event?: Event) {\n\tevent?.preventDefault();\n\n\t// Reset the error when submitting\n\tsetError('');\n\n\tconst isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n\n\tif (!isMobile && form.delivery === 'MOBILE') {\n\t setForm('delivery', null);\n\t}\n\n\tif (form.delivery === 'MOBILE') {\n\t return HARDCODED_BORDEAUX_REDIRECTION();\n\t}\n\n\tconst isIsolatedProduct =\n\t\tproduct().isYearlySubscription || product().isScodi;\n\n\tif (isIsolatedProduct && actions.totalCart() > 0) {\n\t return setError(\n\t\t 'Vous ne pouvez pas ajouter ce produit au panier, les modes de paiements ne sont pas compatibles.\\nVeuillez effectuer deux commandes séparées.',\n\t );\n\t}\n\n\tif (actions.hasIsolatedProductInCart()) {\n\t return setError(\n\t\t 'Vous ne pouvez pas ajouter ce produit au panier, les modes de paiements ne sont pas compatibles.\\nVeuillez effectuer deux commandes séparées.',\n\t );\n\t}\n\n\t// If we have an option in our cart and we didn't submit from the modal\n\n\tif (selectedBikeOption() && !showOptionModal()) {\n\t return setShowOptionModal(selectedBikeOption().id);\n\t}\n\n\tif (!auth.isAuthenticated) {\n\t return authActions.login();\n\t}\n\n\tif (form.delivery === 'RELOAD' || isCykleo()) {\n\t // We reset the tunnel in case it was already filled from a\n\t // previous tunnel that was aborted\n\t tunnelActions.reset();\n\n\t let parsedOptions: Product[] = [];\n\n\t for (const [key, option] of Object.entries(form.options)) {\n\t\tif (!option) continue;\n\n\t\tconst group = product().allowedOptionGroups.find(\n\t\t\t(group) => +group.id === +key,\n\t\t);\n\n\t\tconst foundOption = group?.products?.find(\n\t\t\t(product) => product.id === option,\n\t\t);\n\n\t\tif (!foundOption) {\n\t\t return setError(\n\t\t\t 'Une erreur est survenue, veuillez reÌessayer plus tard.',\n\t\t );\n\t\t}\n\n\t\tparsedOptions.push(foundOption);\n\t }\n\n\t tunnelActions.set({\n\t\tdelivery: form.delivery,\n\t\tproduct: form.product,\n\t\tquantity: form.quantity || 1,\n\t\toptions: parsedOptions,\n\t\tprofile: selectedProfile(),\n\t\tstartDates: form.startDates,\n\t });\n\n\t if (isEmployeePass()) {\n\t\ttunnelActions.set({needsAdditionalData: true});\n\t }\n\n\t if (isSubscription()) {\n\t\t// If we are in a subscription, we need to have an extra step\n\t\t// in the tunnel so that the user can validate the subscription dates\n\t\ttunnelActions.set({\n\t\t needsAdditionalData: true,\n\t\t needsToValidateTemporalValidity: true,\n\t\t});\n\t }\n\n\t return go(`/associate/passenger`);\n\t}\n\n\tactions.addToCart({\n\t delivery: form.delivery,\n\t quantity: form.quantity,\n\t product: form.product,\n\t});\n\n\tconst item = globalStore.cart.find(\n\t\t(item) => item.item.product.id === product().id,\n\t);\n\n\tdispatchGAEvent('add_to_cart', null, auth.user, {\n\t ecommerce: {\n\t\tvalue: formatPriceForGA(product().price),\n\t\tcurrency: 'EUR',\n\t\titems: [\n\t\t {\n\t\t\titem_id: product().id,\n\t\t\titem_name: product().title,\n\t\t\titem_brand: category()?.name,\n\t\t\titem_list_id: formatCategoryIdForGA(category().id),\n\t\t\titem_list_name: category()?.name,\n\t\t\titem_variant: formatItemVariantForGA(item.item),\n\t\t\tprice: formatPriceForGA(product().price),\n\t\t\tcurrency: 'EUR',\n\t\t\tquantity: form.quantity,\n\t\t\tindex: 1,\n\t\t\titem_category: category()?.name,\n\t\t },\n\t\t],\n\t },\n\t});\n\n\t// Reset the form\n\tsetForm(initialForm());\n\n\treturn setSearchParams({'cart-open': true});\n }\n\n function initAvailableStartDates() {\n\tconst startDates: Date[] = [];\n\tconst date = new Date();\n\tconst currentMonth = date.getMonth();\n\tconst currentDate = date.getDate();\n\n\tconst offset = currentDate > 20 ? 1 : 0;\n\n\tfor (let i = 0; i < 3; i++) {\n\t const startDate = new Date();\n\t startDate.setDate(1);\n\t startDate.setMonth(currentMonth + i + offset);\n\n\t startDates.push(startDate);\n\t}\n\n\treturn startDates;\n }\n\n function onChangeStartDates(event: Event) {\n\tconst target = event.target as HTMLInputElement;\n\tconst startDates = form.startDates;\n\n\tconst foundStartDate = startDates.some(\n\t\t(startDate) => startDate === target.value,\n\t);\n\n\tif (target.checked && !foundStartDate) {\n\t return setForm('startDates', [...startDates, target.value]);\n\t}\n\n\tif (!target.checked && foundStartDate) {\n\t const updatedStartDates = startDates.filter(\n\t\t (startDate) => startDate !== target.value,\n\t );\n\t return setForm('startDates', updatedStartDates);\n\t}\n }\n\n return (\n\t <main class=\"flex-1\">\n\t\t<Show when={!product.loading} fallback={<Loader class=\"mx-auto mt-8\"/>}>\n\t\t <Title>Boutique en ligne TBM : {product().title}</Title>\n\n\t\t <div class=\"bg-white pt-4 text-gray-700\">\n\t\t\t<ProductNavbar product={product()}/>\n\n\t\t\t<section class=\"mx-auto max-w-5xl px-4\">\n\t\t\t <h1 class=\"mt-8 text-2xl font-bold text-gray-800 lg:text-3xl\">\n\t\t\t\t{cleanProductTitle(product().title)}\n\t\t\t </h1>\n\t\t\t <Show when={error() && !searchParams['cart-open']}>\n\t\t\t\t<p class=\"mt-4 whitespace-pre-wrap rounded-lg border border-red-700 bg-red-50 p-4 text-sm font-semibold text-red-700\">\n\t\t\t\t {error()}\n\t\t\t\t</p>\n\t\t\t </Show>\n\n\t\t\t <form\n\t\t\t\t onSubmit={handleSubmit}\n\t\t\t\t class=\"mt-4 flex flex-col rounded-lg border border-gray-300 px-4 py-4 lg:grid lg:px-10 lg:py-10 \"\n\t\t\t\t classList={{\n\t\t\t\t\t// This handle the the case where there's no image... might be a bit shaky\n\t\t\t\t\t'lg:grid-cols-[15%,50%,35%]':\n\t\t\t\t\t\tproduct().image && !product().allowedOptionGroups?.length,\n\t\t\t\t\t'lg:grid-cols-[0%,70%,30%]':\n\t\t\t\t\t\t!product().image && !product().allowedOptionGroups?.length,\n\t\t\t\t\t'lg:grid-cols-[15%,30%,55%]':\n\t\t\t\t\t\tproduct().image && !!product().allowedOptionGroups?.length,\n\t\t\t\t\t'lg:grid-cols-[0%,60%,40%]':\n\t\t\t\t\t\t!product().image && !!product().allowedOptionGroups?.length,\n\t\t\t\t }}\n\t\t\t >\n\t\t\t\t<Show when={product().image}>\n\t\t\t\t <img\n\t\t\t\t\t src={product().image}\n\t\t\t\t\t alt=\"\"\n\t\t\t\t\t class=\"mx-auto h-32 lg:col-start-1 lg:row-span-4 lg:self-center\"\n\t\t\t\t />\n\t\t\t\t</Show>\n\n\t\t\t\t<section\n\t\t\t\t\tclass=\"flex flex-col items-center lg:col-start-2 lg:row-span-4 lg:mr-4 lg:self-center lg:border-r\">\n\t\t\t\t <Show when={product().mobilities}>\n\t\t\t\t\t<ProductPictos mobilities={product().mobilities}/>\n\t\t\t\t </Show>\n\n\t\t\t\t <p\n\t\t\t\t\t innerHTML={sd(product().shortText)}\n\t\t\t\t\t class=\"prose prose-sm mt-6 lg:col-start-2 lg:row-span-2 lg:row-start-1 lg:mt-0 lg:self-center lg:px-4\"\n\t\t\t\t />\n\t\t\t\t</section>\n\n\t\t\t\t<hr class=\"mx-auto my-8 w-20 border-gray-300 lg:hidden\"/>\n\n\t\t\t\t<Show\n\t\t\t\t\twhen={isYearlySubscription() && !isCykleo()}\n\t\t\t\t\tfallback={\n\t\t\t\t\t <p\n\t\t\t\t\t\t class=\"mx-auto text-2xl font-bold lg:col-start-3 lg:row-start-1\"\n\t\t\t\t\t\t classList={{hidden: isAExternalLink() && !isV3Product() && !isCykleo()}}\n\t\t\t\t\t >\n\t\t\t\t\t\t{/* TODO: Handle localisation */}\n\t\t\t\t\t\t{product().price === 0 ? 'Gratuit' : formatPrice(product().price)}\n\t\t\t\t\t </p>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t <div class=\"mx-auto lg:col-start-3 lg:row-start-1\">\n\t\t\t\t\t<p class=\"text-xl font-bold\">\n\t\t\t\t\t {formatPrice(product().monthlyPrice)} /mois\n\t\t\t\t\t</p>\n\t\t\t\t\t<p class=\"text-center text-sm text-gray-400\">\n\t\t\t\t\t ou {formatPrice(product().price)} /an\n\t\t\t\t\t</p>\n\t\t\t\t </div>\n\t\t\t\t</Show>\n\n\t\t\t\t<Show when={!product.loading && product().shopProfiles?.length}>\n\t\t\t\t <fieldset class=\"mt-4 space-y-4 lg:col-start-3\">\n\t\t\t\t\t<legend class=\"text-center font-semibold lg:col-span-2\">\n\t\t\t\t\t Choisissez votre profil\n\t\t\t\t\t</legend>\n\n\t\t\t\t\t<Select\n\t\t\t\t\t\tclass={params.id === '4' ? 'animate__animated animate__headShake' : ''}\n\t\t\t\t\t\tvalue={form.profile}\n\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t setForm('profile', parseInt(e.currentTarget.value))\n\t\t\t\t\t\t setError('')\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tselectClass=\"text-center border-b-2 border-primary\"\n\t\t\t\t\t>\n\t\t\t\t\t <option disabled selected={!form.profile} hidden>\n\t\t\t\t\t\tChoisir un profil\n\t\t\t\t\t </option>\n\t\t\t\t\t <For each={product().shopProfiles}>\n\t\t\t\t\t\t{(profile) => (\n\t\t\t\t\t\t\t<option value={profile.id}>{profile.label}</option>\n\t\t\t\t\t\t)}\n\t\t\t\t\t </For>\n\t\t\t\t\t</Select>\n\t\t\t\t </fieldset>\n\t\t\t\t</Show>\n\n\t\t\t\t<Show when={!isAExternalLink()}>\n\t\t\t\t <ProductSupportSelector\n\t\t\t\t\t product={product()}\n\t\t\t\t\t delivery={form.delivery}\n\t\t\t\t\t onChange={(value) => setForm('delivery', value)}\n\t\t\t\t />\n\t\t\t\t</Show>\n\n\t\t\t\t<Show when={product().allowedOptionGroups?.length > 0}>\n\t\t\t\t <ProductOptionGroups\n\t\t\t\t\t product={product()}\n\t\t\t\t\t options={form.options}\n\t\t\t\t\t onChange={(value) => setForm('options', value)}\n\t\t\t\t />\n\t\t\t\t</Show>\n\n\t\t\t\t<Show when={!isAExternalLink() && !isSubscription()}>\n\t\t\t\t <div class=\"mx-auto flex flex-col items-center lg:col-start-3\">\n\t\t\t\t\t<label\n\t\t\t\t\t\tfor=\"quantity\"\n\t\t\t\t\t\tclass=\"mx-auto mt-8 block font-semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t Quantité\n\t\t\t\t\t</label>\n\n\t\t\t\t\t<Counter\n\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\tmax={\n\t\t\t\t\t\t form.delivery === 'RELOAD'\n\t\t\t\t\t\t\t ? product().maxCardQuantity\n\t\t\t\t\t\t\t : product().maxTicketQuantity\n\t\t\t\t\t\t}\n\t\t\t\t\t\tname=\"quantity\"\n\t\t\t\t\t\tonValueChange={(quantity) => setForm({quantity})}\n\t\t\t\t\t\tvalue={form.quantity}\n\t\t\t\t\t\tclass=\"mx-auto mt-2\"\n\t\t\t\t\t/>\n\t\t\t\t </div>\n\t\t\t\t</Show>\n\n\t\t\t\t<Show when={isYearlySubscription() && !isSchoolSubscription()}>\n\t\t\t\t <Input\n\t\t\t\t\t class=\"mt-4 lg:col-start-3\"\n\t\t\t\t\t label=\"Date de début d'abonnement\"\n\t\t\t\t\t type=\"date\"\n\t\t\t\t\t name=\"startDate\"\n\t\t\t\t\t required\n\t\t\t\t\t value={format(\n\t\t\t\t\t\t add(new Date(), {days: product().subscriptionDelay ?? 1}),\n\t\t\t\t\t\t 'yyyy-MM-dd',\n\t\t\t\t\t )}\n\t\t\t\t\t onChange={(e) => {\n\t\t\t\t\t\tsetForm('startDates', [e.currentTarget.value]);\n\t\t\t\t\t }}\n\t\t\t\t\t min={format(\n\t\t\t\t\t\t add(new Date(), {days: product().subscriptionDelay ?? 1}),\n\t\t\t\t\t\t 'yyyy-MM-dd',\n\t\t\t\t\t )}\n\t\t\t\t\t max={format(add(new Date(), {years: 1}), 'yyyy-MM-dd')}\n\t\t\t\t />\n\t\t\t\t</Show>\n\n\t\t\t\t<Show when={isSchoolSubscription()}>\n\t\t\t\t <p class=\"my-2 text-center text-primary lg:col-start-3\">\n\t\t\t\t\t<span>Votre abonnement </span>\n\t\t\t\t\t<span>{category().name}</span>\n\t\t\t\t\t<span> sera valable à partir du </span>\n\t\t\t\t\t<span>\n {formatDate(\n\t\t\t\t\t\tnew Date(product().validityStart),\n\t\t\t\t\t\t'dd/MM/yyyy',\n\t\t\t\t\t)}\n </span>\n\t\t\t\t\t<span> et jusqu'au </span>\n\t\t\t\t\t<span>\n {formatDate(new Date(product().validityEnd), 'dd/MM/yyyy')}\n </span>\n\t\t\t\t\t<span>.</span>\n\t\t\t\t </p>\n\t\t\t\t</Show>\n\n\t\t\t\t<Show when={isMonthlySubscription()}>\n\t\t\t\t <fieldset class=\"mt-4\">\n\t\t\t\t\t<legend class=\"font-semibold\">Mois de recharge</legend>\n\n <For each={availableStartDates}>\n {(startDate) => (\n <CheckBox\n name=\"date\"\n class=\"text-sm uppercase\"\n onChange={onChangeStartDates}\n value={formatDate(startDate, 'yyyy-MM-dd')}\n label={formatDate(startDate, 'LLLL yyyy', {\n locale: LocaleFR,\n })}\n />\n )}\n </For>\n </fieldset>\n </Show>\n\n\t\t\t\t{/* If externalLink is defined then this will be a link, otherwise a simple button */}\n\t\t\t\t{/* All the logic reside in the button, that's probably not explicit enough... */}\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tvariant={product().externalLink ? 'primary' : 'secondary'}\n\t\t\t\t\tclass=\"mx-auto w-full lg:col-start-3 lg:mx-auto lg:w-auto\"\n\t\t\t\t\tclassList={{\n\t\t\t\t\t 'mt-8': !(product().externalLink || isV3Product()),\n\t\t\t\t\t 'lg:row-span-4 self-center': !!product().externalLink,\n\t\t\t\t\t}}\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\thref={product().externalLink}\n\t\t\t\t\tdisabled={isSubmitDisabled()}\n\t\t\t\t>\n\t\t\t\t {callActionLabel()}\n\t\t\t\t</Button>\n\t\t\t </form>\n\t\t\t</section>\n\n\t\t\t<Show when={product().upsellImage}>\n\t\t\t <A\n\t\t\t\t href={product().upsellLink ?? ''}\n\t\t\t\t class=\"mx-auto mt-4 block max-w-5xl overflow-hidden px-4 lg:mt-8\"\n\t\t\t >\n\t\t\t\t<img\n\t\t\t\t\tsrc={product().upsellImage ?? ''}\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tclass=\"w-full rounded-lg\"\n\t\t\t\t/>\n\t\t\t </A>\n\t\t\t</Show>\n\n\t\t\t<Show when={product().linkedProductId}>\n\t\t\t <LinkedProduct product={product()}/>\n\t\t\t</Show>\n\n\t\t\t<section class=\"mx-auto mt-8 max-w-5xl space-y-4 px-4\">\n\t\t\t <div class=\"flex items-center space-x-2 text-lg font-semibold\">\n\t\t\t\t<svg class=\"h-6 text-primary\" viewBox=\"0 0 30 30\">\n\t\t\t\t <path\n\t\t\t\t\t d=\"M15,0A15,15,0,1,1,0,15,15,15,0,0,1,15,0Zm0,1.5A13.5,13.5,0,1,0,28.5,15,13.49,13.49,0,0,0,15,1.5ZM14.56,19a1.52,1.52,0,0,1,0,3,1.52,1.52,0,0,1,0-3Zm.25-11.51c2.53,0,4.21,1.4,4.21,3.26s-1.68,3.2-2.21,3.61a2.48,2.48,0,0,0-1.11,2.47c0,.37-.2.81-1.16.81-.81,0-1.09-.3-1.09-1.33a3.64,3.64,0,0,1,1.32-3c.65-.55,1.76-1.16,1.76-2.23,0-.91-.79-1.34-1.78-1.34-2,0-1.58,1.52-2.64,1.52a1.14,1.14,0,0,1-1.19-1.13C10.92,9.05,12.15,7.47,14.81,7.47Z\"\n\t\t\t\t\t fill=\"#009cd1\"\n\t\t\t\t />\n\t\t\t\t</svg>\n\t\t\t\t<h2>Tout savoir sur mon titre</h2>\n\t\t\t </div>\n\n\t\t\t <div\n\t\t\t\t class=\"prose prose-sm max-w-full whitespace-pre-wrap\"\n\t\t\t\t innerHTML={sd(product().description)}\n\t\t\t />\n\t\t\t</section>\n\n\t\t\t<Show when={product()?.allowedOptionGroups?.length}>\n\t\t\t <ProductAvailableOptions product={product()}/>\n\t\t\t</Show>\n\n\t\t\t<Show when={product()?.shopProfiles?.length}>\n\t\t\t <section class=\"mx-auto mt-8 max-w-5xl space-y-4 px-4\">\n\t\t\t\t<div class=\"flex items-center space-x-2 text-lg font-semibold\">\n\t\t\t\t <Icon path={cog} class=\"h-6 text-primary\"/>\n\t\t\t\t <h2>Justificatifs nécessaires selon mon profil</h2>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"grid lg:grid-cols-5 lg:gap-4\">\n\t\t\t\t <For each={product()?.shopProfiles}>\n\t\t\t\t\t{(profile) => (\n\t\t\t\t\t\t<article class=\"flex-1 rounded-lg border p-4\">\n\t\t\t\t\t\t <img\n\t\t\t\t\t\t\t src={profile.image}\n\t\t\t\t\t\t\t class=\"mx-auto h-16 w-auto\"\n\t\t\t\t\t\t\t alt=\"\"\n\t\t\t\t\t\t />\n\n\t\t\t\t\t\t <header class=\"mt-6 flex items-center justify-between\">\n\t\t\t\t\t\t\t<h3 class=\"text-sm font-semibold\">{profile.label}</h3>\n\t\t\t\t\t\t </header>\n\n\t\t\t\t\t\t <main class=\"mt-2\">\n\t\t\t\t\t\t\t<p class=\"text-sm\">{profile.description}</p>\n\t\t\t\t\t\t </main>\n\t\t\t\t\t\t</article>\n\t\t\t\t\t)}\n\t\t\t\t </For>\n\t\t\t\t</div>\n\t\t\t </section>\n\t\t\t</Show>\n\n\t\t\t<Show when={smartContextTag()} fallback={<div class=\"py-8\"/>}>\n\t\t\t <section class=\" bg-gray-100 px-4 py-8\">\n\t\t\t\t<div class=\"mx-auto max-w-5xl\">\n\t\t\t\t <h3 class=\"flex items-center space-x-2 text-xl font-semibold\">\n\t\t\t\t\t<img src={faq1} alt=\"\" class=\"block h-9 w-auto\"/>\n\t\t\t\t\t<span>Questions fréquentes</span>\n\t\t\t\t </h3>\n\n\t\t\t\t <SmartContextContainer tags={[smartContextTag()]}/>\n\t\t\t\t</div>\n\t\t\t </section>\n\t\t\t</Show>\n\t\t </div>\n\t\t</Show>\n\n\t\t<OptionInfoModal\n\t\t\tproduct={product()}\n\t\t\toption={showOptionModal()}\n\t\t\tonClose={() => setShowOptionModal(false)}\n\t\t\tonSubmit={() => handleSubmit()}\n\t\t/>\n\t </main>\n );\n}\n"],"names":["ProductSupportSelector","props","hasSupport","support","product","variants","some","variant","hasReload","hasTicket","hasMobile","createEffect","on","delivery","onChange","hasMultipleSupport","supports","reduce","acc","push","Set","length","_$createComponent","Show","when","children","_el$","_tmpl$6","_el$5","firstChild","_$insert","_el$2","_tmpl$2","Tooltip","placement","title","icon","_tmpl$7","_tmpl$","_el$6","_tmpl$3","_el$7","addEventListener","e","_$effect","checked","_el$8","_tmpl$4","_el$9","_el$10","_tmpl$5","_el$11","ProductNavbar","globalStore","useGlobalStore","category","createMemo","categories","find","id","categoryId","nextSibling","A","href","class","parent","_el$3","_$memo","name","_el$4","cleanProductTitle","ProductOptionGroups","optionGroups","allowedOptionGroups","isSelected","optionGroupId","options","isTouched","Object","keys","includes","String","handleChange","target","optionId","parseInt","value","newOptions","For","each","optionGroup","tooltip","products","option","_el$13","_el$14","_el$15","price","_el$16","_el$19","formatPrice","_p$","_v$3","_v$4","_$classList","t","_$setAttribute","undefined","_v$","_v$2","LinkedProduct","sdk","useSdk","linkedProduct","createResource","catalog","details","linkedProductId","ProductCard","isLinkedProduct","ProductAvailableOptions","Icon","path","cog","availableOptions","group","fallback","image","sd","shortText","innerHTML","ProductDetails","auth","authActions","useAuth","go","useNavigate","params","useParams","location","useLocation","actions","__","tunnelActions","useTunnel","searchParams","setSearchParams","useSearchParams","Navigate","error","cause","setError","createSignal","form","setForm","createStore","quantity","profile","startDates","pathname","isAExternalLink","externalLink","isV3Product","toLowerCase","isYearlySubscription","isMonthlySubscription","isSchoolSubscription","isScodi","isSubscription","isCykleo","providerId","smartContextTag","isSaleable","isNotSaleable","salesStart","Date","salesEnd","availableStartDates","date","currentMonth","getMonth","offset","getDate","i","startDate","setDate","setMonth","initAvailableStartDates","selectedBikeOption","groups","isSubmitDisabled","closureStatus","closed","shopProfiles","productInCart","cart","cartItem","item","Boolean","maxCardQuantity","isReadOnly","action","JSON","parse","split","handleSubmit","loading","totalCart","hasIsolatedProductInCart","dispatchGAPage","user","dispatchGAEvent","ecommerce","formatPriceForGA","currency","items","item_id","item_name","item_brand","item_list_id","formatCategoryIdForGA","item_list_name","index","item_category","format","add","days","subscriptionDelay","maxTicketQuantity","showOptionModal","setShowOptionModal","async","event","preventDefault","test","navigator","userAgent","app","match","window","replace","HARDCODED_BORDEAUX_REDIRECTION","isAuthenticated","login","reset","parsedOptions","key","entries","foundOption","set","isOrganizationLink","needsAdditionalData","needsToValidateTemporalValidity","addToCart","item_variant","formatItemVariantForGA","onChangeStartDates","foundStartDate","updatedStartDates","filter","_tmpl$13","Loader","Title","_tmpl$12","_el$33","_el$35","mobilities","ProductPictos","_el$44","_tmpl$14","_c$","classList","toggle","_el$12","_el$17","monthlyPrice","_el$18","Select","currentTarget","selectClass","_el$20","selected","_el$45","_tmpl$15","label","_el$21","Counter","min","max","onValueChange","Input","type","required","years","_el$23","_el$25","_el$27","_el$29","formatDate","validityStart","validityEnd","_el$30","_tmpl$8","CheckBox","locale","LocaleFR","Button","rel","disabled","unsaleableButtonLabel","upsellImage","upsellLink","_el$32","_tmpl$9","_el$36","_tmpl$10","_el$37","_el$38","_el$39","_el$46","_tmpl$16","_el$47","_el$48","_el$49","_el$51","description","_tmpl$17","_el$40","_tmpl$11","_el$41","_el$43","faq1","SmartContextContainer","tags","a","OptionInfoModal","onClose","onSubmit"],"mappings":"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"}