@dropins/storefront-checkout 2.2.0-alpha1 → 2.2.0-alpha3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"LoginForm.js","sources":["/@dropins/storefront-checkout/src/lib/validation.ts","/@dropins/storefront-checkout/src/components/LoginForm/Email.tsx","/@dropins/storefront-checkout/src/components/LoginForm/SignIn.tsx","/@dropins/storefront-checkout/src/components/LoginForm/LoginFormSkeleton.tsx","/@dropins/storefront-checkout/src/components/LoginForm/LoginForm.tsx","/@dropins/storefront-checkout/src/components/LoginForm/SignOut.tsx","/@dropins/storefront-checkout/src/containers/LoginForm/LoginForm.tsx"],"sourcesContent":["export const validationPatterns = {\n EMAIL:\n /^[a-z0-9,!#$%&'*+/=?^_`{|}~-]+(\\.[a-z0-9,!#$%&'*+/=?^_`{|}~-]+)*@([a-z0-9-]+\\.)+[a-z]{2,}$/i,\n};\n\nexport const validateEmail = (email: string): boolean => {\n return validationPatterns.EMAIL.test(email);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Field, Input } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface LoginEmailProps extends HTMLAttributes<HTMLInputElement> {\n value: string;\n error: string;\n hint: string;\n onChange: (event: Event) => void;\n onBlur: (event: Event) => void;\n onInvalid: (event: Event) => void;\n}\n\nexport const Email: FunctionComponent<LoginEmailProps> = ({\n value,\n error,\n hint,\n onChange,\n onBlur,\n onInvalid,\n}) => {\n const translations = useText({\n LoginFormLabel: 'Checkout.LoginForm.ariaLabel',\n LoginFormFloatingLabel: 'Checkout.LoginForm.floatingLabel',\n LoginFormPlaceholder: 'Checkout.LoginForm.placeholder',\n });\n\n return (\n <Field error={error} hint={hint}>\n <Input\n aria-label={translations.LoginFormLabel}\n aria-required={true}\n autocomplete=\"email\"\n floatingLabel={translations.LoginFormFloatingLabel}\n id=\"customer-email\"\n name=\"customer-email\"\n placeholder={translations.LoginFormPlaceholder}\n required={true}\n type=\"email\"\n value={value}\n onBlur={onBlur}\n onChange={onChange}\n onInvalid={onInvalid}\n />\n </Field>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\n\ninterface SignInProps {\n onClick: (event: Event) => void;\n}\n\nexport const SignIn: FunctionComponent<SignInProps> = ({ onClick }) => {\n const translations = useText({\n account: 'Checkout.LoginForm.account',\n signIn: 'Checkout.LoginForm.signIn'\n });\n\n return (\n <div className=\"checkout-login-form__sign-in\">\n {translations.account}\n\n <a\n className=\"checkout-login-form__link\"\n data-testid=\"sign-in-link\"\n href=\"#\"\n rel=\"noreferrer\"\n target=\"_blank\"\n onClick={(event) => {\n event.preventDefault();\n onClick(event);\n }}\n >\n {translations.signIn}\n </a>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\nimport { FunctionComponent } from 'preact';\n\nexport const LoginFormSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"login-form-skeleton\">\n <SkeletonRow fullWidth={true} variant=\"heading\" />\n <SkeletonRow fullWidth={true} size=\"medium\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Email } from '@/checkout/components';\nimport { WithConditionals } from '@/checkout/components/ConditionalWrapper/ConditionalWrapper';\nimport '@/checkout/components/LoginForm/LoginForm.css';\nimport { LoginFormSkeleton } from '@/checkout/components/LoginForm/LoginFormSkeleton';\nimport { Customer } from '@/checkout/data/models';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface LoginFormProps\n extends Omit<HTMLAttributes<HTMLFormElement>, 'title'> {\n customer: Customer | null;\n email: string;\n error: string;\n headingContent?: VNode;\n hint: string | VNode;\n onEmailBlur: (event: Event) => void;\n onEmailChange: (event: Event) => void;\n onEmailInvalid: (event: Event) => void;\n title?: VNode;\n}\n\nconst LoginFormComponent: FunctionComponent<LoginFormProps> = ({\n className,\n customer,\n email,\n error,\n headingContent,\n hint,\n name,\n onEmailBlur,\n onEmailChange,\n onEmailInvalid,\n title,\n ...props\n}) => {\n return (\n <div className=\"checkout-login-form\" data-testid=\"checkout-login-form\">\n <div className=\"checkout-login-form__heading\">\n {title && (\n <VComponent className=\"checkout-login-form__title\" node={title} />\n )}\n\n {headingContent && (\n <VComponent\n className=\"checkout-login-form__heading-label\"\n node={headingContent}\n />\n )}\n </div>\n\n {customer ? (\n <div className=\"checkout-login-form__customer-details\">\n <div className=\"checkout-login-form__customer-name\">\n {`${customer.firstName} ${customer.lastName}`}\n </div>\n\n <div className=\"checkout-login-form__customer-email\">\n {customer.email}\n </div>\n </div>\n ) : (\n <div className=\"checkout-login-form__content\">\n <form\n {...props}\n noValidate\n className={classes(['dropin-login-form__form', className])}\n name={name}\n >\n {/* Prevent 'Enter' key press from submitting this form. */}\n <button\n disabled\n aria-hidden=\"true\"\n style=\"display: none\"\n type=\"submit\"\n />\n <Email\n error={error}\n hint={hint as any}\n value={email}\n onBlur={onEmailBlur}\n onChange={onEmailChange}\n onInvalid={onEmailInvalid}\n />\n </form>\n </div>\n )}\n </div>\n );\n};\n\nexport const LoginForm = WithConditionals(\n LoginFormComponent,\n LoginFormSkeleton\n);\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\n\ninterface SignOutProps {\n onClick: (event: Event) => void;\n}\n\nexport const SignOut: FunctionComponent<SignOutProps> = ({ onClick }) => {\n const translations = useText({\n switch: 'Checkout.LoginForm.switch',\n signOut: 'Checkout.LoginForm.signOut'\n });\n\n return (\n <p className=\"checkout-login-form__sign-out\">\n {translations.switch}\n\n <a\n className=\"checkout-login-form__link\"\n href=\"#\"\n rel=\"noreferrer\"\n target=\"_blank\"\n onClick={(event) => {\n event.preventDefault();\n onClick?.(event);\n }}\n >\n {translations.signOut}\n </a>\n </p>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n getCustomer,\n isEmailAvailable,\n setGuestEmailOnCart,\n} from '@/checkout/api';\nimport {\n LoginForm as LoginFormComponent,\n SignIn,\n SignOut,\n} from '@/checkout/components/LoginForm';\nimport { Cart, Customer } from '@/checkout/data/models';\nimport {\n getCartEmail,\n getLatestCheckoutUpdate,\n getValue,\n notifyValues,\n validateEmail,\n} from '@/checkout/lib';\nimport { TitleProps } from '@/checkout/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { events } from '@adobe-commerce/event-bus';\nimport { HTMLAttributes } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\n\ninterface ValidationError {\n email: string;\n message: string;\n type: 'missing' | 'invalid';\n}\n\ninterface CartSyncError {\n email: string;\n error: Error;\n}\n\nexport interface LoginFormProps\n extends HTMLAttributes<HTMLFormElement>,\n TitleProps {\n active?: boolean;\n autoSync?: boolean;\n displayHeadingContent?: boolean;\n onSignInClick?: (email: string) => void;\n onSignOutClick?: () => void;\n onCartSyncError?: (error: CartSyncError) => void;\n onValidationError?: (error: ValidationError) => void;\n slots?: {\n Heading?: SlotProps<{\n authenticated: boolean;\n }>;\n } & TitleProps['slots'];\n}\n\nconst DEBOUNCE_TIME = 1000;\n\nexport const LoginForm: Container<LoginFormProps> = ({\n active = true,\n autoSync = true,\n displayHeadingContent = true,\n displayTitle = true,\n initialData,\n onCartSyncError,\n onSignInClick,\n onSignOutClick,\n onValidationError,\n slots,\n ...props\n}) => {\n const [customer, setCustomer] = useState<Customer | null>(null);\n const [email, setEmail] = useState<string>('');\n const [error, setError] = useState<string>('');\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [isAvailable, setIsAvailable] = useState<boolean>(true);\n const [isInitialized, setIsInitialized] = useState<boolean>(false);\n\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const {\n alreadyHaveAccountHint,\n cartSyncError,\n defaultTitle,\n fasterCheckoutHint,\n invalidEmailError,\n missingEmailError,\n signInLabel,\n } = useText({\n alreadyHaveAccountHint: 'Checkout.LoginForm.emailExists.alreadyHaveAccount',\n cartSyncError: 'Checkout.LoginForm.cartSyncError',\n defaultTitle: 'Checkout.LoginForm.title',\n fasterCheckoutHint: 'Checkout.LoginForm.emailExists.forFasterCheckout',\n invalidEmailError: 'Checkout.LoginForm.invalidEmailError',\n missingEmailError: 'Checkout.LoginForm.missingEmailError',\n signInLabel: 'Checkout.LoginForm.emailExists.signInButton',\n });\n\n const setEmailAndCheckAvailability = useCallback(\n (email: string) => {\n if (!validateEmail(email) || email === getCartEmail()) return;\n\n isEmailAvailable(email)\n .then((availability) => {\n setIsAvailable(availability);\n })\n .catch((error) => {\n console.error(error);\n setIsAvailable(true);\n });\n\n if (!autoSync) return;\n\n setGuestEmailOnCart(email).catch((error) => {\n onCartSyncError?.({ email, error });\n\n if (!onCartSyncError) {\n setError(cartSyncError);\n }\n });\n },\n [autoSync, onCartSyncError, cartSyncError]\n );\n\n const handleChange = useCallback(\n (event: Event) => {\n const target = event.target as HTMLInputElement;\n const email = target.value;\n\n setEmail(email);\n setIsAvailable(true);\n setError('');\n\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n\n debounceTimer.current = setTimeout(() => {\n setEmailAndCheckAvailability(email);\n notifyValues({ email });\n debounceTimer.current = null;\n }, DEBOUNCE_TIME);\n },\n [setEmailAndCheckAvailability]\n );\n\n const handleBlur = useCallback(\n (event: Event) => {\n const target = event.target as HTMLInputElement;\n const email = target.value.trim();\n const isValid = validateEmail(email);\n\n if (isValid) {\n setError('');\n target.setCustomValidity('');\n\n if (!debounceTimer.current) return;\n\n clearTimeout(debounceTimer.current);\n debounceTimer.current = null;\n setEmailAndCheckAvailability(email);\n notifyValues({ email });\n return;\n }\n\n const type = email === '' ? 'missing' : 'invalid';\n const message =\n type === 'missing' ? missingEmailError : invalidEmailError;\n\n if (onValidationError) {\n onValidationError({ email, message, type });\n return;\n }\n\n setError(message);\n target.setCustomValidity(message);\n },\n [\n invalidEmailError,\n missingEmailError,\n onValidationError,\n setEmailAndCheckAvailability,\n ]\n );\n\n const handleInvalid = useCallback(\n (event: Event) => {\n const target = event.target as HTMLInputElement;\n const validity = target.validity;\n\n const message = validity.valueMissing\n ? missingEmailError\n : invalidEmailError;\n\n if (!onValidationError) {\n setError(message);\n return;\n }\n\n onValidationError({\n email: target.value,\n message,\n type: validity.valueMissing ? 'missing' : 'invalid',\n });\n },\n [missingEmailError, invalidEmailError, onValidationError]\n );\n\n const handleSignIn = useCallback(() => {\n const email = getValue('email') ?? '';\n const isValid = validateEmail(email);\n onSignInClick?.(isValid ? email : '');\n }, [onSignInClick]);\n\n const handleSignOut = useCallback(() => {\n onSignOutClick?.();\n }, [onSignOutClick]);\n\n const handleCheckoutData = useCallback((data: Cart | null) => {\n const prevEmail = getValue('email') ?? '';\n const email = data?.email ?? '';\n\n if (email !== prevEmail) {\n setEmail(email);\n setError('');\n setIsAvailable(true);\n notifyValues({ email });\n }\n }, []);\n\n useEffect(() => {\n if (!active) return;\n\n const onAuthenticated = events.on(\n 'authenticated',\n (authenticated) => {\n setIsAuthenticated(authenticated);\n\n getCustomer()\n .then((customer) => {\n setCustomer(customer);\n })\n .catch(console.error);\n },\n { eager: true }\n );\n\n return () => {\n onAuthenticated?.off();\n };\n }, [active]);\n\n useEffect(() => {\n if (!active) return;\n\n const pastUpdate = getLatestCheckoutUpdate();\n\n if (pastUpdate) {\n setIsInitialized(true);\n // When component becomes active, restore local state from checkout data\n const checkoutEmail = pastUpdate.email ?? '';\n if (checkoutEmail) {\n setEmail(checkoutEmail);\n }\n handleCheckoutData(pastUpdate);\n return;\n }\n\n const onCheckoutInit = events.on(\n 'checkout/initialized',\n (data) => {\n setIsInitialized(true);\n handleCheckoutData(data);\n },\n { eager: true }\n );\n\n return () => {\n onCheckoutInit?.off();\n };\n }, [active, handleCheckoutData]);\n\n useEffect(() => {\n if (!active) return;\n\n const onCheckoutUpdated = events.on(\n 'checkout/updated',\n handleCheckoutData,\n { eager: false }\n );\n\n return () => {\n onCheckoutUpdated?.off();\n };\n }, [active, handleCheckoutData]);\n\n const titleContent = useMemo(() => {\n if (!displayTitle) return undefined;\n\n return (\n <Slot name=\"checkout-login-form-title\" slot={slots?.Title}>\n <h2>{defaultTitle}</h2>\n </Slot>\n );\n }, [displayTitle, slots, defaultTitle]);\n\n const headingContent = useMemo(() => {\n if (!displayHeadingContent) return undefined;\n\n return (\n <Slot\n context={{ authenticated: isAuthenticated }}\n name=\"checkout-login-form-heading-label\"\n slot={slots?.Heading}\n >\n {isAuthenticated ? (\n <SignOut onClick={handleSignOut} />\n ) : (\n <SignIn onClick={handleSignIn} />\n )}\n </Slot>\n );\n }, [\n displayHeadingContent,\n isAuthenticated,\n slots,\n handleSignIn,\n handleSignOut,\n ]);\n\n const hintContent = useMemo(() => {\n if (isAvailable) return '';\n\n return (\n <>\n {alreadyHaveAccountHint}{' '}\n <a href=\"#\" onClick={handleSignIn}>\n {signInLabel}\n </a>{' '}\n {fasterCheckoutHint}\n </>\n );\n }, [\n isAvailable,\n alreadyHaveAccountHint,\n signInLabel,\n fasterCheckoutHint,\n handleSignIn,\n ]);\n\n return (\n <LoginFormComponent\n {...props}\n customer={customer}\n email={email}\n error={error}\n headingContent={headingContent}\n hint={hintContent}\n initialized={isInitialized}\n title={titleContent}\n visible={active}\n onEmailBlur={handleBlur}\n onEmailChange={handleChange}\n onEmailInvalid={handleInvalid}\n />\n );\n};\n"],"names":["validationPatterns","validateEmail","email","Email","value","error","hint","onChange","onBlur","onInvalid","translations","useText","jsx","Field","Input","SignIn","onClick","jsxs","event","LoginFormSkeleton","Skeleton","SkeletonRow","LoginFormComponent","className","customer","headingContent","name","onEmailBlur","onEmailChange","onEmailInvalid","title","props","VComponent","classes","LoginForm","WithConditionals","SignOut","DEBOUNCE_TIME","active","autoSync","displayHeadingContent","displayTitle","initialData","onCartSyncError","onSignInClick","onSignOutClick","onValidationError","slots","setCustomer","useState","setEmail","setError","isAuthenticated","setIsAuthenticated","isAvailable","setIsAvailable","isInitialized","setIsInitialized","debounceTimer","useRef","alreadyHaveAccountHint","cartSyncError","defaultTitle","fasterCheckoutHint","invalidEmailError","missingEmailError","signInLabel","setEmailAndCheckAvailability","useCallback","getCartEmail","isEmailAvailable","availability","setGuestEmailOnCart","handleChange","notifyValues","handleBlur","target","type","message","handleInvalid","validity","handleSignIn","getValue","isValid","handleSignOut","handleCheckoutData","data","prevEmail","useEffect","onAuthenticated","events","authenticated","getCustomer","pastUpdate","getLatestCheckoutUpdate","checkoutEmail","onCheckoutInit","onCheckoutUpdated","titleContent","useMemo","Slot","hintContent","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"LoginForm.js","sources":["/@dropins/storefront-checkout/src/components/LoginForm/Email.tsx","/@dropins/storefront-checkout/src/components/LoginForm/SignIn.tsx","/@dropins/storefront-checkout/src/components/LoginForm/LoginFormSkeleton.tsx","/@dropins/storefront-checkout/src/components/LoginForm/LoginForm.tsx","/@dropins/storefront-checkout/src/components/LoginForm/SignOut.tsx","/@dropins/storefront-checkout/src/containers/LoginForm/LoginForm.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Field, Input } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface LoginEmailProps extends HTMLAttributes<HTMLInputElement> {\n value: string;\n error: string;\n hint: string;\n onChange: (event: Event) => void;\n onBlur: (event: Event) => void;\n onInvalid: (event: Event) => void;\n}\n\nexport const Email: FunctionComponent<LoginEmailProps> = ({\n value,\n error,\n hint,\n onChange,\n onBlur,\n onInvalid,\n}) => {\n const translations = useText({\n LoginFormLabel: 'Checkout.LoginForm.ariaLabel',\n LoginFormFloatingLabel: 'Checkout.LoginForm.floatingLabel',\n LoginFormPlaceholder: 'Checkout.LoginForm.placeholder',\n });\n\n return (\n <Field error={error} hint={hint}>\n <Input\n aria-label={translations.LoginFormLabel}\n aria-required={true}\n autocomplete=\"email\"\n floatingLabel={translations.LoginFormFloatingLabel}\n id=\"customer-email\"\n name=\"customer-email\"\n placeholder={translations.LoginFormPlaceholder}\n required={true}\n type=\"email\"\n value={value}\n onBlur={onBlur}\n onChange={onChange}\n onInvalid={onInvalid}\n />\n </Field>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\n\ninterface SignInProps {\n onClick: (event: Event) => void;\n}\n\nexport const SignIn: FunctionComponent<SignInProps> = ({ onClick }) => {\n const translations = useText({\n account: 'Checkout.LoginForm.account',\n signIn: 'Checkout.LoginForm.signIn'\n });\n\n return (\n <div className=\"checkout-login-form__sign-in\">\n {translations.account}\n\n <a\n className=\"checkout-login-form__link\"\n data-testid=\"sign-in-link\"\n href=\"#\"\n rel=\"noreferrer\"\n target=\"_blank\"\n onClick={(event) => {\n event.preventDefault();\n onClick(event);\n }}\n >\n {translations.signIn}\n </a>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\nimport { FunctionComponent } from 'preact';\n\nexport const LoginFormSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"login-form-skeleton\">\n <SkeletonRow fullWidth={true} variant=\"heading\" />\n <SkeletonRow fullWidth={true} size=\"medium\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Email } from '@/checkout/components';\nimport { WithConditionals } from '@/checkout/components/ConditionalWrapper/ConditionalWrapper';\nimport '@/checkout/components/LoginForm/LoginForm.css';\nimport { LoginFormSkeleton } from '@/checkout/components/LoginForm/LoginFormSkeleton';\nimport { Customer } from '@/checkout/data/models';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface LoginFormProps\n extends Omit<HTMLAttributes<HTMLFormElement>, 'title'> {\n customer: Customer | null;\n email: string;\n error: string;\n headingContent?: VNode;\n hint: string | VNode;\n onEmailBlur: (event: Event) => void;\n onEmailChange: (event: Event) => void;\n onEmailInvalid: (event: Event) => void;\n title?: VNode;\n}\n\nconst LoginFormComponent: FunctionComponent<LoginFormProps> = ({\n className,\n customer,\n email,\n error,\n headingContent,\n hint,\n name,\n onEmailBlur,\n onEmailChange,\n onEmailInvalid,\n title,\n ...props\n}) => {\n return (\n <div className=\"checkout-login-form\" data-testid=\"checkout-login-form\">\n <div className=\"checkout-login-form__heading\">\n {title && (\n <VComponent className=\"checkout-login-form__title\" node={title} />\n )}\n\n {headingContent && (\n <VComponent\n className=\"checkout-login-form__heading-label\"\n node={headingContent}\n />\n )}\n </div>\n\n {customer ? (\n <div className=\"checkout-login-form__customer-details\">\n <div className=\"checkout-login-form__customer-name\">\n {`${customer.firstName} ${customer.lastName}`}\n </div>\n\n <div className=\"checkout-login-form__customer-email\">\n {customer.email}\n </div>\n </div>\n ) : (\n <div className=\"checkout-login-form__content\">\n <form\n {...props}\n noValidate\n className={classes(['dropin-login-form__form', className])}\n name={name}\n >\n {/* Prevent 'Enter' key press from submitting this form. */}\n <button\n disabled\n aria-hidden=\"true\"\n style=\"display: none\"\n type=\"submit\"\n />\n <Email\n error={error}\n hint={hint as any}\n value={email}\n onBlur={onEmailBlur}\n onChange={onEmailChange}\n onInvalid={onEmailInvalid}\n />\n </form>\n </div>\n )}\n </div>\n );\n};\n\nexport const LoginForm = WithConditionals(\n LoginFormComponent,\n LoginFormSkeleton\n);\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\n\ninterface SignOutProps {\n onClick: (event: Event) => void;\n}\n\nexport const SignOut: FunctionComponent<SignOutProps> = ({ onClick }) => {\n const translations = useText({\n switch: 'Checkout.LoginForm.switch',\n signOut: 'Checkout.LoginForm.signOut'\n });\n\n return (\n <p className=\"checkout-login-form__sign-out\">\n {translations.switch}\n\n <a\n className=\"checkout-login-form__link\"\n href=\"#\"\n rel=\"noreferrer\"\n target=\"_blank\"\n onClick={(event) => {\n event.preventDefault();\n onClick?.(event);\n }}\n >\n {translations.signOut}\n </a>\n </p>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n getCustomer,\n isEmailAvailable,\n setGuestEmailOnCart,\n} from '@/checkout/api';\nimport {\n LoginForm as LoginFormComponent,\n SignIn,\n SignOut,\n} from '@/checkout/components/LoginForm';\nimport { Cart, Customer } from '@/checkout/data/models';\nimport {\n getCartEmail,\n getLatestCheckoutUpdate,\n getValue,\n notifyValues,\n validateEmail,\n} from '@/checkout/lib';\nimport { TitleProps } from '@/checkout/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { events } from '@adobe-commerce/event-bus';\nimport { HTMLAttributes } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\n\ninterface ValidationError {\n email: string;\n message: string;\n type: 'missing' | 'invalid';\n}\n\ninterface CartSyncError {\n email: string;\n error: Error;\n}\n\nexport interface LoginFormProps\n extends HTMLAttributes<HTMLFormElement>,\n TitleProps {\n active?: boolean;\n autoSync?: boolean;\n displayHeadingContent?: boolean;\n onSignInClick?: (email: string) => void;\n onSignOutClick?: () => void;\n onCartSyncError?: (error: CartSyncError) => void;\n onValidationError?: (error: ValidationError) => void;\n slots?: {\n Heading?: SlotProps<{\n authenticated: boolean;\n }>;\n } & TitleProps['slots'];\n}\n\nconst DEBOUNCE_TIME = 1000;\n\nexport const LoginForm: Container<LoginFormProps> = ({\n active = true,\n autoSync = true,\n displayHeadingContent = true,\n displayTitle = true,\n initialData,\n onCartSyncError,\n onSignInClick,\n onSignOutClick,\n onValidationError,\n slots,\n ...props\n}) => {\n const [customer, setCustomer] = useState<Customer | null>(null);\n const [email, setEmail] = useState<string>('');\n const [error, setError] = useState<string>('');\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [isAvailable, setIsAvailable] = useState<boolean>(true);\n const [isInitialized, setIsInitialized] = useState<boolean>(false);\n\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const {\n alreadyHaveAccountHint,\n cartSyncError,\n defaultTitle,\n fasterCheckoutHint,\n invalidEmailError,\n missingEmailError,\n signInLabel,\n } = useText({\n alreadyHaveAccountHint: 'Checkout.LoginForm.emailExists.alreadyHaveAccount',\n cartSyncError: 'Checkout.LoginForm.cartSyncError',\n defaultTitle: 'Checkout.LoginForm.title',\n fasterCheckoutHint: 'Checkout.LoginForm.emailExists.forFasterCheckout',\n invalidEmailError: 'Checkout.LoginForm.invalidEmailError',\n missingEmailError: 'Checkout.LoginForm.missingEmailError',\n signInLabel: 'Checkout.LoginForm.emailExists.signInButton',\n });\n\n const setEmailAndCheckAvailability = useCallback(\n (email: string) => {\n if (!validateEmail(email) || email === getCartEmail()) return;\n\n isEmailAvailable(email)\n .then((availability) => {\n setIsAvailable(availability);\n })\n .catch((error) => {\n console.error(error);\n setIsAvailable(true);\n });\n\n if (!autoSync) return;\n\n setGuestEmailOnCart(email).catch((error) => {\n onCartSyncError?.({ email, error });\n\n if (!onCartSyncError) {\n setError(cartSyncError);\n }\n });\n },\n [autoSync, onCartSyncError, cartSyncError]\n );\n\n const handleChange = useCallback(\n (event: Event) => {\n const target = event.target as HTMLInputElement;\n const email = target.value;\n\n setEmail(email);\n setIsAvailable(true);\n setError('');\n\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n\n debounceTimer.current = setTimeout(() => {\n setEmailAndCheckAvailability(email);\n notifyValues({ email });\n debounceTimer.current = null;\n }, DEBOUNCE_TIME);\n },\n [setEmailAndCheckAvailability]\n );\n\n const handleBlur = useCallback(\n (event: Event) => {\n const target = event.target as HTMLInputElement;\n const email = target.value.trim();\n const isValid = validateEmail(email);\n\n if (isValid) {\n setError('');\n target.setCustomValidity('');\n\n if (!debounceTimer.current) return;\n\n clearTimeout(debounceTimer.current);\n debounceTimer.current = null;\n setEmailAndCheckAvailability(email);\n notifyValues({ email });\n return;\n }\n\n const type = email === '' ? 'missing' : 'invalid';\n const message =\n type === 'missing' ? missingEmailError : invalidEmailError;\n\n if (onValidationError) {\n onValidationError({ email, message, type });\n return;\n }\n\n setError(message);\n target.setCustomValidity(message);\n },\n [\n invalidEmailError,\n missingEmailError,\n onValidationError,\n setEmailAndCheckAvailability,\n ]\n );\n\n const handleInvalid = useCallback(\n (event: Event) => {\n const target = event.target as HTMLInputElement;\n const validity = target.validity;\n\n const message = validity.valueMissing\n ? missingEmailError\n : invalidEmailError;\n\n if (!onValidationError) {\n setError(message);\n return;\n }\n\n onValidationError({\n email: target.value,\n message,\n type: validity.valueMissing ? 'missing' : 'invalid',\n });\n },\n [missingEmailError, invalidEmailError, onValidationError]\n );\n\n const handleSignIn = useCallback(() => {\n const email = getValue('email') ?? '';\n const isValid = validateEmail(email);\n onSignInClick?.(isValid ? email : '');\n }, [onSignInClick]);\n\n const handleSignOut = useCallback(() => {\n onSignOutClick?.();\n }, [onSignOutClick]);\n\n const handleCheckoutData = useCallback((data: Cart | null) => {\n const prevEmail = getValue('email') ?? '';\n const email = data?.email ?? '';\n\n if (email !== prevEmail) {\n setEmail(email);\n setError('');\n setIsAvailable(true);\n notifyValues({ email });\n }\n }, []);\n\n useEffect(() => {\n if (!active) return;\n\n const onAuthenticated = events.on(\n 'authenticated',\n (authenticated) => {\n setIsAuthenticated(authenticated);\n\n getCustomer()\n .then((customer) => {\n setCustomer(customer);\n })\n .catch(console.error);\n },\n { eager: true }\n );\n\n return () => {\n onAuthenticated?.off();\n };\n }, [active]);\n\n useEffect(() => {\n if (!active) return;\n\n const pastUpdate = getLatestCheckoutUpdate();\n\n if (pastUpdate) {\n setIsInitialized(true);\n // When component becomes active, restore local state from checkout data\n const checkoutEmail = pastUpdate.email ?? '';\n if (checkoutEmail) {\n setEmail(checkoutEmail);\n }\n handleCheckoutData(pastUpdate);\n return;\n }\n\n const onCheckoutInit = events.on(\n 'checkout/initialized',\n (data) => {\n setIsInitialized(true);\n handleCheckoutData(data);\n },\n { eager: true }\n );\n\n return () => {\n onCheckoutInit?.off();\n };\n }, [active, handleCheckoutData]);\n\n useEffect(() => {\n if (!active) return;\n\n const onCheckoutUpdated = events.on(\n 'checkout/updated',\n handleCheckoutData,\n { eager: false }\n );\n\n return () => {\n onCheckoutUpdated?.off();\n };\n }, [active, handleCheckoutData]);\n\n const titleContent = useMemo(() => {\n if (!displayTitle) return undefined;\n\n return (\n <Slot name=\"checkout-login-form-title\" slot={slots?.Title}>\n <h2>{defaultTitle}</h2>\n </Slot>\n );\n }, [displayTitle, slots, defaultTitle]);\n\n const headingContent = useMemo(() => {\n if (!displayHeadingContent) return undefined;\n\n return (\n <Slot\n context={{ authenticated: isAuthenticated }}\n name=\"checkout-login-form-heading-label\"\n slot={slots?.Heading}\n >\n {isAuthenticated ? (\n <SignOut onClick={handleSignOut} />\n ) : (\n <SignIn onClick={handleSignIn} />\n )}\n </Slot>\n );\n }, [\n displayHeadingContent,\n isAuthenticated,\n slots,\n handleSignIn,\n handleSignOut,\n ]);\n\n const hintContent = useMemo(() => {\n if (isAvailable) return '';\n\n return (\n <>\n {alreadyHaveAccountHint}{' '}\n <a href=\"#\" onClick={handleSignIn}>\n {signInLabel}\n </a>{' '}\n {fasterCheckoutHint}\n </>\n );\n }, [\n isAvailable,\n alreadyHaveAccountHint,\n signInLabel,\n fasterCheckoutHint,\n handleSignIn,\n ]);\n\n return (\n <LoginFormComponent\n {...props}\n customer={customer}\n email={email}\n error={error}\n headingContent={headingContent}\n hint={hintContent}\n initialized={isInitialized}\n title={titleContent}\n visible={active}\n onEmailBlur={handleBlur}\n onEmailChange={handleChange}\n onEmailInvalid={handleInvalid}\n />\n );\n};\n"],"names":["Email","value","error","hint","onChange","onBlur","onInvalid","translations","useText","jsx","Field","Input","SignIn","onClick","jsxs","event","LoginFormSkeleton","Skeleton","SkeletonRow","LoginFormComponent","className","customer","email","headingContent","name","onEmailBlur","onEmailChange","onEmailInvalid","title","props","VComponent","classes","LoginForm","WithConditionals","SignOut","DEBOUNCE_TIME","active","autoSync","displayHeadingContent","displayTitle","initialData","onCartSyncError","onSignInClick","onSignOutClick","onValidationError","slots","setCustomer","useState","setEmail","setError","isAuthenticated","setIsAuthenticated","isAvailable","setIsAvailable","isInitialized","setIsInitialized","debounceTimer","useRef","alreadyHaveAccountHint","cartSyncError","defaultTitle","fasterCheckoutHint","invalidEmailError","missingEmailError","signInLabel","setEmailAndCheckAvailability","useCallback","validateEmail","getCartEmail","isEmailAvailable","availability","setGuestEmailOnCart","handleChange","notifyValues","handleBlur","target","type","message","handleInvalid","validity","handleSignIn","getValue","isValid","handleSignOut","handleCheckoutData","data","prevEmail","useEffect","onAuthenticated","events","authenticated","getCustomer","pastUpdate","getLatestCheckoutUpdate","checkoutEmail","onCheckoutInit","onCheckoutUpdated","titleContent","useMemo","Slot","hintContent","Fragment"],"mappings":"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"}
@@ -1,9 +1,12 @@
1
1
  import { PaymentMethodConfig } from '..';
