{"version":3,"file":"AvoidLayoutJumping_Prod.DsTGTv_S.mjs","names":["useState","get","useMemo","p","currentCurrencyCode","useRef"],"sources":["https:/framerusercontent.com/modules/yiRfl1JCGhIBUL31WVDk/wupS2XmBAHu1kBQNv9pi/mutations_v2.js","https:/framerusercontent.com/modules/6Zs9CjkPbKzHjoy8LK08/iqoIwmJw4hztafi4V4IV/Fb_pixel.js","https:/framerusercontent.com/modules/w24ELWa2giT3SFaWpV77/398w6fPyag8B92ojouQr/utmParams.js","https:/framerusercontent.com/modules/e6hu5bFF0rCCT36GTgql/7w2AGuc6YvnRZqrREkKN/jeIIip8Yb.js","https:/framerusercontent.com/modules/DfiHm7rgZZvl0dxRShLF/ytQrhfAVRO0z6YGuv8tH/FC_ProductPriceDiscount.js","https:/framerusercontent.com/modules/h8ioHyt4BUxuvVCE1Q10/aTM6mEMGlM19JjX8exDe/AvoidLayoutJumping_Prod.js"],"sourcesContent":["//export const createCartMutationWithAttributes = `\n// mutation createCart($lines: [CartLineInput!]!, $attributes: [AttributeInput!]) {\n//   cartCreate(input: { lines: $lines, attributes: $attributes }) {\n//   mutation createCart($lines: [CartLineInput!]!, $attributes: [AttributeInput!], $countryCode: CountryCode) {\n//     cartCreate(input: { lines: $lines, attributes: $attributes, buyerIdentity: { countryCode: $countryCode } }) {\n//       cart {\n//         buyerIdentity {\n//           countryCode\n//         }\n//         id\n//         checkoutUrl\n//         attributes {\n//           key\n//           value\n//         }\n//         cost {\n//           totalAmount {\n//             amount\n//             currencyCode\n//           }\n//         }\n//         lines(first: 100) {\n//           edges {\n//             node {\n//               id\n//               quantity\n//               cost {\n//                 compareAtAmount {\n//                   amount\n//                   currencyCode\n//                 }\n//                 amount {\n//                   amount\n//                   currencyCode\n//                 }\n//               }\n//               merchandise {\n//                 ... on ProductVariant {\n//                   id\n//                 }\n//               }\n//             }\n//           }\n//         }\n//       }\n//       userErrors {\n//         field\n//         message\n//       }\n//     }\n//   }\n// `\nexport const createCartMutationWithAttributes=`\n  mutation createCart($lines: [CartLineInput!]!, $attributes: [AttributeInput!], $countryCode: CountryCode) {\n    cartCreate(input: { lines: $lines, attributes: $attributes, buyerIdentity: { countryCode: $countryCode } }) {\n      cart {\n        id\n        checkoutUrl\n        buyerIdentity {\n          countryCode\n        }\n        lines(first: 50) {\n          edges {\n            node {\n              id\n              quantity\n              cost {\n                totalAmount {\n                  amount\n                  currencyCode\n                }\n              }\n              merchandise {\n                ... on ProductVariant {\n                  title\n                  product {\n                    title\n                  }\n                  id\n                  quantityAvailable\n                }\n              }\n            }\n          }\n        }\n        cost {\n          subtotalAmount {\n            amount\n            currencyCode\n          }\n          totalAmount {\n            amount\n            currencyCode\n          }\n        }\n      }\n      userErrors {\n        code\n        message\n      }\n    }\n  }\n`;export const createCartMutation=`\n  mutation createCart($lines: [CartLineInput!]!, $countryCode: CountryCode) {\n    cartCreate(input: { lines: $lines, buyerIdentity: { countryCode: $countryCode } }) {\n      cart {\n        id\n        checkoutUrl\n        buyerIdentity {\n          countryCode\n        }\n        attributes {\n          key\n          value\n        }\n        lines(first: 100) {\n          edges {\n            node {\n              id\n              quantity\n              cost {\n                totalAmount {\n                  amount\n                  currencyCode\n                }\n              }\n              merchandise {\n                ... on ProductVariant {\n                  id\n                }\n              }\n            }\n          }\n        }\n        cost {\n          subtotalAmount {\n            amount\n            currencyCode\n          }\n          totalAmount {\n            amount\n            currencyCode\n          }\n        }\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\n`;// export const createCartMutation = `\n//   mutation createCart($lines: [CartLineInput!]!) {\n//     cartCreate(input: lines: $lines}) {\n//       cart {\n//         id\n//         checkoutUrl\n//         attributes {\n//           key\n//           value\n//         }\n//         lines(first: 100) {\n//           edges {\n//             node {\n//               id\n//               quantity\n//               merchandise {\n//                 ... on ProductVariant {\n//                   id\n//                 }\n//               }\n//             }\n//           }\n//         }\n//       }\n//       userErrors {\n//         field\n//         message\n//       }\n//     }\n//   }\n// `\nexport const addToCartMutation=`\n  mutation cartLinesAdd($cartId: ID!, $lines: [CartLineInput!]!) {\n    cartLinesAdd(cartId: $cartId, lines: $lines) {\n      cart {\n        id\n        checkoutUrl\n        buyerIdentity {\n          countryCode\n        }\n        attributes {\n          key\n          value\n        }\n        lines(first: 100) {\n          edges {\n            node {\n              id\n              quantity\n              merchandise {\n                ... on ProductVariant {\n                  id\n                  product {\n                    id\n                    title\n                    metafields(\n                      identifiers: [\n                        { namespace: \"custom\", key: \"order_max\" }\n                      ]\n                    ) {\n                      namespace\n                      key\n                      value\n                    }\n                  }\n                  price {\n                    amount\n                    currencyCode\n                  }\n                  image {\n                    url\n                  }\n                  selectedOptions {\n                    name\n                    value\n                  }\n                }\n              }\n              cost {\n                totalAmount {\n                  amount\n                  currencyCode\n                }\n              }\n            }\n          }\n        }\n        cost {\n          totalAmount {\n            amount\n            currencyCode\n          }\n          subtotalAmount {\n            amount\n            currencyCode\n          }\n        }\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\n`;export const updateCartAttributes=`\n  mutation cartAttributesUpdate($cartId: ID!, $attributes: [AttributeInput!]!) {\n    cartAttributesUpdate(cartId: $cartId, attributes: $attributes) {\n      cart {\n        id\n        attributes {\n          key\n          value\n        }\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\n`;// mutation with the selling plans:\nexport const createCartMutationNoPlans=`\nmutation cartCreate($input: CartInput!, $countryCode: CountryCode) {\n  cartCreate(input: $input, buyerIdentity: { countryCode: $countryCode }) {\n    cart {\n      id\n      checkoutUrl\n      buyerIdentity {\n        countryCode\n      }\n      createdAt\n      note\n      attributes {\n        key\n        value\n      }\n      lines(first: 10) {\n        edges {\n          node {\n            id\n            quantity\n            attributes {\n              key\n              value\n            }\n            merchandise {\n              ... on ProductVariant {\n                id\n                title\n                price {\n                  amount\n                  currencyCode\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}\n`;export const addToCartMutationNoPlans=`\nmutation cartLinesAdd($cartId: ID!, $lines: [CartLineInput!]!, $attributes: [AttributeInput!]) {\n  cartLinesAdd(cartId: $cartId, lines: $lines) {\n    cart {\n      id\n      checkoutUrl\n      buyerIdentity {\n        countryCode\n      }\n      note\n      attributes {\n        key\n        value\n      }\n      lines(first: 10) {\n        edges {\n          node {\n            id\n            quantity\n            attributes {\n              key\n              value\n            }\n            merchandise {\n              ... on ProductVariant {\n                id\n                title\n                price {\n                  amount\n                  currencyCode\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n  cartAttributesUpdate(cartId: $cartId, attributes: $attributes) {\n    cart {\n      id\n      note\n      attributes {\n        key\n        value\n      }\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}\n`;/***\n * Cart Product Card V2 Mutations\n */export const updatelineMutation=`\n  mutation cartLinesUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!) {\n    cartLinesUpdate(cartId: $cartId, lines: $lines) {\n      cart {\n        id\n        buyerIdentity {\n          countryCode\n        }\n        lines(first: 100) {\n          edges {\n            node {\n              id\n              quantity\n              merchandise {\n                ... on ProductVariant {\n                  id\n                  product {\n                    id\n                    handle\n                    title\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n`;export const removeLineMutation=`mutation cartLinesRemove($cartId: ID!, $lineIds: [ID!]!) {\n      cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {\n          cart {\n              id\n              buyerIdentity {\n                countryCode\n              }\n              lines(first: 250) {\n                  edges {\n                      node {\n                          id\n                          quantity\n                          sellingPlanAllocation{ \n                              checkoutChargeAmount{\n                                  amount\n                                  currencyCode\n                                  }\n                          }\n                          cost {\n                              totalAmount {\n                                  amount\n                                  currencyCode\n                              }\n                              subtotalAmount {\n                                  amount\n                                  currencyCode\n                              }\n                          }\n                          merchandise {\n                              ... on ProductVariant {\n                                  id\n                                  title\n                                  product {\n                                      id\n                                      title\n                                  }\n                                  price {\n                                      amount\n                                      currencyCode\n                                  }\n                                  image {\n                                      url\n                                  }\n                                      selectedOptions\n                            {\n                              name\n                              value\n                            }\n                              }\n                          }\n                      }\n                  }\n              }\n          }\n          userErrors {\n              field\n              message\n          }\n      }\n  }`;export const updatelineMutationNoPlans=`mutation cartLinesUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!) {\n      cartLinesUpdate(cartId: $cartId, lines: $lines) {\n          cart {\n              id\n              buyerIdentity {\n                countryCode\n              }\n              cost {\n                  totalAmount {\n                      amount\n                      currencyCode\n                  }\n                  subtotalAmount {\n                      amount\n                      currencyCode\n                  }\n              }\n              lines(first: 250) {\n                  edges {\n                      node {\n                          id\n                          quantity\n                          cost {\n                              totalAmount {\n                                  amount\n                                  currencyCode\n                              }\n                              subtotalAmount {\n                                  amount\n                                  currencyCode\n                              }\n                          }\n                          merchandise {\n                              ... on ProductVariant {\n                                  id\n                                  title\n                                  product {\n                                      id\n                                      title\n                                  }\n                                  price {\n                                      amount\n                                      currencyCode\n                                  }\n                                  image {\n                                      url\n                                  }\n                                  selectedOptions\n                                  {\n                              name\n                              value\n                            }\n\n                              }\n                          }\n                      }\n                  }\n              }\n          }\n          userErrors {\n              field\n              message\n          }\n      }\n  }`;export const removeLineMutationNoPlans=`mutation cartLinesRemove($cartId: ID!, $lineIds: [ID!]!) {\n      cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {\n          cart {\n              id\n              buyerIdentity {\n                countryCode\n              }\n              lines(first: 250) {\n                  edges {\n                      node {\n                          id\n                          quantity\n                          cost {\n                              totalAmount {\n                                  amount\n                                  currencyCode\n                              }\n                              subtotalAmount {\n                                  amount\n                                  currencyCode\n                              }\n                          }\n                          merchandise {\n                              ... on ProductVariant {\n                                  id\n                                  title\n                                  product {\n                                      id\n                                      title\n                                  }\n                                  price {\n                                      amount\n                                      currencyCode\n                                  }\n                                  image {\n                                      url\n                                  }\n                                      selectedOptions\n                            {\n                              name\n                              value\n                            }\n                              }\n                          }\n                      }\n                  }\n              }\n          }\n          userErrors {\n              field\n              message\n          }\n      }\n  }`;export const getProducts=`\n  query GetProducts($cursor: String) {\n    products(first: 250, after: $cursor) {\n      edges {\n        node {\n          id\n          title\n          vendor\n          handle\n          images(first: 20) {\n            edges {\n              node {\n                url\n                altText\n                width\n                height\n               }\n              }\n          }\n          totalInventory\n          sellingPlanGroups(first: 1) {\n            edges {\n              node {\n                name\n                options {\n                  name\n                  values\n                }\n                sellingPlans(first: 10) {\n                  edges {\n                    node {\n                      id\n                      name\n                      description\n                      recurringDeliveries\n                      priceAdjustments {\n                        orderCount\n                        adjustmentValue {\n                          __typename\n                          ... on SellingPlanPercentagePriceAdjustment {\n                            adjustmentPercentage\n                          }\n                          ... on SellingPlanFixedAmountPriceAdjustment {\n                            adjustmentAmount {\n                              amount\n                              currencyCode\n                            }\n                          }\n                          ... on SellingPlanFixedPriceAdjustment {\n                            price {\n                              amount\n                              currencyCode\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n          options {\n            id\n            name\n            values\n          }\n          compareAtPriceRange {\n            minVariantPrice {\n              amount\n              currencyCode\n            }\n          }\n          priceRange {\n            minVariantPrice {\n              amount\n              currencyCode\n            }\n          }\n          variants(first: 250) {\n            pageInfo {\n              hasNextPage\n              hasPreviousPage\n              endCursor\n            }\n            edges {\n              node {\n                id\n                image {\n                  url\n                  altText\n                  width\n                  height\n                }\n                title\n                sku\n                availableForSale\n                requiresShipping\n                selectedOptions {\n                  name\n                  value\n                }\n                price {\n                  amount\n                  currencyCode\n                }\n                compareAtPrice {\n                  amount\n                  currencyCode\n                }\n              }\n            }\n          }\n        }\n      }\n      pageInfo {\n        hasNextPage\n        endCursor\n      }\n    }\n  }\n`;export const getProductsBackup=`\n  query GetProductsBackup($cursor: String) {\n    products(first: 250, after: $cursor) {\n      edges {\n        node {\n          id\n          title\n          vendor\n          handle\n          totalInventory\n          images(first: 20) {\n            edges {\n              node {\n                url\n                altText\n                width\n                height\n               }\n              }\n          }\n          options {\n            id\n            name\n            values\n          }\n          compareAtPriceRange {\n            minVariantPrice {\n              amount\n              currencyCode\n            }\n          }\n          priceRange {\n            minVariantPrice {\n              amount\n              currencyCode\n            }\n          }\n          variants(first: 250) {\n            pageInfo {\n              hasNextPage\n              hasPreviousPage\n              endCursor\n            }\n            edges {\n              node {\n                id\n                image {\n                  url\n                  altText\n                  width\n                  height\n                }\n                title\n                sku\n                availableForSale\n                requiresShipping\n                selectedOptions {\n                  name\n                  value\n                }\n                price {\n                  amount\n                  currencyCode\n                }\n                compareAtPrice {\n                  amount\n                  currencyCode\n                }\n              }\n            }\n          }\n        }\n      }\n      pageInfo {\n        hasNextPage\n        endCursor\n      }\n    }\n  }\n`;export const getCartQuery=`\n  query GetCart($cartId: ID!) {\n    cart(id: $cartId) {\n      id\n      createdAt\n      updatedAt\n      checkoutUrl\n      buyerIdentity {\n        countryCode\n      }\n      lines(first: 250) {\n        edges {\n          node {\n            id\n            quantity\n            sellingPlanAllocation { \n              checkoutChargeAmount {\n                amount\n                currencyCode\n              }\n              sellingPlan {\n                id\n                name\n                description\n              }\n            }\n            merchandise {\n              ... on ProductVariant {\n                id\n                title\n                image {\n                  url\n                }\n                selectedOptions {\n                  name\n                  value\n                }\n                product {\n                  title\n                  handle\n                }\n                price {\n                  amount\n                  currencyCode\n                }\n                compareAtPrice {\n                  amount\n                  currencyCode\n                }\n              }\n            }\n            attributes {\n              key\n              value\n            }\n            cost {\n              totalAmount {\n                amount\n                currencyCode\n              }\n              subtotalAmount {\n                amount\n                currencyCode\n              }\n            }\n          }\n        }\n      }\n      attributes {\n        key\n        value\n      }\n      cost {\n        totalAmount {\n          amount\n          currencyCode\n        }\n        subtotalAmount {\n          amount\n          currencyCode\n        }\n      }\n    }\n  }\n`;export const getCartQueryNoPlans=`\n  query GetCart($cartId: ID!) {\n    cart(id: $cartId) {\n      id\n      createdAt\n      updatedAt\n      checkoutUrl\n      buyerIdentity {\n        countryCode\n      }\n      lines(first: 250) {\n        edges {\n          node {\n            id\n            quantity\n            merchandise {\n              ... on ProductVariant {\n                id\n                title\n                image {\n                  url\n                }\n                selectedOptions {\n                  name\n                  value\n                }\n                product {\n                  title\n                  handle\n                }\n                price {\n                  amount\n                  currencyCode\n                }\n                compareAtPrice {\n                  amount\n                  currencyCode\n                }\n              }\n            }\n            attributes {\n              key\n              value\n            }\n            cost {\n              totalAmount {\n                amount\n                currencyCode\n              }\n              subtotalAmount {\n                amount\n                currencyCode\n              }\n            }\n          }\n        }\n      }\n      attributes {\n        key\n        value\n      }\n      cost {\n        totalAmount {\n          amount\n          currencyCode\n        }\n        subtotalAmount {\n          amount\n          currencyCode\n        }\n      }\n    }\n  }\n`;export const cartQuery=`\n  query getCart($cartId: ID!) {\n    cart(id: $cartId) {\n      id\n      checkoutUrl\n      buyerIdentity {\n        countryCode\n      }\n      attributes {\n        key\n        value\n      }\n      lines(first: 100) {\n        edges {\n          node {\n            id\n            quantity\n            attributes {\n              key\n              value\n            }\n            merchandise {\n              ... on ProductVariant {\n                id\n                product {\n                  id\n                  title\n                  metafields(\n                    identifiers: [\n                      { namespace: \"custom\", key: \"order_max\" }\n                    ]\n                  ) {\n                    namespace\n                    key\n                    value\n                  }\n                }\n                price {\n                  amount\n                  currencyCode\n                }\n                image {\n                  url\n                }\n                selectedOptions {\n                  name\n                  value\n                }\n              }\n            }\n            sellingPlanAllocation {\n              sellingPlan {\n                id\n                name\n              }\n              checkoutChargeAmount {\n                amount\n                currencyCode\n              }\n            }\n            cost {\n              totalAmount {\n                amount\n                currencyCode\n              }\n            }\n          }\n        }\n      }\n      cost {\n        totalAmount {\n          amount\n          currencyCode\n        }\n        subtotalAmount {\n          amount\n          currencyCode\n        }\n      }\n    }\n  }\n`;export const getProductMetafields=`\n  query getProductMetafields($handle: String!) {\n    product(handle: $handle) {\n      id\n      metafield_order_max: metafield(namespace: \"custom\", key: \"order_max\") {\n        value\n        type\n      }\n    }\n  }\n`;// Get available currencies from the store\nexport const getAvailableCurrencies=`\n  query getAvailableCurrencies {\n    localization {\n      availableCountries {\n        currency {\n          isoCode\n          name\n          symbol\n        }\n        isoCode\n        name\n        unitSystem\n      }\n      country {\n        currency {\n          isoCode\n          name\n          symbol\n        }\n        isoCode\n        name\n      }\n    }\n  }\n`;// Get products by country\nexport const getProductsQueryByCountry=`\n  query GetProductsByCountry ($cursor: String, $countryCode: CountryCode) @inContext(country: $countryCode) {\n    products(first: 250, after: $cursor) {\n      edges {\n        node {\n          id\n          title\n          vendor\n          handle\n          images(first: 20) {\n            edges {\n              node {\n                url\n                altText\n                width\n                height\n              }\n            }\n          }\n          sellingPlanGroups(first: 1) {\n            edges {\n              node {\n                name\n                options {\n                  name\n                  values\n                }\n                sellingPlans(first: 10) {\n                  edges {\n                    node {\n                      id\n                      name\n                      description\n                      recurringDeliveries\n                      priceAdjustments {\n                        orderCount\n                        adjustmentValue {\n                          __typename\n                          ... on SellingPlanPercentagePriceAdjustment {\n                            adjustmentPercentage\n                          }\n                          ... on SellingPlanFixedAmountPriceAdjustment {\n                            adjustmentAmount {\n                              amount\n                              currencyCode\n                            }\n                          }\n                          ... on SellingPlanFixedPriceAdjustment {\n                            price {\n                              amount\n                              currencyCode\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n          options {\n            id\n            name\n            values\n          }\n          compareAtPriceRange {\n            minVariantPrice {\n              amount\n              currencyCode\n            }\n          }\n          priceRange {\n            minVariantPrice {\n              amount\n              currencyCode\n            }\n          }\n          variants(first: 250) {\n            pageInfo {\n              hasNextPage\n              hasPreviousPage\n              endCursor\n            }\n            edges {\n              node {\n                id\n                image {\n                  url\n                  altText\n                  width\n                  height\n                }\n                title\n                sku\n                quantityAvailable\n                availableForSale\n                requiresShipping\n                selectedOptions {\n                  name\n                  value\n                }\n                price {\n                  amount\n                  currencyCode\n                }\n                compareAtPrice {\n                  amount\n                  currencyCode\n                }\n              }\n            }\n          }\n        }\n      }\n      pageInfo {\n        hasNextPage\n        endCursor\n      }\n    }\n  }\n`;export const updateCartCurrency=`\n  mutation updateCartCurrency($cartId: ID!, $countryCode: CountryCode) {\n    cartBuyerIdentityUpdate(cartId: $cartId, buyerIdentity: { countryCode: $countryCode }) {\n      cart {\n        id\n        buyerIdentity {\n          countryCode\n        }\n        cost {\n          totalAmount {\n            amount\n            currencyCode\n          }\n        }\n      }\n    }\n  }\n`;\nexport const __FramerMetadata__ = {\"exports\":{\"updateCartAttributes\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getProducts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCartQueryNoPlans\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"updatelineMutationNoPlans\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"addToCartMutationNoPlans\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"removeLineMutationNoPlans\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getAvailableCurrencies\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"cartQuery\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getProductsBackup\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getProductMetafields\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"updateCartCurrency\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCartQuery\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getProductsQueryByCountry\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"addToCartMutation\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"createCartMutationWithAttributes\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"updatelineMutation\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"createCartMutationNoPlans\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"createCartMutation\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"removeLineMutation\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./mutations_v2.map","/*\n * Framer Commerce\n * Confidential and Proprietary - All Rights Reserved\n */// Utility function to clean Shopify GID to just the numeric ID\nconst cleanShopifyId=gid=>gid?.split(\"/\").pop()||\"\";/**\n * Check if marketing consent is granted\n * Uses the global FCConsentManager if available\n */const checkMarketingConsent=()=>{if(typeof window!==\"undefined\"&&window.FCConsentManager){const consent=window.FCConsentManager.getConsent();// Check marketing consent from the consent manager\nreturn consent.marketing===true;}// No FCConsentManager = allow tracking (Framer's approach)\n// Pass the GDPR compliance decision to the project owner\nreturn true;};// Standardized Facebook Pixel AddToCart tracking function\nexport const trackFacebookPixelAddToCart=data=>{// Check consent before tracking\nif(!checkMarketingConsent()){// Silently skip tracking - no consent\nreturn;}if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{variant,product,quantity=1,currency=\"USD\"}=data;if(!variant||!product){console.warn(\"Missing variant or product data for Facebook Pixel tracking\");return;}const item_id=cleanShopifyId(variant.id);const item_name=product.title||\"\";const item_variant=variant.title||\"\";const price=parseFloat(variant.price?.amount||\"0\");const value=price*quantity;const finalCurrency=variant.price?.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel AddToCart: missing required data\",{item_id,item_name,price,value});return;}const fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:product.productType||\"\",content_brand:product.vendor||\"\",value:parseFloat(value.toFixed(2)),currency:finalCurrency,contents:[{id:item_id,price:parseFloat(price.toFixed(2)),quantity:parseInt(quantity.toString())}]};// console.log('[Facebook Pixel] Firing AddToCart', item_id, item_name);\n// console.log('[Facebook Pixel] AddToCart with data:', fbqData);\n// console.log('[Facebook Pixel] AddToCart timestamp:', new Date().toISOString());\nfbq(\"track\",\"AddToCart\",fbqData,{eventID:\"addtocart_\"+Date.now()});};// Standardized Facebook Pixel InitiateCheckout tracking function\nexport const trackFacebookPixelInitiateCheckout=data=>{// Check consent before tracking\nif(!checkMarketingConsent()){// Silently skip tracking - no consent\nreturn;}if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{variant,product,quantity=1,currency=\"USD\",value:providedValue,content_ids:providedContentIds,content_name:providedContentName,num_items:providedNumItems}=data;let fbqData={content_type:\"product\",currency:currency};// If we have variant and product data, calculate from them\nif(variant&&product){const item_id=cleanShopifyId(variant.id);const item_name=product.title||\"\";const price=parseFloat(variant.price?.amount||\"0\");const calculatedValue=price*quantity;const finalCurrency=variant.price?.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel InitiateCheckout: missing required data\",{item_id,item_name,price,calculatedValue});return;}fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:product.productType||\"\",content_brand:product.vendor||\"\",value:parseFloat(calculatedValue.toFixed(2)),currency:finalCurrency,num_items:parseInt(quantity.toString())};}else if(providedContentIds&&providedValue!==undefined){// Ensure providedValue is a valid number\nconst numericValue=typeof providedValue===\"number\"?providedValue:parseFloat(providedValue)||0;fbqData={content_type:\"product\",content_ids:providedContentIds,content_name:providedContentName||\"Checkout\",value:parseFloat(numericValue.toFixed(2)),currency:currency,num_items:parseInt((providedNumItems||1).toString())};}else{console.warn(\"❌ Skipping Facebook Pixel InitiateCheckout: insufficient data\",data);return;}// console.log('[Facebook Pixel] Firing InitiateCheckout', fbqData.content_ids?.[0], fbqData.content_name);\n// console.log('[Facebook Pixel] InitiateCheckout with data:', fbqData);\n// console.log('[Facebook Pixel] InitiateCheckout timestamp:', new Date().toISOString());\n// Use sendBeacon if requested, otherwise use regular tracking\nconst eventOptions={eventID:\"initiatecheckout_\"+Date.now()};if(data.useBeacon){fbq(\"track\",\"InitiateCheckout\",fbqData,{...eventOptions,transport:\"beacon\"});}else{fbq(\"track\",\"InitiateCheckout\",fbqData,eventOptions);}};// Standardized Facebook Pixel RemoveFromCart tracking function\nexport const trackFacebookPixelRemoveFromCart=data=>{// Check consent before tracking\nif(!checkMarketingConsent()){// Silently skip tracking - no consent\nreturn;}if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{lineItem,currency=\"USD\"}=data;if(!lineItem){console.warn(\"Missing lineItem data for Facebook Pixel RemoveFromCart tracking\");return;}const item_id=cleanShopifyId(lineItem.merchandise.id);const item_name=lineItem.merchandise.product?.title||\"\";const item_variant=lineItem.merchandise.title||\"\";const price=parseFloat(lineItem.cost.subtotalAmount.amount||\"0\");const quantity=lineItem.quantity||1;const value=price*quantity;const finalCurrency=lineItem.cost.subtotalAmount.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel RemoveFromCart: missing required data\",{item_id,item_name,price,value,quantity});return;}const fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:lineItem.merchandise.product?.productType||\"\",content_brand:lineItem.merchandise.product?.vendor||\"\",value:parseFloat(value.toFixed(2)),currency:finalCurrency,contents:[{id:item_id,price:parseFloat(price.toFixed(2)),quantity:parseInt(quantity.toString())}]};// console.log('[Facebook Pixel] Firing RemoveFromCart with data:', fbqData);\nfbq(\"track\",\"RemoveFromCart\",fbqData,{eventID:\"removefromcart_\"+Date.now()});};// Standardized Facebook Pixel ViewContent tracking function\nexport const trackFacebookPixelViewContent=data=>{// Check consent before tracking\nif(!checkMarketingConsent()){// Silently skip tracking - no consent\nreturn;}if(typeof fbq!==\"function\"){console.warn(\"Facebook Pixel not available\");return;}const{variant,product,currency=\"USD\"}=data;if(!product){console.warn(\"Missing product data for Facebook Pixel ViewContent tracking\");return;}const item_id=variant?cleanShopifyId(variant.id):cleanShopifyId(product.id);const item_name=product.title||\"\";const item_variant=variant?.title||\"\";const price=variant?parseFloat(variant.price?.amount||\"0\"):parseFloat(product.priceRange?.minVariantPrice?.amount||\"0\");const finalCurrency=variant?.price?.currencyCode||product.priceRange?.minVariantPrice?.currencyCode||currency;// Validate required data\nif(!item_id||!item_name||price<=0){console.warn(\"❌ Skipping Facebook Pixel ViewContent: missing required data\",{item_id,item_name,price});return;}const fbqData={content_type:\"product\",content_ids:[item_id],content_name:item_name,content_category:product.productType||\"\",content_brand:product.vendor||\"\",value:parseFloat(price.toFixed(2)),currency:finalCurrency};// console.log('[Facebook Pixel] Firing ViewContent with data:', fbqData);\nfbq(\"track\",\"ViewContent\",fbqData,{eventID:\"viewcontent_\"+Date.now()});};export default function initializeFacebookPixel(facebookPixelId){!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments);};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=\"2.0\";n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;// Add onload and onerror event handlers\nt.onload=()=>{if(typeof fbq!==\"undefined\"){fbq(\"init\",facebookPixelId);fbq(\"track\",\"PageView\");}else{// Handle case where fbq is not defined\n}};t.onerror=()=>{// Handle Facebook Pixel script load failure\n};s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s);}(window,document,\"script\",\"https://connect.facebook.net/en_US/fbevents.js\");}\nexport const __FramerMetadata__ = {\"exports\":{\"trackFacebookPixelRemoveFromCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackFacebookPixelAddToCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackFacebookPixelViewContent\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackFacebookPixelInitiateCheckout\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Fb_pixel.map","// Declare the utmParams property on the global window object\n// Cookie utility functions\nfunction setCookie(name,value,days=30){const date=new Date;date.setTime(date.getTime()+days*24*60*60*1e3);const expires=`expires=${date.toUTCString()}`;// Remove SameSite=Lax and add secure flag if on HTTPS\nconst secure=window.location.protocol===\"https:\"?\";secure\":\"\";document.cookie=`${name}=${value};${expires};path=/${secure}`;}function getCookie(name){const nameEQ=`${name}=`;const ca=document.cookie.split(\";\");for(let i=0;i<ca.length;i++){let c=ca[i];while(c.charAt(0)===\" \")c=c.substring(1);if(c.indexOf(nameEQ)===0)return c.substring(nameEQ.length,c.length);}return null;}function deleteCookie(name){setCookie(name,\"\",-1);}export function getUTMParameters(){const urlParams=new URLSearchParams(window.location.search);const utmParams={};const utmKeys=[\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_term\",\"utm_content\"];utmKeys.forEach(key=>{const value=urlParams.get(key);if(value){utmParams[key]=value;}});// Store UTM params in cookies if we have any\nif(Object.keys(utmParams).length>0){try{// Store each UTM parameter as a separate cookie\nObject.entries(utmParams).forEach(([key,value])=>{setCookie(key,value);});// Also store as a single JSON object for Shopify\nsetCookie(\"_shopify_utm\",JSON.stringify(utmParams));window.utmParams=utmParams;}catch(error){console.error(\"Error storing UTM parameters:\",error);}}return utmParams;}export function getSCARefParameters(){const urlParams=new URLSearchParams(window.location.search);const scaRefParams={};const scaRefKeys=[\"sca_ref\",\"sca_source\",\"sca_medium\",\"sca_campaign\",\"sca_term\",\"sca_content\"];scaRefKeys.forEach(key=>{const value=urlParams.get(key);if(value){scaRefParams[key]=value;}});// Store SCA ref params in cookies if we have any\nif(Object.keys(scaRefParams).length>0){try{// Store each SCA ref parameter as a separate cookie\nObject.entries(scaRefParams).forEach(([key,value])=>{setCookie(key,value);});// Also store as a single JSON object for Shopify\nsetCookie(\"_shopify_sca_ref\",JSON.stringify(scaRefParams));window.scaRefParams=scaRefParams;}catch(error){console.error(\"Error storing SCA ref parameters:\",error);}}return scaRefParams;}export function getStoredUTMParameters(){// First try to get from window object (for current session)\nif(window.utmParams&&Object.keys(window.utmParams).length>0){return window.utmParams;}// Then try to get from cookies\ntry{// First try to get from Shopify's format\nconst shopifyUtm=getCookie(\"_shopify_utm\");if(shopifyUtm){try{const parsedParams=JSON.parse(shopifyUtm);window.utmParams=parsedParams;return parsedParams;}catch(e){console.error(\"Error parsing Shopify UTM params:\",e);}}// Fallback to individual cookies\nconst utmParams={};const utmKeys=[\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_term\",\"utm_content\"];utmKeys.forEach(key=>{const value=getCookie(key);if(value){utmParams[key]=value;}});if(Object.keys(utmParams).length>0){// Also set on window for easy access\nwindow.utmParams=utmParams;return utmParams;}}catch(error){console.error(\"Error retrieving stored UTM parameters:\",error);}return{};}export function getStoredSCARefParameters(){// First try to get from window object (for current session)\nif(window.scaRefParams&&Object.keys(window.scaRefParams).length>0){return window.scaRefParams;}// Then try to get from cookies\ntry{// First try to get from Shopify's format\nconst shopifyScaRef=getCookie(\"_shopify_sca_ref\");if(shopifyScaRef){try{const parsedParams=JSON.parse(shopifyScaRef);window.scaRefParams=parsedParams;return parsedParams;}catch(e){console.error(\"Error parsing Shopify SCA ref params:\",e);}}// Fallback to individual cookies\nconst scaRefParams={};const scaRefKeys=[\"sca_ref\",\"sca_source\",\"sca_medium\",\"sca_campaign\",\"sca_term\",\"sca_content\"];scaRefKeys.forEach(key=>{const value=getCookie(key);if(value){scaRefParams[key]=value;}});if(Object.keys(scaRefParams).length>0){// Also set on window for easy access\nwindow.scaRefParams=scaRefParams;return scaRefParams;}}catch(error){console.error(\"Error retrieving stored SCA ref parameters:\",error);}return{};}export function appendUTMParamsToUrl(checkoutUrl){if(!checkoutUrl)return checkoutUrl;// Get UTM params from cookies instead of current URL\nconst utmParams=getStoredUTMParameters();// If no stored UTM params, check current URL as fallback\nif(Object.keys(utmParams).length===0){getUTMParameters()// This will store them if present\n;}// Get the (potentially) updated UTM params\nconst finalUtmParams=getStoredUTMParameters();if(Object.keys(finalUtmParams).length>0){try{const url=new URL(checkoutUrl);// Add UTM parameters to the URL\nObject.keys(finalUtmParams).forEach(key=>{// Only append if the parameter doesn't already exist in the URL\nif(!url.searchParams.has(key)){url.searchParams.append(key,finalUtmParams[key]);}});const finalUrl=url.toString();return finalUrl;}catch(error){console.error(\"Error appending UTM params to URL:\",error);return checkoutUrl;}}return checkoutUrl;}export function appendSCARefParamsToUrl(checkoutUrl){if(!checkoutUrl)return checkoutUrl;// Get SCA ref params from cookies instead of current URL\nconst scaRefParams=getStoredSCARefParameters();// If no stored SCA ref params, check current URL as fallback\nif(Object.keys(scaRefParams).length===0){getSCARefParameters()// This will store them if present\n;}// Get the (potentially) updated SCA ref params\nconst finalScaRefParams=getStoredSCARefParameters();if(Object.keys(finalScaRefParams).length>0){try{const url=new URL(checkoutUrl);// Add SCA ref parameters to the URL\nObject.keys(finalScaRefParams).forEach(key=>{// Only append if the parameter doesn't already exist in the URL\nif(!url.searchParams.has(key)){url.searchParams.append(key,finalScaRefParams[key]);}});const finalUrl=url.toString();return finalUrl;}catch(error){console.error(\"Error appending SCA ref params to URL:\",error);return checkoutUrl;}}return checkoutUrl;}/**\n * Validate discount code format\n * Allows alphanumeric characters, hyphens, and underscores\n * Maximum length: 50 characters\n */function validateDiscountCode(code){if(!code||typeof code!==\"string\")return false;// Check length (max 50 characters)\nif(code.length>50)return false;// Check character set: alphanumeric, hyphens, underscores\nconst validPattern=/^[a-zA-Z0-9_-]+$/;return validPattern.test(code);}/**\n * Get discount code from URL and store in session storage\n */export function getDiscountCode(){if(typeof window===\"undefined\"||typeof sessionStorage===\"undefined\"){return null;}try{const urlParams=new URLSearchParams(window.location.search);const discountCode=urlParams.get(\"discount\");if(discountCode){// Validate the discount code\nif(validateDiscountCode(discountCode)){// Store in session storage\nsessionStorage.setItem(\"fc_discount_code\",discountCode);return discountCode;}else{console.warn(\"Invalid discount code format. Only alphanumeric characters, hyphens, and underscores are allowed. Max length: 50 characters.\");return null;}}return null;}catch(error){console.error(\"Error parsing discount code from URL:\",error);return null;}}/**\n * Get stored discount code from session storage\n */export function getStoredDiscountCode(){if(typeof window===\"undefined\"||typeof sessionStorage===\"undefined\"){return null;}try{const storedCode=sessionStorage.getItem(\"fc_discount_code\");// Validate stored code before returning\nif(storedCode&&validateDiscountCode(storedCode)){return storedCode;}// If invalid, remove it\nif(storedCode){sessionStorage.removeItem(\"fc_discount_code\");}return null;}catch(error){console.error(\"Error retrieving stored discount code:\",error);return null;}}/**\n * Append discount code to checkout URL\n */export function appendDiscountCodeToUrl(checkoutUrl){if(!checkoutUrl)return checkoutUrl;const discountCode=getStoredDiscountCode();if(discountCode){try{const url=new URL(checkoutUrl);// Only append if the discount parameter doesn't already exist in the URL\nif(!url.searchParams.has(\"discount\")){url.searchParams.append(\"discount\",discountCode);}const finalUrl=url.toString();return finalUrl;}catch(error){console.error(\"Error appending discount code to URL:\",error);return checkoutUrl;}}return checkoutUrl;}export function appendAllTrackingParamsToUrl(checkoutUrl){if(!checkoutUrl)return checkoutUrl;let finalUrl=checkoutUrl;// Append UTM parameters\nfinalUrl=appendUTMParamsToUrl(finalUrl);// Append SCA ref parameters\nfinalUrl=appendSCARefParamsToUrl(finalUrl);// Append discount code\nfinalUrl=appendDiscountCodeToUrl(finalUrl);return finalUrl;}// Initialize UTM and SCA ref parameters tracking when this module loads\nif(typeof window!==\"undefined\"){// Add a listener for when the DOM is fully loaded\nif(document.readyState===\"complete\"){getUTMParameters()// Document already loaded, capture UTMs now\n;getSCARefParameters()// Document already loaded, capture SCA refs now\n;getDiscountCode()// Document already loaded, capture discount code now\n;}else{window.addEventListener(\"load\",()=>{getUTMParameters();getSCARefParameters();getDiscountCode();});}}\nexport const __FramerMetadata__ = {\"exports\":{\"getSCARefParameters\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getDiscountCode\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"appendDiscountCodeToUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getStoredUTMParameters\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"appendSCARefParamsToUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getUTMParameters\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getStoredSCARefParameters\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"appendUTMParamsToUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"appendAllTrackingParamsToUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getStoredDiscountCode\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./utmParams.map","// Generated by Framer (c07a8c1)\nimport{fontStore}from\"framer\";fontStore.loadFonts([\"GF;Figtree-regular\",\"GF;Figtree-700\",\"GF;Figtree-700italic\",\"GF;Figtree-italic\"]);export const fonts=[{explicitInter:true,fonts:[{family:\"Figtree\",source:\"google\",style:\"normal\",url:\"https://fonts.gstatic.com/s/figtree/v7/_Xmz-HUzqDCFdgfMsYiV_F7wfS-Bs_d_QF5bwkEU4HTy.woff2\",weight:\"400\"},{family:\"Figtree\",source:\"google\",style:\"normal\",url:\"https://fonts.gstatic.com/s/figtree/v7/_Xmz-HUzqDCFdgfMsYiV_F7wfS-Bs_eYR15bwkEU4HTy.woff2\",weight:\"700\"},{family:\"Figtree\",source:\"google\",style:\"italic\",url:\"https://fonts.gstatic.com/s/figtree/v7/_Xm9-HUzqDCFdgfMm4GnA4aZFrUvtOK3A1EayEA25WTybO8.woff2\",weight:\"700\"},{family:\"Figtree\",source:\"google\",style:\"italic\",url:\"https://fonts.gstatic.com/s/figtree/v7/_Xm9-HUzqDCFdgfMm4GnA4aZFrUvtOK3A7YdyEA25WTybO8.woff2\",weight:\"400\"}]}];export const css=['.framer-HdVzQ .framer-styles-preset-swuwne:not(.rich-text-wrapper), .framer-HdVzQ .framer-styles-preset-swuwne.rich-text-wrapper p { --framer-font-family: \"Figtree\", \"Figtree Placeholder\", sans-serif; --framer-font-family-bold: \"Figtree\", \"Figtree Placeholder\", sans-serif; --framer-font-family-bold-italic: \"Figtree\", \"Figtree Placeholder\", sans-serif; --framer-font-family-italic: \"Figtree\", \"Figtree Placeholder\", sans-serif; --framer-font-open-type-features: normal; --framer-font-size: 16px; --framer-font-style: normal; --framer-font-style-bold: normal; --framer-font-style-bold-italic: italic; --framer-font-style-italic: italic; --framer-font-variation-axes: normal; --framer-font-weight: 400; --framer-font-weight-bold: 700; --framer-font-weight-bold-italic: 700; --framer-font-weight-italic: 400; --framer-letter-spacing: 0px; --framer-line-height: 120%; --framer-paragraph-spacing: 0px; --framer-text-alignment: left; --framer-text-color: var(--token-c5c4fdcb-9482-48bb-aedf-353188472aae, #dac5a7); --framer-text-decoration: none; --framer-text-stroke-color: initial; --framer-text-stroke-width: initial; --framer-text-transform: none; }'];export const className=\"framer-HdVzQ\";\nexport const __FramerMetadata__ = {\"exports\":{\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","/*\n * Framer Commerce\n * Confidential and Proprietary - All Rights Reserved\n * Unauthorized use, reproduction, distribution, or disclosure of this\n * source code or any related information is strictly prohibited.\n *\n * This software is the exclusive property of Framer Commerce (\"Company\").\n * It is considered highly confidential and proprietary information.\n *\n * Any use, copying, modification, distribution, or sharing of this software,\n * in whole or in part, without the express written permission of the Company\n * is strictly prohibited and may result in legal action.\n *\n * DISCLAIMER: This software does not provide any express or\n * implied warranties, including, but not limited to, the implied warranties\n * of merchantability and fitness for a particular purpose. In no event shall\n * Framer Commerce be liable for any direct, indirect, incidental, special,\n * exemplary, or consequential damages (including, but not limited to, procurement\n * of substitute goods or services; loss of use, data, or profits; or business\n * interruption) however caused and on any theory of liability, whether in\n * contract, strict liability, or tort (including negligence or otherwise)\n * arising in any way out of the use of this software, even if advised of\n * the possibility of such damage.\n *\n * Any unauthorized possession, use, copying, distribution, or dissemination\n * of this software will be considered a breach of confidentiality and may\n * result in legal action.\n *\n * For inquiries, contact:\n * Framer Commerce\n * Email: hello@framercommerce.com\n *\n * © 2025 Butter Supply Inc. All Rights Reserved.\n */import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useMemo,useState}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{get}from\"lodash-es\";import{useIsBrowser}from\"https://framerusercontent.com/modules/ncBs5KPMI9I5GEta13fn/zGXDjuZapa1SGy6D8P5e/IsBrowser.js\";import{currencyMaps}from\"https://framerusercontent.com/modules/k9s4cejdkBGDjmzudhzM/18cq93eooqM4YmdbL7E2/currencyMaps.js\";import{knownCurrenciesWithCodeAsSymbol}from\"https://framerusercontent.com/modules/k9s4cejdkBGDjmzudhzM/18cq93eooqM4YmdbL7E2/currencyMaps.js\";import{getLocaleFromCountry}from\"https://framerusercontent.com/modules/vC6fzbfO83MgBPIhn5zl/DUlbmWuOELzEUenVmv3G/locales.js\";// Helper function to check if a currency's symbol is the same as its code\nconst isCurrencySymbolSameAsCode=currencyCode=>{// For some currencies like CHF, the browser might use the code as the symbol\nif(!currencyCode)return false;if(knownCurrenciesWithCodeAsSymbol.includes(currencyCode)){return true;}try{const formatted=new Intl.NumberFormat(undefined,{style:\"currency\",currency:currencyCode,currencyDisplay:\"narrowSymbol\"}).format(0);// Remove digits, decimal points, and common formatting characters\nconst cleanFormatted=formatted.replace(/[0-9.,\\s]/g,\"\");// Check if what remains is the currency code\nreturn cleanFormatted===currencyCode;}catch(e){return false;}};/**\n * @framerDisableUnlink\n */export default function FC_ProductPriceDiscount(props){const{shopifyProductID,discountType,format:{showCurrency,showSymbol,showDecimals,currencyCode}={},textFormat,previewPrice,previewComparePrice,discountPrefix=\"Up to\"}=props;const[product,setProduct]=useState();const[activeVariant,setActiveVariant]=useState();const[selectedCurrency,setSelectedCurrency]=useState(()=>{// Initialize with the currency code from the product or default to \"USD\"\nreturn get(product,\"priceRange.minVariantPrice.currencyCode\")||\"USD\";});const[selectedCountryCode,setSelectedCountryCode]=useState(\"\");const[selectedCountry,setSelectedCountry]=useState(\"\");const[partialSelections,setPartialSelections]=useState({});const[variantSelectorAction,setVariantSelectorAction]=useState(\"\");const isBrowser=useIsBrowser();const showMockValues=useMemo(()=>typeof RenderTarget!==\"undefined\"&&(RenderTarget.current()===RenderTarget.canvas||isBrowser&&window.location.origin.endsWith(\"framercanvas.com\")),[isBrowser]);useEffect(()=>{if(product){setSelectedCurrency(get(product,\"priceRange.minVariantPrice.currencyCode\")||\"USD\");}},[product]);// Initialize currency from localStorage on page load\nuseEffect(()=>{if(!isBrowser)return;const storedCurrency=localStorage.getItem(\"selectedCurrency\");const storedCountryCode=localStorage.getItem(\"selectedCountryCode\");const storedCountry=localStorage.getItem(\"selectedCountry\");setSelectedCurrency(storedCurrency||\"USD\");setSelectedCountryCode(storedCountryCode||\"US\");setSelectedCountry(storedCountry||\"United States\");},[isBrowser]);useEffect(()=>{if(!isBrowser)return;const handleVariantChange=e=>{try{if(e.detail){// Check for purchase action flag - if this is a purchase action, don't update variant state\nif(e.detail.isPurchaseAction||e.detail.onClickAction===\"purchase\"){//console.log(\"Purchase action detected, returning\", e.detail?.isPurchaseAction)\nreturn;}const expectedProductId=`gid://shopify/Product/${shopifyProductID}`;if(!e.detail.productId||e.detail.productId!==expectedProductId){return;}}//console.log(\"variantSelectorAction\", e.detail.onClickAction)\nsetVariantSelectorAction(e.detail.onClickAction);// Get products from shopXtools storage\nconst products=window.shopXtools?.products||[];const _matchingProduct=products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);if(_matchingProduct){setProduct(_matchingProduct.node);// Find the matching variant in the current product data\nconst matchingVariant=_matchingProduct.node?.variants?.edges?.find(({node})=>node.selectedOptions.every(option=>e.detail.selectedOptions.find(detailOption=>detailOption.name===option.name&&detailOption.value===option.value)));if(matchingVariant){if(e.detail.onClickAction===\"purchase\"){setActiveVariant(null);//console.log(\"setting partialSelections for purchase action\", e.detail.selectedOptions[0])\nsetPartialSelections({[e.detail.selectedOptions[0].name]:e.detail.selectedOptions[0].value});}else if(e.detail?.isCompleteVariant===false){// Partial: keep range behavior\nsetActiveVariant(null);if(Array.isArray(e.detail.selectedOptions)){const partial={};e.detail.selectedOptions.forEach(opt=>{if(opt?.name)partial[opt.name]=opt.value;});setPartialSelections(partial);}}else{setActiveVariant(matchingVariant.node);setPartialSelections({});}}else{if(e.detail?.isCompleteVariant){setActiveVariant(e.detail);if(e.detail.onClickAction!==\"purchase\"){setPartialSelections({});}}}}}catch(error){// Fallback to using the event detail directly\nif(e.detail?.isCompleteVariant){setActiveVariant(e.detail);if(e.detail.onClickAction!==\"purchase\"){setPartialSelections({});}}else{setActiveVariant(null);if(Array.isArray(e.detail?.selectedOptions)){const partial={};e.detail.selectedOptions.forEach(opt=>{if(opt?.name)partial[opt.name]=opt.value;});setPartialSelections(partial);}}}};const handleProductsReady=e=>{if(Array.isArray(e.detail.products)){const _matchingProduct=e.detail.products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);setProduct(_matchingProduct?_matchingProduct.node:null);// If there's only one variant, set it as active\nif(_matchingProduct?.node?.variants?.edges?.length===1){const variant=_matchingProduct.node.variants.edges[0].node;setActiveVariant(variant);}// setActiveVariant(\n//     _matchingProduct.node?.variants?.edges[0].node\n// )\n}};// Add event listener for variant option selections\nconst handleVariantOptionSelected=e=>{//console.log(\"variant_option_selected\", e.detail)\nif(e.detail?.isPurchaseAction){//console.log(\"Purchase action is true, returning\", e.detail?.isPurchaseAction)\nreturn;}// Check if this event is for our product\nconst eventProductId=e.detail?.productId;const expectedProductId=`gid://shopify/Product/${shopifyProductID}`;if(eventProductId&&eventProductId!==expectedProductId){//console.log(\"Event not for this product\", eventProductId, expectedProductId)\nreturn;}if(e.detail?.optionName&&e.detail?.value){// Merge with existing partial selections instead of replacing\nsetPartialSelections(prev=>({...prev,[e.detail.optionName]:e.detail.value}));//console.log(\"setting partialSelections from individual option\", e.detail.optionName, e.detail.value)\n}};// Initial product load function\nconst loadProduct=async()=>{try{// Get products from shopXtools storage\nconst products=window.shopXtools?.products||[];const _matchingProduct=products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);if(_matchingProduct){setProduct(_matchingProduct.node);if(_matchingProduct.node?.variants?.edges?.length===1){setActiveVariant(_matchingProduct.node.variants.edges[0].node);}// setActiveVariant(\n//     _matchingProduct.node?.variants?.edges[0].node\n// )\n}}catch(error){// Error handling\n}};// Call loadProduct on mount\nloadProduct();// Initial check for existing products\nif(window[\"shopXtools\"]?.products){if(Array.isArray(window[\"shopXtools\"].products)){const _matchingProduct=window[\"shopXtools\"].products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);setProduct(_matchingProduct?_matchingProduct.node:null);// If there's only one variant, set it as active\nif(_matchingProduct?.node?.variants?.edges?.length===1){setActiveVariant(_matchingProduct.node.variants.edges[0].node);}// setActiveVariant(\n//     _matchingProduct?.node?.variants?.edges[0]?.node\n// )\n}}// Add event listeners\ndocument.addEventListener(\"data__products-ready\",handleProductsReady);document.addEventListener(\"product__active-variant__changed\",handleVariantChange);document.addEventListener(\"variant_option_selected\",handleVariantOptionSelected);document.addEventListener(\"__variant_option_selected\",handleVariantOptionSelected);// Cleanup\nreturn()=>{document.removeEventListener(\"data__products-ready\",handleProductsReady);document.removeEventListener(\"product__active-variant__changed\",handleVariantChange);document.removeEventListener(\"variant_option_selected\",handleVariantOptionSelected);document.removeEventListener(\"__variant_option_selected\",handleVariantOptionSelected);};},[isBrowser,shopifyProductID,selectedCurrency]);useEffect(()=>{if(!isBrowser)return;const handleCurrencyChange=event=>{const{currency,countryCode,country}=event.detail;setSelectedCurrency(currency);setSelectedCountryCode(countryCode);setSelectedCountry(country);try{// Get products from shopXtools storage\nconst products=window.shopXtools?.products||[];const _matchingProduct=products.find(({node:_product})=>_product.id===`gid://shopify/Product/${shopifyProductID}`);if(_matchingProduct){setProduct(_matchingProduct.node);// Preserve active variant selection if possible\nif(activeVariant){const matchingVariant=_matchingProduct.node?.variants?.edges?.find(({node})=>node.selectedOptions.every(option=>activeVariant.selectedOptions.find(activeOption=>activeOption.name===option.name&&activeOption.value===option.value)));if(matchingVariant){setActiveVariant(matchingVariant.node);}}}}catch(error){// Error handling\n}};window.addEventListener(\"currency_changed\",handleCurrencyChange);return()=>{window.removeEventListener(\"currency_changed\",handleCurrencyChange);};},[isBrowser,shopifyProductID,activeVariant,product]);const currencyConfig=useMemo(()=>{const config=typeof window!==\"undefined\"?{position:window?.__FcCurrencyConfigs?.currencyPosition||\"Before\",showCode:window?.__FcCurrencyConfigs?.currencyPosition!==\"Hide\",symbol:currencyMaps[selectedCurrency]||\"$\"}:{position:\"Before\",showCode:false,symbol:\"$\"};return config;},[selectedCurrency]);// Common function to format price based on options\nconst formatPriceWithOptions=(numericPrice,currCode)=>{const symbolSameAsCode=isCurrencySymbolSameAsCode(currCode);// Get locale from selected country code\nconst locale=getLocaleFromCountry(selectedCountryCode);// Log browser user agent for debugging iOS-specific issues\n// if (isBrowser) {\n//     console.log(\"[FC_ProductPriceDiscount] Format debug:\", {\n//         userAgent: navigator.userAgent,\n//         isCurrencySymbolSameAsCode: symbolSameAsCode,\n//         currencyCode: currCode,\n//         selectedCountryCode,\n//         locale,\n//         showSymbol,\n//         showCurrency,\n//         showDecimals,\n//     })\n// }\n// Determine if we should show decimals based on the setting\nconst shouldShowDecimals=()=>{if(showDecimals===\"Always show\")return true;if(showDecimals===\"Never show\")return false;if(showDecimals===\"Hide when .00\"){// Check if the decimal part is zero\nreturn numericPrice%1!==0;}return true// Default fallback for boolean value\n;};const decimalDigits=shouldShowDecimals()?2:0;// If showing neither symbol nor code, just format the number\nif(!showSymbol&&!showCurrency){return new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);}// Special case for USD to prevent \"US$\" display in Safari iOS\nif(currCode===\"USD\"&&showSymbol){// Check if running on iOS device\nconst isIOS=isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;// Format USD manually to avoid the iOS \"US$\" prefix\nif(isIOS){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);if(!showCurrency){return`$${number}`// Just \"$50\" format\n;}else{return`$${number} USD`// \"$50 USD\" format\n;}}else{// For non-iOS devices, continue with normal formatting but use\n// a more controlled approach to ensure consistency\nif(!showCurrency){return new Intl.NumberFormat(locale,{style:\"currency\",currency:\"USD\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits,currencyDisplay:\"narrowSymbol\"}).format(numericPrice);}else{const withSymbol=new Intl.NumberFormat(locale,{style:\"currency\",currency:\"USD\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits,currencyDisplay:\"narrowSymbol\"}).format(numericPrice);return`${withSymbol} USD`;}}}// For currencies where symbol is same as code (like CHF)\nif(symbolSameAsCode){// If showing currency code, always use code-first format and ignore symbol\nif(showCurrency&&!showSymbol){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);const output=`${currCode} ${number}`;return output;}if(showSymbol&&!showCurrency){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);const output=`${currCode} ${number}`;return output;}if(showCurrency&&showSymbol){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);return`${currCode} ${number}`;}}// For currencies with distinct symbols (like USD with $)\n// If showing only the code (no symbol)\nif(!showSymbol&&showCurrency){const number=new Intl.NumberFormat(locale,{style:\"decimal\",minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits}).format(numericPrice);// For normal currencies, show code after the number\nreturn`${number} ${currCode}`;}// If showing only the symbol (no code)\nif(showSymbol&&!showCurrency){return new Intl.NumberFormat(locale,{style:\"currency\",currency:currCode,minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits,currencyDisplay:\"narrowSymbol\"}).format(numericPrice);}// If showing both symbol and code\nconst withSymbol=new Intl.NumberFormat(locale,{style:\"currency\",currency:currCode,minimumFractionDigits:decimalDigits,maximumFractionDigits:decimalDigits,currencyDisplay:\"narrowSymbol\"}).format(numericPrice);return`${withSymbol} ${currCode}`;};// Helper function to format discount text using textFormat\nconst formatDiscountText=discountValue=>{if(!textFormat)return discountValue;// Replace {{discount}} placeholder with the actual discount value\nreturn textFormat.replace(/\\{\\{discount\\}\\}/g,discountValue);};const text=useMemo(()=>{if(!isBrowser)return\"\";// Helper: compute min/max for price and compareAt from product variants\nconst computeRange=(p,path)=>{if(!p)return{min:null,max:null};const minStr=get(p,`${path}.minVariantPrice.amount`);const maxStr=get(p,`${path}.maxVariantPrice.amount`);let minVal=minStr?parseFloat(minStr):null;let maxVal=maxStr?parseFloat(maxStr):null;if(minVal===null||isNaN(minVal)||maxVal===null||isNaN(maxVal)){const edges=p?.variants?.edges||[];for(let i=0;i<edges.length;i++){const v=edges[i]?.node;if(!v)continue;const amtStr=get(v,path.includes(\"compareAt\")?\"compareAtPrice.amount\":\"price.amount\");const amt=amtStr?parseFloat(amtStr):NaN;if(!isNaN(amt)&&amt>0){if(minVal===null||amt<minVal)minVal=amt;if(maxVal===null||amt>maxVal)maxVal=amt;}}}return{min:typeof minVal===\"number\"&&!isNaN(minVal)?minVal:null,max:typeof maxVal===\"number\"&&!isNaN(maxVal)?maxVal:null};};// console.log('[Discount] Debug:', {\n//     activeVariant,\n//     partialSelections,\n//     variantSelectorAction,\n//     product,\n//     discountType\n// })\n// For canvas view, handle the display options directly\nif(typeof RenderTarget!==\"undefined\"&&(RenderTarget.current()===RenderTarget.canvas||showMockValues)){// Parse previewPrice as range format (e.g., \"200.00-250.00\")\nlet minPrice;let maxPrice;if(previewPrice){const priceRange=previewPrice.split(\"-\");if(priceRange.length===2){minPrice=priceRange[0].trim();maxPrice=priceRange[1].trim();}else{// If no range format, use the single price for both min and max\nminPrice=previewPrice;maxPrice=previewPrice;}}// Parse previewComparePrice as range format (e.g., \"200.00-300.00\")\nlet minComparePrice;let maxComparePrice;if(previewComparePrice){const comparePriceRange=previewComparePrice.split(\"-\");if(comparePriceRange.length===2){minComparePrice=comparePriceRange[0].trim();maxComparePrice=comparePriceRange[1].trim();}else{// If no range format, use the single price for both min and max\nminComparePrice=previewComparePrice;maxComparePrice=previewComparePrice;}}const numericMinPrice=parseFloat(minPrice);const numericMaxComparePrice=parseFloat(maxComparePrice);if(!numericMinPrice||!numericMaxComparePrice||numericMinPrice>=numericMaxComparePrice){return\"\";}// Calculate maximum discount: max compare price - min price\nconst maxDiscountAmount=numericMaxComparePrice-numericMinPrice;if(maxDiscountAmount<=0){return\"\";}if(discountType===\"Percentage\"){const discount=maxDiscountAmount/numericMaxComparePrice*100;const discountText=`${discountPrefix} ${Math.round(discount)}%`;return formatDiscountText(discountText);}else{const currentCurrencyCode=currencyCode||\"USD\";const formattedAmount=formatPriceWithOptions(maxDiscountAmount,currentCurrencyCode);const discountText=`${discountPrefix} ${formattedAmount}`;return formatDiscountText(discountText);}}// For live view, get the discount from active variant\nconst activeVariantPrice=activeVariant&&get(activeVariant,\"price.amount\");const activeVariantComparePrice=activeVariant&&get(activeVariant,\"compareAtPrice.amount\");// Only return early if we have no data at all\nif(!activeVariantPrice&&!activeVariantComparePrice&&!activeVariant&&!product?.variants?.edges?.length)return\"\";const currentCurrencyCode=selectedCurrency||currencyCode||\"USD\";// If we have an active variant with both prices, calculate discount\nif(activeVariantPrice&&activeVariantComparePrice){const price=parseFloat(activeVariantPrice);const comparePrice=parseFloat(activeVariantComparePrice);if(price>0&&comparePrice>0&&comparePrice>price){if(discountType===\"Percentage\"){const discount=(comparePrice-price)/comparePrice*100;const discountText=`${Math.round(discount)}%`;return formatDiscountText(discountText);}else{const amount=comparePrice-price;const discountText=formatPriceWithOptions(amount,currentCurrencyCode);return formatDiscountText(discountText);}}return\"\";}// Handle partial selections (when user selects only some variant options)\nconst hasPartialSelections=Object.keys(partialSelections).length>0;const hasCompleteVariant=activeVariant&&activeVariant.selectedOptions?.length>0;const hasVariantEdges=Array.isArray(product?.variants?.edges)&&product.variants.edges.length>0;if(hasPartialSelections&&!hasCompleteVariant&&hasVariantEdges){// console.log(\"Handle hasPartialSelections\")\n// Filter variants that match the partial selections\nconst matchingVariants=(product?.variants?.edges||[]).filter(({node:variant})=>{return variant.selectedOptions.every(option=>{// If this option is in our partial selections, it must match\nif(partialSelections[option.name]){return partialSelections[option.name]===option.value;}// If not in partial selections, any value is fine\nreturn true;});});// console.log(\"matchingVariants\", matchingVariants)\n// if (matchingVariants.length > 0) {\n//     // Get all prices and compare prices for matching variants\n//     const variantData = matchingVariants\n//         .map(({ node: variant }) => ({\n//             price: parseFloat(get(variant, 'price.amount') || \"0\"),\n//             compareAtPrice: parseFloat(get(variant, 'compareAtPrice.amount') || \"0\")\n//         }))\n//         .filter(data => data.price > 0 && data.compareAtPrice > 0 && data.compareAtPrice > data.price)\n//     //console.log(\"variantData\", variantData)\n//     const prices = matchingVariants\n//         .map(({ node: variant }) => parseFloat(variant.price?.amount || \"0\"))\n//         .filter(price => price > 0)\n//     if (variantData.length > 0 && prices.length > 0) {\n//         const minPrice = Math.min(...prices)\n//         const maxPrice = Math.max(...prices)\n//         const discounts = variantData.map(data => {\n//             if (discountType === \"Percentage\") {\n//                 return ((data.compareAtPrice - data.price) / data.compareAtPrice) * 100\n//             } else {\n//                 return data.compareAtPrice - data.price\n//             }\n//         })\n//         //console.log(\"discounts\", discounts)\n//         const maxDiscount = Math.max(...discounts)\n//         if (discountType === \"Percentage\") {\n//             if (Math.abs(minPrice - maxPrice) < 0.01) {\n//                 const discountText = `${Math.round(maxDiscount)}%`\n//                 return formatDiscountText(discountText)\n//             }\n//             const discountText = `${discountPrefix} ${Math.round(maxDiscount)}%`\n//             return formatDiscountText(discountText)\n//         } else {\n//             if (Math.abs(minPrice - maxPrice) < 0.01) {\n//                 const formattedAmount = formatPriceWithOptions(maxDiscount, currentCurrencyCode)\n//                 return formatDiscountText(`${formattedAmount}`)\n//             }\n//             const formattedAmount = formatPriceWithOptions(maxDiscount, currentCurrencyCode)\n//             const discountText = `${discountPrefix} ${formattedAmount}`\n//             return formatDiscountText(discountText)\n//         }\n//     }\n// }\nif(matchingVariants.length>0){const variantData=matchingVariants.map(({node:variant})=>{const price=parseFloat(get(variant,\"price.amount\")||\"0\");const compareAtPrice=parseFloat(get(variant,\"compareAtPrice.amount\")||\"0\");const isDiscounted=compareAtPrice>price&&compareAtPrice>0;return{price,compareAtPrice,discount:isDiscounted?discountType===\"Percentage\"?(compareAtPrice-price)/compareAtPrice*100:compareAtPrice-price:0,isDiscounted};}).filter(data=>data.price>0);const prices=variantData.map(v=>v.price);const discounts=variantData.map(v=>v.discount);const hasAnyDiscount=discounts.some(d=>d>0);if(!hasAnyDiscount)return\"\";const maxDiscount=Math.max(...discounts);const minDiscount=Math.min(...discounts);const currentCurrencyCode=selectedCurrency||currencyCode||\"USD\";// ✅ ✅ ✅ CHECK IF DISCOUNTS VARY (even if prices are the same)\nconst showUpToPrefix=minDiscount!==maxDiscount;if(discountType===\"Percentage\"){const rounded=Math.round(maxDiscount);const discountText=showUpToPrefix?`${discountPrefix} ${rounded}%`:`${rounded}%`;return formatDiscountText(discountText);}else{const formattedAmount=formatPriceWithOptions(maxDiscount,currentCurrencyCode);const discountText=showUpToPrefix?`${discountPrefix} ${formattedAmount}`:`${formattedAmount}`;return formatDiscountText(discountText);}}}// Handle product-level discount (no active variant, no partial selections) with fallbacks\n// Prefer product ranges; fall back to computed ranges when missing\nif(!activeVariant&&!hasPartialSelections&&hasVariantEdges){const currentCurrencyCode=selectedCurrency||currencyCode||\"USD\";const{min:priceMin,max:priceMax}=computeRange(product,\"priceRange\");const{min:compMin,max:compMax}=computeRange(product,\"compareAtPriceRange\");if(priceMin&&priceMax&&compMin&&compMax){// Use maximum possible discount across ranges\nconst maxDiscountAmount=Math.max(compMax-priceMin,compMin-priceMax);if(maxDiscountAmount>0){if(discountType===\"Percentage\"){const denom=Math.max(compMax,compMin);const pct=denom>0?Math.round(maxDiscountAmount/denom*100):0;const discountText=pct>0?priceMin===priceMax&&compMin===compMax?`${pct}%`:`${discountPrefix} ${pct}%`:\"\";return formatDiscountText(discountText);}else{const formatted=formatPriceWithOptions(maxDiscountAmount,currentCurrencyCode);const discountText=priceMin===priceMax&&compMin===compMax?`${formatted}`:`${discountPrefix} ${formatted}`;return formatDiscountText(discountText);}}}const variantData=(product?.variants?.edges||[]).map(({node:variant})=>{const price=parseFloat(get(variant,\"price.amount\")||\"0\");const compareAtPrice=parseFloat(get(variant,\"compareAtPrice.amount\")||\"0\");const isDiscounted=compareAtPrice>price&&compareAtPrice>0;return{price,compareAtPrice,discount:isDiscounted?discountType===\"Percentage\"?(compareAtPrice-price)/compareAtPrice*100:compareAtPrice-price:0,isDiscounted};}).filter(data=>data.price>0);if(!variantData.length)return\"\";const prices=variantData.map(v=>v.price);const discounts=variantData.map(v=>v.discount);const hasAnyDiscount=discounts.some(d=>d>0);if(!hasAnyDiscount)return\"\";const maxDiscount=Math.max(...discounts);const minDiscount=Math.min(...discounts);const showUpToPrefix=minDiscount!==maxDiscount;if(discountType===\"Percentage\"){const rounded=Math.round(maxDiscount);const discountText=showUpToPrefix?`${discountPrefix} ${rounded}%`:`${rounded}%`;return formatDiscountText(discountText);}else{const formatted=formatPriceWithOptions(maxDiscount,currentCurrencyCode);const discountText=showUpToPrefix?`${discountPrefix} ${formatted}`:`${formatted}`;return formatDiscountText(discountText);}}return\"\";},[isBrowser,showMockValues,activeVariant,product,partialSelections,variantSelectorAction,discountType,previewPrice,previewComparePrice,selectedCurrency,selectedCountryCode,currencyCode,showCurrency,showSymbol,showDecimals,discountPrefix,textFormat]);// Return empty div during SSR\nif(!isBrowser){return /*#__PURE__*/_jsx(\"div\",{style:{display:\"none\"}});}// Hide component if there's no discount text\nif(!text)return null;return /*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",width:\"100%\",height:\"100%\",backgroundColor:props.backgroundColor,padding:props.paddingPerSide?`${props.paddingTop}px ${props.paddingRight}px ${props.paddingBottom}px ${props.paddingLeft}px`:props.padding,borderRadius:props.radiusPerCorner?`${props.radiusTopLeft}px ${props.radiusTopRight}px ${props.radiusBottomRight}px ${props.radiusBottomLeft}px`:props.borderRadius,boxSizing:\"border-box\",alignItems:\"center\",justifyContent:\"center\"},children:/*#__PURE__*/_jsx(\"p\",{style:{...props.font,color:props.textColor,margin:0,padding:0,whiteSpace:\"nowrap\"},children:text})});}FC_ProductPriceDiscount.defaultProps={shopifyProductID:\"\",backgroundColor:\"transparent\",padding:8,borderRadius:0,font:undefined,textColor:\"#000\",discountPrefix:\"Up to\",textFormat:\"{{discount}} OFF\",discountType:\"Percentage\",previewPrice:\"50\",previewComparePrice:\"75\",format:{showCurrency:true,showSymbol:true,currencyCode:\"USD\",showDecimals:\"Always show\"}};addPropertyControls(FC_ProductPriceDiscount,{shopifyProductID:{type:ControlType.String,title:\"Product ID\",description:\"Connect to CMS (required).\"},previewPrice:{type:ControlType.String,title:\"Price\",defaultValue:\"50\",description:\"Connect to CMS (canvas preview only).\"},previewComparePrice:{type:ControlType.String,title:\"Compare Price\",defaultValue:\"75\",description:\"Connect to CMS (canvas preview only).\"},discountType:{type:ControlType.Enum,title:\"Type\",options:[\"Percentage\",\"Amount\"],optionTitles:[\"%\",\"Amount\"],defaultValue:\"Percentage\",displaySegmentedControl:true},format:{type:ControlType.Object,title:\"Format\",controls:{showSymbol:{type:ControlType.Boolean,title:\"Symbol\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"$, \\xa3, €, etc.\"},showCurrency:{type:ControlType.Boolean,title:\"Code\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"USD, EUR, CHF, etc.\"},showDecimals:{type:ControlType.Enum,title:\"Decimals\",defaultValue:\"Always show\",options:[\"Always show\",\"Never show\",\"Hide when .00\"],optionTitles:[\"Always show\",\"Never show\",\"Hide when .00\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},currencyCode:{type:ControlType.Enum,title:\"Preview\",defaultValue:\"USD\",options:[\"USD\",\"EUR\",\"GBP\",\"CHF\",\"JPY\",\"CAD\",\"AUD\",\"CNY\",\"HKD\",\"NZD\",\"SEK\",\"KRW\",\"SGD\",\"NOK\",\"MXN\",\"INR\",\"RUB\",\"ZAR\",\"TRY\",\"BRL\",\"TWD\",\"DKK\",\"PLN\",\"THB\",\"IDR\",\"HUF\",\"CZK\",\"ILS\",\"CLP\",\"PHP\",\"AED\",\"COP\",\"SAR\",\"MYR\",\"RON\"],description:\"Currency on your site is automatic, this is only shown in canvas preview.\"}},hidden:props=>props.discountType!==\"Amount\"},textFormat:{type:ControlType.String,title:\"Text Format\",defaultValue:\"{{discount}} OFF\",description:\"Use {{discount}} to display the discount value\"},discountPrefix:{type:ControlType.String,title:\"Varying Prefix\",description:\"When a product has multiple discount values and a variant has not been selected.\",defaultValue:\"Up to\"},font:{type:ControlType.Font,title:\"Font\",controls:\"extended\"},textColor:{type:ControlType.Color,title:\"Color\",defaultValue:\"#000\"},backgroundColor:{type:ControlType.Color,title:\"BG\"},padding:{type:ControlType.FusedNumber,title:\"Padding\",defaultValue:8,toggleKey:\"paddingPerSide\",toggleTitles:[\"All\",\"Sides\"],valueKeys:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"],min:0},borderRadius:{type:ControlType.FusedNumber,title:\"Radius\",defaultValue:0,toggleKey:\"radiusPerCorner\",toggleTitles:[\"All\",\"Corners\"],valueKeys:[\"radiusTopLeft\",\"radiusTopRight\",\"radiusBottomRight\",\"radiusBottomLeft\"],valueLabels:[\"TL\",\"TR\",\"BR\",\"BL\"],min:0,max:100,unit:\"px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FC_ProductPriceDiscount\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FC_ProductPriceDiscount.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useRef}from\"react\";/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n *\n * @framerDisableUnlink\n */export default function AvoidLayoutJumping({direction,style}){const isCanvas=RenderTarget.current()===RenderTarget.canvas;const ref=useRef(null);const rafId=useRef();const vertical=direction===\"vertical\"||direction===\"both\";const horizontal=direction===\"horizontal\"||direction===\"both\";useEffect(()=>{if(isCanvas)return;const parent=ref.current?.parentElement?.parentElement;if(!parent)return;const container=parent.parentElement;if(!container)return;const updateSize=()=>{const rect=parent.getBoundingClientRect();if(horizontal){container.style.width=`${rect.width}px`;}if(vertical){container.style.height=`${rect.height}px`;}rafId.current=requestAnimationFrame(updateSize);};// Start the RAF loop\nrafId.current=requestAnimationFrame(updateSize);return()=>{if(rafId.current){cancelAnimationFrame(rafId.current);}if(container){if(horizontal){container.style.width=\"\";}if(vertical){container.style.height=\"\";}}};},[direction]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...style}});}AvoidLayoutJumping.displayName=\"Layout Jump Preventer\";addPropertyControls(AvoidLayoutJumping,{direction:{type:ControlType.Enum,defaultValue:\"vertical\",options:[\"vertical\",\"horizontal\",\"both\"],optionTitles:[\"Vertical\",\"Horizontal\",\"Both\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\",// @ts-ignore\noptionIcons:[\"direction-vertical\",\"direction-horizontal\",\"direction-all\"],description:\"More components at [Framer University](https://frameruni.link/cc).\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"AvoidLayoutJumping\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./AvoidLayoutJumping_Prod.map"],"mappings":"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"}