2
2
 
3
- export declare enum PaymentMethods {
3
+ export declare enum HandlerCode {
4
4
  PaymentOnAccount = "companycredit",
5
5
  PurchaseOrder = "purchaseorder"
6
6
  }
7
+ export declare const handleRefNumberChange: (code: string, isRequired: boolean) => (this: any, ...args: any[]) => void;
8
+ export declare const resetHandlersCache: () => void;
9
+ export declare const createHandler: (code: HandlerCode) => PaymentMethodConfig;
7
10
  export declare const defaultHandlers: {
8
11
  companycredit: PaymentMethodConfig;
9
12
  purchaseorder: PaymentMethodConfig;
@@ -14,6 +14,7 @@
14
14
  * is strictly forbidden unless prior written permission is obtained
15
15
  * from Adobe.
16
16
  *******************************************************************/
17
+ export * from './handlers';
17
18
  export * from './PaymentMethods';
18
19
  export { PaymentMethods as default } from './PaymentMethods';
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as b,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{h as re,s as oe}from"../chunks/fetch-graphql.js";import{classes as U,VComponent as ne,deepmerge as ce,Slot as A}from"@dropins/tools/lib.js";import{i as ae}from"../chunks/events.js";import{h as se,a as ie}from"../chunks/events2.js";import{g as v,n as B}from"../chunks/values.js";import{events as D}from"@dropins/tools/event-bus.js";import{s as Z}from"../chunks/setPaymentMethod.js";import{W as me}from"../chunks/ConditionalWrapper.js";import"../chunks/TermsAndConditions.js";import{Skeleton as de,SkeletonRow as T,IllustratedMessage as ue,Icon as q,InLineAlert as le,ToggleButton as pe,RadioButton as he}from"@dropins/tools/components.js";import{s as fe}from"../chunks/dom.js";import*as _ from"@dropins/tools/preact-compat.js";import{useRef as ye,useEffect as ke}from"@dropins/tools/preact-compat.js";import{useText as F}from"@dropins/tools/i18n.js";import{useState as w,useMemo as H,useCallback as P,useEffect as j}from"@dropins/tools/preact-hooks.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{P as ge}from"../chunks/PurchaseOrder.js";import{P as Me}from"../chunks/PaymentOnAccount2.js";import{r as Pe}from"../chunks/render.js";import"@dropins/tools/signals.js";import"@dropins/tools/fetch-graphql.js";import"../fragments.js";import"../chunks/guards.js";import"../chunks/synchronizeCheckout.js";import"../chunks/transform-shipping-methods.js";import"../chunks/classifiers.js";import"../chunks/getCompanyCredit.js";const Se=t=>_.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},_.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M17.93 14.8V18.75H5.97C4.75 18.75 3.75 17.97 3.75 17V6.5M3.75 6.5C3.75 5.53 4.74 4.75 5.97 4.75H15.94V8.25H5.97C4.75 8.25 3.75 7.47 3.75 6.5Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"}),_.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M19.35 11.64H14.04V14.81H19.35V11.64Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"}),_.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M17.9304 11.64V8.25H15.1504",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"})),Ce=()=>b(de,{"data-testid":"payment-methods-skeleton",children:[r(T,{size:"medium",variant:"heading"}),r(T,{size:"medium",variant:"empty"}),r(T,{fullWidth:!0,size:"xlarge"}),r(T,{fullWidth:!0,size:"xlarge"})]}),Ee=({UIComponentType:t="ToggleButton",busy:o,code:c,icon:u,onSelectionChange:n,selected:a,title:d})=>{const p={busy:o,className:"checkout-payment-methods__method",label:d,name:"payment-method",onChange:()=>n({code:c,title:d}),value:c};return t==="ToggleButton"?r(pe,{...p,icon:u?r(q,{source:u}):void 0,selected:a}):r(he,{...p,checked:a,icon:u??void 0})},ve=({className:t,error:o=null,busy:c=!1,onDismissError:u,onSelectionChange:n=()=>{},options:a,paymentMethodContent:d,selection:p,title:M,UIComponentType:I})=>{const E=F({EmptyState:"Checkout.PaymentMethods.emptyState"}),m=o!==null,g=ye(null);return ke(()=>{m&&g.current&&fe(g.current)},[m]),b("div",{className:U(["checkout-payment-methods",t]),"data-testid":"checkout-payment-methods",children:[M&&r(ne,{className:"checkout-payment-methods__title",node:M}),!c&&a.length===0&&r(ue,{"data-testid":"checkout-payment-methods-empty",icon:r(q,{source:Se}),message:r("p",{children:E.EmptyState})}),b("div",{className:U(["checkout-payment-methods__wrapper",["checkout-payment-methods__wrapper--busy",c]]),"data-testid":"checkout-payment-methods-wrapper",children:[r("div",{className:U(["checkout-payment-methods__methods",["checkout-payment-methods--full-width",a.length%2!==0]]),children:a==null?void 0:a.map(y=>r(Ee,{UIComponentType:I,busy:c,code:y.code,icon:y.icon,selected:(p==null?void 0:p.code)===y.code,title:y.displayLabel??!0?y.title:"",onSelectionChange:n},y.code))}),d&&r("div",{className:"checkout-payment-methods__content",children:d})]}),m&&r("div",{ref:g,className:"checkout-payment-methods__error","data-testid":"checkout-payment-methods-alert",children:r(le,{heading:o,type:"error",variant:"primary",onDismiss:u})})]})},Te=me(ve,Ce),_e=(t,o)=>{let c;return function(...u){clearTimeout(c),c=setTimeout(()=>t.apply(this,u),o)}},$=(t,o)=>({enabled:!0,autoSync:!1,render:c=>{var d;const u=String(((d=c.additionalData)==null?void 0:d.purchase_order_number)??""),n=document.createElement("div"),a=_e(p=>{Z({code:o,purchase_order_number:p}).catch(console.error)},1e3);Pe.render(t,{initialReferenceNumber:u,onReferenceNumberChange:a})(n),c.replaceHTML(n)}}),we={companycredit:$(Me,"companycredit"),purchaseorder:$(ge,"purchaseorder")};function O(t,o){return t?o.some(c=>c.code===t.code):!1}function Ie(t,o){return!t||!o?!1:t.code===o.code}function Ve(t){return t?!!t.code&&!!t.title:!1}const st=({UIComponentType:t="ToggleButton",active:o=!0,autoSync:c=!0,displayTitle:u=!0,slots:n,onCartSyncError:a,onSelectionChange:d})=>{const[p,M]=w(null),[I,E]=w(!1),[m,g]=w(null),[y,N]=w([]),G=re.value,l=H(()=>{const e=(n==null?void 0:n.Methods)??{};return ce(we,e)},[n==null?void 0:n.Methods]),J=y.filter(e=>{var s;return((s=l==null?void 0:l[e.code])==null?void 0:s.enabled)!==!1}).map(e=>{const s=(l==null?void 0:l[e.code])||{};return{...e,...s}}),{cartSyncError:W,defaultTitle:x}=F({cartSyncError:"Checkout.PaymentMethods.cartSyncError",defaultTitle:"Checkout.PaymentMethods.title"}),K=P(e=>{g(i=>i&&{...i,additionalData:e});const s=v("selectedPaymentMethod");s&&B({selectedPaymentMethod:{...s,additionalData:e}})},[]),Q=P(()=>{M(null)},[]),f=P(e=>{M(null),g(e),B({selectedPaymentMethod:e})},[]),S=P(async(e,s)=>{if(!(ae()||se()))return;const h=l==null?void 0:l[e.code];((h==null?void 0:h.autoSync)??c)&&Z({code:e.code}).catch(k=>{f(s??null),a==null||a({method:e,error:k}),a||M(W)})},[l,c,f,a,W]),X=P(async e=>{const s=v("selectedPaymentMethod");f(e),d==null||d(e),await S(e,s)},[d,f,S]),C=P(e=>{if(!e||e.isEmpty){f(null),N([]);return}const i=e.availablePaymentMethods??[];if(N(i),i.length===0){f(null);return}const h=e.selectedPaymentMethod??null,V=Ve(h),k=v("selectedPaymentMethod"),L=O(k,i),te=Ie(k,h);if(k&&L&&!te){S(k,h);return}if((!k||!L)&&V&&O(h,i)){f(h);return}if((!k||!L)&&(!V||!O(h,i))){const R=i[0];f(R),S(R)}},[f,S]);j(()=>{if(!o)return;const e=ie();if(e){E(!0);const i=v("selectedPaymentMethod");i&&g(i),C(e);return}const s=D.on("checkout/initialized",i=>{E(!0),C(i)},{eager:!0});return()=>{s==null||s.off()}},[o,C]),j(()=>{if(!o)return;const e=D.on("checkout/updated",C,{eager:!1});return()=>{e==null||e.off()}},[o,C]);const z=l[(m==null?void 0:m.code)||""],Y=z?r(A,{context:{additionalData:m==null?void 0:m.additionalData,cartId:oe.cartId??"",replaceHTML(e){this.replaceWith(e)},setAdditionalData:K},name:"PaymentMethodContent",slot:z.render},m==null?void 0:m.code):void 0,ee=H(()=>{if(u)return r(A,{name:"checkout-payment-methods-title",slot:n==null?void 0:n.Title,children:r("h2",{children:x})})},[u,n==null?void 0:n.Title,x]);return r(Te,{UIComponentType:t,busy:G,error:p,initialized:I,options:J,paymentMethodContent:Y,selection:m,title:ee,visible:o,onDismissError:Q,onSelectionChange:X})};export{st as PaymentMethods,st as default};
3
+ import{h as ae,s as ce}from"../chunks/fetch-graphql.js";import{classes as V,VComponent as se,deepmerge as ie,Slot as H}from"@dropins/tools/lib.js";import{events as B}from"@dropins/tools/event-bus.js";import{v as me}from"../chunks/validation.js";import{s as q}from"../chunks/setPaymentMethod.js";import{jsxs as U,jsx as a}from"@dropins/tools/preact-jsx-runtime.js";import{useState as w,useMemo as $,useCallback as P,useEffect as j}from"@dropins/tools/preact-hooks.js";import"../chunks/TermsAndConditions.js";import{Skeleton as de,SkeletonRow as N,IllustratedMessage as ue,Icon as J,InLineAlert as le,ToggleButton as he,RadioButton as pe}from"@dropins/tools/components.js";/* empty css */import*as T from"@dropins/tools/preact-compat.js";import{useRef as fe,useEffect as ye}from"@dropins/tools/preact-compat.js";/* empty css *//* empty css *//* empty css *//* empty css */import{P as ke}from"../chunks/PurchaseOrder.js";import{P as ge}from"../chunks/PaymentOnAccount2.js";import{r as Me}from"../chunks/render.js";import{i as Se}from"../chunks/events.js";import{h as Ce,a as Pe}from"../chunks/events2.js";import{g as b,n as F}from"../chunks/values.js";import{W as ve}from"../chunks/ConditionalWrapper.js";import{s as Ee}from"../chunks/dom.js";import{useText as K}from"@dropins/tools/i18n.js";import"@dropins/tools/signals.js";import"@dropins/tools/fetch-graphql.js";import"../fragments.js";import"../chunks/guards.js";import"../chunks/synchronizeCheckout.js";import"../chunks/transform-shipping-methods.js";import"../chunks/classifiers.js";import"../chunks/getCompanyCredit.js";const _e=e=>T.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},T.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M17.93 14.8V18.75H5.97C4.75 18.75 3.75 17.97 3.75 17V6.5M3.75 6.5C3.75 5.53 4.74 4.75 5.97 4.75H15.94V8.25H5.97C4.75 8.25 3.75 7.47 3.75 6.5Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"}),T.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M19.35 11.64H14.04V14.81H19.35V11.64Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"}),T.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M17.9304 11.64V8.25H15.1504",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"})),we=()=>U(de,{"data-testid":"payment-methods-skeleton",children:[a(N,{size:"medium",variant:"heading"}),a(N,{size:"medium",variant:"empty"}),a(N,{fullWidth:!0,size:"xlarge"}),a(N,{fullWidth:!0,size:"xlarge"})]}),Ne=({UIComponentType:e="ToggleButton",busy:r,code:o,icon:m,onSelectionChange:n,selected:c,title:u})=>{const l={busy:r,className:"checkout-payment-methods__method",label:u,name:"payment-method",onChange:()=>n({code:o,title:u}),value:o};return e==="ToggleButton"?a(he,{...l,icon:m?a(J,{source:m}):void 0,selected:c}):a(pe,{...l,checked:c,icon:m??void 0})},Te=({className:e,error:r=null,busy:o=!1,onDismissError:m,onSelectionChange:n=()=>{},options:c,paymentMethodContent:u,selection:l,title:y,UIComponentType:C})=>{const M=K({EmptyState:"Checkout.PaymentMethods.emptyState"}),d=r!==null,S=fe(null);return ye(()=>{d&&S.current&&Ee(S.current)},[d]),U("div",{className:V(["checkout-payment-methods",e]),"data-testid":"checkout-payment-methods",children:[y&&a(se,{className:"checkout-payment-methods__title",node:y}),!o&&c.length===0&&a(ue,{"data-testid":"checkout-payment-methods-empty",icon:a(J,{source:_e}),message:a("p",{children:M.EmptyState})}),U("div",{className:V(["checkout-payment-methods__wrapper",["checkout-payment-methods__wrapper--busy",o]]),"data-testid":"checkout-payment-methods-wrapper",children:[a("div",{className:V(["checkout-payment-methods__methods",["checkout-payment-methods--full-width",c.length%2!==0]]),children:c==null?void 0:c.map(k=>a(Ne,{UIComponentType:C,busy:o,code:k.code,icon:k.icon,selected:(l==null?void 0:l.code)===k.code,title:k.displayLabel??!0?k.title:"",onSelectionChange:n},k.code))}),u&&a("div",{className:"checkout-payment-methods__content",children:u})]}),d&&a("div",{ref:S,className:"checkout-payment-methods__error","data-testid":"checkout-payment-methods-alert",children:a(le,{heading:r,type:"error",variant:"primary",onDismiss:m})})]})},be=ve(Te,we),Ie=(e,r)=>{let o;return function(...m){clearTimeout(o),o=setTimeout(()=>e.apply(this,m),r)}};var Oe=(e=>(e.PaymentOnAccount="companycredit",e.PurchaseOrder="purchaseorder",e))(Oe||{});const Z={companycredit:{Container:ge,autoSync:!0,formName:"payment-on-account",validateRefNumber:!1},purchaseorder:{Container:ke,autoSync:!1,formName:"purchase-order",validateRefNumber:!0}},I=new Map,Le=(e,r)=>{const o=`${e}-${r}`;if(!I.has(o)){const m=Ie(async n=>{if(!r||me(n))try{await q({code:e,purchase_order_number:n})}catch(c){console.error(`Failed to set payment method for ${e}:`,c)}},1e3);I.set(o,m)}return I.get(o)},_={},pt=()=>{Object.keys(_).forEach(e=>{delete _[e]}),I.clear()},G=e=>{if(!(e in Z))throw new Error(`Invalid handler code: ${e}`);if(_[e])return _[e];const r=Z[e],{autoSync:o,Container:m,formName:n,validateRefNumber:c}=r,u={enabled:!0,autoSync:o,render:l=>{var M;const y=String(((M=l.additionalData)==null?void 0:M.purchase_order_number)??""),C=document.createElement("div");Me.render(m,{name:n,initialReferenceNumber:y,onReferenceNumberChange:Le(e,c)})(C),l.replaceHTML(C)}};return _[e]=u,u},Ve={companycredit:G("companycredit"),purchaseorder:G("purchaseorder")};function R(e,r){return e?r.some(o=>o.code===e.code):!1}function Re(e,r){return!e||!r?!1:e.code===r.code}function Ue(e){return e?!!e.code&&!!e.title:!1}const ft=({UIComponentType:e="ToggleButton",active:r=!0,autoSync:o=!0,displayTitle:m=!0,slots:n,onCartSyncError:c,onSelectionChange:u})=>{const[l,y]=w(null),[C,M]=w(!1),[d,S]=w(null),[k,A]=w([]),Q=ae.value,h=$(()=>{const t=(n==null?void 0:n.Methods)??{};return ie(Ve,t)},[n==null?void 0:n.Methods]),X=k.filter(t=>{var s;return((s=h==null?void 0:h[t.code])==null?void 0:s.enabled)!==!1}).map(t=>{const s=(h==null?void 0:h[t.code])||{};return{...t,...s}}),{cartSyncError:W,defaultTitle:x}=K({cartSyncError:"Checkout.PaymentMethods.cartSyncError",defaultTitle:"Checkout.PaymentMethods.title"}),Y=P(t=>{S(i=>i&&{...i,additionalData:t});const s=b("selectedPaymentMethod");s&&F({selectedPaymentMethod:{...s,additionalData:t}})},[]),ee=P(()=>{y(null)},[]),f=P(t=>{y(null),S(t),F({selectedPaymentMethod:t})},[]),v=P(async(t,s)=>{if(!(Se()||Ce()))return;const p=h==null?void 0:h[t.code];((p==null?void 0:p.autoSync)??o)&&q({code:t.code}).catch(g=>{f(s??null),c==null||c({method:t,error:g}),c||y(W)})},[h,o,f,c,W]),te=P(async t=>{const s=b("selectedPaymentMethod");f(t),u==null||u(t),await v(t,s)},[u,f,v]),E=P(t=>{if(!t||t.isEmpty){f(null),A([]);return}const i=t.availablePaymentMethods??[];if(A(i),i.length===0){f(null);return}const p=t.selectedPaymentMethod??null,O=Ue(p),g=b("selectedPaymentMethod"),L=R(g,i),oe=Re(g,p);if(g&&L&&!oe){v(g,p);return}if((!g||!L)&&O&&R(p,i)){f(p);return}if((!g||!L)&&(!O||!R(p,i))){const D=i[0];f(D),v(D)}},[f,v]);j(()=>{if(!r)return;const t=Pe();if(t){M(!0);const i=b("selectedPaymentMethod");i&&S(i),E(t);return}const s=B.on("checkout/initialized",i=>{M(!0),E(i)},{eager:!0});return()=>{s==null||s.off()}},[r,E]),j(()=>{if(!r)return;const t=B.on("checkout/updated",E,{eager:!1});return()=>{t==null||t.off()}},[r,E]);const z=h[(d==null?void 0:d.code)||""],re=z?a(H,{context:{additionalData:d==null?void 0:d.additionalData,cartId:ce.cartId??"",replaceHTML(t){this.replaceWith(t)},setAdditionalData:Y},name:"PaymentMethodContent",slot:z.render},d==null?void 0:d.code):void 0,ne=$(()=>{if(m)return a(H,{name:"checkout-payment-methods-title",slot:n==null?void 0:n.Title,children:a("h2",{children:x})})},[m,n==null?void 0:n.Title,x]);return a(be,{UIComponentType:e,busy:Q,error:l,initialized:C,options:X,paymentMethodContent:re,selection:d,title:ne,visible:r,onDismissError:ee,onSelectionChange:te})};export{Oe as HandlerCode,ft as PaymentMethods,G as createHandler,ft as default,Ve as defaultHandlers,Le as handleRefNumberChange,pt as resetHandlersCache};
4
4
  //# sourceMappingURL=PaymentMethods.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentMethods.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Wallet.svg","/@dropins/storefront-checkout/src/components/PaymentMethods/PaymentMethodsSkeleton.tsx","/@dropins/storefront-checkout/src/components/PaymentMethods/PaymentMethods.tsx","../../node_modules/@adobe-commerce/elsie/src/lib/debounce.ts","/@dropins/storefront-checkout/src/containers/PaymentMethods/handlers.tsx","/@dropins/storefront-checkout/src/containers/PaymentMethods/PaymentMethods.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgWallet = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.93 14.8V18.75H5.97C4.75 18.75 3.75 17.97 3.75 17V6.5M3.75 6.5C3.75 5.53 4.74 4.75 5.97 4.75H15.94V8.25H5.97C4.75 8.25 3.75 7.47 3.75 6.5Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M19.35 11.64H14.04V14.81H19.35V11.64Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.9304 11.64V8.25H15.1504\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgWallet;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\nimport { FunctionComponent } from 'preact';\n\nexport const PaymentMethodsSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"payment-methods-skeleton\">\n <SkeletonRow size=\"medium\" variant=\"heading\" />\n <SkeletonRow size=\"medium\" variant=\"empty\" />\n <SkeletonRow fullWidth={true} size=\"xlarge\" />\n <SkeletonRow fullWidth={true} size=\"xlarge\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WithConditionals } from '@/checkout/components/ConditionalWrapper/ConditionalWrapper';\nimport '@/checkout/components/PaymentMethods/PaymentMethods.css';\nimport { PaymentMethodsSkeleton } from '@/checkout/components/PaymentMethods/PaymentMethodsSkeleton';\nimport { PaymentMethodConfig } from '@/checkout/containers';\nimport { PaymentMethod } from '@/checkout/data/models/payment-method';\nimport { scrollToElement } from '@/checkout/lib';\nimport { UIComponentType } from '@/checkout/types';\nimport {\n Icon,\n IllustratedMessage,\n InLineAlert,\n RadioButton,\n ToggleButton,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Wallet } from '@adobe-commerce/elsie/icons';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useEffect, useRef } from 'preact/compat';\n\ninterface ExtendedPaymentMethod extends PaymentMethodConfig, PaymentMethod {}\n\nexport interface PaymentMethodsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n error?: string | null;\n busy?: boolean;\n onDismissError?: () => void;\n onSelectionChange?: (value: PaymentMethod) => void;\n options?: ExtendedPaymentMethod[];\n paymentMethodContent?: VNode;\n selection: PaymentMethod | null;\n title?: VNode;\n UIComponentType?: UIComponentType;\n}\n\ninterface PaymentOptionProps {\n UIComponentType?: UIComponentType;\n busy?: boolean;\n code: string;\n icon?: string;\n onSelectionChange: (value: PaymentMethod) => void;\n selected: boolean;\n title: string;\n}\n\nconst PaymentOption: FunctionComponent<PaymentOptionProps> = ({\n UIComponentType = 'ToggleButton',\n busy,\n code,\n icon,\n onSelectionChange,\n selected,\n title,\n}) => {\n const commonProps = {\n busy,\n className: 'checkout-payment-methods__method',\n label: title,\n name: 'payment-method',\n onChange: () => onSelectionChange({ code, title }),\n value: code,\n };\n\n return UIComponentType === 'ToggleButton' ? (\n <ToggleButton\n {...commonProps}\n // @ts-ignore\n icon={icon ? <Icon source={icon} /> : undefined}\n selected={selected}\n />\n ) : (\n <RadioButton {...commonProps} checked={selected} icon={icon ?? undefined} />\n );\n};\n\nconst PaymentMethodsComponent: FunctionComponent<PaymentMethodsProps> = ({\n className,\n error = null,\n busy = false,\n onDismissError,\n onSelectionChange = () => {},\n options,\n paymentMethodContent,\n selection,\n title,\n UIComponentType,\n}) => {\n const translations = useText({\n EmptyState: 'Checkout.PaymentMethods.emptyState',\n });\n\n const hasError = error !== null;\n const errorRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (hasError && errorRef.current) {\n scrollToElement(errorRef.current);\n }\n }, [hasError]);\n\n return (\n <div\n className={classes(['checkout-payment-methods', className])}\n data-testid=\"checkout-payment-methods\"\n >\n {title && (\n <VComponent className=\"checkout-payment-methods__title\" node={title} />\n )}\n\n {!busy && options!.length === 0 && (\n <IllustratedMessage\n data-testid=\"checkout-payment-methods-empty\"\n icon={<Icon source={Wallet} />}\n message={<p>{translations.EmptyState}</p>}\n />\n )}\n\n <div\n className={classes([\n 'checkout-payment-methods__wrapper',\n ['checkout-payment-methods__wrapper--busy', busy],\n ])}\n data-testid=\"checkout-payment-methods-wrapper\"\n >\n <div\n className={classes([\n 'checkout-payment-methods__methods',\n ['checkout-payment-methods--full-width', options!.length % 2 !== 0],\n ])}\n >\n {options?.map((method) => (\n <PaymentOption\n key={method.code}\n UIComponentType={UIComponentType}\n busy={busy}\n code={method.code}\n icon={method.icon}\n selected={selection?.code === method.code}\n title={method.displayLabel ?? true ? method.title : ''}\n onSelectionChange={onSelectionChange}\n />\n ))}\n </div>\n\n {paymentMethodContent && (\n <div className=\"checkout-payment-methods__content\">\n {paymentMethodContent}\n </div>\n )}\n </div>\n\n {hasError && (\n <div\n ref={errorRef}\n className=\"checkout-payment-methods__error\"\n data-testid=\"checkout-payment-methods-alert\"\n >\n <InLineAlert\n heading={error}\n type=\"error\"\n variant=\"primary\"\n onDismiss={onDismissError}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport const PaymentMethods = WithConditionals(\n PaymentMethodsComponent,\n PaymentMethodsSkeleton\n);\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const debounce = (fn: Function, ms: number) => {\n let timeoutId: ReturnType<typeof setTimeout>;\n return function (this: any, ...args: any[]) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn.apply(this, args), ms);\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { setPaymentMethod } from '@/checkout/api/index';\nimport {\n PaymentMethodConfig,\n PaymentOnAccount,\n PurchaseOrder,\n} from '@/checkout/containers';\nimport { render as Checkout } from '@/checkout/render/render';\nimport { debounce } from '@adobe-commerce/elsie/lib/debounce';\nimport { Container } from '@adobe-commerce/elsie/lib/types';\n\nconst createOrderRefHandler = (\n Container: Container<{\n initialReferenceNumber: string;\n onReferenceNumberChange: (refNumber: string) => void;\n }>,\n code: string\n): PaymentMethodConfig => ({\n enabled: true,\n autoSync: false,\n render: (ctx) => {\n const initialReferenceNumber = String(\n ctx.additionalData?.purchase_order_number ?? ''\n );\n const $wrapper = document.createElement('div');\n\n const onReferenceNumberChange = debounce((refNumber: string) => {\n setPaymentMethod({\n code,\n purchase_order_number: refNumber,\n }).catch(console.error);\n }, 1000);\n\n Checkout.render(Container, {\n initialReferenceNumber,\n onReferenceNumberChange,\n })($wrapper);\n\n ctx.replaceHTML($wrapper);\n },\n});\n\nexport enum PaymentMethods {\n PaymentOnAccount = 'companycredit',\n PurchaseOrder = 'purchaseorder',\n}\n\nexport const defaultHandlers = {\n [PaymentMethods.PaymentOnAccount]: createOrderRefHandler(\n PaymentOnAccount,\n PaymentMethods.PaymentOnAccount\n ),\n [PaymentMethods.PurchaseOrder]: createOrderRefHandler(\n PurchaseOrder,\n PaymentMethods.PurchaseOrder\n ),\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { setPaymentMethod } from '@/checkout/api';\nimport { PaymentMethods as PaymentMethodsComponent } from '@/checkout/components/PaymentMethods/PaymentMethods';\nimport { Cart } from '@/checkout/data/models/cart';\nimport {\n AdditionalData,\n PaymentMethod,\n} from '@/checkout/data/models/payment-method';\nimport { NegotiableQuote } from '@/checkout/data/models/quote';\nimport {\n getLatestCheckoutUpdate,\n getValue,\n hasPendingUpdates,\n hasShippingAddress,\n isVirtualCart,\n notifyValues,\n state,\n} from '@/checkout/lib';\nimport { TitleProps, UIComponentType } from '@/checkout/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n Container,\n deepmerge,\n Slot,\n SlotProps,\n} from '@adobe-commerce/elsie/lib';\nimport { events } from '@adobe-commerce/event-bus';\nimport { HTMLAttributes } from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { defaultHandlers } from './handlers';\n\ninterface RenderContext {\n additionalData?: AdditionalData;\n cartId: string;\n replaceHTML: (domElement: HTMLElement) => void;\n setAdditionalData: (data: AdditionalData) => void;\n}\n\nexport interface PaymentMethodConfig {\n autoSync?: boolean;\n displayLabel?: boolean;\n enabled?: boolean;\n icon?: string;\n render?: SlotProps<RenderContext>;\n}\n\nexport interface PaymentMethodHandlers {\n [code: string]: PaymentMethodConfig;\n}\n\ninterface CartSyncError {\n method: PaymentMethod;\n error: Error;\n}\n\nexport interface PaymentMethodsProps\n extends HTMLAttributes<HTMLDivElement>,\n TitleProps {\n slots?: {\n Methods?: PaymentMethodHandlers;\n } & TitleProps['slots'];\n UIComponentType?: UIComponentType;\n active?: boolean;\n autoSync?: boolean;\n onCartSyncError?: (error: CartSyncError) => void;\n onSelectionChange?: (method: PaymentMethod) => void;\n}\n\nfunction isValidSelection(\n selection: PaymentMethod | null,\n options: PaymentMethod[]\n) {\n if (!selection) return false;\n return options.some((option) => option.code === selection.code);\n}\n\nfunction isEqual(a: PaymentMethod | null, b: PaymentMethod | null) {\n if (!a || !b) return false;\n return a.code === b.code;\n}\n\nfunction isValidPaymentMethod(method: PaymentMethod | null) {\n if (!method) return false;\n return !!method.code && !!method.title;\n}\n\nexport const PaymentMethods: Container<PaymentMethodsProps> = ({\n UIComponentType = 'ToggleButton',\n active = true,\n autoSync = true,\n displayTitle = true,\n slots,\n onCartSyncError,\n onSelectionChange,\n}) => {\n const [error, setError] = useState<string | null>(null);\n const [isInitialized, setIsInitialized] = useState(false);\n const [selection, setSelection] = useState<PaymentMethod | null>(null);\n const [options, setOptions] = useState<PaymentMethod[]>([]);\n const isBusy = hasPendingUpdates.value;\n\n const availableHandlers = useMemo(() => {\n const customHandlers = slots?.Methods ?? {};\n return deepmerge(defaultHandlers, customHandlers);\n }, [slots?.Methods]);\n\n const enabledOptions = options\n .filter((method) => {\n return availableHandlers?.[method.code]?.enabled !== false;\n })\n .map((method) => {\n const slotMethod = availableHandlers?.[method.code] || {};\n\n return {\n ...method,\n ...slotMethod,\n };\n });\n\n const { cartSyncError, defaultTitle } = useText({\n cartSyncError: 'Checkout.PaymentMethods.cartSyncError',\n defaultTitle: 'Checkout.PaymentMethods.title',\n });\n\n const setAdditionalData = useCallback((additionalData: AdditionalData) => {\n setSelection((prev) => {\n if (!prev) return prev;\n return { ...prev, additionalData };\n });\n\n const currentSelection = getValue('selectedPaymentMethod');\n\n if (!currentSelection) return;\n\n notifyValues({\n selectedPaymentMethod: {\n ...currentSelection,\n additionalData,\n },\n });\n }, []);\n\n const handleDismissError = useCallback(() => {\n setError(null);\n }, []);\n\n const setUserSelection = useCallback((selection: PaymentMethod | null) => {\n setError(null);\n setSelection(selection);\n notifyValues({ selectedPaymentMethod: selection });\n }, []);\n\n const setUserSelectionOnCart = useCallback(\n async (selection: PaymentMethod, fallback?: PaymentMethod | null) => {\n const canSetUserSelectionOnCart = isVirtualCart() || hasShippingAddress();\n if (!canSetUserSelectionOnCart) return;\n\n const methodConfig = availableHandlers?.[selection.code];\n const shouldAutoSync = methodConfig?.autoSync ?? autoSync;\n\n if (!shouldAutoSync) return;\n\n setPaymentMethod({ code: selection.code }).catch((error) => {\n setUserSelection(fallback ?? null);\n onCartSyncError?.({ method: selection, error });\n\n if (!onCartSyncError) {\n setError(cartSyncError);\n }\n });\n },\n [\n availableHandlers,\n autoSync,\n setUserSelection,\n onCartSyncError,\n cartSyncError,\n ]\n );\n\n const handleSelectionChange = useCallback(\n async (selection: PaymentMethod) => {\n const prevSelection = getValue('selectedPaymentMethod');\n\n setUserSelection(selection);\n onSelectionChange?.(selection);\n\n await setUserSelectionOnCart(selection, prevSelection);\n },\n [onSelectionChange, setUserSelection, setUserSelectionOnCart]\n );\n\n const handleCheckoutData = useCallback(\n (data: Cart | NegotiableQuote | null) => {\n const isEmptyCart = !data || data.isEmpty;\n\n if (isEmptyCart) {\n setUserSelection(null);\n setOptions([]);\n return;\n }\n\n const availableOptions = data.availablePaymentMethods ?? [];\n setOptions(availableOptions);\n\n if (availableOptions.length === 0) {\n setUserSelection(null);\n return;\n }\n\n const cartSelection = data.selectedPaymentMethod ?? null;\n const hasCartSelection = isValidPaymentMethod(cartSelection);\n const userSelection = getValue('selectedPaymentMethod');\n const isAvailable = isValidSelection(userSelection, availableOptions);\n const haveSameSelection = isEqual(userSelection, cartSelection);\n\n // User has valid selection that differs from cart\n if (userSelection && isAvailable && !haveSameSelection) {\n setUserSelectionOnCart(userSelection, cartSelection);\n return;\n }\n\n // User has invalid selection but cart has valid selection\n if (\n (!userSelection || !isAvailable) &&\n hasCartSelection &&\n isValidSelection(cartSelection, availableOptions)\n ) {\n setUserSelection(cartSelection);\n return;\n }\n\n // Neither user nor cart has valid selection (or both selections are unavailable)\n if (\n (!userSelection || !isAvailable) &&\n (!hasCartSelection ||\n !isValidSelection(cartSelection, availableOptions))\n ) {\n const newSelection = availableOptions[0];\n setUserSelection(newSelection);\n setUserSelectionOnCart(newSelection);\n }\n },\n [setUserSelection, setUserSelectionOnCart]\n );\n\n useEffect(() => {\n if (!active) return;\n\n const pastUpdate = getLatestCheckoutUpdate();\n\n if (pastUpdate) {\n setIsInitialized(true);\n // When component becomes active, restore key state so handleCheckoutData can work properly\n const userSelection = getValue('selectedPaymentMethod');\n if (userSelection) {\n setSelection(userSelection);\n }\n handleCheckoutData(pastUpdate);\n return;\n }\n\n const onCheckoutInit = events.on(\n 'checkout/initialized',\n (data: Cart | NegotiableQuote | null) => {\n setIsInitialized(true);\n handleCheckoutData(data);\n },\n { eager: true }\n );\n\n return () => {\n onCheckoutInit?.off();\n };\n }, [active, handleCheckoutData]);\n\n useEffect(() => {\n if (!active) return;\n\n const onCheckoutUpdated = events.on(\n 'checkout/updated',\n handleCheckoutData,\n { eager: false }\n );\n\n return () => {\n onCheckoutUpdated?.off();\n };\n }, [active, handleCheckoutData]);\n\n const selectionConfig = availableHandlers[selection?.code || ''];\n\n const paymentMethodContent = selectionConfig ? (\n <Slot\n key={selection?.code}\n context={{\n additionalData: selection?.additionalData,\n cartId: state.cartId ?? '',\n replaceHTML(domElement: HTMLElement) {\n this.replaceWith(domElement);\n },\n setAdditionalData,\n }}\n name=\"PaymentMethodContent\"\n slot={selectionConfig.render}\n />\n ) : undefined;\n\n const titleContent = useMemo(() => {\n if (!displayTitle) return undefined;\n\n return (\n <Slot name=\"checkout-payment-methods-title\" slot={slots?.Title}>\n <h2>{defaultTitle}</h2>\n </Slot>\n );\n }, [displayTitle, slots?.Title, defaultTitle]);\n\n return (\n <PaymentMethodsComponent\n UIComponentType={UIComponentType}\n busy={isBusy}\n error={error}\n initialized={isInitialized}\n options={enabledOptions}\n paymentMethodContent={paymentMethodContent}\n selection={selection}\n title={titleContent}\n visible={active}\n onDismissError={handleDismissError}\n onSelectionChange={handleSelectionChange}\n />\n );\n};\n"],"names":["SvgWallet","props","React","PaymentMethodsSkeleton","jsxs","Skeleton","jsx","SkeletonRow","PaymentOption","UIComponentType","busy","code","icon","onSelectionChange","selected","title","commonProps","ToggleButton","Icon","RadioButton","PaymentMethodsComponent","className","error","onDismissError","options","paymentMethodContent","selection","translations","useText","hasError","errorRef","useRef","useEffect","scrollToElement","classes","VComponent","IllustratedMessage","Wallet","method","InLineAlert","PaymentMethods","WithConditionals","debounce","fn","ms","timeoutId","args","createOrderRefHandler","Container","ctx","initialReferenceNumber","_a","$wrapper","onReferenceNumberChange","refNumber","setPaymentMethod","Checkout","defaultHandlers","PaymentOnAccount","PurchaseOrder","isValidSelection","option","isEqual","a","b","isValidPaymentMethod","active","autoSync","displayTitle","slots","onCartSyncError","setError","useState","isInitialized","setIsInitialized","setSelection","setOptions","isBusy","hasPendingUpdates","availableHandlers","useMemo","customHandlers","deepmerge","enabledOptions","slotMethod","cartSyncError","defaultTitle","setAdditionalData","useCallback","additionalData","prev","currentSelection","getValue","notifyValues","handleDismissError","setUserSelection","setUserSelectionOnCart","fallback","isVirtualCart","hasShippingAddress","methodConfig","handleSelectionChange","prevSelection","handleCheckoutData","data","availableOptions","cartSelection","hasCartSelection","userSelection","isAvailable","haveSameSelection","newSelection","pastUpdate","getLatestCheckoutUpdate","onCheckoutInit","events","onCheckoutUpdated","selectionConfig","Slot","state","domElement","titleContent"],"mappings":"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","x_google_ignoreList":[0,3]}
1
+ {"version":3,"file":"PaymentMethods.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Wallet.svg","/@dropins/storefront-checkout/src/components/PaymentMethods/PaymentMethodsSkeleton.tsx","/@dropins/storefront-checkout/src/components/PaymentMethods/PaymentMethods.tsx","../../node_modules/@adobe-commerce/elsie/src/lib/debounce.ts","/@dropins/storefront-checkout/src/containers/PaymentMethods/handlers.tsx","/@dropins/storefront-checkout/src/containers/PaymentMethods/PaymentMethods.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgWallet = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.93 14.8V18.75H5.97C4.75 18.75 3.75 17.97 3.75 17V6.5M3.75 6.5C3.75 5.53 4.74 4.75 5.97 4.75H15.94V8.25H5.97C4.75 8.25 3.75 7.47 3.75 6.5Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M19.35 11.64H14.04V14.81H19.35V11.64Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.9304 11.64V8.25H15.1504\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgWallet;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\nimport { FunctionComponent } from 'preact';\n\nexport const PaymentMethodsSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"payment-methods-skeleton\">\n <SkeletonRow size=\"medium\" variant=\"heading\" />\n <SkeletonRow size=\"medium\" variant=\"empty\" />\n <SkeletonRow fullWidth={true} size=\"xlarge\" />\n <SkeletonRow fullWidth={true} size=\"xlarge\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { WithConditionals } from '@/checkout/components/ConditionalWrapper/ConditionalWrapper';\nimport '@/checkout/components/PaymentMethods/PaymentMethods.css';\nimport { PaymentMethodsSkeleton } from '@/checkout/components/PaymentMethods/PaymentMethodsSkeleton';\nimport { PaymentMethodConfig } from '@/checkout/containers';\nimport { PaymentMethod } from '@/checkout/data/models/payment-method';\nimport { scrollToElement } from '@/checkout/lib';\nimport { UIComponentType } from '@/checkout/types';\nimport {\n Icon,\n IllustratedMessage,\n InLineAlert,\n RadioButton,\n ToggleButton,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Wallet } from '@adobe-commerce/elsie/icons';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useEffect, useRef } from 'preact/compat';\n\ninterface ExtendedPaymentMethod extends PaymentMethodConfig, PaymentMethod {}\n\nexport interface PaymentMethodsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n error?: string | null;\n busy?: boolean;\n onDismissError?: () => void;\n onSelectionChange?: (value: PaymentMethod) => void;\n options?: ExtendedPaymentMethod[];\n paymentMethodContent?: VNode;\n selection: PaymentMethod | null;\n title?: VNode;\n UIComponentType?: UIComponentType;\n}\n\ninterface PaymentOptionProps {\n UIComponentType?: UIComponentType;\n busy?: boolean;\n code: string;\n icon?: string;\n onSelectionChange: (value: PaymentMethod) => void;\n selected: boolean;\n title: string;\n}\n\nconst PaymentOption: FunctionComponent<PaymentOptionProps> = ({\n UIComponentType = 'ToggleButton',\n busy,\n code,\n icon,\n onSelectionChange,\n selected,\n title,\n}) => {\n const commonProps = {\n busy,\n className: 'checkout-payment-methods__method',\n label: title,\n name: 'payment-method',\n onChange: () => onSelectionChange({ code, title }),\n value: code,\n };\n\n return UIComponentType === 'ToggleButton' ? (\n <ToggleButton\n {...commonProps}\n // @ts-ignore\n icon={icon ? <Icon source={icon} /> : undefined}\n selected={selected}\n />\n ) : (\n <RadioButton {...commonProps} checked={selected} icon={icon ?? undefined} />\n );\n};\n\nconst PaymentMethodsComponent: FunctionComponent<PaymentMethodsProps> = ({\n className,\n error = null,\n busy = false,\n onDismissError,\n onSelectionChange = () => {},\n options,\n paymentMethodContent,\n selection,\n title,\n UIComponentType,\n}) => {\n const translations = useText({\n EmptyState: 'Checkout.PaymentMethods.emptyState',\n });\n\n const hasError = error !== null;\n const errorRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (hasError && errorRef.current) {\n scrollToElement(errorRef.current);\n }\n }, [hasError]);\n\n return (\n <div\n className={classes(['checkout-payment-methods', className])}\n data-testid=\"checkout-payment-methods\"\n >\n {title && (\n <VComponent className=\"checkout-payment-methods__title\" node={title} />\n )}\n\n {!busy && options!.length === 0 && (\n <IllustratedMessage\n data-testid=\"checkout-payment-methods-empty\"\n icon={<Icon source={Wallet} />}\n message={<p>{translations.EmptyState}</p>}\n />\n )}\n\n <div\n className={classes([\n 'checkout-payment-methods__wrapper',\n ['checkout-payment-methods__wrapper--busy', busy],\n ])}\n data-testid=\"checkout-payment-methods-wrapper\"\n >\n <div\n className={classes([\n 'checkout-payment-methods__methods',\n ['checkout-payment-methods--full-width', options!.length % 2 !== 0],\n ])}\n >\n {options?.map((method) => (\n <PaymentOption\n key={method.code}\n UIComponentType={UIComponentType}\n busy={busy}\n code={method.code}\n icon={method.icon}\n selected={selection?.code === method.code}\n title={method.displayLabel ?? true ? method.title : ''}\n onSelectionChange={onSelectionChange}\n />\n ))}\n </div>\n\n {paymentMethodContent && (\n <div className=\"checkout-payment-methods__content\">\n {paymentMethodContent}\n </div>\n )}\n </div>\n\n {hasError && (\n <div\n ref={errorRef}\n className=\"checkout-payment-methods__error\"\n data-testid=\"checkout-payment-methods-alert\"\n >\n <InLineAlert\n heading={error}\n type=\"error\"\n variant=\"primary\"\n onDismiss={onDismissError}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport const PaymentMethods = WithConditionals(\n PaymentMethodsComponent,\n PaymentMethodsSkeleton\n);\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const debounce = (fn: Function, ms: number) => {\n let timeoutId: ReturnType<typeof setTimeout>;\n return function (this: any, ...args: any[]) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn.apply(this, args), ms);\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { setPaymentMethod } from '@/checkout/api';\nimport {\n PaymentMethodConfig,\n PaymentOnAccount,\n PurchaseOrder,\n} from '@/checkout/containers';\nimport { validateNotEmpty } from '@/checkout/lib/validation';\nimport { render as Checkout } from '@/checkout/render/render';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { debounce } from '@adobe-commerce/elsie/lib/debounce';\n\ninterface HandlerConfig {\n Container: Container<any>;\n autoSync: boolean;\n formName?: string;\n validateRefNumber: boolean;\n}\n\nexport enum HandlerCode {\n PaymentOnAccount = 'companycredit',\n PurchaseOrder = 'purchaseorder',\n}\n\nconst HANDLERS_CONFIG: Record<HandlerCode, HandlerConfig> = {\n [HandlerCode.PaymentOnAccount]: {\n Container: PaymentOnAccount,\n autoSync: true,\n formName: 'payment-on-account',\n validateRefNumber: false,\n },\n [HandlerCode.PurchaseOrder]: {\n Container: PurchaseOrder,\n autoSync: false,\n formName: 'purchase-order',\n validateRefNumber: true,\n },\n} as const;\n\n// Cache for debounced handlers to prevent memory leaks\nconst debouncedHandlers = new Map<string, ReturnType<typeof debounce>>();\n\nexport const handleRefNumberChange = (code: string, isRequired: boolean) => {\n const key = `${code}-${isRequired}`;\n\n if (!debouncedHandlers.has(key)) {\n const debouncedFn = debounce(async (refNumber: string) => {\n if (!isRequired || validateNotEmpty(refNumber)) {\n try {\n await setPaymentMethod({\n code,\n purchase_order_number: refNumber,\n });\n } catch (error) {\n console.error(`Failed to set payment method for ${code}:`, error);\n }\n }\n }, 1000);\n\n debouncedHandlers.set(key, debouncedFn);\n }\n\n return debouncedHandlers.get(key)!;\n};\n\nconst handlerCache: Partial<Record<HandlerCode, PaymentMethodConfig>> = {};\n\nexport const resetHandlersCache = () => {\n Object.keys(handlerCache).forEach((key) => {\n delete handlerCache[key as HandlerCode];\n });\n\n debouncedHandlers.clear();\n};\n\nexport const createHandler = (code: HandlerCode): PaymentMethodConfig => {\n if (!(code in HANDLERS_CONFIG)) {\n throw new Error(`Invalid handler code: ${code}`);\n }\n\n if (handlerCache[code]) {\n return handlerCache[code] as PaymentMethodConfig;\n }\n\n const config = HANDLERS_CONFIG[code];\n\n const { autoSync, Container, formName, validateRefNumber } = config;\n\n const handler: PaymentMethodConfig = {\n enabled: true,\n autoSync,\n render: (ctx) => {\n const initialReferenceNumber = String(\n ctx.additionalData?.purchase_order_number ?? ''\n );\n\n const $wrapper = document.createElement('div');\n\n Checkout.render(Container, {\n name: formName,\n initialReferenceNumber,\n onReferenceNumberChange: handleRefNumberChange(code, validateRefNumber),\n })($wrapper);\n\n ctx.replaceHTML($wrapper);\n },\n };\n\n handlerCache[code] = handler;\n\n return handler;\n};\n\nexport const defaultHandlers = {\n [HandlerCode.PaymentOnAccount]: createHandler(HandlerCode.PaymentOnAccount),\n [HandlerCode.PurchaseOrder]: createHandler(HandlerCode.PurchaseOrder),\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { setPaymentMethod } from '@/checkout/api';\nimport { PaymentMethods as PaymentMethodsComponent } from '@/checkout/components/PaymentMethods/PaymentMethods';\nimport { Cart } from '@/checkout/data/models/cart';\nimport {\n AdditionalData,\n PaymentMethod,\n} from '@/checkout/data/models/payment-method';\nimport { NegotiableQuote } from '@/checkout/data/models/quote';\nimport {\n getLatestCheckoutUpdate,\n getValue,\n hasPendingUpdates,\n hasShippingAddress,\n isVirtualCart,\n notifyValues,\n state,\n} from '@/checkout/lib';\nimport { TitleProps, UIComponentType } from '@/checkout/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n Container,\n deepmerge,\n Slot,\n SlotProps,\n} from '@adobe-commerce/elsie/lib';\nimport { events } from '@adobe-commerce/event-bus';\nimport { HTMLAttributes } from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { defaultHandlers } from './handlers';\n\ninterface RenderContext {\n additionalData?: AdditionalData;\n cartId: string;\n replaceHTML: (domElement: HTMLElement) => void;\n setAdditionalData: (data: AdditionalData) => void;\n}\n\nexport interface PaymentMethodConfig {\n autoSync?: boolean;\n displayLabel?: boolean;\n enabled?: boolean;\n icon?: string;\n render?: SlotProps<RenderContext>;\n}\n\nexport interface PaymentMethodHandlers {\n [code: string]: PaymentMethodConfig;\n}\n\ninterface CartSyncError {\n method: PaymentMethod;\n error: Error;\n}\n\nexport interface PaymentMethodsProps\n extends HTMLAttributes<HTMLDivElement>,\n TitleProps {\n slots?: {\n Methods?: PaymentMethodHandlers;\n } & TitleProps['slots'];\n UIComponentType?: UIComponentType;\n active?: boolean;\n autoSync?: boolean;\n onCartSyncError?: (error: CartSyncError) => void;\n onSelectionChange?: (method: PaymentMethod) => void;\n}\n\nfunction isValidSelection(\n selection: PaymentMethod | null,\n options: PaymentMethod[]\n) {\n if (!selection) return false;\n return options.some((option) => option.code === selection.code);\n}\n\nfunction isEqual(a: PaymentMethod | null, b: PaymentMethod | null) {\n if (!a || !b) return false;\n return a.code === b.code;\n}\n\nfunction isValidPaymentMethod(method: PaymentMethod | null) {\n if (!method) return false;\n return !!method.code && !!method.title;\n}\n\nexport const PaymentMethods: Container<PaymentMethodsProps> = ({\n UIComponentType = 'ToggleButton',\n active = true,\n autoSync = true,\n displayTitle = true,\n slots,\n onCartSyncError,\n onSelectionChange,\n}) => {\n const [error, setError] = useState<string | null>(null);\n const [isInitialized, setIsInitialized] = useState(false);\n const [selection, setSelection] = useState<PaymentMethod | null>(null);\n const [options, setOptions] = useState<PaymentMethod[]>([]);\n const isBusy = hasPendingUpdates.value;\n\n const availableHandlers = useMemo(() => {\n const customHandlers = slots?.Methods ?? {};\n return deepmerge(defaultHandlers, customHandlers);\n }, [slots?.Methods]);\n\n const enabledOptions = options\n .filter((method) => {\n return availableHandlers?.[method.code]?.enabled !== false;\n })\n .map((method) => {\n const slotMethod = availableHandlers?.[method.code] || {};\n\n return {\n ...method,\n ...slotMethod,\n };\n });\n\n const { cartSyncError, defaultTitle } = useText({\n cartSyncError: 'Checkout.PaymentMethods.cartSyncError',\n defaultTitle: 'Checkout.PaymentMethods.title',\n });\n\n const setAdditionalData = useCallback((additionalData: AdditionalData) => {\n setSelection((prev) => {\n if (!prev) return prev;\n return { ...prev, additionalData };\n });\n\n const currentSelection = getValue('selectedPaymentMethod');\n\n if (!currentSelection) return;\n\n notifyValues({\n selectedPaymentMethod: {\n ...currentSelection,\n additionalData,\n },\n });\n }, []);\n\n const handleDismissError = useCallback(() => {\n setError(null);\n }, []);\n\n const setUserSelection = useCallback((selection: PaymentMethod | null) => {\n setError(null);\n setSelection(selection);\n notifyValues({ selectedPaymentMethod: selection });\n }, []);\n\n const setUserSelectionOnCart = useCallback(\n async (selection: PaymentMethod, fallback?: PaymentMethod | null) => {\n const canSetUserSelectionOnCart = isVirtualCart() || hasShippingAddress();\n if (!canSetUserSelectionOnCart) return;\n\n const methodConfig = availableHandlers?.[selection.code];\n const shouldAutoSync = methodConfig?.autoSync ?? autoSync;\n\n if (!shouldAutoSync) return;\n\n setPaymentMethod({ code: selection.code }).catch((error) => {\n setUserSelection(fallback ?? null);\n onCartSyncError?.({ method: selection, error });\n\n if (!onCartSyncError) {\n setError(cartSyncError);\n }\n });\n },\n [\n availableHandlers,\n autoSync,\n setUserSelection,\n onCartSyncError,\n cartSyncError,\n ]\n );\n\n const handleSelectionChange = useCallback(\n async (selection: PaymentMethod) => {\n const prevSelection = getValue('selectedPaymentMethod');\n\n setUserSelection(selection);\n onSelectionChange?.(selection);\n\n await setUserSelectionOnCart(selection, prevSelection);\n },\n [onSelectionChange, setUserSelection, setUserSelectionOnCart]\n );\n\n const handleCheckoutData = useCallback(\n (data: Cart | NegotiableQuote | null) => {\n const isEmptyCart = !data || data.isEmpty;\n\n if (isEmptyCart) {\n setUserSelection(null);\n setOptions([]);\n return;\n }\n\n const availableOptions = data.availablePaymentMethods ?? [];\n setOptions(availableOptions);\n\n if (availableOptions.length === 0) {\n setUserSelection(null);\n return;\n }\n\n const cartSelection = data.selectedPaymentMethod ?? null;\n const hasCartSelection = isValidPaymentMethod(cartSelection);\n const userSelection = getValue('selectedPaymentMethod');\n const isAvailable = isValidSelection(userSelection, availableOptions);\n const haveSameSelection = isEqual(userSelection, cartSelection);\n\n // User has valid selection that differs from cart\n if (userSelection && isAvailable && !haveSameSelection) {\n setUserSelectionOnCart(userSelection, cartSelection);\n return;\n }\n\n // User has invalid selection but cart has valid selection\n if (\n (!userSelection || !isAvailable) &&\n hasCartSelection &&\n isValidSelection(cartSelection, availableOptions)\n ) {\n setUserSelection(cartSelection);\n return;\n }\n\n // Neither user nor cart has valid selection (or both selections are unavailable)\n if (\n (!userSelection || !isAvailable) &&\n (!hasCartSelection ||\n !isValidSelection(cartSelection, availableOptions))\n ) {\n const newSelection = availableOptions[0];\n setUserSelection(newSelection);\n setUserSelectionOnCart(newSelection);\n }\n },\n [setUserSelection, setUserSelectionOnCart]\n );\n\n useEffect(() => {\n if (!active) return;\n\n const pastUpdate = getLatestCheckoutUpdate();\n\n if (pastUpdate) {\n setIsInitialized(true);\n // When component becomes active, restore key state so handleCheckoutData can work properly\n const userSelection = getValue('selectedPaymentMethod');\n if (userSelection) {\n setSelection(userSelection);\n }\n handleCheckoutData(pastUpdate);\n return;\n }\n\n const onCheckoutInit = events.on(\n 'checkout/initialized',\n (data: Cart | NegotiableQuote | null) => {\n setIsInitialized(true);\n handleCheckoutData(data);\n },\n { eager: true }\n );\n\n return () => {\n onCheckoutInit?.off();\n };\n }, [active, handleCheckoutData]);\n\n useEffect(() => {\n if (!active) return;\n\n const onCheckoutUpdated = events.on(\n 'checkout/updated',\n handleCheckoutData,\n { eager: false }\n );\n\n return () => {\n onCheckoutUpdated?.off();\n };\n }, [active, handleCheckoutData]);\n\n const selectionConfig = availableHandlers[selection?.code || ''];\n\n const paymentMethodContent = selectionConfig ? (\n <Slot\n key={selection?.code}\n context={{\n additionalData: selection?.additionalData,\n cartId: state.cartId ?? '',\n replaceHTML(domElement: HTMLElement) {\n this.replaceWith(domElement);\n },\n setAdditionalData,\n }}\n name=\"PaymentMethodContent\"\n slot={selectionConfig.render}\n />\n ) : undefined;\n\n const titleContent = useMemo(() => {\n if (!displayTitle) return undefined;\n\n return (\n <Slot name=\"checkout-payment-methods-title\" slot={slots?.Title}>\n <h2>{defaultTitle}</h2>\n </Slot>\n );\n }, [displayTitle, slots?.Title, defaultTitle]);\n\n return (\n <PaymentMethodsComponent\n UIComponentType={UIComponentType}\n busy={isBusy}\n error={error}\n initialized={isInitialized}\n options={enabledOptions}\n paymentMethodContent={paymentMethodContent}\n selection={selection}\n title={titleContent}\n visible={active}\n onDismissError={handleDismissError}\n onSelectionChange={handleSelectionChange}\n />\n );\n};\n"],"names":["SvgWallet","props","React","PaymentMethodsSkeleton","jsxs","Skeleton","jsx","SkeletonRow","PaymentOption","UIComponentType","busy","code","icon","onSelectionChange","selected","title","commonProps","ToggleButton","Icon","RadioButton","PaymentMethodsComponent","className","error","onDismissError","options","paymentMethodContent","selection","translations","useText","hasError","errorRef","useRef","useEffect","scrollToElement","classes","VComponent","IllustratedMessage","Wallet","method","InLineAlert","PaymentMethods","WithConditionals","debounce","fn","ms","timeoutId","args","HandlerCode","HANDLERS_CONFIG","PaymentOnAccount","PurchaseOrder","debouncedHandlers","handleRefNumberChange","isRequired","key","debouncedFn","refNumber","validateNotEmpty","setPaymentMethod","handlerCache","resetHandlersCache","createHandler","config","autoSync","Container","formName","validateRefNumber","handler","ctx","initialReferenceNumber","_a","$wrapper","Checkout","defaultHandlers","isValidSelection","option","isEqual","a","b","isValidPaymentMethod","active","displayTitle","slots","onCartSyncError","setError","useState","isInitialized","setIsInitialized","setSelection","setOptions","isBusy","hasPendingUpdates","availableHandlers","useMemo","customHandlers","deepmerge","enabledOptions","slotMethod","cartSyncError","defaultTitle","setAdditionalData","useCallback","additionalData","prev","currentSelection","getValue","notifyValues","handleDismissError","setUserSelection","setUserSelectionOnCart","fallback","isVirtualCart","hasShippingAddress","methodConfig","handleSelectionChange","prevSelection","handleCheckoutData","data","availableOptions","cartSelection","hasCartSelection","userSelection","isAvailable","haveSameSelection","newSelection","pastUpdate","getLatestCheckoutUpdate","onCheckoutInit","events","onCheckoutUpdated","selectionConfig","Slot","state","domElement","titleContent"],"mappings":"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","x_google_ignoreList":[0,3]}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{P as O,P as b}from"../chunks/PurchaseOrder.js";import"@dropins/tools/preact-jsx-runtime.js";import"../chunks/TermsAndConditions.js";import"@dropins/tools/lib.js";import"@dropins/tools/components.js";/* empty css */import"../chunks/fetch-graphql.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/signals.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/preact-compat.js";/* empty css *//* empty css */import"@dropins/tools/i18n.js";/* empty css */import"@dropins/tools/preact-hooks.js";export{O as PurchaseOrder,b as default};
3
+ import{P as b,P as g}from"../chunks/PurchaseOrder.js";import"@dropins/tools/preact-jsx-runtime.js";import"../chunks/TermsAndConditions.js";import"@dropins/tools/lib.js";import"@dropins/tools/components.js";/* empty css */import"../chunks/fetch-graphql.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/signals.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/validation.js";import"@dropins/tools/preact-compat.js";/* empty css *//* empty css */import"@dropins/tools/i18n.js";/* empty css */import"@dropins/tools/preact-hooks.js";export{b as PurchaseOrder,g as default};
4
4
  //# sourceMappingURL=PurchaseOrder.js.map
@@ -5,6 +5,7 @@ export interface Address {
5
5
  company?: string;
6
6
  country: Country;
7
7
  customAttributes: CustomAttribute[];
8
+ customerAddressUid?: string;
8
9
  fax?: string;
9
10
  firstName: string;
10
11
  id?: number;
@@ -51,8 +51,6 @@ declare const transformCartShippingAddress: (data: ({
51
51
  label: string;
52
52
  };
53
53
  custom_attributes: ({
54
- __typename?: "AttributeFile" | undefined;
55
- } | {
56
54
  __typename?: "AttributeSelectedOptions" | undefined;
57
55
  } | {
58
56
  __typename?: "AttributeValue" | undefined;
@@ -9,6 +9,7 @@ declare const transformQuoteShippingAddress: (data: ({
9
9
  __typename?: "NegotiableQuoteShippingAddress" | undefined;
10
10
  city: string;
11
11
  company?: string | null | undefined;
12
+ customer_address_uid?: string | null | undefined;
12
13
  fax?: string | null | undefined;
13
14
  firstname: string;
14
15
  lastname: string;
@@ -49,8 +50,6 @@ declare const transformQuoteShippingAddress: (data: ({
49
50
  label: string;
50
51
  };
51
52
  custom_attributes?: ({
52
- __typename?: "AttributeFile" | undefined;
53
- } | {
54
53
  __typename?: "AttributeSelectedOptions" | undefined;
55
54
  } | {
56
55
  __typename?: "AttributeValue" | undefined;
package/fragments.js CHANGED
@@ -20,7 +20,7 @@ const e=`
20
20
  currency
21
21
  }
22
22
  }
23
- `,t=`
23
+ `,_=`
24
24
  fragment SELECTED_SHIPPING_METHOD_FRAGMENT on SelectedShippingMethod {
25
25
  amount {
26
26
  currency
@@ -112,8 +112,8 @@ const e=`
112
112
  }
113
113
 
114
114
  ${e}
115
- ${t}
116
- `,_=`
115
+ ${_}
116
+ `,t=`
117
117
  fragment AVAILABLE_PAYMENT_METHOD_FRAGMENT on AvailablePaymentMethod {
118
118
  code
119
119
  title
@@ -146,7 +146,7 @@ const e=`
146
146
 
147
147
  ${a}
148
148
  ${i}
149
- ${_}
149
+ ${t}
150
150
  ${E}
151
151
  `,r=`
152
152
  fragment CUSTOMER_FRAGMENT on Customer {
@@ -154,7 +154,7 @@ const e=`
154
154
  lastname
155
155
  email
156
156
  }
157
- `,n=`
157
+ `,o=`
158
158
  fragment NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT on NegotiableQuoteBillingAddress {
159
159
  city
160
160
  company
@@ -168,6 +168,7 @@ const e=`
168
168
  value
169
169
  }
170
170
  }
171
+ customer_address_uid
171
172
  fax
172
173
  firstname
173
174
  lastname
@@ -185,7 +186,7 @@ const e=`
185
186
  uid
186
187
  vat_id
187
188
  }
188
- `,o=`
189
+ `,n=`
189
190
  fragment NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT on NegotiableQuoteShippingAddress {
190
191
  available_shipping_methods {
191
192
  ...AVAILABLE_SHIPPING_METHOD_FRAGMENT
@@ -202,6 +203,7 @@ const e=`
202
203
  value
203
204
  }
204
205
  }
206
+ customer_address_uid
205
207
  fax
206
208
  firstname
207
209
  lastname
@@ -224,7 +226,7 @@ const e=`
224
226
  }
225
227
 
226
228
  ${e}
227
- ${t}
229
+ ${_}
228
230
  `,T=`
229
231
  fragment NEGOTIABLE_QUOTE_FRAGMENT on NegotiableQuote {
230
232
  available_payment_methods {
@@ -247,9 +249,9 @@ const e=`
247
249
  uid
248
250
  }
249
251
 
250
- ${n}
251
252
  ${o}
252
- ${_}
253
+ ${n}
254
+ ${t}
253
255
  ${E}
254
- `;export{_ as AVAILABLE_PAYMENT_METHOD_FRAGMENT,e as AVAILABLE_SHIPPING_METHOD_FRAGMENT,a as BILLING_CART_ADDRESS_FRAGMENT,A as CHECKOUT_DATA_FRAGMENT,r as CUSTOMER_FRAGMENT,n as NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT,T as NEGOTIABLE_QUOTE_FRAGMENT,o as NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT,E as SELECTED_PAYMENT_METHOD_FRAGMENT,t as SELECTED_SHIPPING_METHOD_FRAGMENT,i as SHIPPING_CART_ADDRESS_FRAGMENT};
256
+ `;export{t as AVAILABLE_PAYMENT_METHOD_FRAGMENT,e as AVAILABLE_SHIPPING_METHOD_FRAGMENT,a as BILLING_CART_ADDRESS_FRAGMENT,A as CHECKOUT_DATA_FRAGMENT,r as CUSTOMER_FRAGMENT,o as NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT,T as NEGOTIABLE_QUOTE_FRAGMENT,n as NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT,E as SELECTED_PAYMENT_METHOD_FRAGMENT,_ as SELECTED_SHIPPING_METHOD_FRAGMENT,i as SHIPPING_CART_ADDRESS_FRAGMENT};
255
257
  //# sourceMappingURL=fragments.js.map
package/fragments.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fragments.js","sources":["/@dropins/storefront-checkout/src/api/graphql/ShippingMethodFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/CartAddressFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/PaymentMethodFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/CheckoutDataFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/CustomerFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/NegotiableQuoteAddressFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/NegotiableQuoteFragment.graphql.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const AVAILABLE_SHIPPING_METHOD_FRAGMENT = /* GraphQL */ `\n fragment AVAILABLE_SHIPPING_METHOD_FRAGMENT on AvailableShippingMethod {\n amount {\n currency\n value\n }\n carrier_code\n carrier_title\n error_message\n method_code\n method_title\n price_excl_tax {\n value\n currency\n }\n price_incl_tax {\n value\n currency\n }\n }\n`;\n\nexport const SELECTED_SHIPPING_METHOD_FRAGMENT = /* GraphQL */ `\n fragment SELECTED_SHIPPING_METHOD_FRAGMENT on SelectedShippingMethod {\n amount {\n currency\n value\n }\n carrier_code\n carrier_title\n method_code\n method_title\n price_excl_tax {\n value\n currency\n }\n price_incl_tax {\n value\n currency\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n AVAILABLE_SHIPPING_METHOD_FRAGMENT,\n SELECTED_SHIPPING_METHOD_FRAGMENT,\n} from './ShippingMethodFragment.graphql';\n\nexport const BILLING_CART_ADDRESS_FRAGMENT = /* GraphQL */ `\n fragment BILLING_CART_ADDRESS_FRAGMENT on BillingCartAddress {\n city\n company\n country {\n code\n label\n }\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n fax\n firstname\n id\n lastname\n middlename\n postcode\n prefix\n region {\n region_id\n code\n label\n }\n street\n suffix\n telephone\n uid\n vat_id\n }\n`;\n\nexport const SHIPPING_CART_ADDRESS_FRAGMENT = /* GraphQL */ `\n fragment SHIPPING_CART_ADDRESS_FRAGMENT on ShippingCartAddress {\n available_shipping_methods {\n ...AVAILABLE_SHIPPING_METHOD_FRAGMENT\n }\n city\n company\n country {\n code\n label\n }\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n fax\n firstname\n id\n lastname\n middlename\n postcode\n prefix\n region {\n region_id\n code\n label\n }\n same_as_billing\n selected_shipping_method {\n ...SELECTED_SHIPPING_METHOD_FRAGMENT\n }\n street\n suffix\n telephone\n uid\n vat_id\n }\n\n ${AVAILABLE_SHIPPING_METHOD_FRAGMENT}\n ${SELECTED_SHIPPING_METHOD_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const AVAILABLE_PAYMENT_METHOD_FRAGMENT = /* GraphQL */ `\n fragment AVAILABLE_PAYMENT_METHOD_FRAGMENT on AvailablePaymentMethod {\n code\n title\n }\n`;\n\nexport const SELECTED_PAYMENT_METHOD_FRAGMENT = /* GraphQL */ `\n fragment SELECTED_PAYMENT_METHOD_FRAGMENT on SelectedPaymentMethod {\n code\n title\n purchase_order_number\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n BILLING_CART_ADDRESS_FRAGMENT,\n SHIPPING_CART_ADDRESS_FRAGMENT,\n} from './CartAddressFragment.graphql';\nimport {\n AVAILABLE_PAYMENT_METHOD_FRAGMENT,\n SELECTED_PAYMENT_METHOD_FRAGMENT,\n} from './PaymentMethodFragment.graphql';\n\nexport const CHECKOUT_DATA_FRAGMENT = /* GraphQL */ `\n fragment CHECKOUT_DATA_FRAGMENT on Cart {\n id\n is_virtual\n email\n total_quantity\n billing_address {\n ...BILLING_CART_ADDRESS_FRAGMENT\n }\n shipping_addresses {\n ...SHIPPING_CART_ADDRESS_FRAGMENT\n }\n available_payment_methods {\n ...AVAILABLE_PAYMENT_METHOD_FRAGMENT\n }\n selected_payment_method {\n ...SELECTED_PAYMENT_METHOD_FRAGMENT\n }\n }\n\n ${BILLING_CART_ADDRESS_FRAGMENT}\n ${SHIPPING_CART_ADDRESS_FRAGMENT}\n ${AVAILABLE_PAYMENT_METHOD_FRAGMENT}\n ${SELECTED_PAYMENT_METHOD_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CUSTOMER_FRAGMENT = /* GraphQL */ `\n fragment CUSTOMER_FRAGMENT on Customer {\n firstname\n lastname\n email\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n AVAILABLE_SHIPPING_METHOD_FRAGMENT,\n SELECTED_SHIPPING_METHOD_FRAGMENT,\n} from './ShippingMethodFragment.graphql';\n\nexport const NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT = /* GraphQL */ `\n fragment NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT on NegotiableQuoteBillingAddress {\n city\n company\n country {\n code\n label\n }\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n fax\n firstname\n lastname\n middlename\n postcode\n prefix\n region {\n region_id\n code\n label\n }\n street\n suffix\n telephone\n uid\n vat_id\n }\n`;\n\nexport const NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT = /* GraphQL */ `\n fragment NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT on NegotiableQuoteShippingAddress {\n available_shipping_methods {\n ...AVAILABLE_SHIPPING_METHOD_FRAGMENT\n }\n city\n company\n country {\n code\n label\n }\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n fax\n firstname\n lastname\n middlename\n postcode\n prefix\n region {\n region_id\n code\n label\n }\n selected_shipping_method {\n ...SELECTED_SHIPPING_METHOD_FRAGMENT\n }\n street\n suffix\n telephone\n uid\n vat_id\n }\n\n ${AVAILABLE_SHIPPING_METHOD_FRAGMENT}\n ${SELECTED_SHIPPING_METHOD_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT,\n NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT,\n} from './NegotiableQuoteAddressFragment.graphql';\n\nimport {\n AVAILABLE_PAYMENT_METHOD_FRAGMENT,\n SELECTED_PAYMENT_METHOD_FRAGMENT,\n} from './PaymentMethodFragment.graphql';\n\nexport const NEGOTIABLE_QUOTE_FRAGMENT = /* GraphQL */ `\n fragment NEGOTIABLE_QUOTE_FRAGMENT on NegotiableQuote {\n available_payment_methods {\n ...AVAILABLE_PAYMENT_METHOD_FRAGMENT\n }\n billing_address {\n ...NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT\n }\n email\n is_virtual\n name\n selected_payment_method {\n ...SELECTED_PAYMENT_METHOD_FRAGMENT\n }\n shipping_addresses {\n ...NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT\n }\n status\n total_quantity\n uid\n }\n\n ${NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT}\n ${NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT}\n ${AVAILABLE_PAYMENT_METHOD_FRAGMENT}\n ${SELECTED_PAYMENT_METHOD_FRAGMENT}\n`;\n"],"names":["AVAILABLE_SHIPPING_METHOD_FRAGMENT","SELECTED_SHIPPING_METHOD_FRAGMENT","BILLING_CART_ADDRESS_FRAGMENT","SHIPPING_CART_ADDRESS_FRAGMENT","AVAILABLE_PAYMENT_METHOD_FRAGMENT","SELECTED_PAYMENT_METHOD_FRAGMENT","CHECKOUT_DATA_FRAGMENT","CUSTOMER_FRAGMENT","NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT","NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT","NEGOTIABLE_QUOTE_FRAGMENT"],"mappings":"AAiBa,MAAAA,EAAmD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBnDC,EAAkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECjBlDC,EAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkC9CC,EAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwCxDH,CAAkC;AAAA,IAClCC,CAAiC;AAAA,EChFxBG,EAAkD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlDC,EAAiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECEjDC,EAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBhDJ,CAA6B;AAAA,IAC7BC,CAA8B;AAAA,IAC9BC,CAAiC;AAAA,IACjCC,CAAgC;AAAA,EChCvBE,EAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECKlCC,EAA0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiC1DC,EAA2D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsCpET,CAAkC;AAAA,IAClCC,CAAiC;AAAA,ECnExBS,EAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBnDF,CAAyC;AAAA,IACzCC,CAA0C;AAAA,IAC1CL,CAAiC;AAAA,IACjCC,CAAgC;"}
1
+ {"version":3,"file":"fragments.js","sources":["/@dropins/storefront-checkout/src/api/graphql/ShippingMethodFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/CartAddressFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/PaymentMethodFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/CheckoutDataFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/CustomerFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/NegotiableQuoteAddressFragment.graphql.ts","/@dropins/storefront-checkout/src/api/graphql/NegotiableQuoteFragment.graphql.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const AVAILABLE_SHIPPING_METHOD_FRAGMENT = /* GraphQL */ `\n fragment AVAILABLE_SHIPPING_METHOD_FRAGMENT on AvailableShippingMethod {\n amount {\n currency\n value\n }\n carrier_code\n carrier_title\n error_message\n method_code\n method_title\n price_excl_tax {\n value\n currency\n }\n price_incl_tax {\n value\n currency\n }\n }\n`;\n\nexport const SELECTED_SHIPPING_METHOD_FRAGMENT = /* GraphQL */ `\n fragment SELECTED_SHIPPING_METHOD_FRAGMENT on SelectedShippingMethod {\n amount {\n currency\n value\n }\n carrier_code\n carrier_title\n method_code\n method_title\n price_excl_tax {\n value\n currency\n }\n price_incl_tax {\n value\n currency\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n AVAILABLE_SHIPPING_METHOD_FRAGMENT,\n SELECTED_SHIPPING_METHOD_FRAGMENT,\n} from './ShippingMethodFragment.graphql';\n\nexport const BILLING_CART_ADDRESS_FRAGMENT = /* GraphQL */ `\n fragment BILLING_CART_ADDRESS_FRAGMENT on BillingCartAddress {\n city\n company\n country {\n code\n label\n }\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n fax\n firstname\n id\n lastname\n middlename\n postcode\n prefix\n region {\n region_id\n code\n label\n }\n street\n suffix\n telephone\n uid\n vat_id\n }\n`;\n\nexport const SHIPPING_CART_ADDRESS_FRAGMENT = /* GraphQL */ `\n fragment SHIPPING_CART_ADDRESS_FRAGMENT on ShippingCartAddress {\n available_shipping_methods {\n ...AVAILABLE_SHIPPING_METHOD_FRAGMENT\n }\n city\n company\n country {\n code\n label\n }\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n fax\n firstname\n id\n lastname\n middlename\n postcode\n prefix\n region {\n region_id\n code\n label\n }\n same_as_billing\n selected_shipping_method {\n ...SELECTED_SHIPPING_METHOD_FRAGMENT\n }\n street\n suffix\n telephone\n uid\n vat_id\n }\n\n ${AVAILABLE_SHIPPING_METHOD_FRAGMENT}\n ${SELECTED_SHIPPING_METHOD_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const AVAILABLE_PAYMENT_METHOD_FRAGMENT = /* GraphQL */ `\n fragment AVAILABLE_PAYMENT_METHOD_FRAGMENT on AvailablePaymentMethod {\n code\n title\n }\n`;\n\nexport const SELECTED_PAYMENT_METHOD_FRAGMENT = /* GraphQL */ `\n fragment SELECTED_PAYMENT_METHOD_FRAGMENT on SelectedPaymentMethod {\n code\n title\n purchase_order_number\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n BILLING_CART_ADDRESS_FRAGMENT,\n SHIPPING_CART_ADDRESS_FRAGMENT,\n} from './CartAddressFragment.graphql';\nimport {\n AVAILABLE_PAYMENT_METHOD_FRAGMENT,\n SELECTED_PAYMENT_METHOD_FRAGMENT,\n} from './PaymentMethodFragment.graphql';\n\nexport const CHECKOUT_DATA_FRAGMENT = /* GraphQL */ `\n fragment CHECKOUT_DATA_FRAGMENT on Cart {\n id\n is_virtual\n email\n total_quantity\n billing_address {\n ...BILLING_CART_ADDRESS_FRAGMENT\n }\n shipping_addresses {\n ...SHIPPING_CART_ADDRESS_FRAGMENT\n }\n available_payment_methods {\n ...AVAILABLE_PAYMENT_METHOD_FRAGMENT\n }\n selected_payment_method {\n ...SELECTED_PAYMENT_METHOD_FRAGMENT\n }\n }\n\n ${BILLING_CART_ADDRESS_FRAGMENT}\n ${SHIPPING_CART_ADDRESS_FRAGMENT}\n ${AVAILABLE_PAYMENT_METHOD_FRAGMENT}\n ${SELECTED_PAYMENT_METHOD_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CUSTOMER_FRAGMENT = /* GraphQL */ `\n fragment CUSTOMER_FRAGMENT on Customer {\n firstname\n lastname\n email\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n AVAILABLE_SHIPPING_METHOD_FRAGMENT,\n SELECTED_SHIPPING_METHOD_FRAGMENT,\n} from './ShippingMethodFragment.graphql';\n\nexport const NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT = /* GraphQL */ `\n fragment NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT on NegotiableQuoteBillingAddress {\n city\n company\n country {\n code\n label\n }\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n customer_address_uid\n fax\n firstname\n lastname\n middlename\n postcode\n prefix\n region {\n region_id\n code\n label\n }\n street\n suffix\n telephone\n uid\n vat_id\n }\n`;\n\nexport const NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT = /* GraphQL */ `\n fragment NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT on NegotiableQuoteShippingAddress {\n available_shipping_methods {\n ...AVAILABLE_SHIPPING_METHOD_FRAGMENT\n }\n city\n company\n country {\n code\n label\n }\n custom_attributes {\n ... on AttributeValue {\n code\n value\n }\n }\n customer_address_uid\n fax\n firstname\n lastname\n middlename\n postcode\n prefix\n region {\n region_id\n code\n label\n }\n selected_shipping_method {\n ...SELECTED_SHIPPING_METHOD_FRAGMENT\n }\n street\n suffix\n telephone\n uid\n vat_id\n }\n\n ${AVAILABLE_SHIPPING_METHOD_FRAGMENT}\n ${SELECTED_SHIPPING_METHOD_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT,\n NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT,\n} from './NegotiableQuoteAddressFragment.graphql';\n\nimport {\n AVAILABLE_PAYMENT_METHOD_FRAGMENT,\n SELECTED_PAYMENT_METHOD_FRAGMENT,\n} from './PaymentMethodFragment.graphql';\n\nexport const NEGOTIABLE_QUOTE_FRAGMENT = /* GraphQL */ `\n fragment NEGOTIABLE_QUOTE_FRAGMENT on NegotiableQuote {\n available_payment_methods {\n ...AVAILABLE_PAYMENT_METHOD_FRAGMENT\n }\n billing_address {\n ...NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT\n }\n email\n is_virtual\n name\n selected_payment_method {\n ...SELECTED_PAYMENT_METHOD_FRAGMENT\n }\n shipping_addresses {\n ...NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT\n }\n status\n total_quantity\n uid\n }\n\n ${NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT}\n ${NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT}\n ${AVAILABLE_PAYMENT_METHOD_FRAGMENT}\n ${SELECTED_PAYMENT_METHOD_FRAGMENT}\n`;\n"],"names":["AVAILABLE_SHIPPING_METHOD_FRAGMENT","SELECTED_SHIPPING_METHOD_FRAGMENT","BILLING_CART_ADDRESS_FRAGMENT","SHIPPING_CART_ADDRESS_FRAGMENT","AVAILABLE_PAYMENT_METHOD_FRAGMENT","SELECTED_PAYMENT_METHOD_FRAGMENT","CHECKOUT_DATA_FRAGMENT","CUSTOMER_FRAGMENT","NEGOTIABLE_QUOTE_BILLING_ADDRESS_FRAGMENT","NEGOTIABLE_QUOTE_SHIPPING_ADDRESS_FRAGMENT","NEGOTIABLE_QUOTE_FRAGMENT"],"mappings":"AAiBa,MAAAA,EAAmD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBnDC,EAAkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECjBlDC,EAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkC9CC,EAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwCxDH,CAAkC;AAAA,IAClCC,CAAiC;AAAA,EChFxBG,EAAkD;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlDC,EAAiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECEjDC,EAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBhDJ,CAA6B;AAAA,IAC7BC,CAA8B;AAAA,IAC9BC,CAAiC;AAAA,IACjCC,CAAgC;AAAA,EChCvBE,EAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECKlCC,EAA0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkC1DC,EAA2D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAuCpET,CAAkC;AAAA,IAClCC,CAAiC;AAAA,ECrExBS,EAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBnDF,CAAyC;AAAA,IACzCC,CAA0C;AAAA,IAC1CL,CAAiC;AAAA,IACjCC,CAAgC;"}