@shopify/hydrogen-react 2022.10.0 → 2022.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev/AddToCartButton.js +70 -0
- package/dist/dev/AddToCartButton.js.map +1 -0
- package/dist/dev/AddToCartButton.mjs +70 -0
- package/dist/dev/AddToCartButton.mjs.map +1 -0
- package/dist/dev/BaseButton.js +31 -0
- package/dist/dev/BaseButton.js.map +1 -0
- package/dist/dev/BaseButton.mjs +31 -0
- package/dist/dev/BaseButton.mjs.map +1 -0
- package/dist/dev/BuyNowButton.js +45 -0
- package/dist/dev/BuyNowButton.js.map +1 -0
- package/dist/dev/BuyNowButton.mjs +45 -0
- package/dist/dev/BuyNowButton.mjs.map +1 -0
- package/dist/dev/CartCheckoutButton.js +30 -0
- package/dist/dev/CartCheckoutButton.js.map +1 -0
- package/dist/dev/CartCheckoutButton.mjs +30 -0
- package/dist/dev/CartCheckoutButton.mjs.map +1 -0
- package/dist/dev/CartProvider.js +35 -35
- package/dist/dev/CartProvider.js.map +1 -1
- package/dist/dev/{CartProvider.cjs → CartProvider.mjs} +36 -36
- package/dist/dev/{CartProvider.cjs.map → CartProvider.mjs.map} +1 -1
- package/dist/dev/ExternalVideo.js +5 -5
- package/dist/dev/ExternalVideo.js.map +1 -1
- package/dist/dev/{ExternalVideo.cjs → ExternalVideo.mjs} +6 -6
- package/dist/{prod/ExternalVideo.cjs.map → dev/ExternalVideo.mjs.map} +1 -1
- package/dist/dev/Image.js +12 -12
- package/dist/dev/Image.js.map +1 -1
- package/dist/dev/{Image.cjs → Image.mjs} +13 -13
- package/dist/dev/{Image.cjs.map → Image.mjs.map} +1 -1
- package/dist/dev/MediaFile.js +12 -12
- package/dist/dev/MediaFile.js.map +1 -1
- package/dist/dev/{MediaFile.cjs → MediaFile.mjs} +13 -13
- package/dist/dev/MediaFile.mjs.map +1 -0
- package/dist/dev/Metafield.js +38 -32
- package/dist/dev/Metafield.js.map +1 -1
- package/dist/dev/{Metafield.cjs → Metafield.mjs} +39 -33
- package/dist/dev/Metafield.mjs.map +1 -0
- package/dist/dev/ModelViewer.js +11 -11
- package/dist/dev/ModelViewer.js.map +1 -1
- package/dist/dev/{ModelViewer.cjs → ModelViewer.mjs} +12 -12
- package/dist/dev/{ModelViewer.cjs.map → ModelViewer.mjs.map} +1 -1
- package/dist/dev/Money.js +8 -8
- package/dist/dev/Money.js.map +1 -1
- package/dist/{prod/Money.cjs → dev/Money.mjs} +9 -9
- package/dist/dev/{Money.cjs.map → Money.mjs.map} +1 -1
- package/dist/dev/ProductPrice.js +9 -9
- package/dist/dev/ProductPrice.js.map +1 -1
- package/dist/{prod/ProductPrice.cjs → dev/ProductPrice.mjs} +10 -10
- package/dist/dev/ProductPrice.mjs.map +1 -0
- package/dist/dev/ProductProvider.js +25 -25
- package/dist/dev/ProductProvider.js.map +1 -1
- package/dist/{prod/ProductProvider.cjs → dev/ProductProvider.mjs} +26 -26
- package/dist/dev/{ProductProvider.cjs.map → ProductProvider.mjs.map} +1 -1
- package/dist/dev/ShopPayButton.js +13 -13
- package/dist/dev/ShopPayButton.js.map +1 -1
- package/dist/{prod/ShopPayButton.cjs → dev/ShopPayButton.mjs} +14 -14
- package/dist/{prod/ShopPayButton.cjs.map → dev/ShopPayButton.mjs.map} +1 -1
- package/dist/dev/ShopifyProvider.js +14 -14
- package/dist/dev/ShopifyProvider.js.map +1 -1
- package/dist/dev/ShopifyProvider.mjs +46 -0
- package/dist/dev/{ShopifyProvider.cjs.map → ShopifyProvider.mjs.map} +1 -1
- package/dist/dev/Video.js +9 -9
- package/dist/dev/Video.js.map +1 -1
- package/dist/dev/{Video.cjs → Video.mjs} +10 -10
- package/dist/dev/{Video.cjs.map → Video.mjs.map} +1 -1
- package/dist/dev/_virtual/index.js +3 -3
- package/dist/dev/_virtual/index.js.map +1 -1
- package/dist/dev/_virtual/index.mjs +5 -0
- package/dist/dev/_virtual/index.mjs.map +1 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.development.js +3 -3
- package/dist/dev/_virtual/use-sync-external-store-shim.development.js.map +1 -1
- package/dist/dev/_virtual/use-sync-external-store-shim.development.mjs +5 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.development.mjs.map +1 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.js +3 -3
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.js.map +1 -1
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.mjs +5 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.mjs.map +1 -0
- package/dist/dev/_virtual/with-selector.development.js +3 -3
- package/dist/dev/_virtual/with-selector.development.js.map +1 -1
- package/dist/dev/_virtual/with-selector.development.mjs +5 -0
- package/dist/dev/_virtual/with-selector.development.mjs.map +1 -0
- package/dist/dev/_virtual/with-selector.js +3 -3
- package/dist/dev/_virtual/with-selector.js.map +1 -1
- package/dist/dev/_virtual/with-selector.mjs +5 -0
- package/dist/dev/_virtual/with-selector.mjs.map +1 -0
- package/dist/dev/_virtual/with-selector.production.min.js +3 -3
- package/dist/dev/_virtual/with-selector.production.min.js.map +1 -1
- package/dist/dev/_virtual/with-selector.production.min.mjs +5 -0
- package/dist/dev/_virtual/with-selector.production.min.mjs.map +1 -0
- package/dist/dev/cart-constants.js +9 -9
- package/dist/dev/cart-constants.js.map +1 -1
- package/dist/dev/cart-constants.mjs +17 -0
- package/dist/dev/{cart-constants.cjs.map → cart-constants.mjs.map} +1 -1
- package/dist/dev/cart-hooks.js +15 -15
- package/dist/dev/cart-hooks.js.map +1 -1
- package/dist/dev/cart-hooks.mjs +48 -0
- package/dist/dev/{cart-hooks.cjs.map → cart-hooks.mjs.map} +1 -1
- package/dist/dev/cart-queries.js +11 -11
- package/dist/dev/cart-queries.js.map +1 -1
- package/dist/{prod/cart-queries.cjs → dev/cart-queries.mjs} +12 -12
- package/dist/dev/{cart-queries.cjs.map → cart-queries.mjs.map} +1 -1
- package/dist/dev/flatten-connection.js +3 -3
- package/dist/dev/flatten-connection.js.map +1 -1
- package/dist/dev/{flatten-connection.cjs → flatten-connection.mjs} +4 -4
- package/dist/dev/{flatten-connection.cjs.map → flatten-connection.mjs.map} +1 -1
- package/dist/dev/image-size.js +6 -6
- package/dist/dev/image-size.js.map +1 -1
- package/dist/dev/{image-size.cjs → image-size.mjs} +7 -7
- package/dist/{prod/image-size.cjs.map → dev/image-size.mjs.map} +1 -1
- package/dist/dev/index.js +45 -37
- package/dist/dev/index.js.map +1 -1
- package/dist/dev/index.mjs +46 -0
- package/dist/dev/index.mjs.map +1 -0
- package/dist/dev/load-script.js +7 -7
- package/dist/dev/load-script.js.map +1 -1
- package/dist/{prod/load-script.cjs → dev/load-script.mjs} +8 -8
- package/dist/dev/{load-script.cjs.map → load-script.mjs.map} +1 -1
- package/dist/dev/metafield-parser.js +103 -0
- package/dist/dev/metafield-parser.js.map +1 -0
- package/dist/dev/metafield-parser.mjs +103 -0
- package/dist/dev/metafield-parser.mjs.map +1 -0
- package/dist/dev/node_modules/@xstate/fsm/es/index.js +34 -35
- package/dist/dev/node_modules/@xstate/fsm/es/index.js.map +1 -1
- package/dist/{prod/node_modules/@xstate/fsm/es/index.cjs → dev/node_modules/@xstate/fsm/es/index.mjs} +36 -35
- package/dist/dev/node_modules/@xstate/fsm/es/index.mjs.map +1 -0
- package/dist/dev/node_modules/@xstate/react/es/fsm.js +21 -21
- package/dist/dev/node_modules/@xstate/react/es/fsm.js.map +1 -1
- package/dist/{prod/node_modules/@xstate/react/es/fsm.cjs → dev/node_modules/@xstate/react/es/fsm.mjs} +22 -22
- package/dist/dev/node_modules/@xstate/react/es/{fsm.cjs.map → fsm.mjs.map} +1 -1
- package/dist/dev/node_modules/@xstate/react/es/useConstant.js +23 -5
- package/dist/dev/node_modules/@xstate/react/es/useConstant.js.map +1 -1
- package/dist/dev/node_modules/@xstate/react/es/useConstant.mjs +12 -0
- package/dist/dev/node_modules/@xstate/react/es/useConstant.mjs.map +1 -0
- package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js +4 -5
- package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js.map +1 -1
- package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs +6 -0
- package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/{use-isomorphic-layout-effect.browser.esm.cjs.map → use-isomorphic-layout-effect.browser.esm.mjs.map} +1 -1
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +13 -11
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/{with-selector.development.cjs → with-selector.development.mjs} +12 -14
- package/dist/{prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.cjs.map → dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map} +1 -1
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +12 -10
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/{with-selector.production.min.cjs → with-selector.production.min.mjs} +11 -13
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +11 -9
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
- package/dist/dev/node_modules/use-sync-external-store/cjs/{use-sync-external-store-shim.development.cjs → use-sync-external-store-shim.development.mjs} +10 -12
- package/dist/{prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.cjs.map → dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map} +1 -1
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +11 -9
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
- package/dist/{prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.cjs → dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs} +10 -12
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/index.js +12 -12
- package/dist/dev/node_modules/use-sync-external-store/shim/index.js.map +1 -1
- package/dist/dev/node_modules/use-sync-external-store/shim/index.mjs +21 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/{index.cjs.map → index.mjs.map} +1 -1
- package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.js +7 -6
- package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
- package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.mjs +11 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/{with-selector.cjs.map → with-selector.mjs.map} +1 -1
- package/dist/dev/storefront-api-constants.js +3 -3
- package/dist/dev/storefront-api-constants.js.map +1 -1
- package/dist/dev/storefront-api-constants.mjs +5 -0
- package/dist/dev/storefront-api-constants.mjs.map +1 -0
- package/dist/dev/storefront-client.js +6 -6
- package/dist/dev/storefront-client.js.map +1 -1
- package/dist/dev/{storefront-client.cjs → storefront-client.mjs} +7 -7
- package/dist/dev/storefront-client.mjs.map +1 -0
- package/dist/dev/useCartAPIStateMachine.js +20 -20
- package/dist/dev/useCartAPIStateMachine.js.map +1 -1
- package/dist/{prod/useCartAPIStateMachine.cjs → dev/useCartAPIStateMachine.mjs} +21 -21
- package/dist/dev/{useCartAPIStateMachine.cjs.map → useCartAPIStateMachine.mjs.map} +1 -1
- package/dist/dev/useCartActions.js +26 -26
- package/dist/dev/useCartActions.js.map +1 -1
- package/dist/{prod/useCartActions.cjs → dev/useCartActions.mjs} +27 -27
- package/dist/dev/{useCartActions.cjs.map → useCartActions.mjs.map} +1 -1
- package/dist/dev/useMoney.js +10 -10
- package/dist/dev/useMoney.js.map +1 -1
- package/dist/{prod/useMoney.cjs → dev/useMoney.mjs} +11 -11
- package/dist/dev/{useMoney.cjs.map → useMoney.mjs.map} +1 -1
- package/dist/prod/AddToCartButton.js +70 -0
- package/dist/prod/AddToCartButton.js.map +1 -0
- package/dist/prod/AddToCartButton.mjs +70 -0
- package/dist/prod/AddToCartButton.mjs.map +1 -0
- package/dist/prod/BaseButton.js +31 -0
- package/dist/prod/BaseButton.js.map +1 -0
- package/dist/prod/BaseButton.mjs +31 -0
- package/dist/prod/BaseButton.mjs.map +1 -0
- package/dist/prod/BuyNowButton.js +45 -0
- package/dist/prod/BuyNowButton.js.map +1 -0
- package/dist/prod/BuyNowButton.mjs +45 -0
- package/dist/prod/BuyNowButton.mjs.map +1 -0
- package/dist/prod/CartCheckoutButton.js +30 -0
- package/dist/prod/CartCheckoutButton.js.map +1 -0
- package/dist/prod/CartCheckoutButton.mjs +30 -0
- package/dist/prod/CartCheckoutButton.mjs.map +1 -0
- package/dist/prod/CartProvider.js +35 -35
- package/dist/prod/CartProvider.js.map +1 -1
- package/dist/prod/{CartProvider.cjs → CartProvider.mjs} +36 -36
- package/dist/prod/{CartProvider.cjs.map → CartProvider.mjs.map} +1 -1
- package/dist/prod/ExternalVideo.js +5 -5
- package/dist/prod/ExternalVideo.js.map +1 -1
- package/dist/prod/{ExternalVideo.cjs → ExternalVideo.mjs} +6 -6
- package/dist/{dev/ExternalVideo.cjs.map → prod/ExternalVideo.mjs.map} +1 -1
- package/dist/prod/Image.js +12 -12
- package/dist/prod/Image.js.map +1 -1
- package/dist/prod/{Image.cjs → Image.mjs} +13 -13
- package/dist/prod/{Image.cjs.map → Image.mjs.map} +1 -1
- package/dist/prod/MediaFile.js +12 -12
- package/dist/prod/MediaFile.js.map +1 -1
- package/dist/prod/{MediaFile.cjs → MediaFile.mjs} +13 -13
- package/dist/prod/MediaFile.mjs.map +1 -0
- package/dist/prod/Metafield.js +32 -32
- package/dist/prod/Metafield.js.map +1 -1
- package/dist/prod/{Metafield.cjs → Metafield.mjs} +33 -33
- package/dist/prod/Metafield.mjs.map +1 -0
- package/dist/prod/ModelViewer.js +11 -11
- package/dist/prod/ModelViewer.js.map +1 -1
- package/dist/prod/{ModelViewer.cjs → ModelViewer.mjs} +12 -12
- package/dist/prod/{ModelViewer.cjs.map → ModelViewer.mjs.map} +1 -1
- package/dist/prod/Money.js +8 -8
- package/dist/prod/Money.js.map +1 -1
- package/dist/{dev/Money.cjs → prod/Money.mjs} +9 -9
- package/dist/prod/{Money.cjs.map → Money.mjs.map} +1 -1
- package/dist/prod/ProductPrice.js +9 -9
- package/dist/prod/ProductPrice.js.map +1 -1
- package/dist/{dev/ProductPrice.cjs → prod/ProductPrice.mjs} +10 -10
- package/dist/prod/ProductPrice.mjs.map +1 -0
- package/dist/prod/ProductProvider.js +25 -25
- package/dist/prod/ProductProvider.js.map +1 -1
- package/dist/{dev/ProductProvider.cjs → prod/ProductProvider.mjs} +26 -26
- package/dist/prod/{ProductProvider.cjs.map → ProductProvider.mjs.map} +1 -1
- package/dist/prod/ShopPayButton.js +13 -13
- package/dist/prod/ShopPayButton.js.map +1 -1
- package/dist/{dev/ShopPayButton.cjs → prod/ShopPayButton.mjs} +14 -14
- package/dist/{dev/ShopPayButton.cjs.map → prod/ShopPayButton.mjs.map} +1 -1
- package/dist/prod/ShopifyProvider.js +14 -14
- package/dist/prod/ShopifyProvider.js.map +1 -1
- package/dist/prod/ShopifyProvider.mjs +46 -0
- package/dist/prod/{ShopifyProvider.cjs.map → ShopifyProvider.mjs.map} +1 -1
- package/dist/prod/Video.js +9 -9
- package/dist/prod/Video.js.map +1 -1
- package/dist/prod/{Video.cjs → Video.mjs} +10 -10
- package/dist/prod/{Video.cjs.map → Video.mjs.map} +1 -1
- package/dist/prod/_virtual/index.js +3 -3
- package/dist/prod/_virtual/index.js.map +1 -1
- package/dist/prod/_virtual/index.mjs +5 -0
- package/dist/prod/_virtual/index.mjs.map +1 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.development.js +3 -3
- package/dist/prod/_virtual/use-sync-external-store-shim.development.js.map +1 -1
- package/dist/prod/_virtual/use-sync-external-store-shim.development.mjs +5 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.development.mjs.map +1 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.js +3 -3
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.js.map +1 -1
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.mjs +5 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.mjs.map +1 -0
- package/dist/prod/_virtual/with-selector.development.js +3 -3
- package/dist/prod/_virtual/with-selector.development.js.map +1 -1
- package/dist/prod/_virtual/with-selector.development.mjs +5 -0
- package/dist/prod/_virtual/with-selector.development.mjs.map +1 -0
- package/dist/prod/_virtual/with-selector.js +3 -3
- package/dist/prod/_virtual/with-selector.js.map +1 -1
- package/dist/prod/_virtual/with-selector.mjs +5 -0
- package/dist/prod/_virtual/with-selector.mjs.map +1 -0
- package/dist/prod/_virtual/with-selector.production.min.js +3 -3
- package/dist/prod/_virtual/with-selector.production.min.js.map +1 -1
- package/dist/prod/_virtual/with-selector.production.min.mjs +5 -0
- package/dist/prod/_virtual/with-selector.production.min.mjs.map +1 -0
- package/dist/prod/cart-constants.js +9 -9
- package/dist/prod/cart-constants.js.map +1 -1
- package/dist/prod/cart-constants.mjs +17 -0
- package/dist/prod/{cart-constants.cjs.map → cart-constants.mjs.map} +1 -1
- package/dist/prod/cart-hooks.js +15 -15
- package/dist/prod/cart-hooks.js.map +1 -1
- package/dist/prod/cart-hooks.mjs +48 -0
- package/dist/prod/{cart-hooks.cjs.map → cart-hooks.mjs.map} +1 -1
- package/dist/prod/cart-queries.js +11 -11
- package/dist/prod/cart-queries.js.map +1 -1
- package/dist/{dev/cart-queries.cjs → prod/cart-queries.mjs} +12 -12
- package/dist/prod/{cart-queries.cjs.map → cart-queries.mjs.map} +1 -1
- package/dist/prod/flatten-connection.js +3 -3
- package/dist/prod/flatten-connection.js.map +1 -1
- package/dist/prod/{flatten-connection.cjs → flatten-connection.mjs} +4 -4
- package/dist/prod/{flatten-connection.cjs.map → flatten-connection.mjs.map} +1 -1
- package/dist/prod/image-size.js +6 -6
- package/dist/prod/image-size.js.map +1 -1
- package/dist/prod/{image-size.cjs → image-size.mjs} +7 -7
- package/dist/{dev/image-size.cjs.map → prod/image-size.mjs.map} +1 -1
- package/dist/prod/index.js +45 -37
- package/dist/prod/index.js.map +1 -1
- package/dist/prod/index.mjs +46 -0
- package/dist/prod/index.mjs.map +1 -0
- package/dist/prod/load-script.js +7 -7
- package/dist/prod/load-script.js.map +1 -1
- package/dist/{dev/load-script.cjs → prod/load-script.mjs} +8 -8
- package/dist/prod/{load-script.cjs.map → load-script.mjs.map} +1 -1
- package/dist/prod/metafield-parser.js +114 -0
- package/dist/prod/metafield-parser.js.map +1 -0
- package/dist/prod/metafield-parser.mjs +114 -0
- package/dist/prod/metafield-parser.mjs.map +1 -0
- package/dist/prod/node_modules/@xstate/fsm/es/index.js +34 -35
- package/dist/prod/node_modules/@xstate/fsm/es/index.js.map +1 -1
- package/dist/{dev/node_modules/@xstate/fsm/es/index.cjs → prod/node_modules/@xstate/fsm/es/index.mjs} +36 -35
- package/dist/prod/node_modules/@xstate/fsm/es/index.mjs.map +1 -0
- package/dist/prod/node_modules/@xstate/react/es/fsm.js +21 -21
- package/dist/prod/node_modules/@xstate/react/es/fsm.js.map +1 -1
- package/dist/{dev/node_modules/@xstate/react/es/fsm.cjs → prod/node_modules/@xstate/react/es/fsm.mjs} +22 -22
- package/dist/prod/node_modules/@xstate/react/es/{fsm.cjs.map → fsm.mjs.map} +1 -1
- package/dist/prod/node_modules/@xstate/react/es/useConstant.js +23 -5
- package/dist/prod/node_modules/@xstate/react/es/useConstant.js.map +1 -1
- package/dist/prod/node_modules/@xstate/react/es/useConstant.mjs +12 -0
- package/dist/prod/node_modules/@xstate/react/es/useConstant.mjs.map +1 -0
- package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js +4 -5
- package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js.map +1 -1
- package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs +6 -0
- package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/{use-isomorphic-layout-effect.browser.esm.cjs.map → use-isomorphic-layout-effect.browser.esm.mjs.map} +1 -1
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +13 -11
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/{with-selector.development.cjs → with-selector.development.mjs} +12 -14
- package/dist/{dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.cjs.map → prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map} +1 -1
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +12 -10
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/{with-selector.production.min.cjs → with-selector.production.min.mjs} +11 -13
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +11 -9
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
- package/dist/prod/node_modules/use-sync-external-store/cjs/{use-sync-external-store-shim.development.cjs → use-sync-external-store-shim.development.mjs} +10 -12
- package/dist/{dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.cjs.map → prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map} +1 -1
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +11 -9
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
- package/dist/{dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.cjs → prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs} +10 -12
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/index.js +12 -12
- package/dist/prod/node_modules/use-sync-external-store/shim/index.js.map +1 -1
- package/dist/prod/node_modules/use-sync-external-store/shim/index.mjs +21 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/{index.cjs.map → index.mjs.map} +1 -1
- package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.js +7 -6
- package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
- package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.mjs +11 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/{with-selector.cjs.map → with-selector.mjs.map} +1 -1
- package/dist/prod/storefront-api-constants.js +3 -3
- package/dist/prod/storefront-api-constants.js.map +1 -1
- package/dist/prod/storefront-api-constants.mjs +5 -0
- package/dist/prod/storefront-api-constants.mjs.map +1 -0
- package/dist/prod/storefront-client.js +6 -6
- package/dist/prod/storefront-client.js.map +1 -1
- package/dist/prod/{storefront-client.cjs → storefront-client.mjs} +7 -7
- package/dist/prod/storefront-client.mjs.map +1 -0
- package/dist/prod/useCartAPIStateMachine.js +20 -20
- package/dist/prod/useCartAPIStateMachine.js.map +1 -1
- package/dist/{dev/useCartAPIStateMachine.cjs → prod/useCartAPIStateMachine.mjs} +21 -21
- package/dist/prod/{useCartAPIStateMachine.cjs.map → useCartAPIStateMachine.mjs.map} +1 -1
- package/dist/prod/useCartActions.js +26 -26
- package/dist/prod/useCartActions.js.map +1 -1
- package/dist/{dev/useCartActions.cjs → prod/useCartActions.mjs} +27 -27
- package/dist/prod/{useCartActions.cjs.map → useCartActions.mjs.map} +1 -1
- package/dist/prod/useMoney.js +10 -10
- package/dist/prod/useMoney.js.map +1 -1
- package/dist/{dev/useMoney.cjs → prod/useMoney.mjs} +11 -11
- package/dist/prod/{useMoney.cjs.map → useMoney.mjs.map} +1 -1
- package/dist/types/AddToCartButton.d.ts +22 -0
- package/dist/types/BaseButton.d.ts +15 -0
- package/dist/types/BuyNowButton.d.ts +15 -0
- package/dist/types/CartCheckoutButton.d.ts +12 -0
- package/dist/types/CartCost.d.ts +13 -0
- package/dist/types/MediaFile.d.ts +3 -1
- package/dist/types/Metafield.d.ts +3 -0
- package/dist/types/ProductPrice.d.ts +1 -2
- package/dist/types/index.d.cts +4 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/metafield-parser.d.ts +222 -0
- package/dist/umd/hydrogen-react.dev.js +483 -204
- package/dist/umd/hydrogen-react.dev.js.map +1 -1
- package/dist/umd/hydrogen-react.prod.js +17 -17
- package/dist/umd/hydrogen-react.prod.js.map +1 -1
- package/package.json +25 -17
- package/dist/dev/MediaFile.cjs.map +0 -1
- package/dist/dev/Metafield.cjs.map +0 -1
- package/dist/dev/ProductPrice.cjs.map +0 -1
- package/dist/dev/ShopifyProvider.cjs +0 -46
- package/dist/dev/_virtual/index.cjs +0 -5
- package/dist/dev/_virtual/index.cjs.map +0 -1
- package/dist/dev/_virtual/use-sync-external-store-shim.development.cjs +0 -5
- package/dist/dev/_virtual/use-sync-external-store-shim.development.cjs.map +0 -1
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.cjs +0 -5
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.cjs.map +0 -1
- package/dist/dev/_virtual/with-selector.cjs +0 -5
- package/dist/dev/_virtual/with-selector.cjs.map +0 -1
- package/dist/dev/_virtual/with-selector.development.cjs +0 -5
- package/dist/dev/_virtual/with-selector.development.cjs.map +0 -1
- package/dist/dev/_virtual/with-selector.production.min.cjs +0 -5
- package/dist/dev/_virtual/with-selector.production.min.cjs.map +0 -1
- package/dist/dev/cart-constants.cjs +0 -17
- package/dist/dev/cart-hooks.cjs +0 -48
- package/dist/dev/index.cjs +0 -38
- package/dist/dev/index.cjs.map +0 -1
- package/dist/dev/node_modules/@xstate/fsm/es/index.cjs.map +0 -1
- package/dist/dev/node_modules/@xstate/react/es/useConstant.cjs +0 -30
- package/dist/dev/node_modules/@xstate/react/es/useConstant.cjs.map +0 -1
- package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.cjs +0 -5
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.cjs.map +0 -1
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.cjs.map +0 -1
- package/dist/dev/node_modules/use-sync-external-store/shim/index.cjs +0 -21
- package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.cjs +0 -12
- package/dist/dev/node_modules/worktop/cookie/index.cjs +0 -27
- package/dist/dev/node_modules/worktop/cookie/index.cjs.map +0 -1
- package/dist/dev/node_modules/worktop/cookie/index.js +0 -27
- package/dist/dev/node_modules/worktop/cookie/index.js.map +0 -1
- package/dist/dev/storefront-api-constants.cjs +0 -5
- package/dist/dev/storefront-api-constants.cjs.map +0 -1
- package/dist/dev/storefront-client.cjs.map +0 -1
- package/dist/prod/MediaFile.cjs.map +0 -1
- package/dist/prod/Metafield.cjs.map +0 -1
- package/dist/prod/ProductPrice.cjs.map +0 -1
- package/dist/prod/ShopifyProvider.cjs +0 -46
- package/dist/prod/_virtual/index.cjs +0 -5
- package/dist/prod/_virtual/index.cjs.map +0 -1
- package/dist/prod/_virtual/use-sync-external-store-shim.development.cjs +0 -5
- package/dist/prod/_virtual/use-sync-external-store-shim.development.cjs.map +0 -1
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.cjs +0 -5
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.cjs.map +0 -1
- package/dist/prod/_virtual/with-selector.cjs +0 -5
- package/dist/prod/_virtual/with-selector.cjs.map +0 -1
- package/dist/prod/_virtual/with-selector.development.cjs +0 -5
- package/dist/prod/_virtual/with-selector.development.cjs.map +0 -1
- package/dist/prod/_virtual/with-selector.production.min.cjs +0 -5
- package/dist/prod/_virtual/with-selector.production.min.cjs.map +0 -1
- package/dist/prod/cart-constants.cjs +0 -17
- package/dist/prod/cart-hooks.cjs +0 -48
- package/dist/prod/index.cjs +0 -38
- package/dist/prod/index.cjs.map +0 -1
- package/dist/prod/node_modules/@xstate/fsm/es/index.cjs.map +0 -1
- package/dist/prod/node_modules/@xstate/react/es/useConstant.cjs +0 -30
- package/dist/prod/node_modules/@xstate/react/es/useConstant.cjs.map +0 -1
- package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.cjs +0 -5
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.cjs.map +0 -1
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.cjs.map +0 -1
- package/dist/prod/node_modules/use-sync-external-store/shim/index.cjs +0 -21
- package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.cjs +0 -12
- package/dist/prod/node_modules/worktop/cookie/index.cjs +0 -27
- package/dist/prod/node_modules/worktop/cookie/index.cjs.map +0 -1
- package/dist/prod/node_modules/worktop/cookie/index.js +0 -27
- package/dist/prod/node_modules/worktop/cookie/index.js.map +0 -1
- package/dist/prod/storefront-api-constants.cjs +0 -5
- package/dist/prod/storefront-api-constants.cjs.map +0 -1
- package/dist/prod/storefront-client.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydrogen-react.dev.js","sources":["../../../../node_modules/@xstate/fsm/es/index.js","../../../../node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../../node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../../../node_modules/use-sync-external-store/shim/with-selector.js","../../../../node_modules/@xstate/react/es/useConstant.js","../../../../node_modules/@xstate/react/es/fsm.js","../../src/flatten-connection.ts","../../src/cart-queries.ts","../../src/storefront-api-constants.ts","../../src/ShopifyProvider.tsx","../../src/cart-constants.ts","../../../../node_modules/worktop/cookie/index.mjs","../../src/cart-hooks.tsx","../../src/useCartActions.tsx","../../src/useCartAPIStateMachine.tsx","../../src/CartProvider.tsx","../../src/ExternalVideo.tsx","../../src/image-size.ts","../../src/Image.tsx","../../src/Video.tsx","../../src/load-script.tsx","../../src/ModelViewer.tsx","../../src/MediaFile.tsx","../../src/Metafield.tsx","../../src/useMoney.tsx","../../src/Money.tsx","../../src/ProductPrice.tsx","../../src/ProductProvider.tsx","../../src/ShopPayButton.tsx","../../src/storefront-client.ts"],"sourcesContent":["/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t,n){var e=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!e)return t;var r,i,o=e.call(t),a=[];try{for(;(void 0===n||n-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(e=o.return)&&e.call(o)}finally{if(i)throw i.error}}return a}var n;!function(t){t[t.NotStarted=0]=\"NotStarted\",t[t.Running=1]=\"Running\",t[t.Stopped=2]=\"Stopped\"}(n||(n={}));var e={type:\"xstate.init\"};function r(t){return void 0===t?[]:[].concat(t)}function i(t){return{type:\"xstate.assign\",assignment:t}}function o(t,n){return\"string\"==typeof(t=\"string\"==typeof t&&n&&n[t]?n[t]:t)?{type:t}:\"function\"==typeof t?{type:t.name,exec:t}:t}function a(t){return function(n){return t===n}}function u(t){return\"string\"==typeof t?{type:t}:t}function c(t,n){return{value:t,context:n,actions:[],changed:!1,matches:a(t)}}function f(t,n,e){var r=n,i=!1;return[t.filter((function(t){if(\"xstate.assign\"===t.type){i=!0;var n=Object.assign({},r);return\"function\"==typeof t.assignment?n=t.assignment(r,e):Object.keys(t.assignment).forEach((function(i){n[i]=\"function\"==typeof t.assignment[i]?t.assignment[i](r,e):t.assignment[i]})),r=n,!1}return!0})),r,i]}function s(n,i){void 0===i&&(i={});var s=t(f(r(n.states[n.initial].entry).map((function(t){return o(t,i.actions)})),n.context,e),2),l=s[0],v=s[1],y={config:n,_options:i,initialState:{value:n.initial,actions:l,context:v,matches:a(n.initial)},transition:function(e,i){var s,l,v=\"string\"==typeof e?{value:e,context:n.context}:e,p=v.value,g=v.context,d=u(i),x=n.states[p];if(x.on){var m=r(x.on[d.type]);try{for(var h=function(t){var n=\"function\"==typeof Symbol&&Symbol.iterator,e=n&&t[n],r=0;if(e)return e.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(n?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}(m),b=h.next();!b.done;b=h.next()){var S=b.value;if(void 0===S)return c(p,g);var w=\"string\"==typeof S?{target:S}:S,j=w.target,E=w.actions,R=void 0===E?[]:E,N=w.cond,O=void 0===N?function(){return!0}:N,_=void 0===j,k=null!=j?j:p,T=n.states[k];if(O(g,d)){var q=t(f((_?r(R):[].concat(x.exit,R,T.entry).filter((function(t){return t}))).map((function(t){return o(t,y._options.actions)})),g,d),3),z=q[0],A=q[1],B=q[2],C=null!=j?j:p;return{value:C,context:A,actions:z,changed:j!==p||z.length>0||B,matches:a(C)}}}}catch(t){s={error:t}}finally{try{b&&!b.done&&(l=h.return)&&l.call(h)}finally{if(s)throw s.error}}}return c(p,g)}};return y}var l=function(t,n){return t.actions.forEach((function(e){var r=e.exec;return r&&r(t.context,n)}))};function v(t){var r=t.initialState,i=n.NotStarted,o=new Set,c={_machine:t,send:function(e){i===n.Running&&(r=t.transition(r,e),l(r,u(e)),o.forEach((function(t){return t(r)})))},subscribe:function(t){return o.add(t),t(r),{unsubscribe:function(){return o.delete(t)}}},start:function(o){if(o){var u=\"object\"==typeof o?o:{context:t.config.context,value:o};r={value:u.value,actions:[],context:u.context,matches:a(u.value)}}else r=t.initialState;return i=n.Running,l(r,e),c},stop:function(){return i=n.Stopped,o.clear(),c},get state(){return r},get status(){return i}};return c}export{n as InterpreterStatus,i as assign,s as createMachine,v as interpret};\n","import { useLayoutEffect } from 'react';\n\nvar index = useLayoutEffect ;\n\nexport default index;\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n// dispatch for CommonJS interop named imports.\n\nvar useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nvar didWarnOld18Alpha = false;\nvar didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works\n// because of a very particular set of implementation details and assumptions\n// -- change any one of them and it will break. The most important assumption\n// is that updates are always synchronous, because concurrent rendering is\n// only available in versions of React that also have a built-in\n// useSyncExternalStore API. And we only use this shim when the built-in API\n// does not exist.\n//\n// Do not assume that the clever hacks used by this hook also work in general.\n// The point of this shim is to replace the need for hacks by other libraries.\n\nfunction useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n// React do not expose a way to check if we're hydrating. So users of the shim\n// will need to track that themselves and return the correct value\n// from `getSnapshot`.\ngetServerSnapshot) {\n {\n if (!didWarnOld18Alpha) {\n if (React.startTransition !== undefined) {\n didWarnOld18Alpha = true;\n\n error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.');\n }\n }\n } // Read the current snapshot from the store on every render. Again, this\n // breaks the rules of React, and only works here because of specific\n // implementation details, most importantly that updates are\n // always synchronous.\n\n\n var value = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n\n if (!objectIs(value, cachedValue)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n } // Because updates are synchronous, we don't queue them. Instead we force a\n // re-render whenever the subscribed state changes by updating an some\n // arbitrary useState hook. Then, during render, we call getSnapshot to read\n // the current value.\n //\n // Because we don't actually use the state returned by the useState hook, we\n // can save a bit of memory by storing other stuff in that slot.\n //\n // To implement the early bailout, we need to track some things on a mutable\n // object. Usually, we would put that in a useRef hook, but we can stash it in\n // our useState hook instead.\n //\n // To force a re-render, we call forceUpdate({inst}). That works because the\n // new object always fails an equality check.\n\n\n var _useState = useState({\n inst: {\n value: value,\n getSnapshot: getSnapshot\n }\n }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated\n // in the layout phase so we can access it during the tearing check that\n // happens on subscribe.\n\n\n useLayoutEffect(function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }, [subscribe, value, getSnapshot]);\n useEffect(function () {\n // Check for changes right before subscribing. Subsequent changes will be\n // detected in the subscription handler.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n\n var handleStoreChange = function () {\n // TODO: Because there is no cross-renderer API for batching updates, it's\n // up to the consumer of this library to wrap their subscription event\n // with unstable_batchedUpdates. Should we try to detect when this isn't\n // the case and print a warning in development?\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }; // Subscribe to the store and return a clean-up function.\n\n\n return subscribe(handleStoreChange);\n }, [subscribe]);\n useDebugValue(value);\n return value;\n}\n\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n var prevValue = inst.value;\n\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n\nfunction useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n return getSnapshot();\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar isServerEnvironment = !canUseDOM;\n\nvar shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore;\nvar useSyncExternalStore$2 = React.useSyncExternalStore !== undefined ? React.useSyncExternalStore : shim;\n\nexports.useSyncExternalStore = useSyncExternalStore$2;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\nvar shim = require('use-sync-external-store/shim');\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar useSyncExternalStore = shim.useSyncExternalStore;\n\n// for CommonJS interop.\n\nvar useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.\n\nfunction useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {\n // Use this to track the rendered snapshot.\n var instRef = useRef(null);\n var inst;\n\n if (instRef.current === null) {\n inst = {\n hasValue: false,\n value: null\n };\n instRef.current = inst;\n } else {\n inst = instRef.current;\n }\n\n var _useMemo = useMemo(function () {\n // Track the memoized state using closure variables that are local to this\n // memoized instance of a getSnapshot function. Intentionally not using a\n // useRef hook, because that state would be shared across all concurrent\n // copies of the hook/component.\n var hasMemo = false;\n var memoizedSnapshot;\n var memoizedSelection;\n\n var memoizedSelector = function (nextSnapshot) {\n if (!hasMemo) {\n // The first time the hook is called, there is no memoized result.\n hasMemo = true;\n memoizedSnapshot = nextSnapshot;\n\n var _nextSelection = selector(nextSnapshot);\n\n if (isEqual !== undefined) {\n // Even if the selector has changed, the currently rendered selection\n // may be equal to the new selection. We should attempt to reuse the\n // current value if possible, to preserve downstream memoizations.\n if (inst.hasValue) {\n var currentSelection = inst.value;\n\n if (isEqual(currentSelection, _nextSelection)) {\n memoizedSelection = currentSelection;\n return currentSelection;\n }\n }\n }\n\n memoizedSelection = _nextSelection;\n return _nextSelection;\n } // We may be able to reuse the previous invocation's result.\n\n\n // We may be able to reuse the previous invocation's result.\n var prevSnapshot = memoizedSnapshot;\n var prevSelection = memoizedSelection;\n\n if (objectIs(prevSnapshot, nextSnapshot)) {\n // The snapshot is the same as last time. Reuse the previous selection.\n return prevSelection;\n } // The snapshot has changed, so we need to compute a new selection.\n\n\n // The snapshot has changed, so we need to compute a new selection.\n var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n\n // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {\n return prevSelection;\n }\n\n memoizedSnapshot = nextSnapshot;\n memoizedSelection = nextSelection;\n return nextSelection;\n }; // Assigning this to a constant so that Flow knows it can't change.\n\n\n // Assigning this to a constant so that Flow knows it can't change.\n var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;\n\n var getSnapshotWithSelector = function () {\n return memoizedSelector(getSnapshot());\n };\n\n var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n };\n return [getSnapshotWithSelector, getServerSnapshotWithSelector];\n }, [getSnapshot, getServerSnapshot, selector, isEqual]),\n getSelection = _useMemo[0],\n getServerSelection = _useMemo[1];\n\n var value = useSyncExternalStore(subscribe, getSelection, getServerSelection);\n useEffect(function () {\n inst.hasValue = true;\n inst.value = value;\n }, [value]);\n useDebugValue(value);\n return value;\n}\n\nexports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import * as React from 'react';\nexport default function useConstant(fn) {\n var ref = React.useRef();\n if (!ref.current) {\n ref.current = { v: fn() };\n }\n return ref.current.v;\n}\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { createMachine, interpret, InterpreterStatus } from '@xstate/fsm';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport useConstant from './useConstant';\nfunction identity(a) {\n return a;\n}\nvar getServiceState = function (service) {\n var currentValue;\n service\n .subscribe(function (state) {\n currentValue = state;\n })\n .unsubscribe();\n return currentValue;\n};\nexport function useMachine(stateMachine, options) {\n var persistedStateRef = useRef();\n if (process.env.NODE_ENV !== 'production') {\n var _a = __read(useState(stateMachine), 1), initialMachine = _a[0];\n if (stateMachine !== initialMachine) {\n console.warn('Machine given to `useMachine` has changed between renders. This is not supported and might lead to unexpected results.\\n' +\n 'Please make sure that you pass the same Machine as argument each time.');\n }\n }\n var _b = __read(useConstant(function () {\n var queue = [];\n var service = interpret(createMachine(stateMachine.config, options ? options : stateMachine._options));\n var send = service.send;\n service.send = function (event) {\n if (service.status === InterpreterStatus.NotStarted) {\n queue.push(event);\n return;\n }\n send(event);\n persistedStateRef.current = service.state;\n };\n return [service, queue];\n }), 2), service = _b[0], queue = _b[1];\n useIsomorphicLayoutEffect(function () {\n if (options) {\n service._machine._options = options;\n }\n });\n var useServiceResult = useService(service);\n useEffect(function () {\n service.start(persistedStateRef.current);\n queue.forEach(service.send);\n persistedStateRef.current = service.state;\n return function () {\n service.stop();\n };\n }, []);\n return useServiceResult;\n}\nvar isEqual = function (_prevState, nextState) { return nextState.changed === false; };\nexport function useService(service) {\n var getSnapshot = useCallback(function () { return getServiceState(service); }, [service]);\n var subscribe = useCallback(function (handleStoreChange) {\n var unsubscribe = service.subscribe(handleStoreChange).unsubscribe;\n return unsubscribe;\n }, [service]);\n var storeSnapshot = useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);\n return [storeSnapshot, service.send, service];\n}\n","import type {PartialDeep} from 'type-fest';\n\n/**\n * The `flattenConnection` utility transforms a connection object from the Storefront API (for example, [Product-related connections](https://shopify.dev/api/storefront/reference/products/product)) into a flat array of nodes.\n * The utility works with either `nodes` or `edges.node`.\n *\n * If `connection` is null or undefined, will return an empty array instead in production. In development, an error will be thrown.\n */\nexport function flattenConnection<T>(\n connection?: PartialDeep<GraphQLConnection<T>, {recurseIntoArrays: true}>\n): PartialDeep<T, {recurseIntoArrays: true}>[] {\n if (!connection) {\n const noConnectionErr = `flattenConnection(): needs a 'connection' to flatten, but received '${connection}' instead`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noConnectionErr);\n } else {\n console.error(noConnectionErr);\n return [];\n }\n }\n\n if (connection.nodes) {\n return connection.nodes as PartialDeep<T, {recurseIntoArrays: true}>[];\n }\n\n if (connection.edges) {\n return connection.edges.map((edge) => {\n if (!edge?.node) {\n throw new Error('Connection edges must contain nodes');\n }\n return edge.node;\n });\n }\n\n if (__HYDROGEN_DEV__) {\n console.warn(\n `The connection did not contain either \"nodes\" or \"edges.node\". A empty array will be returned in its place.`\n );\n }\n\n return [];\n}\n\ninterface GraphQLConnection<T> {\n edges?: {node: T}[];\n nodes?: T[];\n}\n","export const CartLineAdd = (cartFragment: string) => `\nmutation CartLineAdd($cartId: ID!, $lines: [CartLineInput!]!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartLinesAdd(cartId: $cartId, lines: $lines) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartCreate = (cartFragment: string) => `\nmutation CartCreate($input: CartInput!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartCreate(input: $input) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartLineRemove = (cartFragment: string) => `\nmutation CartLineRemove($cartId: ID!, $lines: [ID!]!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartLinesRemove(cartId: $cartId, lineIds: $lines) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartLineUpdate = (cartFragment: string) => `\nmutation CartLineUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartLinesUpdate(cartId: $cartId, lines: $lines) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartNoteUpdate = (cartFragment: string) => `\nmutation CartNoteUpdate($cartId: ID!, $note: String, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartNoteUpdate(cartId: $cartId, note: $note) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartBuyerIdentityUpdate = (cartFragment: string) => `\nmutation CartBuyerIdentityUpdate(\n $cartId: ID!\n $buyerIdentity: CartBuyerIdentityInput!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n) @inContext(country: $country) {\n cartBuyerIdentityUpdate(cartId: $cartId, buyerIdentity: $buyerIdentity) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartAttributesUpdate = (cartFragment: string) => `\nmutation CartAttributesUpdate($attributes: [AttributeInput!]!, $cartId: ID!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartAttributesUpdate(attributes: $attributes, cartId: $cartId) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartDiscountCodesUpdate = (cartFragment: string) => `\nmutation CartDiscountCodesUpdate($cartId: ID!, $discountCodes: [String!], $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartDiscountCodesUpdate(cartId: $cartId, discountCodes: $discountCodes) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartQuery = (cartFragment: string) => `\nquery CartQuery($id: ID!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cart(id: $id) {\n ...CartFragment\n }\n}\n\n${cartFragment}\n`;\n\nexport const defaultCartFragment = `\nfragment CartFragment on Cart {\n id\n checkoutUrl\n totalQuantity\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n lines(first: $numCartLines) {\n edges {\n node {\n id\n quantity\n attributes {\n key\n value\n }\n cost {\n totalAmount {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n }\n merchandise {\n ... on ProductVariant {\n id\n availableForSale\n compareAtPriceV2 {\n ...MoneyFragment\n }\n priceV2 {\n ...MoneyFragment\n }\n requiresShipping\n title\n image {\n ...ImageFragment\n }\n product {\n handle\n title\n id\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n }\n cost {\n subtotalAmount {\n ...MoneyFragment\n }\n totalAmount {\n ...MoneyFragment\n }\n totalDutyAmount {\n ...MoneyFragment\n }\n totalTaxAmount {\n ...MoneyFragment\n }\n }\n note\n attributes {\n key\n value\n }\n discountCodes {\n code\n }\n}\n\nfragment MoneyFragment on MoneyV2 {\n currencyCode\n amount\n}\nfragment ImageFragment on Image {\n id\n url\n altText\n width\n height\n}\n`;\n","export const SFAPI_VERSION = '2022-10';\n","import {createContext, useContext, useMemo, type ReactNode} from 'react';\nimport type {LanguageCode, CountryCode, Shop} from './storefront-api-types.js';\nimport {SFAPI_VERSION} from './storefront-api-constants.js';\n\nconst ShopifyContext = createContext<ShopifyContextValue>({\n storeDomain: 'test.myshopify.com',\n storefrontToken: 'abc123',\n storefrontApiVersion: SFAPI_VERSION,\n country: {\n isoCode: 'US',\n },\n language: {\n isoCode: 'EN',\n },\n locale: 'EN-US',\n});\n\n/**\n * The `<ShopifyProvider/>` component enables use of the `useShop()` hook. The component should wrap your app.\n */\nexport function ShopifyProvider({\n children,\n shopifyConfig,\n}: {\n children: ReactNode;\n shopifyConfig: ShopifyContextValue;\n}) {\n if (!shopifyConfig) {\n throw new Error(\n `The 'shopifyConfig' prop must be passed to '<ShopifyProvider/>'`\n );\n }\n\n if (shopifyConfig.storefrontApiVersion !== SFAPI_VERSION) {\n console.warn(\n `This version of Hydrogen-UI is built for Shopify's Storefront API version ${SFAPI_VERSION}, but it looks like you're using version ${shopifyConfig.storefrontApiVersion}. There may be issues or bugs if you use a mismatched version of Hydrogen-UI and the Storefront API.`\n );\n }\n\n const finalConfig = useMemo<ShopifyContextValue>(\n () => ({\n ...shopifyConfig,\n storeDomain: shopifyConfig.storeDomain.replace(/^https?:\\/\\//, ''),\n }),\n [shopifyConfig]\n );\n\n return (\n <ShopifyContext.Provider value={finalConfig}>\n {children}\n </ShopifyContext.Provider>\n );\n}\n\n/**\n * Provides access to the `shopifyConfig` prop of `<ShopifyProvider/>`. Must be a descendent of `<ShopifyProvider/>`.\n */\nexport function useShop() {\n const shopContext = useContext(ShopifyContext);\n if (!shopContext) {\n throw new Error(`'useShop()' must be a descendent of <ShopifyProvider/>`);\n }\n return shopContext;\n}\n\n/**\n * Shopify-specific values that are used in various Hydrogen-UI components and hooks.\n */\nexport type ShopifyContextValue = {\n /** The globally-unique identifier for the Shop */\n storefrontId?: string;\n /** The host name of the domain (eg: `{shop}.myshopify.com`). If a URL with a scheme (for example `https://`) is passed in, then the scheme is removed. */\n storeDomain: Shop['primaryDomain']['host'];\n /** The Storefront API public access token. Refer to the [authentication](https://shopify.dev/api/storefront#authentication) documentation for more details. */\n storefrontToken: string;\n /** The Storefront API version. This should almost always be the same as the version Hydrogen-UI was built for. Learn more about Shopify [API versioning](https://shopify.dev/api/usage/versioning) for more details. */\n storefrontApiVersion: string;\n country?: {\n /**\n * The code designating a country, which generally follows ISO 3166-1 alpha-2 guidelines. If a territory doesn't have a country code value in the `CountryCode` enum, it might be considered a subdivision of another country. For example, the territories associated with Spain are represented by the country code `ES`, and the territories associated with the United States of America are represented by the country code `US`.\n */\n isoCode: CountryCode;\n };\n language?: {\n /**\n * `ISO 369` language codes supported by Shopify.\n */\n isoCode: LanguageCode;\n };\n /**\n * The locale string based on `country` and `language`.\n */\n locale?: string;\n};\n","export const CART_ID_STORAGE_KEY = 'shopifyCartId';\nexport const CART_COOKIE_TTL_DAYS = 14;\n\n// Needed for cart analytics within Shopify\nexport const STOREFRONT_API_PUBLIC_TOKEN_HEADER =\n 'X-Shopify-Storefront-Access-Token';\nexport const SHOPIFY_STOREFRONT_ID_HEADER = 'Shopify-Storefront-Id';\nexport const SHOPIFY_STOREFRONT_Y_HEADER = 'Shopify-Storefront-Y';\nexport const SHOPIFY_STOREFRONT_S_HEADER = 'Shopify-Storefront-S';\nexport const SHOPIFY_Y = '_shopify_y';\nexport const SHOPIFY_S = '_shopify_s';\n","// src/cookie.ts\nvar g = new Set([\n \"domain\",\n \"path\",\n \"max-age\",\n \"expires\",\n \"samesite\",\n \"secure\",\n \"httponly\"\n]);\nfunction u(a) {\n let r = {}, e, t, n = 0, m = a.split(/;\\s*/g), s, i;\n for (; n < m.length; n++)\n if (t = m[n], e = t.indexOf(\"=\"), ~e) {\n if (s = t.substring(0, e++).trim(), i = t.substring(e).trim(), i[0] === '\"' && (i = i.substring(1, i.length - 1)), ~i.indexOf(\"%\"))\n try {\n i = decodeURIComponent(i);\n } catch (f) {\n }\n g.has(t = s.toLowerCase()) ? t === \"expires\" ? r.expires = new Date(i) : t === \"max-age\" ? r.maxage = +i : r[t] = i : r[s] = i;\n } else\n (s = t.trim().toLowerCase()) && (s === \"httponly\" || s === \"secure\") && (r[s] = !0);\n return r;\n}\nfunction l(a, r, e = {}) {\n let t = a + \"=\" + encodeURIComponent(r);\n return e.expires && (t += \"; Expires=\" + new Date(e.expires).toUTCString()), e.maxage != null && e.maxage >= 0 && (t += \"; Max-Age=\" + (e.maxage | 0)), e.domain && (t += \"; Domain=\" + e.domain), e.path && (t += \"; Path=\" + e.path), e.samesite && (t += \"; SameSite=\" + e.samesite), (e.secure || e.samesite === \"None\") && (t += \"; Secure\"), e.httponly && (t += \"; HttpOnly\"), t;\n}\nexport {\n u as parse,\n l as stringify\n};\n","import {useState, useCallback} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {CartInput, Cart as CartType} from './storefront-api-types.js';\nimport {CartCreate, defaultCartFragment} from './cart-queries.js';\nimport {Cart} from './cart-types.js';\nimport {\n SHOPIFY_STOREFRONT_ID_HEADER,\n STOREFRONT_API_PUBLIC_TOKEN_HEADER,\n SHOPIFY_STOREFRONT_Y_HEADER,\n SHOPIFY_STOREFRONT_S_HEADER,\n SHOPIFY_Y,\n SHOPIFY_S,\n} from './cart-constants.js';\nimport {parse} from 'worktop/cookie';\nimport type {StorefrontApiResponseOkPartial} from './storefront-api-response.types.js';\n\nexport function useCartFetch() {\n const {storeDomain, storefrontApiVersion, storefrontToken, storefrontId} =\n useShop();\n\n return useCallback(\n <ReturnDataGeneric,>({\n query,\n variables,\n }: {\n query: string;\n variables: Record<string, unknown>;\n }): Promise<StorefrontApiResponseOkPartial<ReturnDataGeneric>> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-SDK-Variant': 'hydrogen',\n 'X-SDK-Version': storefrontApiVersion,\n [STOREFRONT_API_PUBLIC_TOKEN_HEADER]: storefrontToken,\n };\n\n if (storefrontId) {\n headers[SHOPIFY_STOREFRONT_ID_HEADER] = storefrontId;\n }\n\n // Find Shopify cookies\n const cookieData = parse(document.cookie);\n if (cookieData[SHOPIFY_Y] && cookieData[SHOPIFY_S]) {\n headers[SHOPIFY_STOREFRONT_Y_HEADER] = cookieData[SHOPIFY_Y];\n headers[SHOPIFY_STOREFRONT_S_HEADER] = cookieData[SHOPIFY_S];\n }\n\n return fetch(\n `https://${storeDomain}/api/${storefrontApiVersion}/graphql.json`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({\n query: query.toString(),\n variables,\n }),\n }\n )\n .then((res) => res.json())\n .catch((error) => {\n return {\n data: undefined,\n errors: error.toString(),\n };\n });\n },\n [storeDomain, storefrontApiVersion, storefrontToken, storefrontId]\n );\n}\n\nexport function useInstantCheckout() {\n const [cart, updateCart] = useState<Cart | undefined>();\n const [checkoutUrl, updateCheckoutUrl] = useState<Cart['checkoutUrl']>();\n const [error, updateError] = useState<string | undefined>();\n\n const fetch = useCartFetch();\n\n const createInstantCheckout = useCallback(\n async (cartInput: CartInput) => {\n const {data, errors} = await fetch<{\n cartCreate: {cart: CartType};\n }>({\n query: CartCreate(defaultCartFragment),\n variables: {\n input: cartInput,\n },\n });\n\n if (errors) {\n updateError(errors.toString());\n updateCart(undefined);\n updateCheckoutUrl(undefined);\n }\n\n if (data?.cartCreate?.cart) {\n const dataCart = data.cartCreate.cart;\n updateCart({\n ...dataCart,\n lines: flattenConnection(dataCart.lines),\n note: dataCart.note ?? undefined,\n });\n updateCheckoutUrl(dataCart.checkoutUrl);\n }\n },\n [fetch]\n );\n\n return {cart, checkoutUrl, error, createInstantCheckout};\n}\n","import {useCallback, useMemo} from 'react';\nimport {\n AttributeInput,\n CartBuyerIdentityInput,\n CartInput,\n CartLineInput,\n CartLineUpdateInput,\n CountryCode,\n Cart as CartType,\n MutationCartDiscountCodesUpdateArgs,\n MutationCartNoteUpdateArgs,\n} from './storefront-api-types.js';\nimport {\n CartAttributesUpdate,\n CartBuyerIdentityUpdate,\n CartCreate,\n CartDiscountCodesUpdate,\n CartLineAdd,\n CartLineRemove,\n CartLineUpdate,\n CartNoteUpdate,\n CartQuery,\n} from './cart-queries.js';\nimport {useCartFetch} from './cart-hooks.js';\nimport {PartialDeep} from 'type-fest';\n\ntype CartResponse = PartialDeep<CartType, {recurseIntoArrays: true}>;\n\n/**\n * The `useCartActions` hook returns helper graphql functions for Storefront Cart API\n *\n * See [cart API graphql mutations](https://shopify.dev/api/storefront/2022-10/objects/Cart)\n */\nexport function useCartActions({\n numCartLines,\n cartFragment,\n countryCode = 'US',\n}: {\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n cartFragment: string;\n /** The ISO country code for i18n. */\n countryCode?: CountryCode;\n}) {\n const fetchCart = useCartFetch();\n\n const cartFetch = useCallback(\n (cartId: string) => {\n return fetchCart<{cart: CartResponse}>({\n query: CartQuery(cartFragment),\n variables: {\n id: cartId,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [fetchCart, cartFragment, numCartLines, countryCode]\n );\n\n const cartCreate = useCallback(\n (cart: CartInput) => {\n return fetchCart<{cartCreate: {cart: CartResponse}}>({\n query: CartCreate(cartFragment),\n variables: {\n input: cart,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const cartLineAdd = useCallback(\n (cartId: string, lines: CartLineInput[]) => {\n return fetchCart<{cartLinesAdd: {cart: CartResponse}}>({\n query: CartLineAdd(cartFragment),\n variables: {\n cartId,\n lines,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const cartLineUpdate = useCallback(\n (cartId: string, lines: CartLineUpdateInput[]) => {\n return fetchCart<{cartLinesUpdate: {cart: CartResponse}}>({\n query: CartLineUpdate(cartFragment),\n variables: {\n cartId,\n lines,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const cartLineRemove = useCallback(\n (cartId: string, lines: string[]) => {\n return fetchCart<{cartLinesRemove: {cart: CartResponse}}>({\n query: CartLineRemove(cartFragment),\n variables: {\n cartId,\n lines,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const noteUpdate = useCallback(\n (cartId: string, note: MutationCartNoteUpdateArgs['note']) => {\n return fetchCart<{cartNoteUpdate: {cart: CartResponse}}>({\n query: CartNoteUpdate(cartFragment),\n variables: {\n cartId,\n note,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [fetchCart, cartFragment, numCartLines, countryCode]\n );\n\n const buyerIdentityUpdate = useCallback(\n (cartId: string, buyerIdentity: CartBuyerIdentityInput) => {\n return fetchCart<{cartBuyerIdentityUpdate: {cart: CartResponse}}>({\n query: CartBuyerIdentityUpdate(cartFragment),\n variables: {\n cartId,\n buyerIdentity,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const cartAttributesUpdate = useCallback(\n (cartId: string, attributes: AttributeInput[]) => {\n return fetchCart<{cartAttributesUpdate: {cart: CartResponse}}>({\n query: CartAttributesUpdate(cartFragment),\n variables: {\n cartId,\n attributes,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const discountCodesUpdate = useCallback(\n (\n cartId: string,\n discountCodes: MutationCartDiscountCodesUpdateArgs['discountCodes']\n ) => {\n return fetchCart<{cartDiscountCodesUpdate: {cart: CartResponse}}>({\n query: CartDiscountCodesUpdate(cartFragment),\n variables: {\n cartId,\n discountCodes,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n return useMemo(\n () => ({\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n cartFragment,\n }),\n [\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n cartFragment,\n ]\n );\n}\n","import {useMachine} from '@xstate/react/fsm';\nimport {createMachine, assign, StateMachine} from '@xstate/fsm';\nimport {\n Cart,\n CartMachineActionEvent,\n CartMachineActions,\n CartMachineContext,\n CartMachineEvent,\n CartMachineFetchResultEvent,\n CartMachineTypeState,\n} from './cart-types.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {useCartActions} from './useCartActions.js';\nimport {useMemo} from 'react';\nimport {InitEvent} from '@xstate/fsm/lib/types.js';\nimport {CountryCode, Cart as CartType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\nfunction invokeCart(\n action: keyof CartMachineActions,\n options?: {\n entryActions?: [keyof CartMachineActions];\n resolveTarget?: CartMachineTypeState['value'];\n errorTarget?: CartMachineTypeState['value'];\n exitActions?: [keyof CartMachineActions];\n }\n): StateMachine.Config<CartMachineContext, CartMachineEvent>['states']['on'] {\n return {\n entry: [\n ...(options?.entryActions || []),\n 'onCartActionEntry',\n 'onCartActionOptimisticUI',\n action,\n ],\n on: {\n RESOLVE: {\n target: options?.resolveTarget || 'idle',\n actions: [\n assign({\n prevCart: (context) => context?.cart,\n cart: (_, event) => event?.payload?.cart,\n rawCartResult: (_, event) => event?.payload?.rawCartResult,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n ],\n },\n ERROR: {\n target: options?.errorTarget || 'error',\n actions: [\n assign({\n prevCart: (context) => context?.cart,\n cart: (context) => context?.lastValidCart,\n errors: (_, event) => event?.payload?.errors,\n }),\n ],\n },\n CART_COMPLETED: {\n target: 'cartCompleted',\n actions: assign({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n prevCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n cart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n lastValidCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n },\n },\n exit: ['onCartActionComplete', ...(options?.exitActions || [])],\n };\n}\n\nconst INITIALIZING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['uninitialized']['on'] = {\n CART_FETCH: {\n target: 'cartFetching',\n },\n CART_CREATE: {\n target: 'cartCreating',\n },\n CART_SET: {\n target: 'idle',\n actions: [\n assign({\n rawCartResult: (_, event) => event.payload.cart,\n cart: (_, event) => cartFromGraphQL(event.payload.cart),\n }),\n ],\n },\n};\n\nconst UPDATING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['idle']['on'] = {\n CARTLINE_ADD: {\n target: 'cartLineAdding',\n },\n CARTLINE_UPDATE: {\n target: 'cartLineUpdating',\n },\n CARTLINE_REMOVE: {\n target: 'cartLineRemoving',\n },\n NOTE_UPDATE: {\n target: 'noteUpdating',\n },\n BUYER_IDENTITY_UPDATE: {\n target: 'buyerIdentityUpdating',\n },\n CART_ATTRIBUTES_UPDATE: {\n target: 'cartAttributesUpdating',\n },\n DISCOUNT_CODES_UPDATE: {\n target: 'discountCodesUpdating',\n },\n};\n\nfunction createCartMachine(\n initialCart?: PartialDeep<CartType, {recurseIntoArrays: true}>\n) {\n return createMachine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n >({\n id: 'Cart',\n initial: initialCart ? 'idle' : 'uninitialized',\n context: {\n cart: initialCart && cartFromGraphQL(initialCart),\n },\n states: {\n uninitialized: {\n on: INITIALIZING_CART_EVENTS,\n },\n cartCompleted: {\n on: INITIALIZING_CART_EVENTS,\n },\n initializationError: {\n on: INITIALIZING_CART_EVENTS,\n },\n idle: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n error: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n cartFetching: invokeCart('cartFetchAction', {\n errorTarget: 'initializationError',\n }),\n cartCreating: invokeCart('cartCreateAction', {\n errorTarget: 'initializationError',\n }),\n cartLineRemoving: invokeCart('cartLineRemoveAction'),\n cartLineUpdating: invokeCart('cartLineUpdateAction'),\n cartLineAdding: invokeCart('cartLineAddAction'),\n noteUpdating: invokeCart('noteUpdateAction'),\n buyerIdentityUpdating: invokeCart('buyerIdentityUpdateAction'),\n cartAttributesUpdating: invokeCart('cartAttributesUpdateAction'),\n discountCodesUpdating: invokeCart('discountCodesUpdateAction'),\n },\n });\n}\n\nexport function useCartAPIStateMachine({\n numCartLines,\n onCartActionEntry,\n onCartActionOptimisticUI,\n onCartActionComplete,\n data: cart,\n cartFragment,\n countryCode,\n}: {\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked just before a Cart API action executes. */\n onCartActionEntry?: (\n context: CartMachineContext,\n event: CartMachineActionEvent\n ) => void;\n /** A callback that is invoked after executing the entry actions for optimistic UI changes. */\n onCartActionOptimisticUI?: (\n context: CartMachineContext,\n event: CartMachineEvent\n ) => Partial<CartMachineContext>;\n /** A callback that is invoked after a Cart API completes. */\n onCartActionComplete?: (\n context: CartMachineContext,\n event: CartMachineFetchResultEvent\n ) => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n cartFragment: string;\n /** The ISO country code for i18n. */\n countryCode?: CountryCode;\n}) {\n const {\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n } = useCartActions({\n numCartLines,\n cartFragment,\n countryCode,\n });\n\n const cartMachine = useMemo(() => createCartMachine(cart), [cart]);\n\n const [state, send, service] = useMachine(cartMachine, {\n actions: {\n cartFetchAction: async (_, event): Promise<void> => {\n if (event.type !== 'CART_FETCH') return;\n\n const {data, errors} = await cartFetch(event?.payload?.cartId);\n const resultEvent = eventFromFetchResult(event, data?.cart, errors);\n send(resultEvent);\n },\n cartCreateAction: async (_, event): Promise<void> => {\n if (event.type !== 'CART_CREATE') return;\n\n const {data, errors} = await cartCreate(event?.payload);\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartCreate?.cart,\n errors\n );\n send(resultEvent);\n },\n cartLineAddAction: async (context, event): Promise<void> => {\n if (event.type !== 'CARTLINE_ADD' || !context?.cart?.id) return;\n\n const {data, errors} = await cartLineAdd(\n context.cart.id,\n event.payload.lines\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesAdd?.cart,\n errors\n );\n\n send(resultEvent);\n },\n cartLineUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'CARTLINE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineUpdate(\n context.cart.id,\n event.payload.lines\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n cartLineRemoveAction: async (context, event): Promise<void> => {\n if (event.type !== 'CARTLINE_REMOVE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineRemove(\n context.cart.id,\n event.payload.lines\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesRemove?.cart,\n errors\n );\n\n send(resultEvent);\n },\n noteUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'NOTE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await noteUpdate(\n context.cart.id,\n event.payload.note\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartNoteUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n buyerIdentityUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'BUYER_IDENTITY_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await buyerIdentityUpdate(\n context.cart.id,\n event.payload.buyerIdentity\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartBuyerIdentityUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n cartAttributesUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'CART_ATTRIBUTES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await cartAttributesUpdate(\n context.cart.id,\n event.payload.attributes\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartAttributesUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n discountCodesUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'DISCOUNT_CODES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await discountCodesUpdate(\n context.cart.id,\n event.payload.discountCodes\n );\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartDiscountCodesUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n ...(onCartActionEntry && {\n onCartActionEntry: (context, event) => {\n if (isCartActionEvent(event)) {\n onCartActionEntry(context, event);\n }\n },\n }),\n ...(onCartActionOptimisticUI && {\n onCartActionOptimisticUI: assign((context, event) => {\n return onCartActionOptimisticUI(context, event);\n }),\n }),\n ...(onCartActionComplete && {\n onCartActionComplete: (context, event) => {\n if (isCartFetchResultEvent(event)) {\n onCartActionComplete(context, event);\n }\n },\n }),\n } as CartMachineActions,\n });\n\n return useMemo(() => [state, send, service] as const, [state, send, service]);\n}\n\nexport function cartFromGraphQL(\n cart: PartialDeep<CartType, {recurseIntoArrays: true}>\n): Cart {\n return {\n ...cart,\n lines: flattenConnection(cart?.lines),\n note: cart.note ?? undefined,\n };\n}\n\nfunction eventFromFetchResult(\n cartActionEvent: CartMachineActionEvent,\n cart?: PartialDeep<CartType, {recurseIntoArrays: true}> | null,\n errors?: unknown\n): CartMachineFetchResultEvent {\n if (errors) {\n return {type: 'ERROR', payload: {errors, cartActionEvent}};\n }\n\n if (!cart) {\n return {\n type: 'CART_COMPLETED',\n payload: {\n cartActionEvent,\n },\n };\n }\n\n return {\n type: 'RESOLVE',\n payload: {\n cart: cartFromGraphQL(cart),\n rawCartResult: cart,\n cartActionEvent,\n },\n };\n}\n\nfunction isCartActionEvent(\n event: CartMachineEvent | InitEvent\n): event is CartMachineActionEvent {\n return (\n event.type === 'CART_CREATE' ||\n event.type === 'CARTLINE_ADD' ||\n event.type === 'CARTLINE_UPDATE' ||\n event.type === 'CARTLINE_REMOVE' ||\n event.type === 'NOTE_UPDATE' ||\n event.type === 'BUYER_IDENTITY_UPDATE' ||\n event.type === 'CART_ATTRIBUTES_UPDATE' ||\n event.type === 'DISCOUNT_CODES_UPDATE'\n );\n}\n\nfunction isCartFetchResultEvent(\n event: CartMachineEvent | InitEvent\n): event is CartMachineFetchResultEvent {\n return (\n event.type === 'RESOLVE' ||\n event.type === 'ERROR' ||\n event.type === 'CART_COMPLETED'\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n createContext,\n useContext,\n} from 'react';\nimport {\n AttributeInput,\n CartBuyerIdentityInput,\n CartInput,\n CartLineInput,\n CartLineUpdateInput,\n CountryCode,\n Cart as CartType,\n MutationCartNoteUpdateArgs,\n} from './storefront-api-types.js';\nimport {\n BuyerIdentityUpdateEvent,\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState,\n CartWithActions,\n} from './cart-types.js';\nimport {useCartAPIStateMachine} from './useCartAPIStateMachine.js';\nimport {CART_ID_STORAGE_KEY} from './cart-constants.js';\nimport {PartialDeep} from 'type-fest';\n\nexport const CartContext = createContext<CartWithActions | null>(null);\n\n/**\n * The `useCart` hook provides access to the cart object. It must be a descendent of a `CartProvider` component.\n */\nexport function useCart() {\n const context = useContext(CartContext);\n\n if (!context) {\n throw new Error('Expected a Cart Context, but no Cart Context was found');\n }\n\n return context;\n}\n\nexport function CartProvider({\n children,\n numCartLines,\n onCreate,\n onLineAdd,\n onLineRemove,\n onLineUpdate,\n onNoteUpdate,\n onBuyerIdentityUpdate,\n onAttributesUpdate,\n onDiscountCodesUpdate,\n onCreateComplete,\n onLineAddComplete,\n onLineRemoveComplete,\n onLineUpdateComplete,\n onNoteUpdateComplete,\n onBuyerIdentityUpdateComplete,\n onAttributesUpdateComplete,\n onDiscountCodesUpdateComplete,\n data: cart,\n cartFragment = defaultCartFragment,\n customerAccessToken,\n countryCode = 'US',\n}: {\n /** Any `ReactNode` elements. */\n children: React.ReactNode;\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked when the process to create a cart begins, but before the cart is created in the Storefront API. */\n onCreate?: () => void;\n /** A callback that is invoked when the process to add a line item to the cart begins, but before the line item is added to the Storefront API. */\n onLineAdd?: () => void;\n /** A callback that is invoked when the process to remove a line item to the cart begins, but before the line item is removed from the Storefront API. */\n onLineRemove?: () => void;\n /** A callback that is invoked when the process to update a line item in the cart begins, but before the line item is updated in the Storefront API. */\n onLineUpdate?: () => void;\n /** A callback that is invoked when the process to add or update a note in the cart begins, but before the note is added or updated in the Storefront API. */\n onNoteUpdate?: () => void;\n /** A callback that is invoked when the process to update the buyer identity begins, but before the buyer identity is updated in the Storefront API. */\n onBuyerIdentityUpdate?: () => void;\n /** A callback that is invoked when the process to update the cart attributes begins, but before the attributes are updated in the Storefront API. */\n onAttributesUpdate?: () => void;\n /** A callback that is invoked when the process to update the cart discount codes begins, but before the discount codes are updated in the Storefront API. */\n onDiscountCodesUpdate?: () => void;\n /** A callback that is invoked when the process to create a cart completes */\n onCreateComplete?: () => void;\n /** A callback that is invoked when the process to add a line item to the cart completes */\n onLineAddComplete?: () => void;\n /** A callback that is invoked when the process to remove a line item to the cart completes */\n onLineRemoveComplete?: () => void;\n /** A callback that is invoked when the process to update a line item in the cart completes */\n onLineUpdateComplete?: () => void;\n /** A callback that is invoked when the process to add or update a note in the cart completes */\n onNoteUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the buyer identity completes */\n onBuyerIdentityUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the cart attributes completes */\n onAttributesUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the cart discount codes completes */\n onDiscountCodesUpdateComplete?: () => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n cartFragment?: string;\n /** A customer access token that's accessible on the server if there's a customer login. */\n customerAccessToken?: CartBuyerIdentityInput['customerAccessToken'];\n /** The ISO country code for i18n. */\n countryCode?: CountryCode;\n}) {\n if (countryCode) countryCode = countryCode.toUpperCase() as CountryCode;\n const [prevCountryCode, setPrevCountryCode] = useState(countryCode);\n const [prevCustomerAccessToken, setPrevCustomerAccessToken] =\n useState(customerAccessToken);\n const customerOverridesCountryCode = useRef(false);\n\n if (\n prevCountryCode !== countryCode ||\n prevCustomerAccessToken !== customerAccessToken\n ) {\n setPrevCountryCode(countryCode);\n setPrevCustomerAccessToken(customerAccessToken);\n customerOverridesCountryCode.current = false;\n }\n\n const [cartState, cartSend] = useCartAPIStateMachine({\n numCartLines,\n data: cart,\n cartFragment,\n countryCode,\n onCartActionEntry(context, event) {\n try {\n switch (event.type) {\n case 'CART_CREATE':\n return onCreate?.();\n case 'CARTLINE_ADD':\n return onLineAdd?.();\n case 'CARTLINE_REMOVE':\n return onLineRemove?.();\n case 'CARTLINE_UPDATE':\n return onLineUpdate?.();\n case 'NOTE_UPDATE':\n return onNoteUpdate?.();\n case 'BUYER_IDENTITY_UPDATE':\n return onBuyerIdentityUpdate?.();\n case 'CART_ATTRIBUTES_UPDATE':\n return onAttributesUpdate?.();\n case 'DISCOUNT_CODES_UPDATE':\n return onDiscountCodesUpdate?.();\n }\n } catch (error) {\n console.error('Cart entry action failed', error);\n }\n },\n onCartActionOptimisticUI(context, event) {\n if (!context?.cart) return {cart: undefined};\n switch (event.type) {\n case 'CARTLINE_REMOVE':\n return {\n ...context,\n lastValidCart: context.cart,\n cart: {\n ...context.cart,\n lines: context?.cart?.lines?.filter(\n (line) => line?.id && !event.payload.lines.includes(line?.id)\n ),\n },\n };\n case 'CARTLINE_UPDATE':\n return {\n ...context,\n lastValidCart: context.cart,\n cart: {\n ...context.cart,\n lines: context?.cart?.lines?.map((line) => {\n const updatedLine = event.payload.lines.find(\n ({id}) => id === line?.id\n );\n\n if (updatedLine && updatedLine.quantity) {\n return {\n ...line,\n quantity: updatedLine.quantity,\n };\n }\n\n return line;\n }),\n },\n };\n }\n return {cart: context.cart ? {...context.cart} : undefined};\n },\n onCartActionComplete(context, event) {\n const cartActionEvent = event.payload.cartActionEvent;\n try {\n switch (event.type) {\n case 'RESOLVE':\n switch (cartActionEvent.type) {\n case 'CART_CREATE':\n return onCreateComplete?.();\n case 'CARTLINE_ADD':\n return onLineAddComplete?.();\n case 'CARTLINE_REMOVE':\n return onLineRemoveComplete?.();\n case 'CARTLINE_UPDATE':\n return onLineUpdateComplete?.();\n case 'NOTE_UPDATE':\n return onNoteUpdateComplete?.();\n case 'BUYER_IDENTITY_UPDATE':\n if (countryCodeNotUpdated(context, cartActionEvent)) {\n customerOverridesCountryCode.current = true;\n }\n return onBuyerIdentityUpdateComplete?.();\n case 'CART_ATTRIBUTES_UPDATE':\n return onAttributesUpdateComplete?.();\n case 'DISCOUNT_CODES_UPDATE':\n return onDiscountCodesUpdateComplete?.();\n }\n }\n } catch (error) {\n console.error('onCartActionComplete failed', error);\n }\n },\n });\n\n const cartReady = useRef(false);\n const cartCompleted = cartState.matches('cartCompleted');\n\n const countryChanged =\n (cartState.value === 'idle' ||\n cartState.value === 'error' ||\n cartState.value === 'cartCompleted') &&\n countryCode !== cartState?.context?.cart?.buyerIdentity?.countryCode &&\n !cartState.context.errors;\n\n const fetchingFromStorage = useRef(false);\n\n /**\n * Initializes cart with priority in this order:\n * 1. cart props\n * 2. localStorage cartId\n */\n useEffect(() => {\n if (!cartReady.current && !fetchingFromStorage.current) {\n if (!cart && storageAvailable('localStorage')) {\n fetchingFromStorage.current = true;\n try {\n const cartId = window.localStorage.getItem(CART_ID_STORAGE_KEY);\n if (cartId) {\n cartSend({type: 'CART_FETCH', payload: {cartId}});\n }\n } catch (error) {\n console.warn('error fetching cartId');\n console.warn(error);\n }\n }\n cartReady.current = true;\n }\n }, [cart, cartReady, cartSend]);\n\n // Update cart country code if cart and props countryCode's as different\n useEffect(() => {\n if (!countryChanged || customerOverridesCountryCode.current) return;\n cartSend({\n type: 'BUYER_IDENTITY_UPDATE',\n payload: {buyerIdentity: {countryCode, customerAccessToken}},\n });\n }, [\n countryCode,\n customerAccessToken,\n countryChanged,\n customerOverridesCountryCode,\n cartSend,\n ]);\n\n // send cart events when ready\n const onCartReadySend = useCallback(\n (cartEvent: CartMachineEvent) => {\n if (!cartReady.current) {\n return console.warn(\"Cart isn't ready yet\");\n }\n cartSend(cartEvent);\n },\n [cartSend]\n );\n\n // save cart id to local storage\n useEffect(() => {\n if (cartState?.context?.cart?.id && storageAvailable('localStorage')) {\n try {\n window.localStorage.setItem(\n CART_ID_STORAGE_KEY,\n cartState.context.cart?.id\n );\n } catch (error) {\n console.warn('Failed to save cartId to localStorage', error);\n }\n }\n }, [cartState?.context?.cart?.id]);\n\n // delete cart from local storage if cart fetched has been completed\n useEffect(() => {\n if (cartCompleted && storageAvailable('localStorage')) {\n try {\n window.localStorage.removeItem(CART_ID_STORAGE_KEY);\n } catch (error) {\n console.warn('Failed to delete cartId from localStorage', error);\n }\n }\n }, [cartCompleted]);\n\n const cartCreate = useCallback(\n (cartInput: CartInput) => {\n if (countryCode && !cartInput.buyerIdentity?.countryCode) {\n if (cartInput.buyerIdentity == null) {\n cartInput.buyerIdentity = {};\n }\n cartInput.buyerIdentity.countryCode = countryCode;\n }\n\n if (\n customerAccessToken &&\n !cartInput.buyerIdentity?.customerAccessToken\n ) {\n if (cartInput.buyerIdentity == null) {\n cartInput.buyerIdentity = {};\n }\n cartInput.buyerIdentity.customerAccessToken = customerAccessToken;\n }\n onCartReadySend({\n type: 'CART_CREATE',\n payload: cartInput,\n });\n },\n [countryCode, customerAccessToken, onCartReadySend]\n );\n\n // Delays the cart state in the context if the page is hydrating\n // preventing suspense boundary errors.\n const cartDisplayState = useDelayedStateUntilHydration(cartState);\n\n const cartContextValue = useMemo<CartWithActions>(() => {\n return {\n ...(cartDisplayState?.context?.cart ?? {lines: [], attributes: []}),\n status: transposeStatus(cartDisplayState.value),\n error: cartDisplayState?.context?.errors,\n totalQuantity: cartDisplayState?.context?.cart?.totalQuantity ?? 0,\n cartCreate,\n linesAdd(lines: CartLineInput[]) {\n if (cartDisplayState?.context?.cart?.id) {\n onCartReadySend({\n type: 'CARTLINE_ADD',\n payload: {lines},\n });\n } else {\n cartCreate({lines});\n }\n },\n linesRemove(lines: string[]) {\n onCartReadySend({\n type: 'CARTLINE_REMOVE',\n payload: {\n lines,\n },\n });\n },\n linesUpdate(lines: CartLineUpdateInput[]) {\n onCartReadySend({\n type: 'CARTLINE_UPDATE',\n payload: {\n lines,\n },\n });\n },\n noteUpdate(note: MutationCartNoteUpdateArgs['note']) {\n onCartReadySend({\n type: 'NOTE_UPDATE',\n payload: {\n note,\n },\n });\n },\n buyerIdentityUpdate(buyerIdentity: CartBuyerIdentityInput) {\n onCartReadySend({\n type: 'BUYER_IDENTITY_UPDATE',\n payload: {\n buyerIdentity,\n },\n });\n },\n cartAttributesUpdate(attributes: AttributeInput[]) {\n onCartReadySend({\n type: 'CART_ATTRIBUTES_UPDATE',\n payload: {\n attributes,\n },\n });\n },\n discountCodesUpdate(discountCodes: string[]) {\n onCartReadySend({\n type: 'DISCOUNT_CODES_UPDATE',\n payload: {\n discountCodes,\n },\n });\n },\n cartFragment,\n };\n }, [\n cartCreate,\n cartDisplayState?.context?.cart,\n cartDisplayState?.context?.errors,\n cartDisplayState.value,\n cartFragment,\n onCartReadySend,\n ]);\n\n return (\n <CartContext.Provider value={cartContextValue}>\n {children}\n </CartContext.Provider>\n );\n}\n\nfunction transposeStatus(\n status: CartMachineTypeState['value']\n): CartWithActions['status'] {\n switch (status) {\n case 'uninitialized':\n case 'initializationError':\n return 'uninitialized';\n case 'idle':\n case 'cartCompleted':\n case 'error':\n return 'idle';\n case 'cartFetching':\n return 'fetching';\n case 'cartCreating':\n return 'creating';\n case 'cartLineAdding':\n case 'cartLineRemoving':\n case 'cartLineUpdating':\n case 'noteUpdating':\n case 'buyerIdentityUpdating':\n case 'cartAttributesUpdating':\n case 'discountCodesUpdating':\n return 'updating';\n }\n}\n\n/**\n * Delays a state update until hydration finishes. Useful for preventing suspense boundaries errors when updating a context\n * @remarks this uses startTransition and waits for it to finish.\n */\nfunction useDelayedStateUntilHydration<T>(state: T) {\n const [isPending, startTransition] = useTransition();\n const [delayedState, setDelayedState] = useState(state);\n\n const firstTimePending = useRef(false);\n if (isPending) {\n firstTimePending.current = true;\n }\n\n const firstTimePendingFinished = useRef(false);\n if (!isPending && firstTimePending.current) {\n firstTimePendingFinished.current = true;\n }\n\n useEffect(() => {\n startTransition(() => {\n if (!firstTimePendingFinished.current) {\n setDelayedState(state);\n }\n });\n }, [state]);\n\n const displayState = firstTimePendingFinished.current ? state : delayedState;\n\n return displayState;\n}\n\n/** Check for storage availability funciton obtained from\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API\n */\nexport function storageAvailable(type: 'localStorage' | 'sessionStorage') {\n let storage;\n try {\n storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return true;\n } catch (e) {\n return (\n e instanceof DOMException &&\n // everything except Firefox\n (e.code === 22 ||\n // Firefox\n e.code === 1014 ||\n // test name field too, because code might not be present\n // everything except Firefox\n e.name === 'QuotaExceededError' ||\n // Firefox\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n // acknowledge QuotaExceededError only if there's something already stored\n storage &&\n storage.length !== 0\n );\n }\n}\n\nfunction countryCodeNotUpdated(\n context: CartMachineContext,\n event: BuyerIdentityUpdateEvent\n) {\n return (\n event.payload.buyerIdentity.countryCode &&\n context.cart?.buyerIdentity?.countryCode !==\n event.payload.buyerIdentity.countryCode\n );\n}\n\nexport const defaultCartFragment = `\nfragment CartFragment on Cart {\n id\n checkoutUrl\n totalQuantity\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n lines(first: $numCartLines) {\n edges {\n node {\n id\n quantity\n attributes {\n key\n value\n }\n cost {\n totalAmount {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n }\n merchandise {\n ... on ProductVariant {\n id\n availableForSale\n compareAtPriceV2 {\n ...MoneyFragment\n }\n priceV2 {\n ...MoneyFragment\n }\n requiresShipping\n title\n image {\n ...ImageFragment\n }\n product {\n handle\n title\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n }\n cost {\n subtotalAmount {\n ...MoneyFragment\n }\n totalAmount {\n ...MoneyFragment\n }\n totalDutyAmount {\n ...MoneyFragment\n }\n totalTaxAmount {\n ...MoneyFragment\n }\n }\n note\n attributes {\n key\n value\n }\n discountCodes {\n code\n }\n}\n\nfragment MoneyFragment on MoneyV2 {\n currencyCode\n amount\n}\nfragment ImageFragment on Image {\n id\n url\n altText\n width\n height\n}\n`;\n","import type {ExternalVideo as ExternalVideoType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\ninterface BaseProps {\n /**\n * An object with fields that correspond to the Storefront API's [ExternalVideo object](https://shopify.dev/api/storefront/reference/products/externalvideo).\n */\n data: PartialDeep<ExternalVideoType, {recurseIntoArrays: true}>;\n /** An object containing the options available for either\n * [YouTube](https://developers.google.com/youtube/player_parameters#Parameters) or\n * [Vimeo](https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Using-Player-Parameters).\n */\n options?: YouTube | Vimeo;\n}\n\ntype PropsWeControl = 'src';\n\nexport type ExternalVideoProps = Omit<\n JSX.IntrinsicElements['iframe'],\n PropsWeControl\n> &\n BaseProps;\n\n/**\n * The `ExternalVideo` component renders an embedded video for the Storefront\n * API's [ExternalVideo object](https://shopify.dev/api/storefront/reference/products/externalvideo).\n */\nexport function ExternalVideo(props: ExternalVideoProps) {\n const {\n data,\n options,\n id = data.id,\n frameBorder = '0',\n allow = 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture',\n allowFullScreen = true,\n loading = 'lazy',\n ...passthroughProps\n } = props;\n\n if (!data.embedUrl) {\n throw new Error(`<ExternalVideo/> requires the 'embedUrl' property`);\n }\n\n let finalUrl: string = data.embedUrl;\n\n if (options) {\n const urlObject = new URL(data.embedUrl);\n for (const key of Object.keys(options)) {\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/32951\n urlObject.searchParams.set(key, options[key]);\n }\n finalUrl = urlObject.toString();\n }\n\n return (\n <iframe\n {...passthroughProps}\n id={id ?? data.embedUrl}\n title={data.alt ?? data.id ?? 'external video'}\n frameBorder={frameBorder}\n allow={allow}\n allowFullScreen={allowFullScreen}\n src={finalUrl}\n loading={loading}\n ></iframe>\n );\n}\n\ninterface YouTube {\n autoplay?: 0 | 1;\n cc_lang_pref?: string;\n cc_load_policy?: 1;\n color?: 'red' | 'white';\n controls?: 0 | 1;\n disablekb?: 0 | 1;\n enablejsapi?: 0 | 1;\n end?: number;\n fs?: 0 | 1;\n hl?: string;\n iv_load_policy?: 1 | 3;\n list?: string;\n list_type?: 'playlist' | 'user_uploads';\n loop?: 0 | 1;\n modest_branding?: 1;\n origin?: string;\n playlist?: string;\n plays_inline?: 0 | 1;\n rel?: 0 | 1;\n start?: number;\n widget_referrer?: string;\n}\n\ntype VimeoBoolean = 0 | 1 | boolean;\n\ninterface Vimeo {\n autopause?: VimeoBoolean;\n autoplay?: VimeoBoolean;\n background?: VimeoBoolean;\n byline?: VimeoBoolean;\n color?: string;\n controls?: VimeoBoolean;\n dnt?: VimeoBoolean;\n loop?: VimeoBoolean;\n muted?: VimeoBoolean;\n pip?: VimeoBoolean;\n playsinline?: VimeoBoolean;\n portrait?: VimeoBoolean;\n quality?: '240p' | '360p' | '540p' | '720p' | '1080p' | '2k' | '4k';\n speed?: VimeoBoolean;\n '#t'?: string;\n texttrack?: string;\n title?: VimeoBoolean;\n transparent?: VimeoBoolean;\n}\n","import type {Image as ImageType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ShopifyLoaderOptions, ShopifyLoaderParams} from './Image.js';\n\n// TODO: Are there other CDNs missing from here?\nconst PRODUCTION_CDN_HOSTNAMES = [\n 'cdn.shopify.com',\n 'cdn.shopifycdn.net',\n 'shopify-assets.shopifycdn.com',\n 'shopify-assets.shopifycdn.net',\n];\nconst LOCAL_CDN_HOSTNAMES = ['spin.dev'];\nconst ALL_CDN_HOSTNAMES = [...PRODUCTION_CDN_HOSTNAMES, ...LOCAL_CDN_HOSTNAMES];\n\n// based on the default width sizes used by the Shopify liquid HTML tag img_tag plus a 2560 width to account for 2k resolutions\n// reference: https://shopify.dev/api/liquid/filters/html-filters#image_tag\nexport const IMG_SRC_SET_SIZES = [352, 832, 1200, 1920, 2560];\n\n/**\n * Adds image size parameters to an image URL hosted by Shopify's CDN\n */\nexport function addImageSizeParametersToUrl({\n src,\n width,\n height,\n crop,\n scale,\n}: ShopifyLoaderParams) {\n const newUrl = new URL(src);\n\n const multipliedScale = scale ?? 1;\n\n if (width) {\n let finalWidth: string;\n\n if (typeof width === 'string') {\n finalWidth = (IMG_SRC_SET_SIZES[0] * multipliedScale).toString();\n } else {\n finalWidth = (Number(width) * multipliedScale).toString();\n }\n\n newUrl.searchParams.append('width', finalWidth);\n }\n\n if (height && typeof height === 'number') {\n newUrl.searchParams.append('height', (height * multipliedScale).toString());\n }\n\n crop && newUrl.searchParams.append('crop', crop);\n\n // for now we intentionally leave off the scale param, and instead multiple width & height by scale instead\n // scale && newUrl.searchParams.append('scale', scale.toString());\n\n return newUrl.toString();\n}\n\nexport function shopifyImageLoader(params: ShopifyLoaderParams) {\n const newSrc = new URL(params.src);\n const isShopifyServedImage = ALL_CDN_HOSTNAMES.some((allowedHostname) =>\n newSrc.hostname.endsWith(allowedHostname)\n );\n\n if (\n !isShopifyServedImage ||\n (!params.width && !params.height && !params.crop && !params.scale)\n ) {\n return params.src;\n }\n\n return addImageSizeParametersToUrl(params);\n}\n\ntype HtmlImageProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\nexport type GetShopifyImageDimensionsProps = {\n data: Pick<\n PartialDeep<ImageType, {recurseIntoArrays: true}>,\n 'altText' | 'url' | 'id' | 'width' | 'height'\n >;\n loaderOptions?: ShopifyLoaderOptions;\n elementProps?: {\n width?: HtmlImageProps['width'];\n height?: HtmlImageProps['height'];\n };\n};\n\ntype GetShopifyImageDimensionsPropsReturn = {\n width: number | string | null;\n height: number | string | null;\n};\n\n/**\n * Width and height are determined using the followiing priority list:\n * 1. `loaderOptions`'s width/height\n * 2. `elementProps`'s width/height\n * 3. `data`'s width/height\n *\n * If only one of `width` or `height` are defined, then the other will attempt to be calculated based on the Image's aspect ratio,\n * provided that both `data.width` and `data.height` are available. If not, then the aspect ratio cannot be determined and the missing\n * value will reamin as `null`\n */\nexport function getShopifyImageDimensions({\n data: sfapiImage,\n loaderOptions,\n elementProps,\n}: GetShopifyImageDimensionsProps): GetShopifyImageDimensionsPropsReturn {\n let aspectRatio: number | null = null;\n\n if (sfapiImage?.width && sfapiImage?.height) {\n aspectRatio = sfapiImage?.width / sfapiImage?.height;\n }\n\n // * 1. `loaderOptions`'s width/height\n if (loaderOptions?.width || loaderOptions?.height) {\n return {\n width:\n loaderOptions?.width ??\n (aspectRatio && typeof loaderOptions.height === 'number'\n ? Math.round(aspectRatio * loaderOptions.height)\n : null),\n height:\n loaderOptions?.height ??\n (aspectRatio && typeof loaderOptions.width === 'number'\n ? Math.round(aspectRatio * loaderOptions.width)\n : null),\n };\n }\n\n // * 2. `elementProps`'s width/height\n if (elementProps?.width || elementProps?.height) {\n return {\n width:\n elementProps?.width ??\n (aspectRatio && typeof elementProps.height === 'number'\n ? Math.round(aspectRatio * elementProps.height)\n : null),\n height:\n elementProps?.height ??\n (aspectRatio && typeof elementProps.width === 'number'\n ? Math.round(aspectRatio * elementProps.width)\n : null),\n };\n }\n\n // * 3. `data`'s width/height\n if (sfapiImage?.width || sfapiImage?.height) {\n return {\n // can't calculate the aspect ratio here\n width: sfapiImage?.width ?? null,\n height: sfapiImage?.height ?? null,\n };\n }\n\n return {width: null, height: null};\n}\n","import * as React from 'react';\nimport {\n getShopifyImageDimensions,\n shopifyImageLoader,\n addImageSizeParametersToUrl,\n IMG_SRC_SET_SIZES,\n} from './image-size.js';\nimport type {Image as ImageType} from './storefront-api-types.js';\nimport type {PartialDeep, Simplify} from 'type-fest';\n\ntype HtmlImageProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\nexport type ShopifyLoaderOptions = {\n crop?: 'top' | 'bottom' | 'left' | 'right' | 'center';\n scale?: 2 | 3;\n width?: HtmlImageProps['width'] | ImageType['width'];\n height?: HtmlImageProps['height'] | ImageType['height'];\n};\nexport type ShopifyLoaderParams = Simplify<\n ShopifyLoaderOptions & {\n src: ImageType['url'];\n }\n>;\nexport type ShopifyImageProps = Omit<HtmlImageProps, 'src'> & {\n /** An object with fields that correspond to the Storefront API's\n * [Image object](https://shopify.dev/api/storefront/reference/common-objects/image).\n * The `data` prop is required.\n */\n data: PartialDeep<ImageType, {recurseIntoArrays: true}>;\n /** A custom function that generates the image URL. Parameters passed in\n * are `ShopifyLoaderParams`\n */\n loader?: (params: ShopifyLoaderParams) => string;\n /** An object of `loader` function options. For example, if the `loader` function\n * requires a `scale` option, then the value can be a property of the\n * `loaderOptions` object (for example, `{scale: 2}`). The object shape is `ShopifyLoaderOptions`.\n */\n loaderOptions?: ShopifyLoaderOptions;\n /**\n * `src` isn't used, and should instead be passed as part of the `data` object\n */\n src?: never;\n /**\n * An array of pixel widths to overwrite the default generated srcset. For example, `[300, 600, 800]`.\n */\n widths?: (HtmlImageProps['width'] | ImageType['width'])[];\n};\n\n/**\n * The `Image` component renders an image for the Storefront API's\n * [Image object](https://shopify.dev/api/storefront/reference/common-objects/image) by using the `data` prop. You can [customize this component](https://shopify.dev/api/hydrogen/components#customizing-hydrogen-components) using passthrough props.\n *\n * An image's width and height are determined using the following priority list:\n * 1. The width and height values for the `loaderOptions` prop\n * 2. The width and height values for bare props\n * 3. The width and height values for the `data` prop\n *\n * If only one of `width` or `height` are defined, then the other will attempt to be calculated based on the image's aspect ratio,\n * provided that both `data.width` and `data.height` are available. If `data.width` and `data.height` aren't available, then the aspect ratio cannot be determined and the missing\n * value will remain as `null`\n */\nexport function Image({\n data,\n width,\n height,\n loading,\n loader = shopifyImageLoader,\n loaderOptions,\n widths,\n decoding = 'async',\n ...rest\n}: ShopifyImageProps) {\n if (!data.url) {\n const missingUrlError = `<Image/>: the 'data' prop requires the 'url' property. Image: ${\n data.id ?? 'no ID provided'\n }`;\n\n if (__HYDROGEN_DEV__) {\n throw new Error(missingUrlError);\n } else {\n console.error(missingUrlError);\n }\n\n return null;\n }\n\n if (__HYDROGEN_DEV__ && !data.altText && !rest.alt) {\n console.warn(\n `<Image/>: the 'data' prop should have the 'altText' property, or the 'alt' prop, and one of them should not be empty. Image: ${\n data.id ?? data.url\n }`\n );\n }\n\n const {width: imgElementWidth, height: imgElementHeight} =\n getShopifyImageDimensions({\n data,\n loaderOptions,\n elementProps: {\n width,\n height,\n },\n });\n\n if (__HYDROGEN_DEV__ && (!imgElementWidth || !imgElementHeight)) {\n console.warn(\n `<Image/>: the 'data' prop requires either 'width' or 'data.width', and 'height' or 'data.height' properties. Image: ${\n data.id ?? data.url\n }`\n );\n }\n\n let finalSrc = data.url;\n\n if (loader) {\n finalSrc = loader({\n ...loaderOptions,\n src: data.url,\n width: imgElementWidth,\n height: imgElementHeight,\n });\n if (typeof finalSrc !== 'string' || !finalSrc) {\n throw new Error(\n `<Image/>: 'loader' did not return a valid string. Image: ${\n data.id ?? data.url\n }`\n );\n }\n }\n\n // determining what the intended width of the image is. For example, if the width is specified and lower than the image width, then that is the maximum image width\n // to prevent generating a srcset with widths bigger than needed or to generate images that would distort because of being larger than original\n const maxWidth =\n width && imgElementWidth && width < imgElementWidth\n ? width\n : imgElementWidth;\n const finalSrcset =\n rest.srcSet ??\n internalImageSrcSet({\n ...loaderOptions,\n widths,\n src: data.url,\n width: maxWidth,\n height: imgElementHeight,\n loader,\n });\n\n /* eslint-disable hydrogen/prefer-image-component */\n return (\n <img\n id={data.id ?? ''}\n alt={data.altText ?? rest.alt ?? ''}\n loading={loading ?? 'lazy'}\n {...rest}\n src={finalSrc}\n width={imgElementWidth ?? undefined}\n height={imgElementHeight ?? undefined}\n srcSet={finalSrcset}\n decoding={decoding}\n />\n );\n /* eslint-enable hydrogen/prefer-image-component */\n}\n\ntype InternalShopifySrcSetGeneratorsParams = Simplify<\n ShopifyLoaderOptions & {\n src: ImageType['url'];\n widths?: (HtmlImageProps['width'] | ImageType['width'])[];\n loader?: (params: ShopifyLoaderParams) => string;\n }\n>;\nfunction internalImageSrcSet({\n src,\n width,\n crop,\n scale,\n widths,\n loader,\n height,\n}: InternalShopifySrcSetGeneratorsParams) {\n const hasCustomWidths = widths && Array.isArray(widths);\n if (hasCustomWidths && widths.some((size) => isNaN(size as number))) {\n throw new Error(\n `<Image/>: the 'widths' must be an array of numbers. Image: ${src}`\n );\n }\n\n let aspectRatio = 1;\n if (width && height) {\n aspectRatio = Number(height) / Number(width);\n }\n\n let setSizes = hasCustomWidths ? widths : IMG_SRC_SET_SIZES;\n if (\n !hasCustomWidths &&\n width &&\n width < IMG_SRC_SET_SIZES[IMG_SRC_SET_SIZES.length - 1]\n ) {\n setSizes = IMG_SRC_SET_SIZES.filter((size) => size <= width);\n }\n const srcGenerator = loader ? loader : addImageSizeParametersToUrl;\n return setSizes\n .map(\n (size) =>\n `${srcGenerator({\n src,\n width: size,\n // height is not applied if there is no crop\n // if there is crop, then height is applied as a ratio of the original width + height aspect ratio * size\n height: crop ? Number(size) * aspectRatio : undefined,\n crop,\n scale,\n })} ${size}w`\n )\n .join(', ');\n}\n","import {type HTMLAttributes} from 'react';\nimport {shopifyImageLoader} from './image-size.js';\nimport type {Video as VideoType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\nexport interface VideoProps {\n /** An object with fields that correspond to the Storefront API's [Video object](https://shopify.dev/api/storefront/latest/objects/video). */\n data: PartialDeep<VideoType, {recurseIntoArrays: true}>;\n /** An object of image size options for the video's `previewImage`. Uses `shopifyImageLoader` to generate the `poster` URL. */\n previewImageOptions?: Parameters<typeof shopifyImageLoader>[0];\n /** Props that will be passed to the `video` element's `source` children elements. */\n sourceProps?: HTMLAttributes<HTMLSourceElement> & {\n 'data-testid'?: string;\n };\n}\n\n/**\n * The `Video` component renders a `video` for the Storefront API's [Video object](https://shopify.dev/api/storefront/reference/products/video).\n */\nexport function Video(props: JSX.IntrinsicElements['video'] & VideoProps) {\n const {\n data,\n previewImageOptions,\n id = data.id,\n playsInline = true,\n controls = true,\n sourceProps = {},\n ...passthroughProps\n } = props;\n\n const posterUrl = shopifyImageLoader({\n src: data.previewImage?.url ?? '',\n ...previewImageOptions,\n });\n\n if (!data.sources) {\n throw new Error(`<Video/> requires a 'data.sources' array`);\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n {...passthroughProps}\n id={id}\n playsInline={playsInline}\n controls={controls}\n poster={posterUrl}\n >\n {data.sources.map((source) => {\n if (!(source?.url && source?.mimeType)) {\n throw new Error(`<Video/> needs 'source.url' and 'source.mimeType'`);\n }\n return (\n <source\n {...sourceProps}\n key={source.url}\n src={source.url}\n type={source.mimeType}\n />\n );\n })}\n </video>\n );\n}\n","import {useState, useEffect} from 'react';\n\nconst SCRIPTS_LOADED: Record<string, Promise<boolean>> = {};\n\nexport function loadScript(\n src: string,\n options?: {module?: boolean; in?: 'head' | 'body'}\n): Promise<boolean> {\n const isScriptLoaded: Promise<boolean> = SCRIPTS_LOADED[src];\n\n if (isScriptLoaded) {\n return isScriptLoaded;\n }\n\n const promise = new Promise<boolean>((resolve, reject) => {\n const script = document.createElement('script');\n if (options?.module) {\n script.type = 'module';\n } else {\n script.type = 'text/javascript';\n }\n script.src = src;\n script.onload = () => {\n resolve(true);\n };\n script.onerror = () => {\n reject(false);\n };\n if (options?.in === 'head') {\n document.head.appendChild(script);\n } else {\n document.body.appendChild(script);\n }\n });\n\n SCRIPTS_LOADED[src] = promise;\n\n return promise;\n}\n\ntype LoadScriptParams = Parameters<typeof loadScript>;\n\n/**\n * The `useLoadScript` hook loads an external script tag in the browser. It allows React components to lazy-load large third-party dependencies.\n */\nexport function useLoadScript(\n url: LoadScriptParams[0],\n options?: LoadScriptParams[1]\n): ScriptState {\n const [status, setStatus] = useState<ScriptState>('loading');\n const stringifiedOptions = JSON.stringify(options);\n\n useEffect(() => {\n async function loadScriptWrapper() {\n try {\n setStatus('loading');\n await loadScript(url, options);\n setStatus('done');\n } catch (error) {\n setStatus('error');\n }\n }\n\n loadScriptWrapper();\n }, [url, stringifiedOptions, options]);\n\n return status;\n}\n\ntype ScriptState = 'loading' | 'done' | 'error';\n","import {useState, useEffect, useCallback} from 'react';\nimport {useLoadScript} from './load-script.js';\nimport type {Model3d} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ModelViewerElement} from '@google/model-viewer/lib/model-viewer.js';\n\ntype PropsWeControl = 'src';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n 'model-viewer': PartialDeep<\n ModelViewerElement,\n {recurseIntoArrays: true}\n >;\n }\n }\n}\n\ntype ModelViewerProps = Omit<\n PartialDeep<JSX.IntrinsicElements['model-viewer'], {recurseIntoArrays: true}>,\n PropsWeControl\n> & {\n /** An object with fields that correspond to the Storefront API's [Model3D object](https://shopify.dev/api/storefront/latest/objects/model3d). */\n data: PartialDeep<Model3d, {recurseIntoArrays: true}>;\n /** The callback to invoke when the 'error' event is triggered. Refer to [error in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-error). */\n onError?: (event: Event) => void;\n /** The callback to invoke when the `load` event is triggered. Refer to [load in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-load). */\n onLoad?: (event: Event) => void;\n /** The callback to invoke when the 'preload' event is triggered. Refer to [preload in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-preload). */\n onPreload?: (event: Event) => void;\n /** The callback to invoke when the 'model-visibility' event is triggered. Refer to [model-visibility in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-modelVisibility). */\n onModelVisibility?: (event: Event) => void;\n /** The callback to invoke when the 'progress' event is triggered. Refer to [progress in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-progress). */\n onProgress?: (event: Event) => void;\n /** The callback to invoke when the 'ar-status' event is triggered. Refer to [ar-status in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-arStatus). */\n onArStatus?: (event: Event) => void;\n /** The callback to invoke when the 'ar-tracking' event is triggered. Refer to [ar-tracking in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-arTracking). */\n onArTracking?: (event: Event) => void;\n /** The callback to invoke when the 'quick-look-button-tapped' event is triggered. Refer to [quick-look-button-tapped in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-quickLookButtonTapped). */\n onQuickLookButtonTapped?: (event: Event) => void;\n /** The callback to invoke when the 'camera-change' event is triggered. Refer to [camera-change in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-events-cameraChange). */\n onCameraChange?: (event: Event) => void;\n /** The callback to invoke when the 'environment-change' event is triggered. Refer to [environment-change in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-lightingandenv-events-environmentChange). */\n onEnvironmentChange?: (event: Event) => void;\n /** The callback to invoke when the 'play' event is triggered. Refer to [play in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-events-play). */\n onPlay?: (event: Event) => void;\n /** The callback to invoke when the 'pause' event is triggered. Refer to [pause in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-events-pause). */\n onPause?: (event: Event) => void;\n /** The callback to invoke when the 'scene-graph-ready' event is triggered. Refer to [scene-graph-ready in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-scenegraph-events-sceneGraphReady). */\n onSceneGraphReady?: (event: Event) => void;\n};\n\n/**\n * The `ModelViewer` component renders a 3D model (with the `model-viewer` custom element) for\n * the Storefront API's [Model3d object](https://shopify.dev/api/storefront/reference/products/model3d).\n *\n * The `model-viewer` custom element is lazily downloaded through a dynamically-injected `<script type=\"module\">` tag when the `<ModelViewer />` component is rendered\n *\n * ModelViewer is using version `1.21.1` of the `@google/model-viewer` library.\n */\nexport function ModelViewer(props: ModelViewerProps) {\n const [modelViewer, setModelViewer] = useState<undefined | HTMLElement>(\n undefined\n );\n const callbackRef = useCallback((node: HTMLElement) => {\n setModelViewer(node);\n }, []);\n const {data, children, className, ...passthroughProps} = props;\n\n const modelViewerLoadedStatus = useLoadScript(\n 'https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js',\n {\n module: true,\n }\n );\n\n useEffect(() => {\n if (!modelViewer) {\n return;\n }\n if (passthroughProps.onError)\n modelViewer.addEventListener('error', passthroughProps.onError);\n if (passthroughProps.onLoad)\n modelViewer.addEventListener('load', passthroughProps.onLoad);\n if (passthroughProps.onPreload)\n modelViewer.addEventListener('preload', passthroughProps.onPreload);\n if (passthroughProps.onModelVisibility)\n modelViewer.addEventListener(\n 'model-visibility',\n passthroughProps.onModelVisibility\n );\n if (passthroughProps.onProgress)\n modelViewer.addEventListener('progress', passthroughProps.onProgress);\n if (passthroughProps.onArStatus)\n modelViewer.addEventListener('ar-status', passthroughProps.onArStatus);\n if (passthroughProps.onArTracking)\n modelViewer.addEventListener(\n 'ar-tracking',\n passthroughProps.onArTracking\n );\n if (passthroughProps.onQuickLookButtonTapped)\n modelViewer.addEventListener(\n 'quick-look-button-tapped',\n passthroughProps.onQuickLookButtonTapped\n );\n if (passthroughProps.onCameraChange)\n modelViewer.addEventListener(\n 'camera-change',\n passthroughProps.onCameraChange\n );\n if (passthroughProps.onEnvironmentChange)\n modelViewer.addEventListener(\n 'environment-change',\n passthroughProps.onEnvironmentChange\n );\n if (passthroughProps.onPlay)\n modelViewer.addEventListener('play', passthroughProps.onPlay);\n if (passthroughProps.onPause)\n modelViewer.addEventListener('ar-status', passthroughProps.onPause);\n if (passthroughProps.onSceneGraphReady)\n modelViewer.addEventListener(\n 'scene-graph-ready',\n passthroughProps.onSceneGraphReady\n );\n\n return () => {\n if (modelViewer == null) {\n return;\n }\n if (passthroughProps.onError)\n modelViewer.removeEventListener('error', passthroughProps.onError);\n if (passthroughProps.onLoad)\n modelViewer.removeEventListener('load', passthroughProps.onLoad);\n if (passthroughProps.onPreload)\n modelViewer.removeEventListener('preload', passthroughProps.onPreload);\n if (passthroughProps.onModelVisibility)\n modelViewer.removeEventListener(\n 'model-visibility',\n passthroughProps.onModelVisibility\n );\n if (passthroughProps.onProgress)\n modelViewer.removeEventListener(\n 'progress',\n passthroughProps.onProgress\n );\n if (passthroughProps.onArStatus)\n modelViewer.removeEventListener(\n 'ar-status',\n passthroughProps.onArStatus\n );\n if (passthroughProps.onArTracking)\n modelViewer.removeEventListener(\n 'ar-tracking',\n passthroughProps.onArTracking\n );\n if (passthroughProps.onQuickLookButtonTapped)\n modelViewer.removeEventListener(\n 'quick-look-button-tapped',\n passthroughProps.onQuickLookButtonTapped\n );\n if (passthroughProps.onCameraChange)\n modelViewer.removeEventListener(\n 'camera-change',\n passthroughProps.onCameraChange\n );\n if (passthroughProps.onEnvironmentChange)\n modelViewer.removeEventListener(\n 'environment-change',\n passthroughProps.onEnvironmentChange\n );\n if (passthroughProps.onPlay)\n modelViewer.removeEventListener('play', passthroughProps.onPlay);\n if (passthroughProps.onPause)\n modelViewer.removeEventListener('ar-status', passthroughProps.onPause);\n if (passthroughProps.onSceneGraphReady)\n modelViewer.removeEventListener(\n 'scene-graph-ready',\n passthroughProps.onSceneGraphReady\n );\n };\n }, [\n modelViewer,\n passthroughProps.onArStatus,\n passthroughProps.onArTracking,\n passthroughProps.onCameraChange,\n passthroughProps.onEnvironmentChange,\n passthroughProps.onError,\n passthroughProps.onLoad,\n passthroughProps.onModelVisibility,\n passthroughProps.onPause,\n passthroughProps.onPlay,\n passthroughProps.onPreload,\n passthroughProps.onProgress,\n passthroughProps.onQuickLookButtonTapped,\n passthroughProps.onSceneGraphReady,\n ]);\n\n if (modelViewerLoadedStatus !== 'done') {\n // TODO: What do we want to display while the model-viewer library loads?\n return null;\n }\n\n if (!data.sources?.[0]?.url) {\n const sourcesUrlError = `<ModelViewer/> requires 'data.sources' prop to be an array, with an object that has a property 'url' on it. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(sourcesUrlError);\n } else {\n console.error(sourcesUrlError);\n return null;\n }\n }\n\n if (__HYDROGEN_DEV__ && !data.alt) {\n console.warn(\n `<ModelViewer/> requires the 'data.alt' prop for accessibility`\n );\n }\n\n return (\n <model-viewer\n // @ts-expect-error ref should exist\n ref={callbackRef}\n {...passthroughProps}\n className={className}\n id={passthroughProps.id ?? data.id}\n src={data.sources[0].url}\n alt={data.alt ?? null}\n camera-controls={passthroughProps.cameraControls ?? true}\n poster={(passthroughProps.poster || data.previewImage?.url) ?? null}\n autoplay={passthroughProps.autoplay ?? true}\n loading={passthroughProps.loading}\n reveal={passthroughProps.reveal}\n ar={passthroughProps.ar}\n ar-modes={passthroughProps.arModes}\n ar-scale={passthroughProps.arScale}\n // @ts-expect-error arPlacement should exist as a type, not sure why it doesn't. https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-attributes-arPlacement\n ar-placement={passthroughProps.arPlacement}\n ios-src={passthroughProps.iosSrc}\n touch-action={passthroughProps.touchAction}\n disable-zoom={passthroughProps.disableZoom}\n orbit-sensitivity={passthroughProps.orbitSensitivity}\n auto-rotate={passthroughProps.autoRotate}\n auto-rotate-delay={passthroughProps.autoRotateDelay}\n // @ts-expect-error rotationPerSecond should exist as a type, not sure why it doesn't. https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-rotationPerSecond\n rotation-per-second={passthroughProps.rotationPerSecond}\n interaction-policy={passthroughProps.interactionPolicy}\n interaction-prompt={passthroughProps.interactionPrompt}\n interaction-prompt-style={passthroughProps.interactionPromptStyle}\n interaction-prompt-threshold={passthroughProps.interactionPromptThreshold}\n camera-orbit={passthroughProps.cameraOrbit}\n camera-target={passthroughProps.cameraTarget}\n field-of-view={passthroughProps.fieldOfView}\n max-camera-orbit={passthroughProps.maxCameraOrbit}\n min-camera-orbit={passthroughProps.minCameraOrbit}\n max-field-of-view={passthroughProps.maxFieldOfView}\n min-field-of-view={passthroughProps.minFieldOfView}\n bounds={passthroughProps.bounds}\n interpolation-decay={passthroughProps.interpolationDecay ?? 100}\n skybox-image={passthroughProps.skyboxImage}\n environment-image={passthroughProps.environmentImage}\n exposure={passthroughProps.exposure}\n shadow-intensity={passthroughProps.shadowIntensity ?? 0}\n shadow-softness={passthroughProps.shadowSoftness ?? 0}\n animation-name={passthroughProps.animationName}\n animation-crossfade-duration={passthroughProps.animationCrossfadeDuration}\n variant-name={passthroughProps.variantName}\n orientation={passthroughProps.orientation}\n scale={passthroughProps.scale}\n >\n {children}\n </model-viewer>\n );\n}\n","import {Image, type ShopifyImageProps} from './Image.js';\nimport {Video} from './Video.js';\nimport {ExternalVideo} from './ExternalVideo.js';\nimport {ModelViewer} from './ModelViewer.js';\nimport type {MediaEdge as MediaEdgeType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\ninterface MediaFileProps {\n /** An object with fields that correspond to the Storefront API's [Media object](https://shopify.dev/api/storefront/reference/products/media). */\n data: PartialDeep<MediaEdgeType['node'], {recurseIntoArrays: true}>;\n /** The options for the `Image`, `Video`, or `ExternalVideo` components. */\n mediaOptions?: {\n /** Props that will only apply when an `<Image />` is rendered */\n image: Omit<ShopifyImageProps, 'data'>;\n /** Props that will only apply when a `<Video />` is rendered */\n video: Omit<React.ComponentProps<typeof Video>, 'data'>;\n /** Props that will only apply when an `<ExternalVideo />` is rendered */\n externalVideo: Omit<\n React.ComponentProps<typeof ExternalVideo>['options'],\n 'data'\n >;\n /** Props that will only apply when a `<ModelViewer />` is rendered */\n modelViewer: Omit<typeof ModelViewer, 'data'>;\n };\n}\n\n/**\n * The `MediaFile` component renders the media for the Storefront API's\n * [Media object](https://shopify.dev/api/storefront/reference/products/media). It renders an `Image`, a\n * `Video`, an `ExternalVideo`, or a `ModelViewer` depending on the `__typename` of the `data` prop.\n */\nexport function MediaFile({\n data,\n mediaOptions,\n ...passthroughProps\n}: MediaFileProps) {\n switch (data.__typename) {\n case 'MediaImage': {\n if (!data.image) {\n const noDataImage = `<MediaFile/>: 'data.image' does not exist for __typename of 'MediaImage'; rendering 'null' by default.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataImage);\n } else {\n console.warn(noDataImage);\n return null;\n }\n }\n\n return (\n <Image\n {...passthroughProps}\n {...mediaOptions?.image}\n data={data.image}\n />\n );\n }\n case 'Video': {\n return (\n <Video {...passthroughProps} {...mediaOptions?.video} data={data} />\n );\n }\n case 'ExternalVideo': {\n return (\n <ExternalVideo\n {...passthroughProps}\n {...mediaOptions?.externalVideo}\n data={data}\n />\n );\n }\n case 'Model3d': {\n return (\n <ModelViewer\n {...passthroughProps}\n {...mediaOptions?.modelViewer}\n data={data}\n />\n );\n }\n default: {\n const typenameMissingMessage = `<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to correctly render the correct component for this media. Rendering 'null' by default`;\n if (__HYDROGEN_DEV__) {\n throw new Error(typenameMissingMessage);\n } else {\n console.error(typenameMissingMessage);\n return null;\n }\n }\n }\n}\n","import {type ElementType, useMemo, type ComponentPropsWithoutRef} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {Image} from './Image.js';\nimport type {\n MediaImage,\n Page,\n ProductVariant,\n Product,\n GenericFile,\n Video as VideoType,\n Metafield as MetafieldType,\n} from './storefront-api-types.js';\nimport {Video} from './Video.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport type {PartialDeep, JsonValue} from 'type-fest';\n\ninterface BaseProps<ComponentGeneric extends ElementType> {\n /** An object with fields that correspond to the Storefront API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield). */\n data: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null;\n /** An HTML tag or React component to be rendered as the base element wrapper. The default value varies depending on [metafield.type](https://shopify.dev/apps/metafields/types). */\n as?: ComponentGeneric;\n}\n\nexport type MetafieldProps<ComponentGeneric extends ElementType> =\n ComponentPropsWithoutRef<ComponentGeneric> & BaseProps<ComponentGeneric>;\n\n/**\n * The `Metafield` component renders the value of a Storefront\n * API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield).\n * Relies on the `locale` property of the `useShop()` hook, so it must be a desendent of `<ShopifyProvider/>`\n *\n * Renders a smart default of the Metafield's `value`. For more information, refer to the [Default output](#default-output) section.\n */\nexport function Metafield<ComponentGeneric extends ElementType>(\n props: MetafieldProps<ComponentGeneric>\n) {\n const {data, as, ...passthroughProps} = props;\n const {locale} = useShop();\n\n const parsedMetafield = useMemo(() => parseMetafield(data), [data]);\n\n if (!parsedMetafield) {\n const noDataPropWarning = `<Metafield/>: nothing was passed to the data prop 'data'. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataPropWarning);\n } else {\n console.warn(noDataPropWarning);\n }\n return null;\n }\n\n if (parsedMetafield.value === null || parsedMetafield.value === undefined) {\n const noValueWarning = `<Metafield/>: No metafield value for metafield ${\n parsedMetafield.id ?? parsedMetafield.key\n }. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noValueWarning);\n } else {\n console.warn(noValueWarning);\n }\n return null;\n }\n\n switch (parsedMetafield.type) {\n case 'date': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleDateString(locale)}\n </Wrapper>\n );\n }\n case 'date_time': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleString(locale)}\n </Wrapper>\n );\n }\n case 'weight':\n case 'dimension':\n case 'volume': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {getMeasurementAsString(parsedMetafield.value as Measurement, locale)}\n </Wrapper>\n );\n }\n case 'rating': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Rating).value}\n </Wrapper>\n );\n }\n case 'single_line_text_field': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{__html: parsedMetafield.value as string}}\n />\n );\n }\n case 'multi_line_text_field': {\n const Wrapper = as ?? 'div';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{\n __html: (parsedMetafield.value as string).split('\\n').join('<br/>'),\n }}\n />\n );\n }\n case 'url': {\n const protocolLessUrl = new URL(parsedMetafield.value as string);\n return (\n <a\n href={protocolLessUrl.href.replace(protocolLessUrl.protocol, '')}\n {...passthroughProps}\n >\n {parsedMetafield.value as string}\n </a>\n );\n }\n case 'json': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {JSON.stringify(parsedMetafield.value)}\n </Wrapper>\n );\n }\n case 'product_reference':\n case 'variant_reference':\n case 'page_reference': {\n const Wrapper = as ?? 'span';\n const ref = parsedMetafield.reference as Page | ProductVariant | Product;\n return (\n <Wrapper {...passthroughProps}>{ref?.title ?? ref?.id ?? ''}</Wrapper>\n );\n }\n case 'list.single_line_text_field': {\n const Wrapper = as ?? 'ul';\n\n const refArray = parsedMetafield.references\n ? (flattenConnection(parsedMetafield.references) as string[])\n : [];\n return (\n <Wrapper {...passthroughProps}>\n {refArray.map((ref, index) => (\n // there's no unique way to identify these strings, so we do our best by combining the string with the index for the key\n // eslint-disable-next-line react/no-array-index-key\n <li key={`${ref ?? ''}-${index}`}>{ref}</li>\n ))}\n </Wrapper>\n );\n }\n case 'file_reference': {\n if (parsedMetafield.reference?.__typename === 'MediaImage') {\n const ref = parsedMetafield.reference as MediaImage;\n return ref.image ? (\n <Image data={ref.image} {...passthroughProps} />\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'GenericFile') {\n const ref = parsedMetafield.reference as GenericFile;\n return ref.previewImage ? (\n <a href={parsedMetafield.reference?.url ?? ''} {...passthroughProps}>\n <Image data={ref.previewImage} />\n </a>\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'Video') {\n const ref = parsedMetafield.reference as VideoType;\n return <Video {...passthroughProps} data={ref} />;\n }\n }\n }\n\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>{parsedMetafield.value?.toString()}</Wrapper>\n );\n}\n\n/**\n * The `parseMetafield` utility transforms a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield)\n * into a new object whose `values` have been parsed according to the metafield `type`.\n * If the metafield is `null`, then it returns `null` back.\n */\nexport function parseMetafield(\n /** A [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield) or null */\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): PartialDeep<ParsedMetafield, {recurseIntoArrays: true}> | null {\n if (!metafield) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafield' was not passed any value for the 'metafield' argument`\n );\n }\n return null;\n }\n if (\n __HYDROGEN_DEV__ &&\n (metafield.value === null || metafield.value === undefined)\n ) {\n console.warn(\n `'parseMetafield()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n\n return {\n ...metafield,\n value: parseMetafieldValue(metafield),\n };\n}\n\n/**\n * The `parseMetafieldValue` function parses a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `value` from a string into a sensible type corresponding to the [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `type`.\n */\nexport function parseMetafieldValue(\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): ParsedMetafield['value'] {\n if (!metafield) {\n return null;\n }\n\n if (metafield.value === null || metafield.value === undefined) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafieldValue()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n return metafield.value;\n }\n\n switch (metafield.type) {\n case 'boolean':\n return metafield.value === 'true';\n case 'number_integer':\n return parseInt(metafield.value);\n case 'number_decimal':\n return parseFloat(metafield.value);\n case 'date':\n case 'date_time':\n return new Date(metafield.value);\n case 'json':\n case 'weight':\n case 'dimension':\n case 'volume':\n case 'rating':\n return parseJSON(metafield.value);\n case 'color':\n case 'single_line_text_field':\n case 'multi_line_text_field':\n case 'product_reference':\n case 'page_reference':\n case 'variant_reference':\n case 'file_reference':\n case 'url':\n default:\n return metafield.value;\n }\n}\n\n/**\n * Parses a JSON string while preventing prototype injection attacks.\n */\nexport function parseJSON(json: string) {\n if (String(json).includes('__proto__')) {\n return JSON.parse(json, (k, v) => {\n if (k !== '__proto__') return v;\n });\n }\n\n return JSON.parse(json);\n}\n\nconst UNIT_MAPPING: Record<string, string> = {\n // Dimension\n mm: 'millimeter',\n cm: 'centimeter',\n m: 'meter',\n in: 'inch',\n ft: 'foot',\n yd: 'yard',\n // Volume\n ml: 'milliliter',\n l: 'liter',\n us_fl_oz: 'fluid-ounce',\n us_gal: 'gallon',\n // Weight\n kg: 'kilogram',\n g: 'gram',\n lb: 'pound',\n oz: 'ounce',\n};\n\nexport function getMeasurementAsString(\n measurement: Measurement,\n locale = 'en-us',\n options: Intl.NumberFormatOptions = {}\n) {\n let measure: {value: number; unit: string} = {\n value: measurement.value,\n unit: UNIT_MAPPING[measurement.unit],\n };\n\n if (measure.unit == null) {\n measure = convertToSupportedUnit(measurement.value, measurement.unit);\n }\n\n return new Intl.NumberFormat(locale, {\n ...options,\n unit: measure.unit,\n style: 'unit',\n }).format(measure.value);\n}\n\nfunction convertToSupportedUnit(value: number, unit: string) {\n switch (unit) {\n case 'cl':\n return {\n value: value / 1000,\n unit: 'liter',\n };\n case 'm3':\n return {\n value: value * 1000,\n unit: 'liter',\n };\n case 'us_pt':\n return {\n value: value * 0.125,\n unit: 'gallon',\n };\n case 'us_qt':\n return {\n value: value * 0.5,\n unit: 'gallon',\n };\n case 'us_oz':\n return {\n value: value / 128,\n unit: 'gallon',\n };\n case 'imp_pt':\n return {\n value: value / 6.661, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_qt':\n return {\n value: value / 3.331, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_gal':\n return {\n value: value / 1.201, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_fl_oz':\n return {\n value: value * 0.96076, // approximate conversion\n unit: 'fluid-ounce',\n };\n default:\n throw new Error(`Unit not supported: ${unit}`);\n }\n}\n\ntype ParsedMetafield = Omit<\n PartialDeep<MetafieldType, {recurseIntoArrays: true}>,\n 'value'\n> & {\n value?: string | number | boolean | JsonValue | Date | Rating | Measurement;\n};\n\nexport interface Rating {\n value: number;\n scale_min: number;\n scale_max: number;\n}\n\ninterface Measurement {\n unit: string;\n value: number;\n}\n","import {useMemo} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {CurrencyCode, MoneyV2} from './storefront-api-types.js';\n\nexport type UseMoneyValue = {\n /**\n * The currency code from the `MoneyV2` object.\n */\n currencyCode: CurrencyCode;\n /**\n * The name for the currency code, returned by `Intl.NumberFormat`.\n */\n currencyName?: string;\n /**\n * The currency symbol returned by `Intl.NumberFormat`.\n */\n currencySymbol?: string;\n /**\n * The currency narrow symbol returned by `Intl.NumberFormat`.\n */\n currencyNarrowSymbol?: string;\n /**\n * The localized amount, without any currency symbols or non-number types from the `Intl.NumberFormat.formatToParts` parts.\n */\n amount: string;\n /**\n * All parts returned by `Intl.NumberFormat.formatToParts`.\n */\n parts: Intl.NumberFormatPart[];\n /**\n * A string returned by `new Intl.NumberFormat` for the amount and currency code,\n * using the `locale` value in the [`LocalizationProvider` component](https://shopify.dev/api/hydrogen/components/localization/localizationprovider).\n */\n localizedString: string;\n /**\n * The `MoneyV2` object provided as an argument to the hook.\n */\n original: MoneyV2;\n /**\n * A string with trailing zeros removed from the fractional part, if any exist. If there are no trailing zeros, then the fractional part remains.\n * For example, `$640.00` turns into `$640`.\n * `$640.42` remains `$640.42`.\n */\n withoutTrailingZeros: string;\n /**\n * A string without currency and without trailing zeros removed from the fractional part, if any exist. If there are no trailing zeros, then the fractional part remains.\n * For example, `$640.00` turns into `640`.\n * `$640.42` turns into `640.42`.\n */\n withoutTrailingZerosAndCurrency: string;\n};\n\n/**\n * The `useMoney` hook takes a [MoneyV2 object](https://shopify.dev/api/storefront/reference/common-objects/moneyv2) and returns a\n * default-formatted string of the amount with the correct currency indicator, along with some of the parts provided by\n * [Intl.NumberFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat).\n * Uses `locale` from `ShopifyProvider`\n */\nexport function useMoney(money: MoneyV2): UseMoneyValue {\n const {locale} = useShop();\n\n if (!locale) {\n throw new Error(\n `useMoney(): Unable to get 'locale' from 'useShop()', which means that 'locale' was not passed to '<ShopifyProvider/>'. 'locale' is required for 'useMoney()' to work`\n );\n }\n\n const amount = parseFloat(money.amount);\n\n const options = useMemo(\n () => ({\n style: 'currency',\n currency: money.currencyCode,\n }),\n [money.currencyCode]\n );\n\n const defaultFormatter = useLazyFormatter(locale, options);\n\n const nameFormatter = useLazyFormatter(locale, {\n ...options,\n currencyDisplay: 'name',\n });\n\n const narrowSymbolFormatter = useLazyFormatter(locale, {\n ...options,\n currencyDisplay: 'narrowSymbol',\n });\n\n const withoutTrailingZerosFormatter = useLazyFormatter(locale, {\n ...options,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n\n const withoutCurrencyFormatter = useLazyFormatter(locale);\n\n const withoutTrailingZerosOrCurrencyFormatter = useLazyFormatter(locale, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n\n const isPartCurrency = (part: Intl.NumberFormatPart) =>\n part.type === 'currency';\n\n // By wrapping these properties in functions, we only\n // create formatters if they are going to be used.\n const lazyFormatters = useMemo(\n () => ({\n original: () => money,\n currencyCode: () => money.currencyCode,\n\n localizedString: () => defaultFormatter().format(amount),\n\n parts: () => defaultFormatter().formatToParts(amount),\n\n withoutTrailingZeros: () =>\n amount % 1 === 0\n ? withoutTrailingZerosFormatter().format(amount)\n : defaultFormatter().format(amount),\n\n withoutTrailingZerosAndCurrency: () =>\n amount % 1 === 0\n ? withoutTrailingZerosOrCurrencyFormatter().format(amount)\n : withoutCurrencyFormatter().format(amount),\n\n currencyName: () =>\n nameFormatter().formatToParts(amount).find(isPartCurrency)?.value ??\n money.currencyCode, // e.g. \"US dollars\"\n\n currencySymbol: () =>\n defaultFormatter().formatToParts(amount).find(isPartCurrency)?.value ??\n money.currencyCode, // e.g. \"USD\"\n\n currencyNarrowSymbol: () =>\n narrowSymbolFormatter().formatToParts(amount).find(isPartCurrency)\n ?.value ?? '', // e.g. \"$\"\n\n amount: () =>\n defaultFormatter()\n .formatToParts(amount)\n .filter((part) =>\n ['decimal', 'fraction', 'group', 'integer', 'literal'].includes(\n part.type\n )\n )\n .map((part) => part.value)\n .join(''),\n }),\n [\n money,\n amount,\n nameFormatter,\n defaultFormatter,\n narrowSymbolFormatter,\n withoutCurrencyFormatter,\n withoutTrailingZerosFormatter,\n withoutTrailingZerosOrCurrencyFormatter,\n ]\n );\n\n // Call functions automatically when the properties are accessed\n // to keep these functions as an implementation detail.\n return useMemo(\n () =>\n new Proxy(lazyFormatters as unknown as UseMoneyValue, {\n get: (target, key) => Reflect.get(target, key)?.call(null),\n }),\n [lazyFormatters]\n );\n}\n\nfunction useLazyFormatter(locale: string, options?: Intl.NumberFormatOptions) {\n return useMemo(() => {\n let memoized: Intl.NumberFormat;\n return () => (memoized ??= new Intl.NumberFormat(locale, options));\n }, [locale, options]);\n}\n","import {type ReactNode} from 'react';\nimport {useMoney} from './useMoney.js';\nimport type {MoneyV2, UnitPriceMeasurement} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\ninterface CustomProps<ComponentGeneric extends React.ElementType> {\n /** An HTML tag or React Component to be rendered as the base element wrapper. The default is `div`. */\n as?: ComponentGeneric;\n /** An object with fields that correspond to the Storefront API's [MoneyV2 object](https://shopify.dev/api/storefront/reference/common-objects/moneyv2). */\n data: PartialDeep<MoneyV2, {recurseIntoArrays: true}>;\n /** Whether to remove the currency symbol from the output. */\n withoutCurrency?: boolean;\n /** Whether to remove trailing zeros (fractional money) from the output. */\n withoutTrailingZeros?: boolean;\n /** A [UnitPriceMeasurement object](https://shopify.dev/api/storefront/latest/objects/unitpricemeasurement). */\n measurement?: PartialDeep<UnitPriceMeasurement, {recurseIntoArrays: true}>;\n /** Customizes the separator between the money output and the measurement output. Used with the `measurement` prop. Defaults to `'/'`. */\n measurementSeparator?: ReactNode;\n}\n\n// This article helps understand the typing here https://www.benmvp.com/blog/polymorphic-react-components-typescript/ Ben is the best :)\nexport type MoneyProps<ComponentGeneric extends React.ElementType> =\n CustomProps<ComponentGeneric> &\n Omit<\n React.ComponentPropsWithoutRef<ComponentGeneric>,\n keyof CustomProps<ComponentGeneric>\n >;\n\n/**\n * The `Money` component renders a string of the Storefront API's\n * [MoneyV2 object](https://shopify.dev/api/storefront/reference/common-objects/moneyv2) according to the\n * `locale` in the `ShopifyProvider` component.\n */\nexport function Money<ComponentGeneric extends React.ElementType>({\n data,\n as,\n withoutCurrency,\n withoutTrailingZeros,\n measurement,\n measurementSeparator = '/',\n ...passthroughProps\n}: MoneyProps<ComponentGeneric>) {\n if (!isMoney(data)) {\n throw new Error(\n `<Money/> needs a valid 'data' prop that has 'amount' and 'currencyCode'`\n );\n }\n const moneyObject = useMoney(data);\n const Wrapper = as ?? 'div';\n\n let output = moneyObject.localizedString;\n\n if (withoutCurrency || withoutTrailingZeros) {\n if (withoutCurrency && !withoutTrailingZeros) {\n output = moneyObject.amount;\n } else if (!withoutCurrency && withoutTrailingZeros) {\n output = moneyObject.withoutTrailingZeros;\n } else {\n // both\n output = moneyObject.withoutTrailingZerosAndCurrency;\n }\n }\n\n return (\n <Wrapper {...passthroughProps}>\n {output}\n {measurement && measurement.referenceUnit && (\n <>\n {measurementSeparator}\n {measurement.referenceUnit}\n </>\n )}\n </Wrapper>\n );\n}\n\n// required in order to narrow the money object down and make TS happy\nfunction isMoney(\n maybeMoney: PartialDeep<MoneyV2, {recurseIntoArrays: true}>\n): maybeMoney is MoneyV2 {\n return (\n typeof maybeMoney.amount === 'string' &&\n !!maybeMoney.amount &&\n typeof maybeMoney.currencyCode === 'string' &&\n !!maybeMoney.currencyCode\n );\n}\n","import type {\n MoneyV2,\n UnitPriceMeasurement,\n Product,\n} from './storefront-api-types.js';\nimport {Money, type MoneyProps} from './Money.js';\nimport type {PartialDeep} from 'type-fest';\nimport {flattenConnection} from './flatten-connection.js';\n\ninterface ProductPriceProps {\n /** A [Product object](https://shopify.dev/api/storefront/reference/products/product). */\n data: PartialDeep<Product, {recurseIntoArrays: true}>;\n /** The type of price. Valid values: `regular` (default) or `compareAt`. */\n priceType?: 'regular' | 'compareAt';\n /** The type of value. Valid values: `min` (default), `max` or `unit`. */\n valueType?: 'max' | 'min' | 'unit';\n /** The ID of the variant. */\n variantId?: string;\n}\n\n/**\n * The `ProductPrice` component renders a `Money` component with the product\n * [`priceRange`](https://shopify.dev/api/storefront/reference/products/productpricerange)'s `maxVariantPrice` or `minVariantPrice`, for either the regular price or compare at price range.\n */\nexport function ProductPrice<ComponentGeneric extends React.ElementType>(\n props: ProductPriceProps &\n Omit<MoneyProps<ComponentGeneric>, 'data' | 'measurement'>\n) {\n const {\n priceType = 'regular',\n variantId,\n valueType = 'min',\n data: product,\n ...passthroughProps\n } = props;\n\n if (product == null) {\n throw new Error(`<ProductPrice/> requires a product as the 'data' prop`);\n }\n\n let price: Partial<MoneyV2> | undefined | null;\n let measurement: Partial<UnitPriceMeasurement> | undefined | null;\n\n const variant = variantId\n ? flattenConnection(product?.variants ?? {}).find(\n (variant) => variant?.id === variantId\n ) ?? null\n : null;\n\n if (priceType === 'compareAt') {\n if (variantId && variant) {\n if (variant.compareAtPriceV2?.amount === variant.priceV2?.amount) {\n return null;\n }\n price = variant.compareAtPriceV2;\n } else if (valueType === 'max') {\n price = product?.compareAtPriceRange?.maxVariantPrice;\n } else {\n price = product?.compareAtPriceRange?.minVariantPrice;\n }\n } else {\n if (variantId && variant) {\n price = variant.priceV2;\n if (valueType === 'unit') {\n price = variant.unitPrice;\n measurement = variant.unitPriceMeasurement;\n }\n } else if (valueType === 'max') {\n price = product.priceRange?.maxVariantPrice;\n } else {\n price = product.priceRange?.minVariantPrice;\n }\n }\n\n if (!price) {\n return null;\n }\n\n if (measurement) {\n return (\n <Money {...passthroughProps} data={price} measurement={measurement} />\n );\n }\n\n return <Money {...passthroughProps} data={price} />;\n}\n","import {\n useMemo,\n useState,\n useEffect,\n useCallback,\n createContext,\n useContext,\n} from 'react';\nimport type {\n SelectedOption as SelectedOptionType,\n SellingPlan,\n SellingPlanAllocation,\n Product,\n ProductVariant as ProductVariantType,\n ProductVariantConnection,\n SellingPlan as SellingPlanType,\n SellingPlanAllocation as SellingPlanAllocationType,\n SellingPlanGroup as SellingPlanGroupType,\n SellingPlanGroupConnection,\n} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport {flattenConnection} from './flatten-connection.js';\n\nconst ProductOptionsContext = createContext<ProductHookValue | null>(null);\n\ntype InitialVariantId = ProductVariantType['id'] | null;\n\ninterface ProductProviderProps {\n /** A [Product object](https://shopify.dev/api/storefront/reference/products/product). */\n data: PartialDeep<Product, {recurseIntoArrays: true}>;\n /** A `ReactNode` element. */\n children: React.ReactNode;\n /**\n * The initially selected variant.\n * The following logic applies to `initialVariantId`:\n * 1. If `initialVariantId` is provided, then it's used even if it's out of stock.\n * 2. If `initialVariantId` is provided but is `null`, then no variant is used.\n * 3. If nothing is passed to `initialVariantId` then the first available / in-stock variant is used.\n * 4. If nothing is passed to `initialVariantId` and no variants are in stock, then the first variant is used.\n */\n initialVariantId?: InitialVariantId;\n}\n\n/**\n * `<ProductProvider />` is a context provider that enables use of the `useProduct()` hook.\n *\n * It helps manage selected options and variants for a product.\n */\nexport function ProductProvider({\n children,\n data: product,\n initialVariantId: explicitVariantId,\n}: ProductProviderProps) {\n // The flattened variants\n const variants = useMemo(\n () => flattenConnection(product.variants ?? {}),\n [product.variants]\n );\n\n if (!isProductVariantArray(variants)) {\n throw new Error(\n `<ProductProvider/> requires 'product.variants.nodes' or 'product.variants.edges'`\n );\n }\n\n // All the options available for a product, based on all the variants\n const options = useMemo(() => getOptions(variants), [variants]);\n\n /**\n * Track the selectedVariant within the provider.\n */\n const [selectedVariant, setSelectedVariant] = useState<\n | PartialDeep<ProductVariantType, {recurseIntoArrays: true}>\n | undefined\n | null\n >(() => getVariantBasedOnIdProp(explicitVariantId, variants));\n\n /**\n * Track the selectedOptions within the provider. If a `initialVariantId`\n * is passed, use that to select initial options.\n */\n const [selectedOptions, setSelectedOptions] = useState<SelectedOptions>(() =>\n getSelectedOptions(selectedVariant)\n );\n\n /**\n * When the initialVariantId changes, we need to make sure we\n * update the selected variant and selected options. If not,\n * then the selected variant and options will reference incorrect\n * values.\n */\n useEffect(() => {\n const newSelectedVariant = getVariantBasedOnIdProp(\n explicitVariantId,\n variants\n );\n setSelectedVariant(newSelectedVariant);\n setSelectedOptions(getSelectedOptions(newSelectedVariant));\n }, [explicitVariantId, variants]);\n\n /**\n * Allow the developer to select an option.\n */\n const setSelectedOption = useCallback(\n (name: string, value: string) => {\n setSelectedOptions((selectedOptions) => {\n const opts = {...selectedOptions, [name]: value};\n setSelectedVariant(getSelectedVariant(variants, opts));\n return opts;\n });\n },\n [setSelectedOptions, variants]\n );\n\n const isOptionInStock = useCallback(\n (option: string, value: string) => {\n const proposedVariant = getSelectedVariant(variants, {\n ...selectedOptions,\n ...{[option]: value},\n });\n\n return proposedVariant?.availableForSale ?? true;\n },\n [selectedOptions, variants]\n );\n\n const sellingPlanGroups = useMemo(\n () =>\n flattenConnection(product.sellingPlanGroups ?? {}).map(\n (sellingPlanGroup) => ({\n ...sellingPlanGroup,\n sellingPlans: flattenConnection(sellingPlanGroup?.sellingPlans ?? {}),\n })\n ),\n [product.sellingPlanGroups]\n );\n\n /**\n * Track the selectedSellingPlan within the hook. If `initialSellingPlanId`\n * is passed, use that as an initial value. Look it up from the `selectedVariant`, since\n * that is also a requirement.\n */\n const [selectedSellingPlan, setSelectedSellingPlan] = useState<\n PartialDeep<SellingPlan, {recurseIntoArrays: true}> | undefined\n >(undefined);\n\n const selectedSellingPlanAllocation = useMemo<\n PartialDeep<SellingPlanAllocation, {recurseIntoArrays: true}> | undefined\n >(() => {\n if (!selectedVariant || !selectedSellingPlan) {\n return;\n }\n\n if (\n !selectedVariant.sellingPlanAllocations?.nodes &&\n !selectedVariant.sellingPlanAllocations?.edges\n ) {\n throw new Error(\n `<ProductProvider/>: You must include 'sellingPlanAllocations.nodes' or 'sellingPlanAllocations.edges' in your variants in order to calculate selectedSellingPlanAllocation`\n );\n }\n\n return flattenConnection(selectedVariant.sellingPlanAllocations).find(\n (allocation) => allocation?.sellingPlan?.id === selectedSellingPlan.id\n );\n }, [selectedVariant, selectedSellingPlan]);\n\n const value = useMemo<ProductHookValue>(\n () => ({\n variants,\n variantsConnection: product.variants,\n options,\n selectedVariant,\n setSelectedVariant,\n selectedOptions,\n setSelectedOption,\n setSelectedOptions,\n isOptionInStock,\n selectedSellingPlan,\n setSelectedSellingPlan,\n selectedSellingPlanAllocation,\n sellingPlanGroups,\n sellingPlanGroupsConnection: product.sellingPlanGroups,\n }),\n [\n isOptionInStock,\n options,\n product.sellingPlanGroups,\n product.variants,\n selectedOptions,\n selectedSellingPlan,\n selectedSellingPlanAllocation,\n selectedVariant,\n sellingPlanGroups,\n setSelectedOption,\n variants,\n ]\n );\n\n return (\n <ProductOptionsContext.Provider value={value}>\n {children}\n </ProductOptionsContext.Provider>\n );\n}\n\n/**\n * Provides access to the context value provided by `<ProductProvider />`. Must be a descendent of `<ProductProvider />`.\n */\nexport function useProduct() {\n const context = useContext(ProductOptionsContext);\n\n if (!context) {\n throw new Error(`'useProduct' must be a child of <ProductProvider />`);\n }\n\n return context;\n}\n\nfunction getSelectedVariant(\n variants: PartialDeep<ProductVariantType, {recurseIntoArrays: true}>[],\n choices: SelectedOptions\n): PartialDeep<ProductVariantType, {recurseIntoArrays: true}> | undefined {\n /**\n * Ensure the user has selected all the required options, not just some.\n */\n if (\n !variants.length ||\n variants?.[0]?.selectedOptions?.length !== Object.keys(choices).length\n ) {\n return;\n }\n\n return variants?.find((variant) => {\n return Object.entries(choices).every(([name, value]) => {\n return variant?.selectedOptions?.some(\n (option) => option?.name === name && option?.value === value\n );\n });\n });\n}\n\nfunction getOptions(\n variants: PartialDeep<ProductVariantType, {recurseIntoArrays: true}>[]\n): OptionWithValues[] {\n const map = variants.reduce((memo, variant) => {\n if (!variant.selectedOptions) {\n throw new Error(`'getOptions' requires 'variant.selectedOptions'`);\n }\n variant?.selectedOptions?.forEach((opt) => {\n memo[opt?.name ?? ''] = memo[opt?.name ?? ''] || new Set();\n memo[opt?.name ?? ''].add(opt?.value ?? '');\n });\n\n return memo;\n }, {} as Record<string, Set<string>>);\n\n return Object.keys(map).map((option) => {\n return {\n name: option,\n values: Array.from(map[option]),\n };\n });\n}\n\nfunction getVariantBasedOnIdProp(\n explicitVariantId: InitialVariantId | undefined,\n variants: Array<\n PartialDeep<ProductVariantType, {recurseIntoArrays: true}> | undefined\n >\n) {\n // get the initial variant based on the logic outlined in the comments for 'initialVariantId' above\n // * 1. If `initialVariantId` is provided, then it's used even if it's out of stock.\n if (explicitVariantId) {\n const foundVariant = variants.find(\n (variant) => variant?.id === explicitVariantId\n );\n if (!foundVariant) {\n console.warn(\n `<ProductProvider/> received a 'initialVariantId' prop, but could not actually find a variant with that ID`\n );\n }\n return foundVariant;\n }\n // * 2. If `initialVariantId` is provided but is `null`, then no variant is used.\n if (explicitVariantId === null) {\n return null;\n }\n // * 3. If nothing is passed to `initialVariantId` then the first available / in-stock variant is used.\n // * 4. If nothing is passed to `initialVariantId` and no variants are in stock, then the first variant is used.\n if (explicitVariantId === undefined) {\n return variants.find((variant) => variant?.availableForSale) || variants[0];\n }\n}\n\nfunction getSelectedOptions(\n selectedVariant:\n | PartialDeep<ProductVariantType, {recurseIntoArrays: true}>\n | undefined\n | null\n): SelectedOptions {\n return selectedVariant?.selectedOptions\n ? selectedVariant.selectedOptions.reduce<SelectedOptions>(\n (memo, optionSet) => {\n memo[optionSet?.name ?? ''] = optionSet?.value ?? '';\n return memo;\n },\n {}\n )\n : {};\n}\n\nfunction isProductVariantArray(\n maybeVariantArray:\n | (PartialDeep<ProductVariantType, {recurseIntoArrays: true}> | undefined)[]\n | undefined\n): maybeVariantArray is PartialDeep<\n ProductVariantType,\n {recurseIntoArrays: true}\n>[] {\n if (!maybeVariantArray || !Array.isArray(maybeVariantArray)) {\n return false;\n }\n\n return true;\n}\n\nexport interface OptionWithValues {\n name: SelectedOptionType['name'];\n values: SelectedOptionType['value'][];\n}\n\ntype ProductHookValue = PartialDeep<\n {\n /** An array of the variant `nodes` from the `VariantConnection`. */\n variants: ProductVariantType[];\n variantsConnection?: ProductVariantConnection;\n /** An array of the product's options and values. */\n options: OptionWithValues[];\n /** The selected variant. */\n selectedVariant?: ProductVariantType | null;\n selectedOptions: SelectedOptions;\n /** The selected selling plan. */\n selectedSellingPlan?: SellingPlanType;\n /** The selected selling plan allocation. */\n selectedSellingPlanAllocation?: SellingPlanAllocationType;\n /** The selling plan groups. */\n sellingPlanGroups?: (Omit<SellingPlanGroupType, 'sellingPlans'> & {\n sellingPlans: SellingPlanType[];\n })[];\n sellingPlanGroupsConnection?: SellingPlanGroupConnection;\n },\n {recurseIntoArrays: true}\n> & {\n /** A callback to set the selected variant to the variant passed as an argument. */\n setSelectedVariant: (\n variant: PartialDeep<ProductVariantType, {recurseIntoArrays: true}> | null\n ) => void;\n /** A callback to set the selected option. */\n setSelectedOption: (\n name: SelectedOptionType['name'],\n value: SelectedOptionType['value']\n ) => void;\n /** A callback to set multiple selected options at once. */\n setSelectedOptions: (options: SelectedOptions) => void;\n /** A callback to set the selected selling plan to the one passed as an argument. */\n setSelectedSellingPlan: (\n sellingPlan: PartialDeep<SellingPlanType, {recurseIntoArrays: true}>\n ) => void;\n /** A callback that returns a boolean indicating if the option is in stock. */\n isOptionInStock: (\n name: SelectedOptionType['name'],\n value: SelectedOptionType['value']\n ) => boolean;\n};\n\nexport type SelectedOptions = {\n [key: string]: string;\n};\n","import {useShop} from './ShopifyProvider.js';\nimport {useLoadScript} from './load-script.js';\n\n// By using 'never' in the \"or\" cases below, it makes these props \"exclusive\" and means that you cannot pass both of them; you must pass either one OR the other.\ntype ShopPayButtonProps = {\n /** A string of classes to apply to the `div` that wraps the Shop Pay button. */\n className?: string;\n /** A string that's applied to the [CSS custom property (variable)](https://developer.mozilla.org/en-US/docs/Web/CSS/--*) `--shop-pay-button-width` for the [Buy with Shop Pay component](https://shopify.dev/custom-storefronts/tools/web-components#buy-with-shop-pay-component). */\n width?: string;\n} & (\n | {\n /** An array of IDs of the variants to purchase with Shop Pay. This will only ever have a quantity of 1 for each variant. If you want to use other quantities, then use 'variantIdsAndQuantities'. */\n variantIds: string[];\n /** An array of variant IDs and quantities to purchase with Shop Pay. */\n variantIdsAndQuantities?: never;\n }\n | {\n /** An array of IDs of the variants to purchase with Shop Pay. This will only ever have a quantity of 1 for each variant. If you want to use other quantities, then use 'variantIdsAndQuantities'. */\n variantIds?: never;\n /** An array of variant IDs and quantities to purchase with Shop Pay. */\n variantIdsAndQuantities: Array<{\n id: string;\n quantity: number;\n }>;\n }\n);\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n 'shop-pay-button': {\n variants: string;\n 'store-url': string;\n };\n }\n }\n}\n\nconst SHOPJS_URL =\n 'https://cdn.shopify.com/shopifycloud/shop-js/v1.0/client.js';\n\n/**\n * The `ShopPayButton` component renders a button that redirects to the Shop Pay checkout.\n * It renders a [`<shop-pay-button>`](https://shopify.dev/custom-storefronts/tools/web-components) custom element, for which it will lazy-load the source code automatically.\n * It relies on the `<ShopProvider>` context provider.\n */\nexport function ShopPayButton({\n variantIds,\n className,\n variantIdsAndQuantities,\n width,\n}: ShopPayButtonProps) {\n const {storeDomain} = useShop();\n const shopPayLoadedStatus = useLoadScript(SHOPJS_URL);\n\n let ids: string[];\n\n if (variantIds && variantIdsAndQuantities) {\n throw new Error(DoublePropsErrorMessage);\n }\n\n if (variantIds) {\n ids = variantIds.reduce<string[]>((prev, curr) => {\n const bareId = getIdFromGid(curr);\n if (bareId) {\n prev.push(bareId);\n }\n return prev;\n }, []);\n } else if (variantIdsAndQuantities) {\n ids = variantIdsAndQuantities.reduce<string[]>((prev, curr) => {\n const bareId = getIdFromGid(curr?.id);\n if (bareId) {\n prev.push(`${bareId}:${curr?.quantity ?? 1}`);\n }\n return prev;\n }, []);\n } else {\n throw new Error(MissingPropsErrorMessage);\n }\n\n const style = width\n ? ({\n '--shop-pay-button-width': width,\n } as React.CSSProperties)\n : undefined;\n\n return (\n <div className={className} style={style}>\n {shopPayLoadedStatus === 'done' && (\n <shop-pay-button\n store-url={`https://${storeDomain}`}\n variants={ids.join(',')}\n />\n )}\n </div>\n );\n}\n\n/**\n * Takes a string in the format of \"gid://shopify/ProductVariant/41007289630776\" and returns a string of the ID part at the end: \"41007289630776\"\n */\nexport function getIdFromGid(id?: string) {\n if (!id) return;\n return id.split('/').pop();\n}\n\nexport const MissingPropsErrorMessage = `You must pass in either \"variantIds\" or \"variantIdsAndQuantities\" to ShopPayButton`;\nexport const DoublePropsErrorMessage = `You must provide either a variantIds or variantIdsAndQuantities prop, but not both in the ShopPayButton component`;\n","import {SFAPI_VERSION} from './storefront-api-constants.js';\n\n/**\n * The `createStorefrontClient()` function creates helpers that enable you to quickly query the Shopify Storefront API.\n *\n * When used on the server, it is recommended to use the `privateStorefrontToken` prop. When used on the client, it is recommended to use the `publicStorefrontToken` prop.\n */\nexport function createStorefrontClient({\n storeDomain,\n privateStorefrontToken,\n publicStorefrontToken,\n storefrontApiVersion,\n contentType,\n}: StorefrontClientProps): StorefrontClientReturn {\n if (storefrontApiVersion !== SFAPI_VERSION) {\n console.warn(\n `StorefrontClient: The Storefront API version that you're using is different than the version this build of Hydrogen-UI is targeting. You may run into unexpected errors if these versions don't match. Received verion: \"${storefrontApiVersion}\"; expected version ${SFAPI_VERSION}`\n );\n }\n\n // only warn if not in a browser environment\n if (__HYDROGEN_DEV__ && !privateStorefrontToken && !globalThis.document) {\n console.warn(\n `StorefrontClient: Using a private storefront token is recommended for server environments. Refer to the authentication https://shopify.dev/api/storefront#authentication documentation for more details. `\n );\n }\n\n // only warn if in a browser environment and you're using the privateStorefrontToken\n if (__HYDROGEN_DEV__ && privateStorefrontToken && globalThis) {\n console.warn(\n `StorefrontClient: You are attempting to use a private token in an environment where it can be easily accessed by anyone. This is a security risk; please use the public token and the 'publicStorefrontToken' prop`\n );\n }\n\n return {\n getStorefrontApiUrl(overrideProps) {\n return `https://${\n overrideProps?.storeDomain ?? storeDomain\n }.myshopify.com/api/${\n overrideProps?.storefrontApiVersion ?? storefrontApiVersion\n }/graphql.json`;\n },\n getPrivateTokenHeaders(overrideProps) {\n if (!privateStorefrontToken && !overrideProps?.privateStorefrontToken) {\n throw new Error(\n `StorefrontClient: You did not pass in a 'privateStorefrontToken' while using 'getPrivateTokenHeaders()'`\n );\n }\n\n if (__HYDROGEN_DEV__ && !overrideProps?.buyerIp) {\n console.warn(\n `StorefrontClient: it is recommended to pass in the 'buyerIp' property which improves analytics and data in the admin.`\n );\n }\n\n const finalContentType = overrideProps?.contentType ?? contentType;\n\n return {\n // default to json\n 'content-type':\n finalContentType === 'graphql'\n ? 'application/graphql'\n : 'application/json',\n 'X-SDK-Variant': 'hydrogen-ui',\n 'X-SDK-Variant-Source': 'react',\n 'X-SDK-Version': storefrontApiVersion,\n 'Shopify-Storefront-Private-Token':\n overrideProps?.privateStorefrontToken ?? privateStorefrontToken ?? '',\n ...(overrideProps?.buyerIp\n ? {'Shopify-Storefront-Buyer-IP': overrideProps.buyerIp}\n : {}),\n };\n },\n getPublicTokenHeaders(overrideProps) {\n if (!publicStorefrontToken && !overrideProps?.publicStorefrontToken) {\n throw new Error(\n `StorefrontClient: You did not pass in a 'publicStorefrontToken' while using 'getPublicTokenHeaders()'`\n );\n }\n\n const finalContentType = overrideProps?.contentType ?? contentType;\n\n return {\n // default to json\n 'content-type':\n finalContentType === 'graphql'\n ? 'application/graphql'\n : 'application/json',\n 'X-SDK-Variant': 'hydrogen-ui',\n 'X-SDK-Variant-Source': 'react',\n 'X-SDK-Version': storefrontApiVersion,\n 'X-Shopify-Storefront-Access-Token':\n overrideProps?.publicStorefrontToken ?? publicStorefrontToken ?? '',\n };\n },\n };\n}\n\ntype StorefrontClientProps = {\n /** The host name of the domain (eg: `{shop}.myshopify.com`). */\n storeDomain: string;\n /** The Storefront API delegate access token. Refer to the [authentication](https://shopify.dev/api/storefront#authentication) and [delegate access token](https://shopify.dev/apps/auth/oauth/delegate-access-tokens) documentation for more details. */\n privateStorefrontToken?: string;\n /** The Storefront API access token. Refer to the [authentication](https://shopify.dev/api/storefront#authentication) documentation for more details. */\n publicStorefrontToken?: string;\n /** The Storefront API version. This should almost always be the same as the version Hydrogen-UI was built for. Learn more about Shopify [API versioning](https://shopify.dev/api/usage/versioning) for more details. */\n storefrontApiVersion: string;\n /**\n * Customizes which `\"content-type\"` header is added when using `getPrivateTokenHeaders()` and `getPublicTokenHeaders()`. When fetching with a `JSON.stringify()`-ed `body`, use `\"json\"`. When fetching with a `body` that is a plain string, use `\"graphql\"`. Defaults to `\"json\"`\n *\n * Can also be customized on a call-by-call basis by passing in `'contentType'` to both `getPrivateTokenHeaders({...})` and `getPublicTokenHeaders({...})`, for example: `getPublicTokenHeaders({contentType: 'graphql'})`\n */\n contentType?: 'json' | 'graphql';\n};\n\ntype OverrideTokenHeaderProps = Partial<\n Pick<StorefrontClientProps, 'contentType'>\n>;\n\ntype StorefrontClientReturn = {\n /**\n * Creates the fully-qualified URL to your store's GraphQL endpoint.\n *\n * By default, it will use the config you passed in when calling `createStorefrontClient()`. However, you can override the following settings on each invocation of `getStorefrontApiUrl({...})`:\n *\n * - `storeDomain`\n * - `storefrontApiVersion`\n */\n getStorefrontApiUrl: (\n props?: Partial<\n Pick<StorefrontClientProps, 'storeDomain' | 'storefrontApiVersion'>\n >\n ) => string;\n /**\n * Returns an object that contains headers that are needed for each query to Storefront API GraphQL endpoint. This method uses the private Server-to-Server token which reduces the chance of throttling but must not be exposed to clients. Server-side calls should prefer using this over `getPublicTokenHeaders()`.\n *\n * By default, it will use the config you passed in when calling `createStorefrontClient()`. However, you can override the following settings on each invocation of `getPrivateTokenHeaders({...})`:\n *\n * - `contentType`\n * - `privateStorefrontToken`\n * - `buyerIp`\n *\n * Note that `contentType` defaults to what you configured in `createStorefrontClient({...})` and defaults to `'json'`, but a specific call may require using `graphql`. When using `JSON.stringify()` on the `body`, use `'json'`; otherwise, use `'graphql'`.\n */\n getPrivateTokenHeaders: (\n props?: OverrideTokenHeaderProps &\n Pick<StorefrontClientProps, 'privateStorefrontToken'> & {\n /**\n * The client's IP address. Passing this to the Storefront API when using a server-to-server token will help improve your store's analytics data.\n */\n buyerIp?: string;\n }\n ) => Record<string, string>;\n /**\n * Returns an object that contains headers that are needed for each query to Storefront API GraphQL endpoint. This method uses the private Server-to-Server token which reduces the chance of throttling but must not be exposed to clients. Server-side calls should prefer using this over `getPublicTokenHeaders()`.\n *\n * By default, it will use the config you passed in when calling `createStorefrontClient()`. However, you can override the following settings on each invocation of `getPrivateTokenHeaders({...})`:\n *\n * - `contentType`\n * - `publicStorefrontToken`\n *\n * Note that `contentType` defaults to what you configured in `createStorefrontClient({...})` and defaults to `'json'`, but a specific call may require using `graphql`. When using `JSON.stringify()` on the `body`, use `'json'`; otherwise, use `'graphql'`.\n */\n getPublicTokenHeaders: (\n props?: OverrideTokenHeaderProps &\n Pick<StorefrontClientProps, 'publicStorefrontToken'>\n ) => Record<string, string>;\n};\n"],"names":["t","n","e","r","i","o","a","u","s","l","v","g","c","useLayoutEffect","require$$0","f","React","error","shim","module","require$$1","d","b","isEqual","this","useRef","useState","queue","service","interpret","createMachine","InterpreterStatus","useIsomorphicLayoutEffect","useEffect","useCallback","useSyncExternalStoreWithSelector","ShopifyContext","createContext","storeDomain","storefrontToken","storefrontApiVersion","SFAPI_VERSION","country","isoCode","language","locale","ShopifyProvider","children","shopifyConfig","Error","console","warn","finalConfig","useMemo","replace","_jsxFileName","useShop","shopContext","useContext","useCartFetch","storefrontId","query","variables","headers","STOREFRONT_API_PUBLIC_TOKEN_HEADER","SHOPIFY_STOREFRONT_ID_HEADER","cookieData","parse","document","cookie","SHOPIFY_Y","SHOPIFY_S","SHOPIFY_STOREFRONT_Y_HEADER","SHOPIFY_STOREFRONT_S_HEADER","fetch","method","body","JSON","stringify","toString","then","res","json","catch","data","undefined","errors","useCartActions","numCartLines","cartFragment","countryCode","fetchCart","cartFetch","cartId","CartQuery","id","cartCreate","cart","CartCreate","input","cartLineAdd","lines","CartLineAdd","cartLineUpdate","CartLineUpdate","cartLineRemove","CartLineRemove","noteUpdate","note","CartNoteUpdate","buyerIdentityUpdate","buyerIdentity","CartBuyerIdentityUpdate","cartAttributesUpdate","attributes","CartAttributesUpdate","discountCodesUpdate","discountCodes","CartDiscountCodesUpdate","invokeCart","action","options","entry","entryActions","on","RESOLVE","target","resolveTarget","actions","assign","prevCart","context","_","event","payload","rawCartResult","ERROR","errorTarget","lastValidCart","CART_COMPLETED","exit","exitActions","INITIALIZING_CART_EVENTS","CART_FETCH","CART_CREATE","CART_SET","cartFromGraphQL","UPDATING_CART_EVENTS","CARTLINE_ADD","CARTLINE_UPDATE","CARTLINE_REMOVE","NOTE_UPDATE","BUYER_IDENTITY_UPDATE","CART_ATTRIBUTES_UPDATE","DISCOUNT_CODES_UPDATE","createCartMachine","initialCart","initial","states","uninitialized","cartCompleted","initializationError","idle","cartFetching","cartCreating","cartLineRemoving","cartLineUpdating","cartLineAdding","noteUpdating","buyerIdentityUpdating","cartAttributesUpdating","discountCodesUpdating","useCartAPIStateMachine","onCartActionEntry","onCartActionOptimisticUI","onCartActionComplete","cartMachine","state","send","useMachine","cartFetchAction","type","resultEvent","eventFromFetchResult","cartCreateAction","cartLineAddAction","cartLinesAdd","cartLineUpdateAction","cartLinesUpdate","cartLineRemoveAction","cartLinesRemove","noteUpdateAction","cartNoteUpdate","buyerIdentityUpdateAction","cartBuyerIdentityUpdate","cartAttributesUpdateAction","discountCodesUpdateAction","cartDiscountCodesUpdate","isCartActionEvent","isCartFetchResultEvent","flattenConnection","cartActionEvent","CartContext","useCart","CartProvider","onCreate","onLineAdd","onLineRemove","onLineUpdate","onNoteUpdate","onBuyerIdentityUpdate","onAttributesUpdate","onDiscountCodesUpdate","onCreateComplete","onLineAddComplete","onLineRemoveComplete","onLineUpdateComplete","onNoteUpdateComplete","onBuyerIdentityUpdateComplete","onAttributesUpdateComplete","onDiscountCodesUpdateComplete","defaultCartFragment","customerAccessToken","toUpperCase","prevCountryCode","setPrevCountryCode","prevCustomerAccessToken","setPrevCustomerAccessToken","customerOverridesCountryCode","current","cartState","cartSend","filter","line","includes","map","updatedLine","find","quantity","countryCodeNotUpdated","cartReady","matches","countryChanged","value","fetchingFromStorage","storageAvailable","window","localStorage","getItem","CART_ID_STORAGE_KEY","onCartReadySend","cartEvent","setItem","removeItem","cartInput","cartDisplayState","useDelayedStateUntilHydration","cartContextValue","status","transposeStatus","totalQuantity","linesAdd","linesRemove","linesUpdate","isPending","startTransition","useTransition","delayedState","setDelayedState","firstTimePending","firstTimePendingFinished","displayState","storage","x","DOMException","code","name","length","ExternalVideo","props","frameBorder","allow","allowFullScreen","loading","passthroughProps","embedUrl","finalUrl","urlObject","URL","key","Object","keys","searchParams","set","alt","Image","width","height","loader","shopifyImageLoader","loaderOptions","widths","decoding","rest","url","missingUrlError","altText","imgElementWidth","imgElementHeight","getShopifyImageDimensions","elementProps","finalSrc","src","maxWidth","finalSrcset","srcSet","internalImageSrcSet","crop","scale","hasCustomWidths","Array","isArray","some","size","isNaN","aspectRatio","Number","setSizes","IMG_SRC_SET_SIZES","srcGenerator","addImageSizeParametersToUrl","join","Video","previewImageOptions","playsInline","controls","sourceProps","posterUrl","previewImage","sources","source","mimeType","SCRIPTS_LOADED","loadScript","isScriptLoaded","promise","Promise","resolve","reject","script","createElement","onload","onerror","in","head","appendChild","useLoadScript","setStatus","stringifiedOptions","loadScriptWrapper","ModelViewer","modelViewer","setModelViewer","callbackRef","node","className","modelViewerLoadedStatus","onError","addEventListener","onLoad","onPreload","onModelVisibility","onProgress","onArStatus","onArTracking","onQuickLookButtonTapped","onCameraChange","onEnvironmentChange","onPlay","onPause","onSceneGraphReady","removeEventListener","sourcesUrlError","__HYDROGEN_DEV__","cameraControls","poster","autoplay","reveal","ar","arModes","arScale","arPlacement","iosSrc","touchAction","disableZoom","orbitSensitivity","autoRotate","autoRotateDelay","rotationPerSecond","interactionPolicy","interactionPrompt","interactionPromptStyle","interactionPromptThreshold","cameraOrbit","cameraTarget","fieldOfView","maxCameraOrbit","minCameraOrbit","maxFieldOfView","minFieldOfView","bounds","interpolationDecay","skyboxImage","environmentImage","exposure","shadowIntensity","shadowSoftness","animationName","animationCrossfadeDuration","variantName","orientation","MediaFile","mediaOptions","__typename","image","noDataImage","video","externalVideo","typenameMissingMessage","Metafield","as","parsedMetafield","parseMetafield","noDataPropWarning","noValueWarning","Wrapper","toLocaleDateString","toLocaleString","getMeasurementAsString","__html","split","protocolLessUrl","href","protocol","ref","reference","title","refArray","references","index","metafield","parseMetafieldValue","parseInt","parseFloat","Date","parseJSON","String","k","UNIT_MAPPING","mm","cm","m","ft","yd","ml","us_fl_oz","us_gal","kg","lb","oz","measurement","measure","unit","convertToSupportedUnit","Intl","NumberFormat","style","format","useMoney","money","amount","currency","currencyCode","defaultFormatter","useLazyFormatter","nameFormatter","currencyDisplay","narrowSymbolFormatter","withoutTrailingZerosFormatter","minimumFractionDigits","maximumFractionDigits","withoutCurrencyFormatter","withoutTrailingZerosOrCurrencyFormatter","isPartCurrency","part","lazyFormatters","original","localizedString","parts","formatToParts","withoutTrailingZeros","withoutTrailingZerosAndCurrency","currencyName","currencySymbol","currencyNarrowSymbol","Proxy","get","Reflect","call","memoized","Money","withoutCurrency","measurementSeparator","isMoney","moneyObject","output","referenceUnit","maybeMoney","ProductPrice","priceType","variantId","valueType","product","price","variant","variants","compareAtPriceV2","priceV2","compareAtPriceRange","maxVariantPrice","minVariantPrice","unitPrice","unitPriceMeasurement","priceRange","ProductOptionsContext","ProductProvider","initialVariantId","explicitVariantId","isProductVariantArray","getOptions","selectedVariant","setSelectedVariant","getVariantBasedOnIdProp","selectedOptions","setSelectedOptions","getSelectedOptions","newSelectedVariant","setSelectedOption","opts","getSelectedVariant","isOptionInStock","option","proposedVariant","availableForSale","sellingPlanGroups","sellingPlanGroup","sellingPlans","selectedSellingPlan","setSelectedSellingPlan","selectedSellingPlanAllocation","sellingPlanAllocations","nodes","edges","allocation","sellingPlan","variantsConnection","sellingPlanGroupsConnection","useProduct","choices","entries","every","reduce","memo","forEach","opt","Set","add","values","from","foundVariant","optionSet","maybeVariantArray","SHOPJS_URL","ShopPayButton","variantIds","variantIdsAndQuantities","shopPayLoadedStatus","ids","DoublePropsErrorMessage","prev","curr","bareId","getIdFromGid","push","MissingPropsErrorMessage","pop"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hydrogen-react.dev.js","sources":["../../../../node_modules/@xstate/fsm/es/index.js","../../../../node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../../node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../../../node_modules/use-sync-external-store/shim/with-selector.js","../../../../node_modules/@xstate/react/es/useConstant.js","../../../../node_modules/@xstate/react/es/fsm.js","../../src/flatten-connection.ts","../../src/cart-queries.ts","../../src/storefront-api-constants.ts","../../src/ShopifyProvider.tsx","../../src/cart-constants.ts","../../../../node_modules/worktop/cookie/index.mjs","../../src/cart-hooks.tsx","../../src/useCartActions.tsx","../../src/useCartAPIStateMachine.tsx","../../src/CartProvider.tsx","../../src/ProductProvider.tsx","../../src/BaseButton.tsx","../../src/AddToCartButton.tsx","../../src/BuyNowButton.tsx","../../src/CartCheckoutButton.tsx","../../src/ExternalVideo.tsx","../../src/image-size.ts","../../src/Image.tsx","../../src/Video.tsx","../../src/load-script.tsx","../../src/ModelViewer.tsx","../../src/MediaFile.tsx","../../src/Metafield.tsx","../../src/metafield-parser.ts","../../src/useMoney.tsx","../../src/Money.tsx","../../src/ProductPrice.tsx","../../src/ShopPayButton.tsx","../../src/storefront-client.ts"],"sourcesContent":["/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t,n){var e=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!e)return t;var r,i,o=e.call(t),a=[];try{for(;(void 0===n||n-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(e=o.return)&&e.call(o)}finally{if(i)throw i.error}}return a}var n;!function(t){t[t.NotStarted=0]=\"NotStarted\",t[t.Running=1]=\"Running\",t[t.Stopped=2]=\"Stopped\"}(n||(n={}));var e={type:\"xstate.init\"};function r(t){return void 0===t?[]:[].concat(t)}function i(t){return{type:\"xstate.assign\",assignment:t}}function o(t,n){return\"string\"==typeof(t=\"string\"==typeof t&&n&&n[t]?n[t]:t)?{type:t}:\"function\"==typeof t?{type:t.name,exec:t}:t}function a(t){return function(n){return t===n}}function u(t){return\"string\"==typeof t?{type:t}:t}function c(t,n){return{value:t,context:n,actions:[],changed:!1,matches:a(t)}}function f(t,n,e){var r=n,i=!1;return[t.filter((function(t){if(\"xstate.assign\"===t.type){i=!0;var n=Object.assign({},r);return\"function\"==typeof t.assignment?n=t.assignment(r,e):Object.keys(t.assignment).forEach((function(i){n[i]=\"function\"==typeof t.assignment[i]?t.assignment[i](r,e):t.assignment[i]})),r=n,!1}return!0})),r,i]}function s(n,i){void 0===i&&(i={});var s=t(f(r(n.states[n.initial].entry).map((function(t){return o(t,i.actions)})),n.context,e),2),l=s[0],v=s[1],y={config:n,_options:i,initialState:{value:n.initial,actions:l,context:v,matches:a(n.initial)},transition:function(e,i){var s,l,v=\"string\"==typeof e?{value:e,context:n.context}:e,p=v.value,g=v.context,d=u(i),x=n.states[p];if(x.on){var m=r(x.on[d.type]);try{for(var h=function(t){var n=\"function\"==typeof Symbol&&Symbol.iterator,e=n&&t[n],r=0;if(e)return e.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(n?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}(m),b=h.next();!b.done;b=h.next()){var S=b.value;if(void 0===S)return c(p,g);var w=\"string\"==typeof S?{target:S}:S,j=w.target,E=w.actions,R=void 0===E?[]:E,N=w.cond,O=void 0===N?function(){return!0}:N,_=void 0===j,k=null!=j?j:p,T=n.states[k];if(O(g,d)){var q=t(f((_?r(R):[].concat(x.exit,R,T.entry).filter((function(t){return t}))).map((function(t){return o(t,y._options.actions)})),g,d),3),z=q[0],A=q[1],B=q[2],C=null!=j?j:p;return{value:C,context:A,actions:z,changed:j!==p||z.length>0||B,matches:a(C)}}}}catch(t){s={error:t}}finally{try{b&&!b.done&&(l=h.return)&&l.call(h)}finally{if(s)throw s.error}}}return c(p,g)}};return y}var l=function(t,n){return t.actions.forEach((function(e){var r=e.exec;return r&&r(t.context,n)}))};function v(t){var r=t.initialState,i=n.NotStarted,o=new Set,c={_machine:t,send:function(e){i===n.Running&&(r=t.transition(r,e),l(r,u(e)),o.forEach((function(t){return t(r)})))},subscribe:function(t){return o.add(t),t(r),{unsubscribe:function(){return o.delete(t)}}},start:function(o){if(o){var u=\"object\"==typeof o?o:{context:t.config.context,value:o};r={value:u.value,actions:[],context:u.context,matches:a(u.value)}}else r=t.initialState;return i=n.Running,l(r,e),c},stop:function(){return i=n.Stopped,o.clear(),c},get state(){return r},get status(){return i}};return c}export{n as InterpreterStatus,i as assign,s as createMachine,v as interpret};\n","import { useLayoutEffect } from 'react';\n\nvar index = useLayoutEffect ;\n\nexport default index;\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n// dispatch for CommonJS interop named imports.\n\nvar useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nvar didWarnOld18Alpha = false;\nvar didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works\n// because of a very particular set of implementation details and assumptions\n// -- change any one of them and it will break. The most important assumption\n// is that updates are always synchronous, because concurrent rendering is\n// only available in versions of React that also have a built-in\n// useSyncExternalStore API. And we only use this shim when the built-in API\n// does not exist.\n//\n// Do not assume that the clever hacks used by this hook also work in general.\n// The point of this shim is to replace the need for hacks by other libraries.\n\nfunction useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n// React do not expose a way to check if we're hydrating. So users of the shim\n// will need to track that themselves and return the correct value\n// from `getSnapshot`.\ngetServerSnapshot) {\n {\n if (!didWarnOld18Alpha) {\n if (React.startTransition !== undefined) {\n didWarnOld18Alpha = true;\n\n error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.');\n }\n }\n } // Read the current snapshot from the store on every render. Again, this\n // breaks the rules of React, and only works here because of specific\n // implementation details, most importantly that updates are\n // always synchronous.\n\n\n var value = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n\n if (!objectIs(value, cachedValue)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n } // Because updates are synchronous, we don't queue them. Instead we force a\n // re-render whenever the subscribed state changes by updating an some\n // arbitrary useState hook. Then, during render, we call getSnapshot to read\n // the current value.\n //\n // Because we don't actually use the state returned by the useState hook, we\n // can save a bit of memory by storing other stuff in that slot.\n //\n // To implement the early bailout, we need to track some things on a mutable\n // object. Usually, we would put that in a useRef hook, but we can stash it in\n // our useState hook instead.\n //\n // To force a re-render, we call forceUpdate({inst}). That works because the\n // new object always fails an equality check.\n\n\n var _useState = useState({\n inst: {\n value: value,\n getSnapshot: getSnapshot\n }\n }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated\n // in the layout phase so we can access it during the tearing check that\n // happens on subscribe.\n\n\n useLayoutEffect(function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }, [subscribe, value, getSnapshot]);\n useEffect(function () {\n // Check for changes right before subscribing. Subsequent changes will be\n // detected in the subscription handler.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n\n var handleStoreChange = function () {\n // TODO: Because there is no cross-renderer API for batching updates, it's\n // up to the consumer of this library to wrap their subscription event\n // with unstable_batchedUpdates. Should we try to detect when this isn't\n // the case and print a warning in development?\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }; // Subscribe to the store and return a clean-up function.\n\n\n return subscribe(handleStoreChange);\n }, [subscribe]);\n useDebugValue(value);\n return value;\n}\n\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n var prevValue = inst.value;\n\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n\nfunction useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n return getSnapshot();\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar isServerEnvironment = !canUseDOM;\n\nvar shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore;\nvar useSyncExternalStore$2 = React.useSyncExternalStore !== undefined ? React.useSyncExternalStore : shim;\n\nexports.useSyncExternalStore = useSyncExternalStore$2;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\nvar shim = require('use-sync-external-store/shim');\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar useSyncExternalStore = shim.useSyncExternalStore;\n\n// for CommonJS interop.\n\nvar useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.\n\nfunction useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {\n // Use this to track the rendered snapshot.\n var instRef = useRef(null);\n var inst;\n\n if (instRef.current === null) {\n inst = {\n hasValue: false,\n value: null\n };\n instRef.current = inst;\n } else {\n inst = instRef.current;\n }\n\n var _useMemo = useMemo(function () {\n // Track the memoized state using closure variables that are local to this\n // memoized instance of a getSnapshot function. Intentionally not using a\n // useRef hook, because that state would be shared across all concurrent\n // copies of the hook/component.\n var hasMemo = false;\n var memoizedSnapshot;\n var memoizedSelection;\n\n var memoizedSelector = function (nextSnapshot) {\n if (!hasMemo) {\n // The first time the hook is called, there is no memoized result.\n hasMemo = true;\n memoizedSnapshot = nextSnapshot;\n\n var _nextSelection = selector(nextSnapshot);\n\n if (isEqual !== undefined) {\n // Even if the selector has changed, the currently rendered selection\n // may be equal to the new selection. We should attempt to reuse the\n // current value if possible, to preserve downstream memoizations.\n if (inst.hasValue) {\n var currentSelection = inst.value;\n\n if (isEqual(currentSelection, _nextSelection)) {\n memoizedSelection = currentSelection;\n return currentSelection;\n }\n }\n }\n\n memoizedSelection = _nextSelection;\n return _nextSelection;\n } // We may be able to reuse the previous invocation's result.\n\n\n // We may be able to reuse the previous invocation's result.\n var prevSnapshot = memoizedSnapshot;\n var prevSelection = memoizedSelection;\n\n if (objectIs(prevSnapshot, nextSnapshot)) {\n // The snapshot is the same as last time. Reuse the previous selection.\n return prevSelection;\n } // The snapshot has changed, so we need to compute a new selection.\n\n\n // The snapshot has changed, so we need to compute a new selection.\n var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n\n // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {\n return prevSelection;\n }\n\n memoizedSnapshot = nextSnapshot;\n memoizedSelection = nextSelection;\n return nextSelection;\n }; // Assigning this to a constant so that Flow knows it can't change.\n\n\n // Assigning this to a constant so that Flow knows it can't change.\n var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;\n\n var getSnapshotWithSelector = function () {\n return memoizedSelector(getSnapshot());\n };\n\n var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n };\n return [getSnapshotWithSelector, getServerSnapshotWithSelector];\n }, [getSnapshot, getServerSnapshot, selector, isEqual]),\n getSelection = _useMemo[0],\n getServerSelection = _useMemo[1];\n\n var value = useSyncExternalStore(subscribe, getSelection, getServerSelection);\n useEffect(function () {\n inst.hasValue = true;\n inst.value = value;\n }, [value]);\n useDebugValue(value);\n return value;\n}\n\nexports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import * as React from 'react';\nexport default function useConstant(fn) {\n var ref = React.useRef();\n if (!ref.current) {\n ref.current = { v: fn() };\n }\n return ref.current.v;\n}\n","var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { createMachine, interpret, InterpreterStatus } from '@xstate/fsm';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport useConstant from './useConstant';\nfunction identity(a) {\n return a;\n}\nvar getServiceState = function (service) {\n var currentValue;\n service\n .subscribe(function (state) {\n currentValue = state;\n })\n .unsubscribe();\n return currentValue;\n};\nexport function useMachine(stateMachine, options) {\n var persistedStateRef = useRef();\n if (process.env.NODE_ENV !== 'production') {\n var _a = __read(useState(stateMachine), 1), initialMachine = _a[0];\n if (stateMachine !== initialMachine) {\n console.warn('Machine given to `useMachine` has changed between renders. This is not supported and might lead to unexpected results.\\n' +\n 'Please make sure that you pass the same Machine as argument each time.');\n }\n }\n var _b = __read(useConstant(function () {\n var queue = [];\n var service = interpret(createMachine(stateMachine.config, options ? options : stateMachine._options));\n var send = service.send;\n service.send = function (event) {\n if (service.status === InterpreterStatus.NotStarted) {\n queue.push(event);\n return;\n }\n send(event);\n persistedStateRef.current = service.state;\n };\n return [service, queue];\n }), 2), service = _b[0], queue = _b[1];\n useIsomorphicLayoutEffect(function () {\n if (options) {\n service._machine._options = options;\n }\n });\n var useServiceResult = useService(service);\n useEffect(function () {\n service.start(persistedStateRef.current);\n queue.forEach(service.send);\n persistedStateRef.current = service.state;\n return function () {\n service.stop();\n };\n }, []);\n return useServiceResult;\n}\nvar isEqual = function (_prevState, nextState) { return nextState.changed === false; };\nexport function useService(service) {\n var getSnapshot = useCallback(function () { return getServiceState(service); }, [service]);\n var subscribe = useCallback(function (handleStoreChange) {\n var unsubscribe = service.subscribe(handleStoreChange).unsubscribe;\n return unsubscribe;\n }, [service]);\n var storeSnapshot = useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);\n return [storeSnapshot, service.send, service];\n}\n","import type {PartialDeep} from 'type-fest';\n\n/**\n * The `flattenConnection` utility transforms a connection object from the Storefront API (for example, [Product-related connections](https://shopify.dev/api/storefront/reference/products/product)) into a flat array of nodes.\n * The utility works with either `nodes` or `edges.node`.\n *\n * If `connection` is null or undefined, will return an empty array instead in production. In development, an error will be thrown.\n */\nexport function flattenConnection<T>(\n connection?: PartialDeep<GraphQLConnection<T>, {recurseIntoArrays: true}>\n): PartialDeep<T, {recurseIntoArrays: true}>[] {\n if (!connection) {\n const noConnectionErr = `flattenConnection(): needs a 'connection' to flatten, but received '${connection}' instead`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noConnectionErr);\n } else {\n console.error(noConnectionErr);\n return [];\n }\n }\n\n if (connection.nodes) {\n return connection.nodes as PartialDeep<T, {recurseIntoArrays: true}>[];\n }\n\n if (connection.edges) {\n return connection.edges.map((edge) => {\n if (!edge?.node) {\n throw new Error('Connection edges must contain nodes');\n }\n return edge.node;\n });\n }\n\n if (__HYDROGEN_DEV__) {\n console.warn(\n `The connection did not contain either \"nodes\" or \"edges.node\". A empty array will be returned in its place.`\n );\n }\n\n return [];\n}\n\ninterface GraphQLConnection<T> {\n edges?: {node: T}[];\n nodes?: T[];\n}\n","export const CartLineAdd = (cartFragment: string) => `\nmutation CartLineAdd($cartId: ID!, $lines: [CartLineInput!]!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartLinesAdd(cartId: $cartId, lines: $lines) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartCreate = (cartFragment: string) => `\nmutation CartCreate($input: CartInput!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartCreate(input: $input) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartLineRemove = (cartFragment: string) => `\nmutation CartLineRemove($cartId: ID!, $lines: [ID!]!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartLinesRemove(cartId: $cartId, lineIds: $lines) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartLineUpdate = (cartFragment: string) => `\nmutation CartLineUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartLinesUpdate(cartId: $cartId, lines: $lines) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartNoteUpdate = (cartFragment: string) => `\nmutation CartNoteUpdate($cartId: ID!, $note: String, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartNoteUpdate(cartId: $cartId, note: $note) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartBuyerIdentityUpdate = (cartFragment: string) => `\nmutation CartBuyerIdentityUpdate(\n $cartId: ID!\n $buyerIdentity: CartBuyerIdentityInput!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n) @inContext(country: $country) {\n cartBuyerIdentityUpdate(cartId: $cartId, buyerIdentity: $buyerIdentity) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartAttributesUpdate = (cartFragment: string) => `\nmutation CartAttributesUpdate($attributes: [AttributeInput!]!, $cartId: ID!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartAttributesUpdate(attributes: $attributes, cartId: $cartId) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartDiscountCodesUpdate = (cartFragment: string) => `\nmutation CartDiscountCodesUpdate($cartId: ID!, $discountCodes: [String!], $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cartDiscountCodesUpdate(cartId: $cartId, discountCodes: $discountCodes) {\n cart {\n ...CartFragment\n }\n }\n}\n\n${cartFragment}\n`;\n\nexport const CartQuery = (cartFragment: string) => `\nquery CartQuery($id: ID!, $numCartLines: Int = 250, $country: CountryCode = ZZ) @inContext(country: $country) {\n cart(id: $id) {\n ...CartFragment\n }\n}\n\n${cartFragment}\n`;\n\nexport const defaultCartFragment = `\nfragment CartFragment on Cart {\n id\n checkoutUrl\n totalQuantity\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n lines(first: $numCartLines) {\n edges {\n node {\n id\n quantity\n attributes {\n key\n value\n }\n cost {\n totalAmount {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n }\n merchandise {\n ... on ProductVariant {\n id\n availableForSale\n compareAtPriceV2 {\n ...MoneyFragment\n }\n priceV2 {\n ...MoneyFragment\n }\n requiresShipping\n title\n image {\n ...ImageFragment\n }\n product {\n handle\n title\n id\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n }\n cost {\n subtotalAmount {\n ...MoneyFragment\n }\n totalAmount {\n ...MoneyFragment\n }\n totalDutyAmount {\n ...MoneyFragment\n }\n totalTaxAmount {\n ...MoneyFragment\n }\n }\n note\n attributes {\n key\n value\n }\n discountCodes {\n code\n }\n}\n\nfragment MoneyFragment on MoneyV2 {\n currencyCode\n amount\n}\nfragment ImageFragment on Image {\n id\n url\n altText\n width\n height\n}\n`;\n","export const SFAPI_VERSION = '2022-10';\n","import {createContext, useContext, useMemo, type ReactNode} from 'react';\nimport type {LanguageCode, CountryCode, Shop} from './storefront-api-types.js';\nimport {SFAPI_VERSION} from './storefront-api-constants.js';\n\nconst ShopifyContext = createContext<ShopifyContextValue>({\n storeDomain: 'test.myshopify.com',\n storefrontToken: 'abc123',\n storefrontApiVersion: SFAPI_VERSION,\n country: {\n isoCode: 'US',\n },\n language: {\n isoCode: 'EN',\n },\n locale: 'EN-US',\n});\n\n/**\n * The `<ShopifyProvider/>` component enables use of the `useShop()` hook. The component should wrap your app.\n */\nexport function ShopifyProvider({\n children,\n shopifyConfig,\n}: {\n children: ReactNode;\n shopifyConfig: ShopifyContextValue;\n}) {\n if (!shopifyConfig) {\n throw new Error(\n `The 'shopifyConfig' prop must be passed to '<ShopifyProvider/>'`\n );\n }\n\n if (shopifyConfig.storefrontApiVersion !== SFAPI_VERSION) {\n console.warn(\n `This version of Hydrogen-UI is built for Shopify's Storefront API version ${SFAPI_VERSION}, but it looks like you're using version ${shopifyConfig.storefrontApiVersion}. There may be issues or bugs if you use a mismatched version of Hydrogen-UI and the Storefront API.`\n );\n }\n\n const finalConfig = useMemo<ShopifyContextValue>(\n () => ({\n ...shopifyConfig,\n storeDomain: shopifyConfig.storeDomain.replace(/^https?:\\/\\//, ''),\n }),\n [shopifyConfig]\n );\n\n return (\n <ShopifyContext.Provider value={finalConfig}>\n {children}\n </ShopifyContext.Provider>\n );\n}\n\n/**\n * Provides access to the `shopifyConfig` prop of `<ShopifyProvider/>`. Must be a descendent of `<ShopifyProvider/>`.\n */\nexport function useShop() {\n const shopContext = useContext(ShopifyContext);\n if (!shopContext) {\n throw new Error(`'useShop()' must be a descendent of <ShopifyProvider/>`);\n }\n return shopContext;\n}\n\n/**\n * Shopify-specific values that are used in various Hydrogen-UI components and hooks.\n */\nexport type ShopifyContextValue = {\n /** The globally-unique identifier for the Shop */\n storefrontId?: string;\n /** The host name of the domain (eg: `{shop}.myshopify.com`). If a URL with a scheme (for example `https://`) is passed in, then the scheme is removed. */\n storeDomain: Shop['primaryDomain']['host'];\n /** The Storefront API public access token. Refer to the [authentication](https://shopify.dev/api/storefront#authentication) documentation for more details. */\n storefrontToken: string;\n /** The Storefront API version. This should almost always be the same as the version Hydrogen-UI was built for. Learn more about Shopify [API versioning](https://shopify.dev/api/usage/versioning) for more details. */\n storefrontApiVersion: string;\n country?: {\n /**\n * The code designating a country, which generally follows ISO 3166-1 alpha-2 guidelines. If a territory doesn't have a country code value in the `CountryCode` enum, it might be considered a subdivision of another country. For example, the territories associated with Spain are represented by the country code `ES`, and the territories associated with the United States of America are represented by the country code `US`.\n */\n isoCode: CountryCode;\n };\n language?: {\n /**\n * `ISO 369` language codes supported by Shopify.\n */\n isoCode: LanguageCode;\n };\n /**\n * The locale string based on `country` and `language`.\n */\n locale?: string;\n};\n","export const CART_ID_STORAGE_KEY = 'shopifyCartId';\nexport const CART_COOKIE_TTL_DAYS = 14;\n\n// Needed for cart analytics within Shopify\nexport const STOREFRONT_API_PUBLIC_TOKEN_HEADER =\n 'X-Shopify-Storefront-Access-Token';\nexport const SHOPIFY_STOREFRONT_ID_HEADER = 'Shopify-Storefront-Id';\nexport const SHOPIFY_STOREFRONT_Y_HEADER = 'Shopify-Storefront-Y';\nexport const SHOPIFY_STOREFRONT_S_HEADER = 'Shopify-Storefront-S';\nexport const SHOPIFY_Y = '_shopify_y';\nexport const SHOPIFY_S = '_shopify_s';\n","// src/cookie.ts\nvar g = new Set([\n \"domain\",\n \"path\",\n \"max-age\",\n \"expires\",\n \"samesite\",\n \"secure\",\n \"httponly\"\n]);\nfunction u(a) {\n let r = {}, e, t, n = 0, m = a.split(/;\\s*/g), s, i;\n for (; n < m.length; n++)\n if (t = m[n], e = t.indexOf(\"=\"), ~e) {\n if (s = t.substring(0, e++).trim(), i = t.substring(e).trim(), i[0] === '\"' && (i = i.substring(1, i.length - 1)), ~i.indexOf(\"%\"))\n try {\n i = decodeURIComponent(i);\n } catch (f) {\n }\n g.has(t = s.toLowerCase()) ? t === \"expires\" ? r.expires = new Date(i) : t === \"max-age\" ? r.maxage = +i : r[t] = i : r[s] = i;\n } else\n (s = t.trim().toLowerCase()) && (s === \"httponly\" || s === \"secure\") && (r[s] = !0);\n return r;\n}\nfunction l(a, r, e = {}) {\n let t = a + \"=\" + encodeURIComponent(r);\n return e.expires && (t += \"; Expires=\" + new Date(e.expires).toUTCString()), e.maxage != null && e.maxage >= 0 && (t += \"; Max-Age=\" + (e.maxage | 0)), e.domain && (t += \"; Domain=\" + e.domain), e.path && (t += \"; Path=\" + e.path), e.samesite && (t += \"; SameSite=\" + e.samesite), (e.secure || e.samesite === \"None\") && (t += \"; Secure\"), e.httponly && (t += \"; HttpOnly\"), t;\n}\nexport {\n u as parse,\n l as stringify\n};\n","import {useState, useCallback} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {CartInput, Cart as CartType} from './storefront-api-types.js';\nimport {CartCreate, defaultCartFragment} from './cart-queries.js';\nimport {Cart} from './cart-types.js';\nimport {\n SHOPIFY_STOREFRONT_ID_HEADER,\n STOREFRONT_API_PUBLIC_TOKEN_HEADER,\n SHOPIFY_STOREFRONT_Y_HEADER,\n SHOPIFY_STOREFRONT_S_HEADER,\n SHOPIFY_Y,\n SHOPIFY_S,\n} from './cart-constants.js';\nimport {parse} from 'worktop/cookie';\nimport type {StorefrontApiResponseOkPartial} from './storefront-api-response.types.js';\n\nexport function useCartFetch() {\n const {storeDomain, storefrontApiVersion, storefrontToken, storefrontId} =\n useShop();\n\n return useCallback(\n <ReturnDataGeneric,>({\n query,\n variables,\n }: {\n query: string;\n variables: Record<string, unknown>;\n }): Promise<StorefrontApiResponseOkPartial<ReturnDataGeneric>> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-SDK-Variant': 'hydrogen',\n 'X-SDK-Version': storefrontApiVersion,\n [STOREFRONT_API_PUBLIC_TOKEN_HEADER]: storefrontToken,\n };\n\n if (storefrontId) {\n headers[SHOPIFY_STOREFRONT_ID_HEADER] = storefrontId;\n }\n\n // Find Shopify cookies\n const cookieData = parse(document.cookie);\n if (cookieData[SHOPIFY_Y] && cookieData[SHOPIFY_S]) {\n headers[SHOPIFY_STOREFRONT_Y_HEADER] = cookieData[SHOPIFY_Y];\n headers[SHOPIFY_STOREFRONT_S_HEADER] = cookieData[SHOPIFY_S];\n }\n\n return fetch(\n `https://${storeDomain}/api/${storefrontApiVersion}/graphql.json`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({\n query: query.toString(),\n variables,\n }),\n }\n )\n .then((res) => res.json())\n .catch((error) => {\n return {\n data: undefined,\n errors: error.toString(),\n };\n });\n },\n [storeDomain, storefrontApiVersion, storefrontToken, storefrontId]\n );\n}\n\nexport function useInstantCheckout() {\n const [cart, updateCart] = useState<Cart | undefined>();\n const [checkoutUrl, updateCheckoutUrl] = useState<Cart['checkoutUrl']>();\n const [error, updateError] = useState<string | undefined>();\n\n const fetch = useCartFetch();\n\n const createInstantCheckout = useCallback(\n async (cartInput: CartInput) => {\n const {data, errors} = await fetch<{\n cartCreate: {cart: CartType};\n }>({\n query: CartCreate(defaultCartFragment),\n variables: {\n input: cartInput,\n },\n });\n\n if (errors) {\n updateError(errors.toString());\n updateCart(undefined);\n updateCheckoutUrl(undefined);\n }\n\n if (data?.cartCreate?.cart) {\n const dataCart = data.cartCreate.cart;\n updateCart({\n ...dataCart,\n lines: flattenConnection(dataCart.lines),\n note: dataCart.note ?? undefined,\n });\n updateCheckoutUrl(dataCart.checkoutUrl);\n }\n },\n [fetch]\n );\n\n return {cart, checkoutUrl, error, createInstantCheckout};\n}\n","import {useCallback, useMemo} from 'react';\nimport {\n AttributeInput,\n CartBuyerIdentityInput,\n CartInput,\n CartLineInput,\n CartLineUpdateInput,\n CountryCode,\n Cart as CartType,\n MutationCartDiscountCodesUpdateArgs,\n MutationCartNoteUpdateArgs,\n} from './storefront-api-types.js';\nimport {\n CartAttributesUpdate,\n CartBuyerIdentityUpdate,\n CartCreate,\n CartDiscountCodesUpdate,\n CartLineAdd,\n CartLineRemove,\n CartLineUpdate,\n CartNoteUpdate,\n CartQuery,\n} from './cart-queries.js';\nimport {useCartFetch} from './cart-hooks.js';\nimport {PartialDeep} from 'type-fest';\n\ntype CartResponse = PartialDeep<CartType, {recurseIntoArrays: true}>;\n\n/**\n * The `useCartActions` hook returns helper graphql functions for Storefront Cart API\n *\n * See [cart API graphql mutations](https://shopify.dev/api/storefront/2022-10/objects/Cart)\n */\nexport function useCartActions({\n numCartLines,\n cartFragment,\n countryCode = 'US',\n}: {\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n cartFragment: string;\n /** The ISO country code for i18n. */\n countryCode?: CountryCode;\n}) {\n const fetchCart = useCartFetch();\n\n const cartFetch = useCallback(\n (cartId: string) => {\n return fetchCart<{cart: CartResponse}>({\n query: CartQuery(cartFragment),\n variables: {\n id: cartId,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [fetchCart, cartFragment, numCartLines, countryCode]\n );\n\n const cartCreate = useCallback(\n (cart: CartInput) => {\n return fetchCart<{cartCreate: {cart: CartResponse}}>({\n query: CartCreate(cartFragment),\n variables: {\n input: cart,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const cartLineAdd = useCallback(\n (cartId: string, lines: CartLineInput[]) => {\n return fetchCart<{cartLinesAdd: {cart: CartResponse}}>({\n query: CartLineAdd(cartFragment),\n variables: {\n cartId,\n lines,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const cartLineUpdate = useCallback(\n (cartId: string, lines: CartLineUpdateInput[]) => {\n return fetchCart<{cartLinesUpdate: {cart: CartResponse}}>({\n query: CartLineUpdate(cartFragment),\n variables: {\n cartId,\n lines,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const cartLineRemove = useCallback(\n (cartId: string, lines: string[]) => {\n return fetchCart<{cartLinesRemove: {cart: CartResponse}}>({\n query: CartLineRemove(cartFragment),\n variables: {\n cartId,\n lines,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const noteUpdate = useCallback(\n (cartId: string, note: MutationCartNoteUpdateArgs['note']) => {\n return fetchCart<{cartNoteUpdate: {cart: CartResponse}}>({\n query: CartNoteUpdate(cartFragment),\n variables: {\n cartId,\n note,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [fetchCart, cartFragment, numCartLines, countryCode]\n );\n\n const buyerIdentityUpdate = useCallback(\n (cartId: string, buyerIdentity: CartBuyerIdentityInput) => {\n return fetchCart<{cartBuyerIdentityUpdate: {cart: CartResponse}}>({\n query: CartBuyerIdentityUpdate(cartFragment),\n variables: {\n cartId,\n buyerIdentity,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const cartAttributesUpdate = useCallback(\n (cartId: string, attributes: AttributeInput[]) => {\n return fetchCart<{cartAttributesUpdate: {cart: CartResponse}}>({\n query: CartAttributesUpdate(cartFragment),\n variables: {\n cartId,\n attributes,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n const discountCodesUpdate = useCallback(\n (\n cartId: string,\n discountCodes: MutationCartDiscountCodesUpdateArgs['discountCodes']\n ) => {\n return fetchCart<{cartDiscountCodesUpdate: {cart: CartResponse}}>({\n query: CartDiscountCodesUpdate(cartFragment),\n variables: {\n cartId,\n discountCodes,\n numCartLines,\n country: countryCode,\n },\n });\n },\n [cartFragment, countryCode, fetchCart, numCartLines]\n );\n\n return useMemo(\n () => ({\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n cartFragment,\n }),\n [\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n cartFragment,\n ]\n );\n}\n","import {useMachine} from '@xstate/react/fsm';\nimport {createMachine, assign, StateMachine} from '@xstate/fsm';\nimport {\n Cart,\n CartMachineActionEvent,\n CartMachineActions,\n CartMachineContext,\n CartMachineEvent,\n CartMachineFetchResultEvent,\n CartMachineTypeState,\n} from './cart-types.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {useCartActions} from './useCartActions.js';\nimport {useMemo} from 'react';\nimport {InitEvent} from '@xstate/fsm/lib/types.js';\nimport {CountryCode, Cart as CartType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\nfunction invokeCart(\n action: keyof CartMachineActions,\n options?: {\n entryActions?: [keyof CartMachineActions];\n resolveTarget?: CartMachineTypeState['value'];\n errorTarget?: CartMachineTypeState['value'];\n exitActions?: [keyof CartMachineActions];\n }\n): StateMachine.Config<CartMachineContext, CartMachineEvent>['states']['on'] {\n return {\n entry: [\n ...(options?.entryActions || []),\n 'onCartActionEntry',\n 'onCartActionOptimisticUI',\n action,\n ],\n on: {\n RESOLVE: {\n target: options?.resolveTarget || 'idle',\n actions: [\n assign({\n prevCart: (context) => context?.cart,\n cart: (_, event) => event?.payload?.cart,\n rawCartResult: (_, event) => event?.payload?.rawCartResult,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n ],\n },\n ERROR: {\n target: options?.errorTarget || 'error',\n actions: [\n assign({\n prevCart: (context) => context?.cart,\n cart: (context) => context?.lastValidCart,\n errors: (_, event) => event?.payload?.errors,\n }),\n ],\n },\n CART_COMPLETED: {\n target: 'cartCompleted',\n actions: assign({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n prevCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n cart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n lastValidCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n },\n },\n exit: ['onCartActionComplete', ...(options?.exitActions || [])],\n };\n}\n\nconst INITIALIZING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['uninitialized']['on'] = {\n CART_FETCH: {\n target: 'cartFetching',\n },\n CART_CREATE: {\n target: 'cartCreating',\n },\n CART_SET: {\n target: 'idle',\n actions: [\n assign({\n rawCartResult: (_, event) => event.payload.cart,\n cart: (_, event) => cartFromGraphQL(event.payload.cart),\n }),\n ],\n },\n};\n\nconst UPDATING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['idle']['on'] = {\n CARTLINE_ADD: {\n target: 'cartLineAdding',\n },\n CARTLINE_UPDATE: {\n target: 'cartLineUpdating',\n },\n CARTLINE_REMOVE: {\n target: 'cartLineRemoving',\n },\n NOTE_UPDATE: {\n target: 'noteUpdating',\n },\n BUYER_IDENTITY_UPDATE: {\n target: 'buyerIdentityUpdating',\n },\n CART_ATTRIBUTES_UPDATE: {\n target: 'cartAttributesUpdating',\n },\n DISCOUNT_CODES_UPDATE: {\n target: 'discountCodesUpdating',\n },\n};\n\nfunction createCartMachine(\n initialCart?: PartialDeep<CartType, {recurseIntoArrays: true}>\n) {\n return createMachine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n >({\n id: 'Cart',\n initial: initialCart ? 'idle' : 'uninitialized',\n context: {\n cart: initialCart && cartFromGraphQL(initialCart),\n },\n states: {\n uninitialized: {\n on: INITIALIZING_CART_EVENTS,\n },\n cartCompleted: {\n on: INITIALIZING_CART_EVENTS,\n },\n initializationError: {\n on: INITIALIZING_CART_EVENTS,\n },\n idle: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n error: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n cartFetching: invokeCart('cartFetchAction', {\n errorTarget: 'initializationError',\n }),\n cartCreating: invokeCart('cartCreateAction', {\n errorTarget: 'initializationError',\n }),\n cartLineRemoving: invokeCart('cartLineRemoveAction'),\n cartLineUpdating: invokeCart('cartLineUpdateAction'),\n cartLineAdding: invokeCart('cartLineAddAction'),\n noteUpdating: invokeCart('noteUpdateAction'),\n buyerIdentityUpdating: invokeCart('buyerIdentityUpdateAction'),\n cartAttributesUpdating: invokeCart('cartAttributesUpdateAction'),\n discountCodesUpdating: invokeCart('discountCodesUpdateAction'),\n },\n });\n}\n\nexport function useCartAPIStateMachine({\n numCartLines,\n onCartActionEntry,\n onCartActionOptimisticUI,\n onCartActionComplete,\n data: cart,\n cartFragment,\n countryCode,\n}: {\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked just before a Cart API action executes. */\n onCartActionEntry?: (\n context: CartMachineContext,\n event: CartMachineActionEvent\n ) => void;\n /** A callback that is invoked after executing the entry actions for optimistic UI changes. */\n onCartActionOptimisticUI?: (\n context: CartMachineContext,\n event: CartMachineEvent\n ) => Partial<CartMachineContext>;\n /** A callback that is invoked after a Cart API completes. */\n onCartActionComplete?: (\n context: CartMachineContext,\n event: CartMachineFetchResultEvent\n ) => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n cartFragment: string;\n /** The ISO country code for i18n. */\n countryCode?: CountryCode;\n}) {\n const {\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n } = useCartActions({\n numCartLines,\n cartFragment,\n countryCode,\n });\n\n const cartMachine = useMemo(() => createCartMachine(cart), [cart]);\n\n const [state, send, service] = useMachine(cartMachine, {\n actions: {\n cartFetchAction: async (_, event): Promise<void> => {\n if (event.type !== 'CART_FETCH') return;\n\n const {data, errors} = await cartFetch(event?.payload?.cartId);\n const resultEvent = eventFromFetchResult(event, data?.cart, errors);\n send(resultEvent);\n },\n cartCreateAction: async (_, event): Promise<void> => {\n if (event.type !== 'CART_CREATE') return;\n\n const {data, errors} = await cartCreate(event?.payload);\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartCreate?.cart,\n errors\n );\n send(resultEvent);\n },\n cartLineAddAction: async (context, event): Promise<void> => {\n if (event.type !== 'CARTLINE_ADD' || !context?.cart?.id) return;\n\n const {data, errors} = await cartLineAdd(\n context.cart.id,\n event.payload.lines\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesAdd?.cart,\n errors\n );\n\n send(resultEvent);\n },\n cartLineUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'CARTLINE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineUpdate(\n context.cart.id,\n event.payload.lines\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n cartLineRemoveAction: async (context, event): Promise<void> => {\n if (event.type !== 'CARTLINE_REMOVE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineRemove(\n context.cart.id,\n event.payload.lines\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesRemove?.cart,\n errors\n );\n\n send(resultEvent);\n },\n noteUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'NOTE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await noteUpdate(\n context.cart.id,\n event.payload.note\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartNoteUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n buyerIdentityUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'BUYER_IDENTITY_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await buyerIdentityUpdate(\n context.cart.id,\n event.payload.buyerIdentity\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartBuyerIdentityUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n cartAttributesUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'CART_ATTRIBUTES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await cartAttributesUpdate(\n context.cart.id,\n event.payload.attributes\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartAttributesUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n discountCodesUpdateAction: async (context, event): Promise<void> => {\n if (event.type !== 'DISCOUNT_CODES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await discountCodesUpdate(\n context.cart.id,\n event.payload.discountCodes\n );\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartDiscountCodesUpdate?.cart,\n errors\n );\n\n send(resultEvent);\n },\n ...(onCartActionEntry && {\n onCartActionEntry: (context, event) => {\n if (isCartActionEvent(event)) {\n onCartActionEntry(context, event);\n }\n },\n }),\n ...(onCartActionOptimisticUI && {\n onCartActionOptimisticUI: assign((context, event) => {\n return onCartActionOptimisticUI(context, event);\n }),\n }),\n ...(onCartActionComplete && {\n onCartActionComplete: (context, event) => {\n if (isCartFetchResultEvent(event)) {\n onCartActionComplete(context, event);\n }\n },\n }),\n } as CartMachineActions,\n });\n\n return useMemo(() => [state, send, service] as const, [state, send, service]);\n}\n\nexport function cartFromGraphQL(\n cart: PartialDeep<CartType, {recurseIntoArrays: true}>\n): Cart {\n return {\n ...cart,\n lines: flattenConnection(cart?.lines),\n note: cart.note ?? undefined,\n };\n}\n\nfunction eventFromFetchResult(\n cartActionEvent: CartMachineActionEvent,\n cart?: PartialDeep<CartType, {recurseIntoArrays: true}> | null,\n errors?: unknown\n): CartMachineFetchResultEvent {\n if (errors) {\n return {type: 'ERROR', payload: {errors, cartActionEvent}};\n }\n\n if (!cart) {\n return {\n type: 'CART_COMPLETED',\n payload: {\n cartActionEvent,\n },\n };\n }\n\n return {\n type: 'RESOLVE',\n payload: {\n cart: cartFromGraphQL(cart),\n rawCartResult: cart,\n cartActionEvent,\n },\n };\n}\n\nfunction isCartActionEvent(\n event: CartMachineEvent | InitEvent\n): event is CartMachineActionEvent {\n return (\n event.type === 'CART_CREATE' ||\n event.type === 'CARTLINE_ADD' ||\n event.type === 'CARTLINE_UPDATE' ||\n event.type === 'CARTLINE_REMOVE' ||\n event.type === 'NOTE_UPDATE' ||\n event.type === 'BUYER_IDENTITY_UPDATE' ||\n event.type === 'CART_ATTRIBUTES_UPDATE' ||\n event.type === 'DISCOUNT_CODES_UPDATE'\n );\n}\n\nfunction isCartFetchResultEvent(\n event: CartMachineEvent | InitEvent\n): event is CartMachineFetchResultEvent {\n return (\n event.type === 'RESOLVE' ||\n event.type === 'ERROR' ||\n event.type === 'CART_COMPLETED'\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n createContext,\n useContext,\n} from 'react';\nimport {\n AttributeInput,\n CartBuyerIdentityInput,\n CartInput,\n CartLineInput,\n CartLineUpdateInput,\n CountryCode,\n Cart as CartType,\n MutationCartNoteUpdateArgs,\n} from './storefront-api-types.js';\nimport {\n BuyerIdentityUpdateEvent,\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState,\n CartWithActions,\n} from './cart-types.js';\nimport {useCartAPIStateMachine} from './useCartAPIStateMachine.js';\nimport {CART_ID_STORAGE_KEY} from './cart-constants.js';\nimport {PartialDeep} from 'type-fest';\n\nexport const CartContext = createContext<CartWithActions | null>(null);\n\n/**\n * The `useCart` hook provides access to the cart object. It must be a descendent of a `CartProvider` component.\n */\nexport function useCart() {\n const context = useContext(CartContext);\n\n if (!context) {\n throw new Error('Expected a Cart Context, but no Cart Context was found');\n }\n\n return context;\n}\n\nexport function CartProvider({\n children,\n numCartLines,\n onCreate,\n onLineAdd,\n onLineRemove,\n onLineUpdate,\n onNoteUpdate,\n onBuyerIdentityUpdate,\n onAttributesUpdate,\n onDiscountCodesUpdate,\n onCreateComplete,\n onLineAddComplete,\n onLineRemoveComplete,\n onLineUpdateComplete,\n onNoteUpdateComplete,\n onBuyerIdentityUpdateComplete,\n onAttributesUpdateComplete,\n onDiscountCodesUpdateComplete,\n data: cart,\n cartFragment = defaultCartFragment,\n customerAccessToken,\n countryCode = 'US',\n}: {\n /** Any `ReactNode` elements. */\n children: React.ReactNode;\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked when the process to create a cart begins, but before the cart is created in the Storefront API. */\n onCreate?: () => void;\n /** A callback that is invoked when the process to add a line item to the cart begins, but before the line item is added to the Storefront API. */\n onLineAdd?: () => void;\n /** A callback that is invoked when the process to remove a line item to the cart begins, but before the line item is removed from the Storefront API. */\n onLineRemove?: () => void;\n /** A callback that is invoked when the process to update a line item in the cart begins, but before the line item is updated in the Storefront API. */\n onLineUpdate?: () => void;\n /** A callback that is invoked when the process to add or update a note in the cart begins, but before the note is added or updated in the Storefront API. */\n onNoteUpdate?: () => void;\n /** A callback that is invoked when the process to update the buyer identity begins, but before the buyer identity is updated in the Storefront API. */\n onBuyerIdentityUpdate?: () => void;\n /** A callback that is invoked when the process to update the cart attributes begins, but before the attributes are updated in the Storefront API. */\n onAttributesUpdate?: () => void;\n /** A callback that is invoked when the process to update the cart discount codes begins, but before the discount codes are updated in the Storefront API. */\n onDiscountCodesUpdate?: () => void;\n /** A callback that is invoked when the process to create a cart completes */\n onCreateComplete?: () => void;\n /** A callback that is invoked when the process to add a line item to the cart completes */\n onLineAddComplete?: () => void;\n /** A callback that is invoked when the process to remove a line item to the cart completes */\n onLineRemoveComplete?: () => void;\n /** A callback that is invoked when the process to update a line item in the cart completes */\n onLineUpdateComplete?: () => void;\n /** A callback that is invoked when the process to add or update a note in the cart completes */\n onNoteUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the buyer identity completes */\n onBuyerIdentityUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the cart attributes completes */\n onAttributesUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the cart discount codes completes */\n onDiscountCodesUpdateComplete?: () => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n cartFragment?: string;\n /** A customer access token that's accessible on the server if there's a customer login. */\n customerAccessToken?: CartBuyerIdentityInput['customerAccessToken'];\n /** The ISO country code for i18n. */\n countryCode?: CountryCode;\n}) {\n if (countryCode) countryCode = countryCode.toUpperCase() as CountryCode;\n const [prevCountryCode, setPrevCountryCode] = useState(countryCode);\n const [prevCustomerAccessToken, setPrevCustomerAccessToken] =\n useState(customerAccessToken);\n const customerOverridesCountryCode = useRef(false);\n\n if (\n prevCountryCode !== countryCode ||\n prevCustomerAccessToken !== customerAccessToken\n ) {\n setPrevCountryCode(countryCode);\n setPrevCustomerAccessToken(customerAccessToken);\n customerOverridesCountryCode.current = false;\n }\n\n const [cartState, cartSend] = useCartAPIStateMachine({\n numCartLines,\n data: cart,\n cartFragment,\n countryCode,\n onCartActionEntry(context, event) {\n try {\n switch (event.type) {\n case 'CART_CREATE':\n return onCreate?.();\n case 'CARTLINE_ADD':\n return onLineAdd?.();\n case 'CARTLINE_REMOVE':\n return onLineRemove?.();\n case 'CARTLINE_UPDATE':\n return onLineUpdate?.();\n case 'NOTE_UPDATE':\n return onNoteUpdate?.();\n case 'BUYER_IDENTITY_UPDATE':\n return onBuyerIdentityUpdate?.();\n case 'CART_ATTRIBUTES_UPDATE':\n return onAttributesUpdate?.();\n case 'DISCOUNT_CODES_UPDATE':\n return onDiscountCodesUpdate?.();\n }\n } catch (error) {\n console.error('Cart entry action failed', error);\n }\n },\n onCartActionOptimisticUI(context, event) {\n if (!context?.cart) return {cart: undefined};\n switch (event.type) {\n case 'CARTLINE_REMOVE':\n return {\n ...context,\n lastValidCart: context.cart,\n cart: {\n ...context.cart,\n lines: context?.cart?.lines?.filter(\n (line) => line?.id && !event.payload.lines.includes(line?.id)\n ),\n },\n };\n case 'CARTLINE_UPDATE':\n return {\n ...context,\n lastValidCart: context.cart,\n cart: {\n ...context.cart,\n lines: context?.cart?.lines?.map((line) => {\n const updatedLine = event.payload.lines.find(\n ({id}) => id === line?.id\n );\n\n if (updatedLine && updatedLine.quantity) {\n return {\n ...line,\n quantity: updatedLine.quantity,\n };\n }\n\n return line;\n }),\n },\n };\n }\n return {cart: context.cart ? {...context.cart} : undefined};\n },\n onCartActionComplete(context, event) {\n const cartActionEvent = event.payload.cartActionEvent;\n try {\n switch (event.type) {\n case 'RESOLVE':\n switch (cartActionEvent.type) {\n case 'CART_CREATE':\n return onCreateComplete?.();\n case 'CARTLINE_ADD':\n return onLineAddComplete?.();\n case 'CARTLINE_REMOVE':\n return onLineRemoveComplete?.();\n case 'CARTLINE_UPDATE':\n return onLineUpdateComplete?.();\n case 'NOTE_UPDATE':\n return onNoteUpdateComplete?.();\n case 'BUYER_IDENTITY_UPDATE':\n if (countryCodeNotUpdated(context, cartActionEvent)) {\n customerOverridesCountryCode.current = true;\n }\n return onBuyerIdentityUpdateComplete?.();\n case 'CART_ATTRIBUTES_UPDATE':\n return onAttributesUpdateComplete?.();\n case 'DISCOUNT_CODES_UPDATE':\n return onDiscountCodesUpdateComplete?.();\n }\n }\n } catch (error) {\n console.error('onCartActionComplete failed', error);\n }\n },\n });\n\n const cartReady = useRef(false);\n const cartCompleted = cartState.matches('cartCompleted');\n\n const countryChanged =\n (cartState.value === 'idle' ||\n cartState.value === 'error' ||\n cartState.value === 'cartCompleted') &&\n countryCode !== cartState?.context?.cart?.buyerIdentity?.countryCode &&\n !cartState.context.errors;\n\n const fetchingFromStorage = useRef(false);\n\n /**\n * Initializes cart with priority in this order:\n * 1. cart props\n * 2. localStorage cartId\n */\n useEffect(() => {\n if (!cartReady.current && !fetchingFromStorage.current) {\n if (!cart && storageAvailable('localStorage')) {\n fetchingFromStorage.current = true;\n try {\n const cartId = window.localStorage.getItem(CART_ID_STORAGE_KEY);\n if (cartId) {\n cartSend({type: 'CART_FETCH', payload: {cartId}});\n }\n } catch (error) {\n console.warn('error fetching cartId');\n console.warn(error);\n }\n }\n cartReady.current = true;\n }\n }, [cart, cartReady, cartSend]);\n\n // Update cart country code if cart and props countryCode's as different\n useEffect(() => {\n if (!countryChanged || customerOverridesCountryCode.current) return;\n cartSend({\n type: 'BUYER_IDENTITY_UPDATE',\n payload: {buyerIdentity: {countryCode, customerAccessToken}},\n });\n }, [\n countryCode,\n customerAccessToken,\n countryChanged,\n customerOverridesCountryCode,\n cartSend,\n ]);\n\n // send cart events when ready\n const onCartReadySend = useCallback(\n (cartEvent: CartMachineEvent) => {\n if (!cartReady.current) {\n return console.warn(\"Cart isn't ready yet\");\n }\n cartSend(cartEvent);\n },\n [cartSend]\n );\n\n // save cart id to local storage\n useEffect(() => {\n if (cartState?.context?.cart?.id && storageAvailable('localStorage')) {\n try {\n window.localStorage.setItem(\n CART_ID_STORAGE_KEY,\n cartState.context.cart?.id\n );\n } catch (error) {\n console.warn('Failed to save cartId to localStorage', error);\n }\n }\n }, [cartState?.context?.cart?.id]);\n\n // delete cart from local storage if cart fetched has been completed\n useEffect(() => {\n if (cartCompleted && storageAvailable('localStorage')) {\n try {\n window.localStorage.removeItem(CART_ID_STORAGE_KEY);\n } catch (error) {\n console.warn('Failed to delete cartId from localStorage', error);\n }\n }\n }, [cartCompleted]);\n\n const cartCreate = useCallback(\n (cartInput: CartInput) => {\n if (countryCode && !cartInput.buyerIdentity?.countryCode) {\n if (cartInput.buyerIdentity == null) {\n cartInput.buyerIdentity = {};\n }\n cartInput.buyerIdentity.countryCode = countryCode;\n }\n\n if (\n customerAccessToken &&\n !cartInput.buyerIdentity?.customerAccessToken\n ) {\n if (cartInput.buyerIdentity == null) {\n cartInput.buyerIdentity = {};\n }\n cartInput.buyerIdentity.customerAccessToken = customerAccessToken;\n }\n onCartReadySend({\n type: 'CART_CREATE',\n payload: cartInput,\n });\n },\n [countryCode, customerAccessToken, onCartReadySend]\n );\n\n // Delays the cart state in the context if the page is hydrating\n // preventing suspense boundary errors.\n const cartDisplayState = useDelayedStateUntilHydration(cartState);\n\n const cartContextValue = useMemo<CartWithActions>(() => {\n return {\n ...(cartDisplayState?.context?.cart ?? {lines: [], attributes: []}),\n status: transposeStatus(cartDisplayState.value),\n error: cartDisplayState?.context?.errors,\n totalQuantity: cartDisplayState?.context?.cart?.totalQuantity ?? 0,\n cartCreate,\n linesAdd(lines: CartLineInput[]) {\n if (cartDisplayState?.context?.cart?.id) {\n onCartReadySend({\n type: 'CARTLINE_ADD',\n payload: {lines},\n });\n } else {\n cartCreate({lines});\n }\n },\n linesRemove(lines: string[]) {\n onCartReadySend({\n type: 'CARTLINE_REMOVE',\n payload: {\n lines,\n },\n });\n },\n linesUpdate(lines: CartLineUpdateInput[]) {\n onCartReadySend({\n type: 'CARTLINE_UPDATE',\n payload: {\n lines,\n },\n });\n },\n noteUpdate(note: MutationCartNoteUpdateArgs['note']) {\n onCartReadySend({\n type: 'NOTE_UPDATE',\n payload: {\n note,\n },\n });\n },\n buyerIdentityUpdate(buyerIdentity: CartBuyerIdentityInput) {\n onCartReadySend({\n type: 'BUYER_IDENTITY_UPDATE',\n payload: {\n buyerIdentity,\n },\n });\n },\n cartAttributesUpdate(attributes: AttributeInput[]) {\n onCartReadySend({\n type: 'CART_ATTRIBUTES_UPDATE',\n payload: {\n attributes,\n },\n });\n },\n discountCodesUpdate(discountCodes: string[]) {\n onCartReadySend({\n type: 'DISCOUNT_CODES_UPDATE',\n payload: {\n discountCodes,\n },\n });\n },\n cartFragment,\n };\n }, [\n cartCreate,\n cartDisplayState?.context?.cart,\n cartDisplayState?.context?.errors,\n cartDisplayState.value,\n cartFragment,\n onCartReadySend,\n ]);\n\n return (\n <CartContext.Provider value={cartContextValue}>\n {children}\n </CartContext.Provider>\n );\n}\n\nfunction transposeStatus(\n status: CartMachineTypeState['value']\n): CartWithActions['status'] {\n switch (status) {\n case 'uninitialized':\n case 'initializationError':\n return 'uninitialized';\n case 'idle':\n case 'cartCompleted':\n case 'error':\n return 'idle';\n case 'cartFetching':\n return 'fetching';\n case 'cartCreating':\n return 'creating';\n case 'cartLineAdding':\n case 'cartLineRemoving':\n case 'cartLineUpdating':\n case 'noteUpdating':\n case 'buyerIdentityUpdating':\n case 'cartAttributesUpdating':\n case 'discountCodesUpdating':\n return 'updating';\n }\n}\n\n/**\n * Delays a state update until hydration finishes. Useful for preventing suspense boundaries errors when updating a context\n * @remarks this uses startTransition and waits for it to finish.\n */\nfunction useDelayedStateUntilHydration<T>(state: T) {\n const [isPending, startTransition] = useTransition();\n const [delayedState, setDelayedState] = useState(state);\n\n const firstTimePending = useRef(false);\n if (isPending) {\n firstTimePending.current = true;\n }\n\n const firstTimePendingFinished = useRef(false);\n if (!isPending && firstTimePending.current) {\n firstTimePendingFinished.current = true;\n }\n\n useEffect(() => {\n startTransition(() => {\n if (!firstTimePendingFinished.current) {\n setDelayedState(state);\n }\n });\n }, [state]);\n\n const displayState = firstTimePendingFinished.current ? state : delayedState;\n\n return displayState;\n}\n\n/** Check for storage availability funciton obtained from\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API\n */\nexport function storageAvailable(type: 'localStorage' | 'sessionStorage') {\n let storage;\n try {\n storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return true;\n } catch (e) {\n return (\n e instanceof DOMException &&\n // everything except Firefox\n (e.code === 22 ||\n // Firefox\n e.code === 1014 ||\n // test name field too, because code might not be present\n // everything except Firefox\n e.name === 'QuotaExceededError' ||\n // Firefox\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n // acknowledge QuotaExceededError only if there's something already stored\n storage &&\n storage.length !== 0\n );\n }\n}\n\nfunction countryCodeNotUpdated(\n context: CartMachineContext,\n event: BuyerIdentityUpdateEvent\n) {\n return (\n event.payload.buyerIdentity.countryCode &&\n context.cart?.buyerIdentity?.countryCode !==\n event.payload.buyerIdentity.countryCode\n );\n}\n\nexport const defaultCartFragment = `\nfragment CartFragment on Cart {\n id\n checkoutUrl\n totalQuantity\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n lines(first: $numCartLines) {\n edges {\n node {\n id\n quantity\n attributes {\n key\n value\n }\n cost {\n totalAmount {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n }\n merchandise {\n ... on ProductVariant {\n id\n availableForSale\n compareAtPriceV2 {\n ...MoneyFragment\n }\n priceV2 {\n ...MoneyFragment\n }\n requiresShipping\n title\n image {\n ...ImageFragment\n }\n product {\n handle\n title\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n }\n cost {\n subtotalAmount {\n ...MoneyFragment\n }\n totalAmount {\n ...MoneyFragment\n }\n totalDutyAmount {\n ...MoneyFragment\n }\n totalTaxAmount {\n ...MoneyFragment\n }\n }\n note\n attributes {\n key\n value\n }\n discountCodes {\n code\n }\n}\n\nfragment MoneyFragment on MoneyV2 {\n currencyCode\n amount\n}\nfragment ImageFragment on Image {\n id\n url\n altText\n width\n height\n}\n`;\n","import {\n useMemo,\n useState,\n useEffect,\n useCallback,\n createContext,\n useContext,\n} from 'react';\nimport type {\n SelectedOption as SelectedOptionType,\n SellingPlan,\n SellingPlanAllocation,\n Product,\n ProductVariant as ProductVariantType,\n ProductVariantConnection,\n SellingPlan as SellingPlanType,\n SellingPlanAllocation as SellingPlanAllocationType,\n SellingPlanGroup as SellingPlanGroupType,\n SellingPlanGroupConnection,\n} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport {flattenConnection} from './flatten-connection.js';\n\nconst ProductOptionsContext = createContext<ProductHookValue | null>(null);\n\ntype InitialVariantId = ProductVariantType['id'] | null;\n\ninterface ProductProviderProps {\n /** A [Product object](https://shopify.dev/api/storefront/reference/products/product). */\n data: PartialDeep<Product, {recurseIntoArrays: true}>;\n /** A `ReactNode` element. */\n children: React.ReactNode;\n /**\n * The initially selected variant.\n * The following logic applies to `initialVariantId`:\n * 1. If `initialVariantId` is provided, then it's used even if it's out of stock.\n * 2. If `initialVariantId` is provided but is `null`, then no variant is used.\n * 3. If nothing is passed to `initialVariantId` then the first available / in-stock variant is used.\n * 4. If nothing is passed to `initialVariantId` and no variants are in stock, then the first variant is used.\n */\n initialVariantId?: InitialVariantId;\n}\n\n/**\n * `<ProductProvider />` is a context provider that enables use of the `useProduct()` hook.\n *\n * It helps manage selected options and variants for a product.\n */\nexport function ProductProvider({\n children,\n data: product,\n initialVariantId: explicitVariantId,\n}: ProductProviderProps) {\n // The flattened variants\n const variants = useMemo(\n () => flattenConnection(product.variants ?? {}),\n [product.variants]\n );\n\n if (!isProductVariantArray(variants)) {\n throw new Error(\n `<ProductProvider/> requires 'product.variants.nodes' or 'product.variants.edges'`\n );\n }\n\n // All the options available for a product, based on all the variants\n const options = useMemo(() => getOptions(variants), [variants]);\n\n /**\n * Track the selectedVariant within the provider.\n */\n const [selectedVariant, setSelectedVariant] = useState<\n | PartialDeep<ProductVariantType, {recurseIntoArrays: true}>\n | undefined\n | null\n >(() => getVariantBasedOnIdProp(explicitVariantId, variants));\n\n /**\n * Track the selectedOptions within the provider. If a `initialVariantId`\n * is passed, use that to select initial options.\n */\n const [selectedOptions, setSelectedOptions] = useState<SelectedOptions>(() =>\n getSelectedOptions(selectedVariant)\n );\n\n /**\n * When the initialVariantId changes, we need to make sure we\n * update the selected variant and selected options. If not,\n * then the selected variant and options will reference incorrect\n * values.\n */\n useEffect(() => {\n const newSelectedVariant = getVariantBasedOnIdProp(\n explicitVariantId,\n variants\n );\n setSelectedVariant(newSelectedVariant);\n setSelectedOptions(getSelectedOptions(newSelectedVariant));\n }, [explicitVariantId, variants]);\n\n /**\n * Allow the developer to select an option.\n */\n const setSelectedOption = useCallback(\n (name: string, value: string) => {\n setSelectedOptions((selectedOptions) => {\n const opts = {...selectedOptions, [name]: value};\n setSelectedVariant(getSelectedVariant(variants, opts));\n return opts;\n });\n },\n [setSelectedOptions, variants]\n );\n\n const isOptionInStock = useCallback(\n (option: string, value: string) => {\n const proposedVariant = getSelectedVariant(variants, {\n ...selectedOptions,\n ...{[option]: value},\n });\n\n return proposedVariant?.availableForSale ?? true;\n },\n [selectedOptions, variants]\n );\n\n const sellingPlanGroups = useMemo(\n () =>\n flattenConnection(product.sellingPlanGroups ?? {}).map(\n (sellingPlanGroup) => ({\n ...sellingPlanGroup,\n sellingPlans: flattenConnection(sellingPlanGroup?.sellingPlans ?? {}),\n })\n ),\n [product.sellingPlanGroups]\n );\n\n /**\n * Track the selectedSellingPlan within the hook. If `initialSellingPlanId`\n * is passed, use that as an initial value. Look it up from the `selectedVariant`, since\n * that is also a requirement.\n */\n const [selectedSellingPlan, setSelectedSellingPlan] = useState<\n PartialDeep<SellingPlan, {recurseIntoArrays: true}> | undefined\n >(undefined);\n\n const selectedSellingPlanAllocation = useMemo<\n PartialDeep<SellingPlanAllocation, {recurseIntoArrays: true}> | undefined\n >(() => {\n if (!selectedVariant || !selectedSellingPlan) {\n return;\n }\n\n if (\n !selectedVariant.sellingPlanAllocations?.nodes &&\n !selectedVariant.sellingPlanAllocations?.edges\n ) {\n throw new Error(\n `<ProductProvider/>: You must include 'sellingPlanAllocations.nodes' or 'sellingPlanAllocations.edges' in your variants in order to calculate selectedSellingPlanAllocation`\n );\n }\n\n return flattenConnection(selectedVariant.sellingPlanAllocations).find(\n (allocation) => allocation?.sellingPlan?.id === selectedSellingPlan.id\n );\n }, [selectedVariant, selectedSellingPlan]);\n\n const value = useMemo<ProductHookValue>(\n () => ({\n variants,\n variantsConnection: product.variants,\n options,\n selectedVariant,\n setSelectedVariant,\n selectedOptions,\n setSelectedOption,\n setSelectedOptions,\n isOptionInStock,\n selectedSellingPlan,\n setSelectedSellingPlan,\n selectedSellingPlanAllocation,\n sellingPlanGroups,\n sellingPlanGroupsConnection: product.sellingPlanGroups,\n }),\n [\n isOptionInStock,\n options,\n product.sellingPlanGroups,\n product.variants,\n selectedOptions,\n selectedSellingPlan,\n selectedSellingPlanAllocation,\n selectedVariant,\n sellingPlanGroups,\n setSelectedOption,\n variants,\n ]\n );\n\n return (\n <ProductOptionsContext.Provider value={value}>\n {children}\n </ProductOptionsContext.Provider>\n );\n}\n\n/**\n * Provides access to the context value provided by `<ProductProvider />`. Must be a descendent of `<ProductProvider />`.\n */\nexport function useProduct() {\n const context = useContext(ProductOptionsContext);\n\n if (!context) {\n throw new Error(`'useProduct' must be a child of <ProductProvider />`);\n }\n\n return context;\n}\n\nfunction getSelectedVariant(\n variants: PartialDeep<ProductVariantType, {recurseIntoArrays: true}>[],\n choices: SelectedOptions\n): PartialDeep<ProductVariantType, {recurseIntoArrays: true}> | undefined {\n /**\n * Ensure the user has selected all the required options, not just some.\n */\n if (\n !variants.length ||\n variants?.[0]?.selectedOptions?.length !== Object.keys(choices).length\n ) {\n return;\n }\n\n return variants?.find((variant) => {\n return Object.entries(choices).every(([name, value]) => {\n return variant?.selectedOptions?.some(\n (option) => option?.name === name && option?.value === value\n );\n });\n });\n}\n\nfunction getOptions(\n variants: PartialDeep<ProductVariantType, {recurseIntoArrays: true}>[]\n): OptionWithValues[] {\n const map = variants.reduce((memo, variant) => {\n if (!variant.selectedOptions) {\n throw new Error(`'getOptions' requires 'variant.selectedOptions'`);\n }\n variant?.selectedOptions?.forEach((opt) => {\n memo[opt?.name ?? ''] = memo[opt?.name ?? ''] || new Set();\n memo[opt?.name ?? ''].add(opt?.value ?? '');\n });\n\n return memo;\n }, {} as Record<string, Set<string>>);\n\n return Object.keys(map).map((option) => {\n return {\n name: option,\n values: Array.from(map[option]),\n };\n });\n}\n\nfunction getVariantBasedOnIdProp(\n explicitVariantId: InitialVariantId | undefined,\n variants: Array<\n PartialDeep<ProductVariantType, {recurseIntoArrays: true}> | undefined\n >\n) {\n // get the initial variant based on the logic outlined in the comments for 'initialVariantId' above\n // * 1. If `initialVariantId` is provided, then it's used even if it's out of stock.\n if (explicitVariantId) {\n const foundVariant = variants.find(\n (variant) => variant?.id === explicitVariantId\n );\n if (!foundVariant) {\n console.warn(\n `<ProductProvider/> received a 'initialVariantId' prop, but could not actually find a variant with that ID`\n );\n }\n return foundVariant;\n }\n // * 2. If `initialVariantId` is provided but is `null`, then no variant is used.\n if (explicitVariantId === null) {\n return null;\n }\n // * 3. If nothing is passed to `initialVariantId` then the first available / in-stock variant is used.\n // * 4. If nothing is passed to `initialVariantId` and no variants are in stock, then the first variant is used.\n if (explicitVariantId === undefined) {\n return variants.find((variant) => variant?.availableForSale) || variants[0];\n }\n}\n\nfunction getSelectedOptions(\n selectedVariant:\n | PartialDeep<ProductVariantType, {recurseIntoArrays: true}>\n | undefined\n | null\n): SelectedOptions {\n return selectedVariant?.selectedOptions\n ? selectedVariant.selectedOptions.reduce<SelectedOptions>(\n (memo, optionSet) => {\n memo[optionSet?.name ?? ''] = optionSet?.value ?? '';\n return memo;\n },\n {}\n )\n : {};\n}\n\nfunction isProductVariantArray(\n maybeVariantArray:\n | (PartialDeep<ProductVariantType, {recurseIntoArrays: true}> | undefined)[]\n | undefined\n): maybeVariantArray is PartialDeep<\n ProductVariantType,\n {recurseIntoArrays: true}\n>[] {\n if (!maybeVariantArray || !Array.isArray(maybeVariantArray)) {\n return false;\n }\n\n return true;\n}\n\nexport interface OptionWithValues {\n name: SelectedOptionType['name'];\n values: SelectedOptionType['value'][];\n}\n\ntype ProductHookValue = PartialDeep<\n {\n /** An array of the variant `nodes` from the `VariantConnection`. */\n variants: ProductVariantType[];\n variantsConnection?: ProductVariantConnection;\n /** An array of the product's options and values. */\n options: OptionWithValues[];\n /** The selected variant. */\n selectedVariant?: ProductVariantType | null;\n selectedOptions: SelectedOptions;\n /** The selected selling plan. */\n selectedSellingPlan?: SellingPlanType;\n /** The selected selling plan allocation. */\n selectedSellingPlanAllocation?: SellingPlanAllocationType;\n /** The selling plan groups. */\n sellingPlanGroups?: (Omit<SellingPlanGroupType, 'sellingPlans'> & {\n sellingPlans: SellingPlanType[];\n })[];\n sellingPlanGroupsConnection?: SellingPlanGroupConnection;\n },\n {recurseIntoArrays: true}\n> & {\n /** A callback to set the selected variant to the variant passed as an argument. */\n setSelectedVariant: (\n variant: PartialDeep<ProductVariantType, {recurseIntoArrays: true}> | null\n ) => void;\n /** A callback to set the selected option. */\n setSelectedOption: (\n name: SelectedOptionType['name'],\n value: SelectedOptionType['value']\n ) => void;\n /** A callback to set multiple selected options at once. */\n setSelectedOptions: (options: SelectedOptions) => void;\n /** A callback to set the selected selling plan to the one passed as an argument. */\n setSelectedSellingPlan: (\n sellingPlan: PartialDeep<SellingPlanType, {recurseIntoArrays: true}>\n ) => void;\n /** A callback that returns a boolean indicating if the option is in stock. */\n isOptionInStock: (\n name: SelectedOptionType['name'],\n value: SelectedOptionType['value']\n ) => boolean;\n};\n\nexport type SelectedOptions = {\n [key: string]: string;\n};\n","import {ReactNode, Ref, useCallback} from 'react';\n\nexport interface CustomBaseButtonProps<AsType> {\n /** Provide a React element or component to render as the underlying button. Note: for accessibility compliance, almost always you should use a `button` element, or a component that renders an underlying button. */\n as?: AsType;\n /** Any ReactNode elements. */\n children: ReactNode;\n /** Click event handler. Default behaviour triggers unless prevented */\n onClick?: (\n event?: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => void | boolean;\n /** A default onClick behavior */\n defaultOnClick?: (\n event?: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => void | boolean;\n /** A ref to the underlying button */\n buttonRef?: Ref<HTMLButtonElement>;\n}\n\nexport type BaseButtonProps<AsType extends React.ElementType> =\n CustomBaseButtonProps<AsType> &\n Omit<\n React.ComponentPropsWithoutRef<AsType>,\n keyof CustomBaseButtonProps<AsType>\n >;\n\nexport function BaseButton<AsType extends React.ElementType = 'button'>(\n props: BaseButtonProps<AsType>\n) {\n const {\n as,\n onClick,\n defaultOnClick,\n children,\n buttonRef,\n ...passthroughProps\n } = props;\n\n const handleOnClick = useCallback(\n (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n if (onClick) {\n const clickShouldContinue = onClick(event);\n if (\n (typeof clickShouldContinue === 'boolean' &&\n clickShouldContinue === false) ||\n event?.defaultPrevented\n )\n return;\n }\n\n defaultOnClick?.(event);\n },\n [defaultOnClick, onClick]\n );\n\n const Component = as || 'button';\n\n return (\n <Component ref={buttonRef} onClick={handleOnClick} {...passthroughProps}>\n {children}\n </Component>\n );\n}\n","import {useCallback, useEffect, useState} from 'react';\n\nimport {useCart} from './CartProvider.js';\nimport {useProduct} from './ProductProvider.js';\nimport {BaseButton, BaseButtonProps} from './BaseButton.js';\n\ninterface AddToCartButtonProps {\n /** An array of cart line attributes that belong to the item being added to the cart. */\n attributes?: {\n key: string;\n value: string;\n }[];\n /** The ID of the variant. */\n variantId?: string | null;\n /** The item quantity. */\n quantity?: number;\n /** The text that is announced by the screen reader when the item is being added to the cart. Used for accessibility purposes only and not displayed on the page. */\n accessibleAddingToCartLabel?: string;\n /** The selling plan ID of the subscription variant */\n sellingPlanId?: string;\n}\n\n/**\n * The `AddToCartButton` component renders a button that adds an item to the cart when pressed.\n * It must be a descendent of the `CartProvider` component.\n */\nexport function AddToCartButton<AsType extends React.ElementType = 'button'>(\n props: AddToCartButtonProps & BaseButtonProps<AsType>\n) {\n const [addingItem, setAddingItem] = useState<boolean>(false);\n const {\n variantId: explicitVariantId,\n quantity = 1,\n attributes,\n sellingPlanId,\n onClick,\n children,\n accessibleAddingToCartLabel,\n ...passthroughProps\n } = props;\n const {status, linesAdd} = useCart();\n const {selectedVariant} = useProduct();\n const variantId = explicitVariantId ?? selectedVariant?.id ?? '';\n const disabled =\n explicitVariantId === null ||\n variantId === '' ||\n selectedVariant === null ||\n addingItem ||\n passthroughProps.disabled;\n\n useEffect(() => {\n if (addingItem && status === 'idle') {\n setAddingItem(false);\n }\n }, [status, addingItem]);\n\n const handleAddItem = useCallback(() => {\n setAddingItem(true);\n linesAdd([\n {\n quantity,\n merchandiseId: variantId || '',\n attributes,\n sellingPlanId,\n },\n ]);\n }, [linesAdd, quantity, variantId, attributes, sellingPlanId]);\n\n return (\n <>\n <BaseButton\n {...passthroughProps}\n disabled={disabled}\n onClick={onClick}\n defaultOnClick={handleAddItem}\n >\n {children}\n </BaseButton>\n {accessibleAddingToCartLabel ? (\n <p\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n borderWidth: '0',\n }}\n role=\"alert\"\n aria-live=\"assertive\"\n >\n {addingItem ? accessibleAddingToCartLabel : null}\n </p>\n ) : null}\n </>\n );\n}\n","import {useEffect, useState, useCallback} from 'react';\nimport {useCart} from './CartProvider.js';\nimport {BaseButton, BaseButtonProps} from './BaseButton.js';\n\ninterface BuyNowButtonProps {\n /** The item quantity. Defaults to 1. */\n quantity?: number;\n /** The ID of the variant. */\n variantId: string;\n /** An array of cart line attributes that belong to the item being added to the cart. */\n attributes?: {\n key: string;\n value: string;\n }[];\n}\n\n/** The `BuyNowButton` component renders a button that adds an item to the cart and redirects the customer to checkout. */\nexport function BuyNowButton<AsType extends React.ElementType = 'button'>(\n props: BuyNowButtonProps & BaseButtonProps<AsType>\n) {\n const {cartCreate, checkoutUrl} = useCart();\n const [loading, setLoading] = useState<boolean>(false);\n\n const {\n quantity,\n variantId,\n onClick,\n attributes,\n children,\n ...passthroughProps\n } = props;\n\n useEffect(() => {\n if (checkoutUrl) {\n window.location.href = checkoutUrl;\n }\n }, [checkoutUrl]);\n\n const handleBuyNow = useCallback(() => {\n setLoading(true);\n cartCreate({\n lines: [\n {\n quantity: quantity ?? 1,\n merchandiseId: variantId,\n attributes,\n },\n ],\n });\n }, [cartCreate, quantity, variantId, attributes]);\n\n return (\n <BaseButton\n disabled={loading ?? passthroughProps.disabled}\n {...passthroughProps}\n onClick={onClick}\n defaultOnClick={handleBuyNow}\n >\n {children}\n </BaseButton>\n );\n}\n","import {ReactNode, useEffect, useState} from 'react';\nimport {useCart} from './CartProvider.js';\nimport {BaseButton, BaseButtonProps} from './BaseButton.js';\n\ntype PropsWeControl = 'onClick';\n\n/**\n * The `CartCheckoutButton` component renders a button that redirects to the checkout URL for the cart.\n * It must be a descendent of a `CartProvider` component.\n */\nexport function CartCheckoutButton(\n props: Omit<BaseButtonProps<'button'>, PropsWeControl> & {\n /** A `ReactNode` element. */\n children: ReactNode;\n }\n) {\n const [requestedCheckout, setRequestedCheckout] = useState(false);\n const {status, checkoutUrl} = useCart();\n const {children, ...passthroughProps} = props;\n\n useEffect(() => {\n if (requestedCheckout && checkoutUrl && status === 'idle') {\n window.location.href = checkoutUrl;\n }\n }, [requestedCheckout, status, checkoutUrl]);\n\n return (\n <BaseButton\n {...passthroughProps}\n disabled={requestedCheckout || passthroughProps.disabled}\n onClick={() => setRequestedCheckout(true)}\n >\n {children}\n </BaseButton>\n );\n}\n","import type {ExternalVideo as ExternalVideoType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\ninterface BaseProps {\n /**\n * An object with fields that correspond to the Storefront API's [ExternalVideo object](https://shopify.dev/api/storefront/reference/products/externalvideo).\n */\n data: PartialDeep<ExternalVideoType, {recurseIntoArrays: true}>;\n /** An object containing the options available for either\n * [YouTube](https://developers.google.com/youtube/player_parameters#Parameters) or\n * [Vimeo](https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Using-Player-Parameters).\n */\n options?: YouTube | Vimeo;\n}\n\ntype PropsWeControl = 'src';\n\nexport type ExternalVideoProps = Omit<\n JSX.IntrinsicElements['iframe'],\n PropsWeControl\n> &\n BaseProps;\n\n/**\n * The `ExternalVideo` component renders an embedded video for the Storefront\n * API's [ExternalVideo object](https://shopify.dev/api/storefront/reference/products/externalvideo).\n */\nexport function ExternalVideo(props: ExternalVideoProps) {\n const {\n data,\n options,\n id = data.id,\n frameBorder = '0',\n allow = 'accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture',\n allowFullScreen = true,\n loading = 'lazy',\n ...passthroughProps\n } = props;\n\n if (!data.embedUrl) {\n throw new Error(`<ExternalVideo/> requires the 'embedUrl' property`);\n }\n\n let finalUrl: string = data.embedUrl;\n\n if (options) {\n const urlObject = new URL(data.embedUrl);\n for (const key of Object.keys(options)) {\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/32951\n urlObject.searchParams.set(key, options[key]);\n }\n finalUrl = urlObject.toString();\n }\n\n return (\n <iframe\n {...passthroughProps}\n id={id ?? data.embedUrl}\n title={data.alt ?? data.id ?? 'external video'}\n frameBorder={frameBorder}\n allow={allow}\n allowFullScreen={allowFullScreen}\n src={finalUrl}\n loading={loading}\n ></iframe>\n );\n}\n\ninterface YouTube {\n autoplay?: 0 | 1;\n cc_lang_pref?: string;\n cc_load_policy?: 1;\n color?: 'red' | 'white';\n controls?: 0 | 1;\n disablekb?: 0 | 1;\n enablejsapi?: 0 | 1;\n end?: number;\n fs?: 0 | 1;\n hl?: string;\n iv_load_policy?: 1 | 3;\n list?: string;\n list_type?: 'playlist' | 'user_uploads';\n loop?: 0 | 1;\n modest_branding?: 1;\n origin?: string;\n playlist?: string;\n plays_inline?: 0 | 1;\n rel?: 0 | 1;\n start?: number;\n widget_referrer?: string;\n}\n\ntype VimeoBoolean = 0 | 1 | boolean;\n\ninterface Vimeo {\n autopause?: VimeoBoolean;\n autoplay?: VimeoBoolean;\n background?: VimeoBoolean;\n byline?: VimeoBoolean;\n color?: string;\n controls?: VimeoBoolean;\n dnt?: VimeoBoolean;\n loop?: VimeoBoolean;\n muted?: VimeoBoolean;\n pip?: VimeoBoolean;\n playsinline?: VimeoBoolean;\n portrait?: VimeoBoolean;\n quality?: '240p' | '360p' | '540p' | '720p' | '1080p' | '2k' | '4k';\n speed?: VimeoBoolean;\n '#t'?: string;\n texttrack?: string;\n title?: VimeoBoolean;\n transparent?: VimeoBoolean;\n}\n","import type {Image as ImageType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ShopifyLoaderOptions, ShopifyLoaderParams} from './Image.js';\n\n// TODO: Are there other CDNs missing from here?\nconst PRODUCTION_CDN_HOSTNAMES = [\n 'cdn.shopify.com',\n 'cdn.shopifycdn.net',\n 'shopify-assets.shopifycdn.com',\n 'shopify-assets.shopifycdn.net',\n];\nconst LOCAL_CDN_HOSTNAMES = ['spin.dev'];\nconst ALL_CDN_HOSTNAMES = [...PRODUCTION_CDN_HOSTNAMES, ...LOCAL_CDN_HOSTNAMES];\n\n// based on the default width sizes used by the Shopify liquid HTML tag img_tag plus a 2560 width to account for 2k resolutions\n// reference: https://shopify.dev/api/liquid/filters/html-filters#image_tag\nexport const IMG_SRC_SET_SIZES = [352, 832, 1200, 1920, 2560];\n\n/**\n * Adds image size parameters to an image URL hosted by Shopify's CDN\n */\nexport function addImageSizeParametersToUrl({\n src,\n width,\n height,\n crop,\n scale,\n}: ShopifyLoaderParams) {\n const newUrl = new URL(src);\n\n const multipliedScale = scale ?? 1;\n\n if (width) {\n let finalWidth: string;\n\n if (typeof width === 'string') {\n finalWidth = (IMG_SRC_SET_SIZES[0] * multipliedScale).toString();\n } else {\n finalWidth = (Number(width) * multipliedScale).toString();\n }\n\n newUrl.searchParams.append('width', finalWidth);\n }\n\n if (height && typeof height === 'number') {\n newUrl.searchParams.append('height', (height * multipliedScale).toString());\n }\n\n crop && newUrl.searchParams.append('crop', crop);\n\n // for now we intentionally leave off the scale param, and instead multiple width & height by scale instead\n // scale && newUrl.searchParams.append('scale', scale.toString());\n\n return newUrl.toString();\n}\n\nexport function shopifyImageLoader(params: ShopifyLoaderParams) {\n const newSrc = new URL(params.src);\n const isShopifyServedImage = ALL_CDN_HOSTNAMES.some((allowedHostname) =>\n newSrc.hostname.endsWith(allowedHostname)\n );\n\n if (\n !isShopifyServedImage ||\n (!params.width && !params.height && !params.crop && !params.scale)\n ) {\n return params.src;\n }\n\n return addImageSizeParametersToUrl(params);\n}\n\ntype HtmlImageProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\nexport type GetShopifyImageDimensionsProps = {\n data: Pick<\n PartialDeep<ImageType, {recurseIntoArrays: true}>,\n 'altText' | 'url' | 'id' | 'width' | 'height'\n >;\n loaderOptions?: ShopifyLoaderOptions;\n elementProps?: {\n width?: HtmlImageProps['width'];\n height?: HtmlImageProps['height'];\n };\n};\n\ntype GetShopifyImageDimensionsPropsReturn = {\n width: number | string | null;\n height: number | string | null;\n};\n\n/**\n * Width and height are determined using the followiing priority list:\n * 1. `loaderOptions`'s width/height\n * 2. `elementProps`'s width/height\n * 3. `data`'s width/height\n *\n * If only one of `width` or `height` are defined, then the other will attempt to be calculated based on the Image's aspect ratio,\n * provided that both `data.width` and `data.height` are available. If not, then the aspect ratio cannot be determined and the missing\n * value will reamin as `null`\n */\nexport function getShopifyImageDimensions({\n data: sfapiImage,\n loaderOptions,\n elementProps,\n}: GetShopifyImageDimensionsProps): GetShopifyImageDimensionsPropsReturn {\n let aspectRatio: number | null = null;\n\n if (sfapiImage?.width && sfapiImage?.height) {\n aspectRatio = sfapiImage?.width / sfapiImage?.height;\n }\n\n // * 1. `loaderOptions`'s width/height\n if (loaderOptions?.width || loaderOptions?.height) {\n return {\n width:\n loaderOptions?.width ??\n (aspectRatio && typeof loaderOptions.height === 'number'\n ? Math.round(aspectRatio * loaderOptions.height)\n : null),\n height:\n loaderOptions?.height ??\n (aspectRatio && typeof loaderOptions.width === 'number'\n ? Math.round(aspectRatio * loaderOptions.width)\n : null),\n };\n }\n\n // * 2. `elementProps`'s width/height\n if (elementProps?.width || elementProps?.height) {\n return {\n width:\n elementProps?.width ??\n (aspectRatio && typeof elementProps.height === 'number'\n ? Math.round(aspectRatio * elementProps.height)\n : null),\n height:\n elementProps?.height ??\n (aspectRatio && typeof elementProps.width === 'number'\n ? Math.round(aspectRatio * elementProps.width)\n : null),\n };\n }\n\n // * 3. `data`'s width/height\n if (sfapiImage?.width || sfapiImage?.height) {\n return {\n // can't calculate the aspect ratio here\n width: sfapiImage?.width ?? null,\n height: sfapiImage?.height ?? null,\n };\n }\n\n return {width: null, height: null};\n}\n","import * as React from 'react';\nimport {\n getShopifyImageDimensions,\n shopifyImageLoader,\n addImageSizeParametersToUrl,\n IMG_SRC_SET_SIZES,\n} from './image-size.js';\nimport type {Image as ImageType} from './storefront-api-types.js';\nimport type {PartialDeep, Simplify} from 'type-fest';\n\ntype HtmlImageProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\nexport type ShopifyLoaderOptions = {\n crop?: 'top' | 'bottom' | 'left' | 'right' | 'center';\n scale?: 2 | 3;\n width?: HtmlImageProps['width'] | ImageType['width'];\n height?: HtmlImageProps['height'] | ImageType['height'];\n};\nexport type ShopifyLoaderParams = Simplify<\n ShopifyLoaderOptions & {\n src: ImageType['url'];\n }\n>;\nexport type ShopifyImageProps = Omit<HtmlImageProps, 'src'> & {\n /** An object with fields that correspond to the Storefront API's\n * [Image object](https://shopify.dev/api/storefront/reference/common-objects/image).\n * The `data` prop is required.\n */\n data: PartialDeep<ImageType, {recurseIntoArrays: true}>;\n /** A custom function that generates the image URL. Parameters passed in\n * are `ShopifyLoaderParams`\n */\n loader?: (params: ShopifyLoaderParams) => string;\n /** An object of `loader` function options. For example, if the `loader` function\n * requires a `scale` option, then the value can be a property of the\n * `loaderOptions` object (for example, `{scale: 2}`). The object shape is `ShopifyLoaderOptions`.\n */\n loaderOptions?: ShopifyLoaderOptions;\n /**\n * `src` isn't used, and should instead be passed as part of the `data` object\n */\n src?: never;\n /**\n * An array of pixel widths to overwrite the default generated srcset. For example, `[300, 600, 800]`.\n */\n widths?: (HtmlImageProps['width'] | ImageType['width'])[];\n};\n\n/**\n * The `Image` component renders an image for the Storefront API's\n * [Image object](https://shopify.dev/api/storefront/reference/common-objects/image) by using the `data` prop. You can [customize this component](https://shopify.dev/api/hydrogen/components#customizing-hydrogen-components) using passthrough props.\n *\n * An image's width and height are determined using the following priority list:\n * 1. The width and height values for the `loaderOptions` prop\n * 2. The width and height values for bare props\n * 3. The width and height values for the `data` prop\n *\n * If only one of `width` or `height` are defined, then the other will attempt to be calculated based on the image's aspect ratio,\n * provided that both `data.width` and `data.height` are available. If `data.width` and `data.height` aren't available, then the aspect ratio cannot be determined and the missing\n * value will remain as `null`\n */\nexport function Image({\n data,\n width,\n height,\n loading,\n loader = shopifyImageLoader,\n loaderOptions,\n widths,\n decoding = 'async',\n ...rest\n}: ShopifyImageProps) {\n if (!data.url) {\n const missingUrlError = `<Image/>: the 'data' prop requires the 'url' property. Image: ${\n data.id ?? 'no ID provided'\n }`;\n\n if (__HYDROGEN_DEV__) {\n throw new Error(missingUrlError);\n } else {\n console.error(missingUrlError);\n }\n\n return null;\n }\n\n if (__HYDROGEN_DEV__ && !data.altText && !rest.alt) {\n console.warn(\n `<Image/>: the 'data' prop should have the 'altText' property, or the 'alt' prop, and one of them should not be empty. Image: ${\n data.id ?? data.url\n }`\n );\n }\n\n const {width: imgElementWidth, height: imgElementHeight} =\n getShopifyImageDimensions({\n data,\n loaderOptions,\n elementProps: {\n width,\n height,\n },\n });\n\n if (__HYDROGEN_DEV__ && (!imgElementWidth || !imgElementHeight)) {\n console.warn(\n `<Image/>: the 'data' prop requires either 'width' or 'data.width', and 'height' or 'data.height' properties. Image: ${\n data.id ?? data.url\n }`\n );\n }\n\n let finalSrc = data.url;\n\n if (loader) {\n finalSrc = loader({\n ...loaderOptions,\n src: data.url,\n width: imgElementWidth,\n height: imgElementHeight,\n });\n if (typeof finalSrc !== 'string' || !finalSrc) {\n throw new Error(\n `<Image/>: 'loader' did not return a valid string. Image: ${\n data.id ?? data.url\n }`\n );\n }\n }\n\n // determining what the intended width of the image is. For example, if the width is specified and lower than the image width, then that is the maximum image width\n // to prevent generating a srcset with widths bigger than needed or to generate images that would distort because of being larger than original\n const maxWidth =\n width && imgElementWidth && width < imgElementWidth\n ? width\n : imgElementWidth;\n const finalSrcset =\n rest.srcSet ??\n internalImageSrcSet({\n ...loaderOptions,\n widths,\n src: data.url,\n width: maxWidth,\n height: imgElementHeight,\n loader,\n });\n\n /* eslint-disable hydrogen/prefer-image-component */\n return (\n <img\n id={data.id ?? ''}\n alt={data.altText ?? rest.alt ?? ''}\n loading={loading ?? 'lazy'}\n {...rest}\n src={finalSrc}\n width={imgElementWidth ?? undefined}\n height={imgElementHeight ?? undefined}\n srcSet={finalSrcset}\n decoding={decoding}\n />\n );\n /* eslint-enable hydrogen/prefer-image-component */\n}\n\ntype InternalShopifySrcSetGeneratorsParams = Simplify<\n ShopifyLoaderOptions & {\n src: ImageType['url'];\n widths?: (HtmlImageProps['width'] | ImageType['width'])[];\n loader?: (params: ShopifyLoaderParams) => string;\n }\n>;\nfunction internalImageSrcSet({\n src,\n width,\n crop,\n scale,\n widths,\n loader,\n height,\n}: InternalShopifySrcSetGeneratorsParams) {\n const hasCustomWidths = widths && Array.isArray(widths);\n if (hasCustomWidths && widths.some((size) => isNaN(size as number))) {\n throw new Error(\n `<Image/>: the 'widths' must be an array of numbers. Image: ${src}`\n );\n }\n\n let aspectRatio = 1;\n if (width && height) {\n aspectRatio = Number(height) / Number(width);\n }\n\n let setSizes = hasCustomWidths ? widths : IMG_SRC_SET_SIZES;\n if (\n !hasCustomWidths &&\n width &&\n width < IMG_SRC_SET_SIZES[IMG_SRC_SET_SIZES.length - 1]\n ) {\n setSizes = IMG_SRC_SET_SIZES.filter((size) => size <= width);\n }\n const srcGenerator = loader ? loader : addImageSizeParametersToUrl;\n return setSizes\n .map(\n (size) =>\n `${srcGenerator({\n src,\n width: size,\n // height is not applied if there is no crop\n // if there is crop, then height is applied as a ratio of the original width + height aspect ratio * size\n height: crop ? Number(size) * aspectRatio : undefined,\n crop,\n scale,\n })} ${size}w`\n )\n .join(', ');\n}\n","import {type HTMLAttributes} from 'react';\nimport {shopifyImageLoader} from './image-size.js';\nimport type {Video as VideoType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\nexport interface VideoProps {\n /** An object with fields that correspond to the Storefront API's [Video object](https://shopify.dev/api/storefront/latest/objects/video). */\n data: PartialDeep<VideoType, {recurseIntoArrays: true}>;\n /** An object of image size options for the video's `previewImage`. Uses `shopifyImageLoader` to generate the `poster` URL. */\n previewImageOptions?: Parameters<typeof shopifyImageLoader>[0];\n /** Props that will be passed to the `video` element's `source` children elements. */\n sourceProps?: HTMLAttributes<HTMLSourceElement> & {\n 'data-testid'?: string;\n };\n}\n\n/**\n * The `Video` component renders a `video` for the Storefront API's [Video object](https://shopify.dev/api/storefront/reference/products/video).\n */\nexport function Video(props: JSX.IntrinsicElements['video'] & VideoProps) {\n const {\n data,\n previewImageOptions,\n id = data.id,\n playsInline = true,\n controls = true,\n sourceProps = {},\n ...passthroughProps\n } = props;\n\n const posterUrl = shopifyImageLoader({\n src: data.previewImage?.url ?? '',\n ...previewImageOptions,\n });\n\n if (!data.sources) {\n throw new Error(`<Video/> requires a 'data.sources' array`);\n }\n\n return (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n {...passthroughProps}\n id={id}\n playsInline={playsInline}\n controls={controls}\n poster={posterUrl}\n >\n {data.sources.map((source) => {\n if (!(source?.url && source?.mimeType)) {\n throw new Error(`<Video/> needs 'source.url' and 'source.mimeType'`);\n }\n return (\n <source\n {...sourceProps}\n key={source.url}\n src={source.url}\n type={source.mimeType}\n />\n );\n })}\n </video>\n );\n}\n","import {useState, useEffect} from 'react';\n\nconst SCRIPTS_LOADED: Record<string, Promise<boolean>> = {};\n\nexport function loadScript(\n src: string,\n options?: {module?: boolean; in?: 'head' | 'body'}\n): Promise<boolean> {\n const isScriptLoaded: Promise<boolean> = SCRIPTS_LOADED[src];\n\n if (isScriptLoaded) {\n return isScriptLoaded;\n }\n\n const promise = new Promise<boolean>((resolve, reject) => {\n const script = document.createElement('script');\n if (options?.module) {\n script.type = 'module';\n } else {\n script.type = 'text/javascript';\n }\n script.src = src;\n script.onload = () => {\n resolve(true);\n };\n script.onerror = () => {\n reject(false);\n };\n if (options?.in === 'head') {\n document.head.appendChild(script);\n } else {\n document.body.appendChild(script);\n }\n });\n\n SCRIPTS_LOADED[src] = promise;\n\n return promise;\n}\n\ntype LoadScriptParams = Parameters<typeof loadScript>;\n\n/**\n * The `useLoadScript` hook loads an external script tag in the browser. It allows React components to lazy-load large third-party dependencies.\n */\nexport function useLoadScript(\n url: LoadScriptParams[0],\n options?: LoadScriptParams[1]\n): ScriptState {\n const [status, setStatus] = useState<ScriptState>('loading');\n const stringifiedOptions = JSON.stringify(options);\n\n useEffect(() => {\n async function loadScriptWrapper() {\n try {\n setStatus('loading');\n await loadScript(url, options);\n setStatus('done');\n } catch (error) {\n setStatus('error');\n }\n }\n\n loadScriptWrapper();\n }, [url, stringifiedOptions, options]);\n\n return status;\n}\n\ntype ScriptState = 'loading' | 'done' | 'error';\n","import {useState, useEffect, useCallback} from 'react';\nimport {useLoadScript} from './load-script.js';\nimport type {Model3d} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ModelViewerElement} from '@google/model-viewer/lib/model-viewer.js';\n\ntype PropsWeControl = 'src';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n 'model-viewer': PartialDeep<\n ModelViewerElement,\n {recurseIntoArrays: true}\n >;\n }\n }\n}\n\ntype ModelViewerProps = Omit<\n PartialDeep<JSX.IntrinsicElements['model-viewer'], {recurseIntoArrays: true}>,\n PropsWeControl\n> & {\n /** An object with fields that correspond to the Storefront API's [Model3D object](https://shopify.dev/api/storefront/latest/objects/model3d). */\n data: PartialDeep<Model3d, {recurseIntoArrays: true}>;\n /** The callback to invoke when the 'error' event is triggered. Refer to [error in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-error). */\n onError?: (event: Event) => void;\n /** The callback to invoke when the `load` event is triggered. Refer to [load in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-load). */\n onLoad?: (event: Event) => void;\n /** The callback to invoke when the 'preload' event is triggered. Refer to [preload in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-preload). */\n onPreload?: (event: Event) => void;\n /** The callback to invoke when the 'model-visibility' event is triggered. Refer to [model-visibility in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-modelVisibility). */\n onModelVisibility?: (event: Event) => void;\n /** The callback to invoke when the 'progress' event is triggered. Refer to [progress in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-loading-events-progress). */\n onProgress?: (event: Event) => void;\n /** The callback to invoke when the 'ar-status' event is triggered. Refer to [ar-status in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-arStatus). */\n onArStatus?: (event: Event) => void;\n /** The callback to invoke when the 'ar-tracking' event is triggered. Refer to [ar-tracking in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-arTracking). */\n onArTracking?: (event: Event) => void;\n /** The callback to invoke when the 'quick-look-button-tapped' event is triggered. Refer to [quick-look-button-tapped in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-events-quickLookButtonTapped). */\n onQuickLookButtonTapped?: (event: Event) => void;\n /** The callback to invoke when the 'camera-change' event is triggered. Refer to [camera-change in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-events-cameraChange). */\n onCameraChange?: (event: Event) => void;\n /** The callback to invoke when the 'environment-change' event is triggered. Refer to [environment-change in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-lightingandenv-events-environmentChange). */\n onEnvironmentChange?: (event: Event) => void;\n /** The callback to invoke when the 'play' event is triggered. Refer to [play in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-events-play). */\n onPlay?: (event: Event) => void;\n /** The callback to invoke when the 'pause' event is triggered. Refer to [pause in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-animation-events-pause). */\n onPause?: (event: Event) => void;\n /** The callback to invoke when the 'scene-graph-ready' event is triggered. Refer to [scene-graph-ready in the <model-viewer> documentation](https://modelviewer.dev/docs/index.html#entrydocs-scenegraph-events-sceneGraphReady). */\n onSceneGraphReady?: (event: Event) => void;\n};\n\n/**\n * The `ModelViewer` component renders a 3D model (with the `model-viewer` custom element) for\n * the Storefront API's [Model3d object](https://shopify.dev/api/storefront/reference/products/model3d).\n *\n * The `model-viewer` custom element is lazily downloaded through a dynamically-injected `<script type=\"module\">` tag when the `<ModelViewer />` component is rendered\n *\n * ModelViewer is using version `1.21.1` of the `@google/model-viewer` library.\n */\nexport function ModelViewer(props: ModelViewerProps) {\n const [modelViewer, setModelViewer] = useState<undefined | HTMLElement>(\n undefined\n );\n const callbackRef = useCallback((node: HTMLElement) => {\n setModelViewer(node);\n }, []);\n const {data, children, className, ...passthroughProps} = props;\n\n const modelViewerLoadedStatus = useLoadScript(\n 'https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js',\n {\n module: true,\n }\n );\n\n useEffect(() => {\n if (!modelViewer) {\n return;\n }\n if (passthroughProps.onError)\n modelViewer.addEventListener('error', passthroughProps.onError);\n if (passthroughProps.onLoad)\n modelViewer.addEventListener('load', passthroughProps.onLoad);\n if (passthroughProps.onPreload)\n modelViewer.addEventListener('preload', passthroughProps.onPreload);\n if (passthroughProps.onModelVisibility)\n modelViewer.addEventListener(\n 'model-visibility',\n passthroughProps.onModelVisibility\n );\n if (passthroughProps.onProgress)\n modelViewer.addEventListener('progress', passthroughProps.onProgress);\n if (passthroughProps.onArStatus)\n modelViewer.addEventListener('ar-status', passthroughProps.onArStatus);\n if (passthroughProps.onArTracking)\n modelViewer.addEventListener(\n 'ar-tracking',\n passthroughProps.onArTracking\n );\n if (passthroughProps.onQuickLookButtonTapped)\n modelViewer.addEventListener(\n 'quick-look-button-tapped',\n passthroughProps.onQuickLookButtonTapped\n );\n if (passthroughProps.onCameraChange)\n modelViewer.addEventListener(\n 'camera-change',\n passthroughProps.onCameraChange\n );\n if (passthroughProps.onEnvironmentChange)\n modelViewer.addEventListener(\n 'environment-change',\n passthroughProps.onEnvironmentChange\n );\n if (passthroughProps.onPlay)\n modelViewer.addEventListener('play', passthroughProps.onPlay);\n if (passthroughProps.onPause)\n modelViewer.addEventListener('ar-status', passthroughProps.onPause);\n if (passthroughProps.onSceneGraphReady)\n modelViewer.addEventListener(\n 'scene-graph-ready',\n passthroughProps.onSceneGraphReady\n );\n\n return () => {\n if (modelViewer == null) {\n return;\n }\n if (passthroughProps.onError)\n modelViewer.removeEventListener('error', passthroughProps.onError);\n if (passthroughProps.onLoad)\n modelViewer.removeEventListener('load', passthroughProps.onLoad);\n if (passthroughProps.onPreload)\n modelViewer.removeEventListener('preload', passthroughProps.onPreload);\n if (passthroughProps.onModelVisibility)\n modelViewer.removeEventListener(\n 'model-visibility',\n passthroughProps.onModelVisibility\n );\n if (passthroughProps.onProgress)\n modelViewer.removeEventListener(\n 'progress',\n passthroughProps.onProgress\n );\n if (passthroughProps.onArStatus)\n modelViewer.removeEventListener(\n 'ar-status',\n passthroughProps.onArStatus\n );\n if (passthroughProps.onArTracking)\n modelViewer.removeEventListener(\n 'ar-tracking',\n passthroughProps.onArTracking\n );\n if (passthroughProps.onQuickLookButtonTapped)\n modelViewer.removeEventListener(\n 'quick-look-button-tapped',\n passthroughProps.onQuickLookButtonTapped\n );\n if (passthroughProps.onCameraChange)\n modelViewer.removeEventListener(\n 'camera-change',\n passthroughProps.onCameraChange\n );\n if (passthroughProps.onEnvironmentChange)\n modelViewer.removeEventListener(\n 'environment-change',\n passthroughProps.onEnvironmentChange\n );\n if (passthroughProps.onPlay)\n modelViewer.removeEventListener('play', passthroughProps.onPlay);\n if (passthroughProps.onPause)\n modelViewer.removeEventListener('ar-status', passthroughProps.onPause);\n if (passthroughProps.onSceneGraphReady)\n modelViewer.removeEventListener(\n 'scene-graph-ready',\n passthroughProps.onSceneGraphReady\n );\n };\n }, [\n modelViewer,\n passthroughProps.onArStatus,\n passthroughProps.onArTracking,\n passthroughProps.onCameraChange,\n passthroughProps.onEnvironmentChange,\n passthroughProps.onError,\n passthroughProps.onLoad,\n passthroughProps.onModelVisibility,\n passthroughProps.onPause,\n passthroughProps.onPlay,\n passthroughProps.onPreload,\n passthroughProps.onProgress,\n passthroughProps.onQuickLookButtonTapped,\n passthroughProps.onSceneGraphReady,\n ]);\n\n if (modelViewerLoadedStatus !== 'done') {\n // TODO: What do we want to display while the model-viewer library loads?\n return null;\n }\n\n if (!data.sources?.[0]?.url) {\n const sourcesUrlError = `<ModelViewer/> requires 'data.sources' prop to be an array, with an object that has a property 'url' on it. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(sourcesUrlError);\n } else {\n console.error(sourcesUrlError);\n return null;\n }\n }\n\n if (__HYDROGEN_DEV__ && !data.alt) {\n console.warn(\n `<ModelViewer/> requires the 'data.alt' prop for accessibility`\n );\n }\n\n return (\n <model-viewer\n // @ts-expect-error ref should exist\n ref={callbackRef}\n {...passthroughProps}\n className={className}\n id={passthroughProps.id ?? data.id}\n src={data.sources[0].url}\n alt={data.alt ?? null}\n camera-controls={passthroughProps.cameraControls ?? true}\n poster={(passthroughProps.poster || data.previewImage?.url) ?? null}\n autoplay={passthroughProps.autoplay ?? true}\n loading={passthroughProps.loading}\n reveal={passthroughProps.reveal}\n ar={passthroughProps.ar}\n ar-modes={passthroughProps.arModes}\n ar-scale={passthroughProps.arScale}\n // @ts-expect-error arPlacement should exist as a type, not sure why it doesn't. https://modelviewer.dev/docs/index.html#entrydocs-augmentedreality-attributes-arPlacement\n ar-placement={passthroughProps.arPlacement}\n ios-src={passthroughProps.iosSrc}\n touch-action={passthroughProps.touchAction}\n disable-zoom={passthroughProps.disableZoom}\n orbit-sensitivity={passthroughProps.orbitSensitivity}\n auto-rotate={passthroughProps.autoRotate}\n auto-rotate-delay={passthroughProps.autoRotateDelay}\n // @ts-expect-error rotationPerSecond should exist as a type, not sure why it doesn't. https://modelviewer.dev/docs/index.html#entrydocs-stagingandcameras-attributes-rotationPerSecond\n rotation-per-second={passthroughProps.rotationPerSecond}\n interaction-policy={passthroughProps.interactionPolicy}\n interaction-prompt={passthroughProps.interactionPrompt}\n interaction-prompt-style={passthroughProps.interactionPromptStyle}\n interaction-prompt-threshold={passthroughProps.interactionPromptThreshold}\n camera-orbit={passthroughProps.cameraOrbit}\n camera-target={passthroughProps.cameraTarget}\n field-of-view={passthroughProps.fieldOfView}\n max-camera-orbit={passthroughProps.maxCameraOrbit}\n min-camera-orbit={passthroughProps.minCameraOrbit}\n max-field-of-view={passthroughProps.maxFieldOfView}\n min-field-of-view={passthroughProps.minFieldOfView}\n bounds={passthroughProps.bounds}\n interpolation-decay={passthroughProps.interpolationDecay ?? 100}\n skybox-image={passthroughProps.skyboxImage}\n environment-image={passthroughProps.environmentImage}\n exposure={passthroughProps.exposure}\n shadow-intensity={passthroughProps.shadowIntensity ?? 0}\n shadow-softness={passthroughProps.shadowSoftness ?? 0}\n animation-name={passthroughProps.animationName}\n animation-crossfade-duration={passthroughProps.animationCrossfadeDuration}\n variant-name={passthroughProps.variantName}\n orientation={passthroughProps.orientation}\n scale={passthroughProps.scale}\n >\n {children}\n </model-viewer>\n );\n}\n","import {Image, type ShopifyImageProps} from './Image.js';\nimport {Video} from './Video.js';\nimport {ExternalVideo} from './ExternalVideo.js';\nimport {ModelViewer} from './ModelViewer.js';\nimport type {MediaEdge as MediaEdgeType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\nimport type {ModelViewerElement} from '@google/model-viewer/lib/model-viewer.js';\n\ntype BaseProps = React.HTMLAttributes<\n HTMLImageElement | HTMLVideoElement | HTMLIFrameElement | ModelViewerElement\n>;\nexport interface MediaFileProps extends BaseProps {\n /** An object with fields that correspond to the Storefront API's [Media object](https://shopify.dev/api/storefront/reference/products/media). */\n data: PartialDeep<MediaEdgeType['node'], {recurseIntoArrays: true}>;\n /** The options for the `Image`, `Video`, or `ExternalVideo` components. */\n mediaOptions?: {\n /** Props that will only apply when an `<Image />` is rendered */\n image: Omit<ShopifyImageProps, 'data'>;\n /** Props that will only apply when a `<Video />` is rendered */\n video: Omit<React.ComponentProps<typeof Video>, 'data'>;\n /** Props that will only apply when an `<ExternalVideo />` is rendered */\n externalVideo: Omit<\n React.ComponentProps<typeof ExternalVideo>['options'],\n 'data'\n >;\n /** Props that will only apply when a `<ModelViewer />` is rendered */\n modelViewer: Omit<typeof ModelViewer, 'data'>;\n };\n}\n\n/**\n * The `MediaFile` component renders the media for the Storefront API's\n * [Media object](https://shopify.dev/api/storefront/reference/products/media). It renders an `Image`, a\n * `Video`, an `ExternalVideo`, or a `ModelViewer` depending on the `__typename` of the `data` prop.\n */\nexport function MediaFile({\n data,\n mediaOptions,\n ...passthroughProps\n}: MediaFileProps) {\n switch (data.__typename) {\n case 'MediaImage': {\n if (!data.image) {\n const noDataImage = `<MediaFile/>: 'data.image' does not exist for __typename of 'MediaImage'; rendering 'null' by default.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataImage);\n } else {\n console.warn(noDataImage);\n return null;\n }\n }\n\n return (\n <Image\n {...passthroughProps}\n {...mediaOptions?.image}\n data={data.image}\n />\n );\n }\n case 'Video': {\n return (\n <Video {...passthroughProps} {...mediaOptions?.video} data={data} />\n );\n }\n case 'ExternalVideo': {\n return (\n <ExternalVideo\n {...passthroughProps}\n {...mediaOptions?.externalVideo}\n data={data}\n />\n );\n }\n case 'Model3d': {\n return (\n // @ts-expect-error There are issues with the inferred HTML attribute types here for ModelViewer (and contentEditable), but I think that's a little bit beyond me at the moment\n <ModelViewer\n {...passthroughProps}\n {...mediaOptions?.modelViewer}\n data={data}\n />\n );\n }\n default: {\n const typenameMissingMessage = `<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to correctly render the correct component for this media. Rendering 'null' by default`;\n if (__HYDROGEN_DEV__) {\n throw new Error(typenameMissingMessage);\n } else {\n console.error(typenameMissingMessage);\n return null;\n }\n }\n }\n}\n","import {type ElementType, useMemo, type ComponentPropsWithoutRef} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {Image} from './Image.js';\nimport type {\n MediaImage,\n Page,\n ProductVariant,\n Product,\n GenericFile,\n Video as VideoType,\n Metafield as MetafieldType,\n} from './storefront-api-types.js';\nimport {Video} from './Video.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport type {PartialDeep, JsonValue} from 'type-fest';\n\ninterface BaseProps<ComponentGeneric extends ElementType> {\n /** An object with fields that correspond to the Storefront API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield). */\n data: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null;\n /** An HTML tag or React component to be rendered as the base element wrapper. The default value varies depending on [metafield.type](https://shopify.dev/apps/metafields/types). */\n as?: ComponentGeneric;\n}\n\nexport type MetafieldProps<ComponentGeneric extends ElementType> =\n ComponentPropsWithoutRef<ComponentGeneric> & BaseProps<ComponentGeneric>;\n\n/**\n * The `Metafield` component renders the value of a Storefront\n * API's [Metafield object](https://shopify.dev/api/storefront/reference/common-objects/metafield).\n * Relies on the `locale` property of the `useShop()` hook, so it must be a desendent of `<ShopifyProvider/>`\n *\n * Renders a smart default of the Metafield's `value`. For more information, refer to the [Default output](#default-output) section.\n */\nexport function Metafield<ComponentGeneric extends ElementType>(\n props: MetafieldProps<ComponentGeneric>\n) {\n const {data, as, ...passthroughProps} = props;\n const {locale} = useShop();\n\n const parsedMetafield = useMemo(() => parseMetafield(data), [data]);\n\n if (!parsedMetafield) {\n const noDataPropWarning = `<Metafield/>: nothing was passed to the data prop 'data'. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noDataPropWarning);\n } else {\n console.warn(noDataPropWarning);\n }\n return null;\n }\n\n if (parsedMetafield.value === null || parsedMetafield.value === undefined) {\n const noValueWarning = `<Metafield/>: No metafield value for metafield ${\n parsedMetafield.id ?? parsedMetafield.key\n }. Rendering 'null'`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noValueWarning);\n } else {\n console.warn(noValueWarning);\n }\n return null;\n }\n\n switch (parsedMetafield.type) {\n case 'date': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleDateString(locale)}\n </Wrapper>\n );\n }\n case 'date_time': {\n const Wrapper = as ?? 'time';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Date).toLocaleString(locale)}\n </Wrapper>\n );\n }\n case 'weight':\n case 'dimension':\n case 'volume': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {getMeasurementAsString(parsedMetafield.value as Measurement, locale)}\n </Wrapper>\n );\n }\n case 'rating': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {(parsedMetafield.value as Rating).value}\n </Wrapper>\n );\n }\n case 'single_line_text_field': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{__html: parsedMetafield.value as string}}\n />\n );\n }\n case 'multi_line_text_field': {\n const Wrapper = as ?? 'div';\n return (\n <Wrapper\n {...passthroughProps}\n dangerouslySetInnerHTML={{\n __html: (parsedMetafield.value as string).split('\\n').join('<br/>'),\n }}\n />\n );\n }\n case 'url': {\n const protocolLessUrl = new URL(parsedMetafield.value as string);\n return (\n <a\n href={protocolLessUrl.href.replace(protocolLessUrl.protocol, '')}\n {...passthroughProps}\n >\n {parsedMetafield.value as string}\n </a>\n );\n }\n case 'json': {\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>\n {JSON.stringify(parsedMetafield.value)}\n </Wrapper>\n );\n }\n case 'product_reference':\n case 'variant_reference':\n case 'page_reference': {\n const Wrapper = as ?? 'span';\n const ref = parsedMetafield.reference as Page | ProductVariant | Product;\n return (\n <Wrapper {...passthroughProps}>{ref?.title ?? ref?.id ?? ''}</Wrapper>\n );\n }\n case 'list.single_line_text_field': {\n const Wrapper = as ?? 'ul';\n\n const refArray = parsedMetafield.references\n ? (flattenConnection(parsedMetafield.references) as string[])\n : [];\n return (\n <Wrapper {...passthroughProps}>\n {refArray.map((ref, index) => (\n // there's no unique way to identify these strings, so we do our best by combining the string with the index for the key\n // eslint-disable-next-line react/no-array-index-key\n <li key={`${ref ?? ''}-${index}`}>{ref}</li>\n ))}\n </Wrapper>\n );\n }\n case 'file_reference': {\n if (parsedMetafield.reference?.__typename === 'MediaImage') {\n const ref = parsedMetafield.reference as MediaImage;\n return ref.image ? (\n <Image data={ref.image} {...passthroughProps} />\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'GenericFile') {\n const ref = parsedMetafield.reference as GenericFile;\n return ref.previewImage ? (\n <a href={parsedMetafield.reference?.url ?? ''} {...passthroughProps}>\n <Image data={ref.previewImage} />\n </a>\n ) : null;\n } else if (parsedMetafield.reference?.__typename === 'Video') {\n const ref = parsedMetafield.reference as VideoType;\n return <Video {...passthroughProps} data={ref} />;\n }\n }\n }\n\n const Wrapper = as ?? 'span';\n return (\n <Wrapper {...passthroughProps}>{parsedMetafield.value?.toString()}</Wrapper>\n );\n}\n\n/**\n * The `parseMetafield` utility transforms a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield)\n * into a new object whose `values` have been parsed according to the metafield `type`.\n * If the metafield is `null`, then it returns `null` back.\n *\n * Note that `parseMetafield()` will have a breaking change in a future version; it will change to behave like `metafieldParser()`.\n */\nexport function parseMetafield(\n /** A [Metafield](https://shopify.dev/api/storefront/reference/common-objects/Metafield) or null */\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): PartialDeep<ParsedMetafield, {recurseIntoArrays: true}> | null {\n if (__HYDROGEN_DEV__) {\n console.info(\n `'parseMetafield()' will have a breaking change in a future version; its behavior will match that of 'metafieldParser()'`\n );\n }\n\n if (!metafield) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafield' was not passed any value for the 'metafield' argument`\n );\n }\n return null;\n }\n if (\n __HYDROGEN_DEV__ &&\n (metafield.value === null || metafield.value === undefined)\n ) {\n console.warn(\n `'parseMetafield()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n\n return {\n ...metafield,\n value: parseMetafieldValue(metafield),\n };\n}\n\n/**\n * The `parseMetafieldValue` function parses a [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `value` from a string into a sensible type corresponding to the [Metafield](https://shopify.dev/api/storefront/reference/common-objects/metafield)'s `type`.\n * @deprecated `parseMetafieldValue()` is unsupported and will be removed in a future version.\n */\nexport function parseMetafieldValue(\n metafield: PartialDeep<MetafieldType, {recurseIntoArrays: true}> | null\n): ParsedMetafield['value'] {\n if (__HYDROGEN_DEV__) {\n console.info(`'parseMetafieldValue()' will be removed in a future version`);\n }\n\n if (!metafield) {\n return null;\n }\n\n if (metafield.value === null || metafield.value === undefined) {\n if (__HYDROGEN_DEV__) {\n console.warn(\n `'parseMetafieldValue()' was passed ${metafield.value} for 'metafield.value'`\n );\n }\n return metafield.value;\n }\n\n switch (metafield.type) {\n case 'boolean':\n return metafield.value === 'true';\n case 'number_integer':\n return parseInt(metafield.value);\n case 'number_decimal':\n return parseFloat(metafield.value);\n case 'date':\n case 'date_time':\n return new Date(metafield.value);\n case 'json':\n case 'weight':\n case 'dimension':\n case 'volume':\n case 'rating':\n return parseJSON(metafield.value);\n case 'color':\n case 'single_line_text_field':\n case 'multi_line_text_field':\n case 'product_reference':\n case 'page_reference':\n case 'variant_reference':\n case 'file_reference':\n case 'url':\n default:\n return metafield.value;\n }\n}\n\n/**\n * Parses a JSON string while preventing prototype injection attacks.\n */\nexport function parseJSON(json: string) {\n if (String(json).includes('__proto__')) {\n return JSON.parse(json, (k, v) => {\n if (k !== '__proto__') return v;\n });\n }\n\n return JSON.parse(json);\n}\n\nconst UNIT_MAPPING: Record<string, string> = {\n // Dimension\n mm: 'millimeter',\n cm: 'centimeter',\n m: 'meter',\n in: 'inch',\n ft: 'foot',\n yd: 'yard',\n // Volume\n ml: 'milliliter',\n l: 'liter',\n us_fl_oz: 'fluid-ounce',\n us_gal: 'gallon',\n // Weight\n kg: 'kilogram',\n g: 'gram',\n lb: 'pound',\n oz: 'ounce',\n};\n\nexport function getMeasurementAsString(\n measurement: Measurement,\n locale = 'en-us',\n options: Intl.NumberFormatOptions = {}\n) {\n let measure: Measurement = {\n value: measurement.value,\n unit: UNIT_MAPPING[measurement.unit],\n };\n\n if (measure.unit == null) {\n measure = convertToSupportedUnit(measurement.value, measurement.unit);\n }\n\n return new Intl.NumberFormat(locale, {\n ...options,\n unit: measure.unit,\n style: 'unit',\n }).format(measure.value);\n}\n\nfunction convertToSupportedUnit(value: number, unit: string): Measurement {\n switch (unit) {\n case 'cl':\n return {\n value: value / 1000,\n unit: 'liter',\n };\n case 'm3':\n return {\n value: value * 1000,\n unit: 'liter',\n };\n case 'us_pt':\n return {\n value: value * 0.125,\n unit: 'gallon',\n };\n case 'us_qt':\n return {\n value: value * 0.5,\n unit: 'gallon',\n };\n case 'us_oz':\n return {\n value: value / 128,\n unit: 'gallon',\n };\n case 'imp_pt':\n return {\n value: value / 6.661, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_qt':\n return {\n value: value / 3.331, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_gal':\n return {\n value: value / 1.201, // approximate conversion\n unit: 'gallon',\n };\n case 'imp_fl_oz':\n return {\n value: value * 0.96076, // approximate conversion\n unit: 'fluid-ounce',\n };\n default:\n throw new Error(`Unit not supported: ${unit}`);\n }\n}\n\ntype ParsedMetafield = Omit<\n PartialDeep<MetafieldType, {recurseIntoArrays: true}>,\n 'value'\n> & {\n value?: string | number | boolean | JsonValue | Date | Rating | Measurement;\n};\n\nexport interface Rating {\n value: number;\n scale_min: number;\n scale_max: number;\n}\n\ninterface Measurement {\n unit: string;\n value: number;\n}\n","import type {\n Collection,\n GenericFile,\n Metafield as MetafieldBaseType,\n MoneyV2,\n Page,\n Product,\n ProductVariant,\n} from './storefront-api-types.js';\nimport type {PartialDeep, Simplify} from 'type-fest';\nimport {parseJSON} from './Metafield.js';\nimport {flattenConnection} from './flatten-connection.js';\n\n/**\n * A temporary function that will be renamed to `parseMetafield()` in a future release.\n *\n * A function that uses `metafield.type` to parse the Metafield's `value` or `reference` or `references` (depending on the `type`) and put it in `metafield.parsedValue`\n *\n * TypeScript developers can use the type `ParsedMetafields` from this package to get the returned object's type correct. For example:\n *\n * ```\n * metafieldParser<ParsedMetafields['boolean']>({type: 'boolean', value: 'false'}\n * ```\n */\nexport function metafieldParser<ReturnGeneric>(\n metafield: PartialDeep<MetafieldBaseType, {recurseIntoArrays: true}>\n): ReturnGeneric {\n if (!metafield.type) {\n const noTypeError = `metafieldParser(): The 'type' field is required in order to parse the Metafield.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noTypeError);\n } else {\n console.error(`${noTypeError} Returning 'parsedValue' of 'null'`);\n return {\n ...metafield,\n parsedValue: null,\n } as ReturnGeneric;\n }\n }\n\n switch (metafield.type) {\n case 'boolean':\n return {\n ...metafield,\n parsedValue: metafield.value === 'true',\n } as ReturnGeneric;\n\n case 'collection_reference':\n case 'file_reference':\n case 'page_reference':\n case 'product_reference':\n case 'variant_reference':\n return {\n ...metafield,\n parsedValue: metafield.reference,\n } as ReturnGeneric;\n\n case 'color':\n case 'multi_line_text_field':\n case 'single_line_text_field':\n case 'url':\n return {\n ...metafield,\n parsedValue: metafield.value,\n } as ReturnGeneric;\n\n // TODO: 'money' should probably be parsed even further to like `useMoney()`, but that logic needs to be extracted first so it's not a hook\n case 'dimension':\n case 'money':\n case 'json':\n case 'rating':\n case 'volume':\n case 'weight':\n case 'list.color':\n case 'list.dimension':\n case 'list.number_integer':\n case 'list.number_decimal':\n case 'list.rating':\n case 'list.single_line_text_field':\n case 'list.url':\n case 'list.volume':\n case 'list.weight': {\n let parsedValue = null;\n try {\n parsedValue = parseJSON(metafield.value ?? '');\n } catch (err) {\n const parseError = `metafieldParser(): attempted to JSON.parse the 'metafield.value' property, but failed.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(parseError);\n } else {\n console.error(`${parseError} Returning 'null' for 'parsedValue'`);\n }\n parsedValue = null;\n }\n return {\n ...metafield,\n parsedValue,\n } as ReturnGeneric;\n }\n\n case 'date':\n case 'date_time':\n return {\n ...metafield,\n parsedValue: new Date(metafield.value ?? ''),\n } as ReturnGeneric;\n\n case 'list.date':\n case 'list.date_time': {\n const jsonParseValue = parseJSON(metafield?.value ?? '') as string[];\n return {\n ...metafield,\n parsedValue: jsonParseValue.map((dateString) => new Date(dateString)),\n } as ReturnGeneric;\n }\n\n case 'number_decimal':\n case 'number_integer':\n return {\n ...metafield,\n parsedValue: Number(metafield.value),\n } as ReturnGeneric;\n\n case 'list.collection_reference':\n case 'list.file_reference':\n case 'list.page_reference':\n case 'list.product_reference':\n case 'list.variant_reference':\n return {\n ...metafield,\n parsedValue: flattenConnection(metafield.references ?? undefined),\n } as ReturnGeneric;\n\n default: {\n const typeNotFoundError = `metafieldParser(): the 'metafield.type' you passed in is not supported. Your type: \"${metafield.type}\". If you believe this is an error, please open an issue on GitHub.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(typeNotFoundError);\n } else {\n console.error(\n `${typeNotFoundError} Returning 'parsedValue' of 'null'`\n );\n return {\n ...metafield,\n parsedValue: null,\n } as ReturnGeneric;\n }\n }\n }\n}\n\n// taken from https://shopify.dev/apps/metafields/types\nexport const allMetafieldTypesArray = [\n 'boolean',\n 'collection_reference',\n 'color',\n 'date',\n 'date_time',\n 'dimension',\n 'file_reference',\n 'json',\n 'money',\n 'multi_line_text_field',\n 'number_decimal',\n 'number_integer',\n 'page_reference',\n 'product_reference',\n 'rating',\n 'single_line_text_field',\n 'url',\n 'variant_reference',\n 'volume',\n 'weight',\n // list metafields\n 'list.collection_reference',\n 'list.color',\n 'list.date',\n 'list.date_time',\n 'list.dimension',\n 'list.file_reference',\n 'list.number_integer',\n 'list.number_decimal',\n 'list.page_reference',\n 'list.product_reference',\n 'list.rating',\n 'list.single_line_text_field',\n 'list.url',\n 'list.variant_reference',\n 'list.volume',\n 'list.weight',\n] as const;\n\n/** A union of all the supported `metafield.type`s */\nexport type MetafieldTypeTypes = typeof allMetafieldTypesArray[number];\n\n/**\n * A mapping of a Metafield's `type` to the TypeScript type that is returned from `metafieldParser()`\n * For example, when using `metafieldParser()`, the type will be correctly returned when used like the following:\n *\n * ```\n * const parsedMetafield = metafieldParser<ParsedMetafields['boolean']>(metafield);`\n * ```\n * `parsedMetafield.parsedValue`'s type is now `boolean`\n */\nexport type ParsedMetafields<ExtraTypeGeneric = void> = {\n /** A Metafield that's been parsed, with a `parsedValue` of `boolean` */\n boolean: Simplify<BooleanParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of a `Collection` object (as defined by the Storefront API) */\n collection_reference: Simplify<CollectionParsedRefMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `string` */\n color: Simplify<ColorParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `Date` */\n date: Simplify<DatesParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `Date` */\n date_time: Simplify<DatesParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `Measurement` */\n dimension: Simplify<MeasurementParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of a `GenericFile` object (as defined by the Storefront API) */\n file_reference: Simplify<FileRefParsedMetafield>;\n /**\n * A Metafield that's been parsed, with a `parsedValue` of type `unknown`, unless you pass in the type as a generic. For example:\n *\n * ```\n * ParsedMetafields<MyJsonType>['json']\n * ```\n */\n json: Simplify<JsonParsedMetafield<ExtraTypeGeneric>>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `Money` */\n money: Simplify<MoneyParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `string` */\n multi_line_text_field: Simplify<TextParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `number` */\n number_decimal: Simplify<NumberParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `number` */\n number_integer: Simplify<NumberParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of a `Page` object (as defined by the Storefront API) */\n page_reference: Simplify<PageParsedRefMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of a `Product` object (as defined by the Storefront API) */\n product_reference: Simplify<ProductParsedRefMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `Rating` */\n rating: Simplify<RatingParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `string` */\n single_line_text_field: Simplify<TextParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `string` */\n url: Simplify<TextParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of a `ProductVariant` object (as defined by the Storefront API) */\n variant_reference: Simplify<VariantParsedRefMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `Measurement` */\n volume: Simplify<MeasurementParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of type `Measurement` */\n weight: Simplify<MeasurementParsedMetafield>;\n // list metafields\n /** A Metafield that's been parsed, with a `parsedValue` of an array of `Collection` objects (as defined by the Storefront API) */\n 'list.collection_reference': Simplify<CollectionListParsedRefMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of strings */\n 'list.color': Simplify<ColorListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of Date objects */\n 'list.date': Simplify<DatesListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of Date objects */\n 'list.date_time': Simplify<DatesListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of `Measurement` objects */\n 'list.dimension': Simplify<MeasurementListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of `GenericFile` objects (as defined by the Storefront API) */\n 'list.file_reference': Simplify<FileListParsedRefMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of numbers */\n 'list.number_integer': Simplify<NumberListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of numbers */\n 'list.number_decimal': Simplify<NumberListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of `Page` objects (as defined by the Storefront API) */\n 'list.page_reference': Simplify<PageListParsedRefMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of `Product` objects (as defined by the Storefront API) */\n 'list.product_reference': Simplify<ProductListParsedRefMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of `Rating`s */\n 'list.rating': Simplify<RatingListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of strings */\n 'list.single_line_text_field': Simplify<TextListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of strings */\n 'list.url': Simplify<TextListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of `ProductVariant` objects (as defined by the Storefront API) */\n 'list.variant_reference': Simplify<VariantListParsedRefMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of `Measurement`s */\n 'list.volume': Simplify<MeasurementListParsedMetafield>;\n /** A Metafield that's been parsed, with a `parsedValue` of an array of `Measurement`s */\n 'list.weight': Simplify<MeasurementListParsedMetafield>;\n};\n\ninterface ParsedBase extends MetafieldBaseType {\n type: MetafieldTypeTypes;\n parsedValue: unknown;\n}\n\ninterface BooleanParsedMetafield extends ParsedBase {\n type: 'boolean';\n parsedValue: boolean | null;\n}\ntype CollectionParsedRefMetafield = MetafieldBaseType & {\n type: 'collection_reference';\n parsedValue: Collection | null;\n};\ntype ColorParsedMetafield = MetafieldBaseType & {\n type: 'color';\n parsedValue: string | null;\n};\ntype DatesParsedMetafield = MetafieldBaseType & {\n type: 'date' | 'date_time';\n parsedValue: Date | null;\n};\n\ntype MeasurementParsedMetafield = MetafieldBaseType & {\n type: 'dimension' | 'weight' | 'volume';\n parsedValue: Measurement | null;\n};\n\ntype FileRefParsedMetafield = MetafieldBaseType & {\n type: 'file_reference';\n parsedValue: GenericFile | null;\n};\n\ntype JsonParsedMetafield<JsonTypeGeneric = void> = MetafieldBaseType & {\n type: 'json';\n parsedValue: JsonTypeGeneric extends void ? unknown : JsonTypeGeneric | null;\n};\n\ntype MoneyParsedMetafield = MetafieldBaseType & {\n type: 'money';\n parsedValue: MoneyV2 | null;\n};\n\ntype TextParsedMetafield = MetafieldBaseType & {\n type: 'single_line_text_field' | 'multi_line_text_field' | 'url';\n parsedValue: string | null;\n};\n\ntype NumberParsedMetafield = MetafieldBaseType & {\n type: 'number_decimal' | 'number_integer';\n parsedValue: number | null;\n};\n\ntype PageParsedRefMetafield = MetafieldBaseType & {\n type: 'page_reference';\n parsedValue: Page | null;\n};\n\ntype ProductParsedRefMetafield = MetafieldBaseType & {\n type: 'product_reference';\n parsedValue: Product | null;\n};\n\ntype RatingParsedMetafield = MetafieldBaseType & {\n type: 'rating';\n parsedValue: Rating | null;\n};\n\ntype VariantParsedRefMetafield = MetafieldBaseType & {\n type: 'variant_reference';\n parsedValue: ProductVariant | null;\n};\n\ntype CollectionListParsedRefMetafield = MetafieldBaseType & {\n type: 'list.collection_reference';\n parsedValue: Array<Collection> | null;\n};\n\ntype ColorListParsedMetafield = MetafieldBaseType & {\n type: 'list.color';\n parsedValue: Array<string> | null;\n};\n\ntype DatesListParsedMetafield = MetafieldBaseType & {\n type: 'list.date' | 'list.date_time';\n parsedValue: Array<Date> | null;\n};\n\ntype MeasurementListParsedMetafield = MetafieldBaseType & {\n type: 'list.dimension' | 'list.weight' | 'list.volume';\n parsedValue: Array<Measurement> | null;\n};\n\ntype FileListParsedRefMetafield = MetafieldBaseType & {\n type: 'list.file_reference';\n parsedValue: Array<GenericFile> | null;\n};\n\ntype TextListParsedMetafield = MetafieldBaseType & {\n type: 'list.single_line_text_field' | 'list.url';\n parsedValue: Array<string> | null;\n};\n\ntype NumberListParsedMetafield = MetafieldBaseType & {\n type: 'list.number_decimal' | 'list.number_integer';\n parsedValue: Array<number> | null;\n};\n\ntype PageListParsedRefMetafield = MetafieldBaseType & {\n type: 'list.page_reference';\n parsedValue: Array<Page> | null;\n};\n\ntype ProductListParsedRefMetafield = MetafieldBaseType & {\n type: 'list.product_reference';\n parsedValue: Array<Product> | null;\n};\n\ntype RatingListParsedMetafield = MetafieldBaseType & {\n type: 'list.rating';\n parsedValue: Array<Rating> | null;\n};\n\ntype VariantListParsedRefMetafield = MetafieldBaseType & {\n type: 'list.variant_reference';\n parsedValue: Array<ProductVariant> | null;\n};\n\nexport type Measurement = {\n unit: string;\n value: number;\n};\n\nexport interface Rating {\n value: number;\n scale_min: number;\n scale_max: number;\n}\n","import {useMemo} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {CurrencyCode, MoneyV2} from './storefront-api-types.js';\n\nexport type UseMoneyValue = {\n /**\n * The currency code from the `MoneyV2` object.\n */\n currencyCode: CurrencyCode;\n /**\n * The name for the currency code, returned by `Intl.NumberFormat`.\n */\n currencyName?: string;\n /**\n * The currency symbol returned by `Intl.NumberFormat`.\n */\n currencySymbol?: string;\n /**\n * The currency narrow symbol returned by `Intl.NumberFormat`.\n */\n currencyNarrowSymbol?: string;\n /**\n * The localized amount, without any currency symbols or non-number types from the `Intl.NumberFormat.formatToParts` parts.\n */\n amount: string;\n /**\n * All parts returned by `Intl.NumberFormat.formatToParts`.\n */\n parts: Intl.NumberFormatPart[];\n /**\n * A string returned by `new Intl.NumberFormat` for the amount and currency code,\n * using the `locale` value in the [`LocalizationProvider` component](https://shopify.dev/api/hydrogen/components/localization/localizationprovider).\n */\n localizedString: string;\n /**\n * The `MoneyV2` object provided as an argument to the hook.\n */\n original: MoneyV2;\n /**\n * A string with trailing zeros removed from the fractional part, if any exist. If there are no trailing zeros, then the fractional part remains.\n * For example, `$640.00` turns into `$640`.\n * `$640.42` remains `$640.42`.\n */\n withoutTrailingZeros: string;\n /**\n * A string without currency and without trailing zeros removed from the fractional part, if any exist. If there are no trailing zeros, then the fractional part remains.\n * For example, `$640.00` turns into `640`.\n * `$640.42` turns into `640.42`.\n */\n withoutTrailingZerosAndCurrency: string;\n};\n\n/**\n * The `useMoney` hook takes a [MoneyV2 object](https://shopify.dev/api/storefront/reference/common-objects/moneyv2) and returns a\n * default-formatted string of the amount with the correct currency indicator, along with some of the parts provided by\n * [Intl.NumberFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat).\n * Uses `locale` from `ShopifyProvider`\n */\nexport function useMoney(money: MoneyV2): UseMoneyValue {\n const {locale} = useShop();\n\n if (!locale) {\n throw new Error(\n `useMoney(): Unable to get 'locale' from 'useShop()', which means that 'locale' was not passed to '<ShopifyProvider/>'. 'locale' is required for 'useMoney()' to work`\n );\n }\n\n const amount = parseFloat(money.amount);\n\n const options = useMemo(\n () => ({\n style: 'currency',\n currency: money.currencyCode,\n }),\n [money.currencyCode]\n );\n\n const defaultFormatter = useLazyFormatter(locale, options);\n\n const nameFormatter = useLazyFormatter(locale, {\n ...options,\n currencyDisplay: 'name',\n });\n\n const narrowSymbolFormatter = useLazyFormatter(locale, {\n ...options,\n currencyDisplay: 'narrowSymbol',\n });\n\n const withoutTrailingZerosFormatter = useLazyFormatter(locale, {\n ...options,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n\n const withoutCurrencyFormatter = useLazyFormatter(locale);\n\n const withoutTrailingZerosOrCurrencyFormatter = useLazyFormatter(locale, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n });\n\n const isPartCurrency = (part: Intl.NumberFormatPart) =>\n part.type === 'currency';\n\n // By wrapping these properties in functions, we only\n // create formatters if they are going to be used.\n const lazyFormatters = useMemo(\n () => ({\n original: () => money,\n currencyCode: () => money.currencyCode,\n\n localizedString: () => defaultFormatter().format(amount),\n\n parts: () => defaultFormatter().formatToParts(amount),\n\n withoutTrailingZeros: () =>\n amount % 1 === 0\n ? withoutTrailingZerosFormatter().format(amount)\n : defaultFormatter().format(amount),\n\n withoutTrailingZerosAndCurrency: () =>\n amount % 1 === 0\n ? withoutTrailingZerosOrCurrencyFormatter().format(amount)\n : withoutCurrencyFormatter().format(amount),\n\n currencyName: () =>\n nameFormatter().formatToParts(amount).find(isPartCurrency)?.value ??\n money.currencyCode, // e.g. \"US dollars\"\n\n currencySymbol: () =>\n defaultFormatter().formatToParts(amount).find(isPartCurrency)?.value ??\n money.currencyCode, // e.g. \"USD\"\n\n currencyNarrowSymbol: () =>\n narrowSymbolFormatter().formatToParts(amount).find(isPartCurrency)\n ?.value ?? '', // e.g. \"$\"\n\n amount: () =>\n defaultFormatter()\n .formatToParts(amount)\n .filter((part) =>\n ['decimal', 'fraction', 'group', 'integer', 'literal'].includes(\n part.type\n )\n )\n .map((part) => part.value)\n .join(''),\n }),\n [\n money,\n amount,\n nameFormatter,\n defaultFormatter,\n narrowSymbolFormatter,\n withoutCurrencyFormatter,\n withoutTrailingZerosFormatter,\n withoutTrailingZerosOrCurrencyFormatter,\n ]\n );\n\n // Call functions automatically when the properties are accessed\n // to keep these functions as an implementation detail.\n return useMemo(\n () =>\n new Proxy(lazyFormatters as unknown as UseMoneyValue, {\n get: (target, key) => Reflect.get(target, key)?.call(null),\n }),\n [lazyFormatters]\n );\n}\n\nfunction useLazyFormatter(locale: string, options?: Intl.NumberFormatOptions) {\n return useMemo(() => {\n let memoized: Intl.NumberFormat;\n return () => (memoized ??= new Intl.NumberFormat(locale, options));\n }, [locale, options]);\n}\n","import {type ReactNode} from 'react';\nimport {useMoney} from './useMoney.js';\nimport type {MoneyV2, UnitPriceMeasurement} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\ninterface CustomProps<ComponentGeneric extends React.ElementType> {\n /** An HTML tag or React Component to be rendered as the base element wrapper. The default is `div`. */\n as?: ComponentGeneric;\n /** An object with fields that correspond to the Storefront API's [MoneyV2 object](https://shopify.dev/api/storefront/reference/common-objects/moneyv2). */\n data: PartialDeep<MoneyV2, {recurseIntoArrays: true}>;\n /** Whether to remove the currency symbol from the output. */\n withoutCurrency?: boolean;\n /** Whether to remove trailing zeros (fractional money) from the output. */\n withoutTrailingZeros?: boolean;\n /** A [UnitPriceMeasurement object](https://shopify.dev/api/storefront/latest/objects/unitpricemeasurement). */\n measurement?: PartialDeep<UnitPriceMeasurement, {recurseIntoArrays: true}>;\n /** Customizes the separator between the money output and the measurement output. Used with the `measurement` prop. Defaults to `'/'`. */\n measurementSeparator?: ReactNode;\n}\n\n// This article helps understand the typing here https://www.benmvp.com/blog/polymorphic-react-components-typescript/ Ben is the best :)\nexport type MoneyProps<ComponentGeneric extends React.ElementType> =\n CustomProps<ComponentGeneric> &\n Omit<\n React.ComponentPropsWithoutRef<ComponentGeneric>,\n keyof CustomProps<ComponentGeneric>\n >;\n\n/**\n * The `Money` component renders a string of the Storefront API's\n * [MoneyV2 object](https://shopify.dev/api/storefront/reference/common-objects/moneyv2) according to the\n * `locale` in the `ShopifyProvider` component.\n */\nexport function Money<ComponentGeneric extends React.ElementType>({\n data,\n as,\n withoutCurrency,\n withoutTrailingZeros,\n measurement,\n measurementSeparator = '/',\n ...passthroughProps\n}: MoneyProps<ComponentGeneric>) {\n if (!isMoney(data)) {\n throw new Error(\n `<Money/> needs a valid 'data' prop that has 'amount' and 'currencyCode'`\n );\n }\n const moneyObject = useMoney(data);\n const Wrapper = as ?? 'div';\n\n let output = moneyObject.localizedString;\n\n if (withoutCurrency || withoutTrailingZeros) {\n if (withoutCurrency && !withoutTrailingZeros) {\n output = moneyObject.amount;\n } else if (!withoutCurrency && withoutTrailingZeros) {\n output = moneyObject.withoutTrailingZeros;\n } else {\n // both\n output = moneyObject.withoutTrailingZerosAndCurrency;\n }\n }\n\n return (\n <Wrapper {...passthroughProps}>\n {output}\n {measurement && measurement.referenceUnit && (\n <>\n {measurementSeparator}\n {measurement.referenceUnit}\n </>\n )}\n </Wrapper>\n );\n}\n\n// required in order to narrow the money object down and make TS happy\nfunction isMoney(\n maybeMoney: PartialDeep<MoneyV2, {recurseIntoArrays: true}>\n): maybeMoney is MoneyV2 {\n return (\n typeof maybeMoney.amount === 'string' &&\n !!maybeMoney.amount &&\n typeof maybeMoney.currencyCode === 'string' &&\n !!maybeMoney.currencyCode\n );\n}\n","import type {\n MoneyV2,\n UnitPriceMeasurement,\n Product,\n} from './storefront-api-types.js';\nimport {Money, type MoneyProps} from './Money.js';\nimport type {PartialDeep} from 'type-fest';\nimport {flattenConnection} from './flatten-connection.js';\n\nexport interface ProductPriceProps {\n /** A [Product object](https://shopify.dev/api/storefront/reference/products/product). */\n data: PartialDeep<Product, {recurseIntoArrays: true}>;\n /** The type of price. Valid values: `regular` (default) or `compareAt`. */\n priceType?: 'regular' | 'compareAt';\n /** The type of value. Valid values: `min` (default), `max` or `unit`. */\n valueType?: 'max' | 'min' | 'unit';\n /** The ID of the variant. */\n variantId?: string;\n}\n\n/**\n * The `ProductPrice` component renders a `Money` component with the product\n * [`priceRange`](https://shopify.dev/api/storefront/reference/products/productpricerange)'s `maxVariantPrice` or `minVariantPrice`, for either the regular price or compare at price range.\n */\nexport function ProductPrice<ComponentGeneric extends React.ElementType>(\n props: ProductPriceProps &\n Omit<MoneyProps<ComponentGeneric>, 'data' | 'measurement'>\n) {\n const {\n priceType = 'regular',\n variantId,\n valueType = 'min',\n data: product,\n ...passthroughProps\n } = props;\n\n if (product == null) {\n throw new Error(`<ProductPrice/> requires a product as the 'data' prop`);\n }\n\n let price: Partial<MoneyV2> | undefined | null;\n let measurement: Partial<UnitPriceMeasurement> | undefined | null;\n\n const variant = variantId\n ? flattenConnection(product?.variants ?? {}).find(\n (variant) => variant?.id === variantId\n ) ?? null\n : null;\n\n if (priceType === 'compareAt') {\n if (variantId && variant) {\n if (variant.compareAtPriceV2?.amount === variant.priceV2?.amount) {\n return null;\n }\n price = variant.compareAtPriceV2;\n } else if (valueType === 'max') {\n price = product?.compareAtPriceRange?.maxVariantPrice;\n } else {\n price = product?.compareAtPriceRange?.minVariantPrice;\n }\n } else {\n if (variantId && variant) {\n price = variant.priceV2;\n if (valueType === 'unit') {\n price = variant.unitPrice;\n measurement = variant.unitPriceMeasurement;\n }\n } else if (valueType === 'max') {\n price = product.priceRange?.maxVariantPrice;\n } else {\n price = product.priceRange?.minVariantPrice;\n }\n }\n\n if (!price) {\n return null;\n }\n\n if (measurement) {\n return (\n <Money {...passthroughProps} data={price} measurement={measurement} />\n );\n }\n\n return <Money {...passthroughProps} data={price} />;\n}\n","import {useShop} from './ShopifyProvider.js';\nimport {useLoadScript} from './load-script.js';\n\n// By using 'never' in the \"or\" cases below, it makes these props \"exclusive\" and means that you cannot pass both of them; you must pass either one OR the other.\ntype ShopPayButtonProps = {\n /** A string of classes to apply to the `div` that wraps the Shop Pay button. */\n className?: string;\n /** A string that's applied to the [CSS custom property (variable)](https://developer.mozilla.org/en-US/docs/Web/CSS/--*) `--shop-pay-button-width` for the [Buy with Shop Pay component](https://shopify.dev/custom-storefronts/tools/web-components#buy-with-shop-pay-component). */\n width?: string;\n} & (\n | {\n /** An array of IDs of the variants to purchase with Shop Pay. This will only ever have a quantity of 1 for each variant. If you want to use other quantities, then use 'variantIdsAndQuantities'. */\n variantIds: string[];\n /** An array of variant IDs and quantities to purchase with Shop Pay. */\n variantIdsAndQuantities?: never;\n }\n | {\n /** An array of IDs of the variants to purchase with Shop Pay. This will only ever have a quantity of 1 for each variant. If you want to use other quantities, then use 'variantIdsAndQuantities'. */\n variantIds?: never;\n /** An array of variant IDs and quantities to purchase with Shop Pay. */\n variantIdsAndQuantities: Array<{\n id: string;\n quantity: number;\n }>;\n }\n);\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n 'shop-pay-button': {\n variants: string;\n 'store-url': string;\n };\n }\n }\n}\n\nconst SHOPJS_URL =\n 'https://cdn.shopify.com/shopifycloud/shop-js/v1.0/client.js';\n\n/**\n * The `ShopPayButton` component renders a button that redirects to the Shop Pay checkout.\n * It renders a [`<shop-pay-button>`](https://shopify.dev/custom-storefronts/tools/web-components) custom element, for which it will lazy-load the source code automatically.\n * It relies on the `<ShopProvider>` context provider.\n */\nexport function ShopPayButton({\n variantIds,\n className,\n variantIdsAndQuantities,\n width,\n}: ShopPayButtonProps) {\n const {storeDomain} = useShop();\n const shopPayLoadedStatus = useLoadScript(SHOPJS_URL);\n\n let ids: string[];\n\n if (variantIds && variantIdsAndQuantities) {\n throw new Error(DoublePropsErrorMessage);\n }\n\n if (variantIds) {\n ids = variantIds.reduce<string[]>((prev, curr) => {\n const bareId = getIdFromGid(curr);\n if (bareId) {\n prev.push(bareId);\n }\n return prev;\n }, []);\n } else if (variantIdsAndQuantities) {\n ids = variantIdsAndQuantities.reduce<string[]>((prev, curr) => {\n const bareId = getIdFromGid(curr?.id);\n if (bareId) {\n prev.push(`${bareId}:${curr?.quantity ?? 1}`);\n }\n return prev;\n }, []);\n } else {\n throw new Error(MissingPropsErrorMessage);\n }\n\n const style = width\n ? ({\n '--shop-pay-button-width': width,\n } as React.CSSProperties)\n : undefined;\n\n return (\n <div className={className} style={style}>\n {shopPayLoadedStatus === 'done' && (\n <shop-pay-button\n store-url={`https://${storeDomain}`}\n variants={ids.join(',')}\n />\n )}\n </div>\n );\n}\n\n/**\n * Takes a string in the format of \"gid://shopify/ProductVariant/41007289630776\" and returns a string of the ID part at the end: \"41007289630776\"\n */\nexport function getIdFromGid(id?: string) {\n if (!id) return;\n return id.split('/').pop();\n}\n\nexport const MissingPropsErrorMessage = `You must pass in either \"variantIds\" or \"variantIdsAndQuantities\" to ShopPayButton`;\nexport const DoublePropsErrorMessage = `You must provide either a variantIds or variantIdsAndQuantities prop, but not both in the ShopPayButton component`;\n","import {SFAPI_VERSION} from './storefront-api-constants.js';\n\n/**\n * The `createStorefrontClient()` function creates helpers that enable you to quickly query the Shopify Storefront API.\n *\n * When used on the server, it is recommended to use the `privateStorefrontToken` prop. When used on the client, it is recommended to use the `publicStorefrontToken` prop.\n */\nexport function createStorefrontClient({\n storeDomain,\n privateStorefrontToken,\n publicStorefrontToken,\n storefrontApiVersion,\n contentType,\n}: StorefrontClientProps): StorefrontClientReturn {\n if (storefrontApiVersion !== SFAPI_VERSION) {\n console.warn(\n `StorefrontClient: The Storefront API version that you're using is different than the version this build of Hydrogen-UI is targeting. You may run into unexpected errors if these versions don't match. Received verion: \"${storefrontApiVersion}\"; expected version \"${SFAPI_VERSION}\"`\n );\n }\n\n // only warn if not in a browser environment\n if (__HYDROGEN_DEV__ && !privateStorefrontToken && !globalThis.document) {\n console.warn(\n `StorefrontClient: Using a private storefront token is recommended for server environments. Refer to the authentication https://shopify.dev/api/storefront#authentication documentation for more details. `\n );\n }\n\n // only warn if in a browser environment and you're using the privateStorefrontToken\n if (__HYDROGEN_DEV__ && privateStorefrontToken && globalThis) {\n console.warn(\n `StorefrontClient: You are attempting to use a private token in an environment where it can be easily accessed by anyone. This is a security risk; please use the public token and the 'publicStorefrontToken' prop`\n );\n }\n\n return {\n getStorefrontApiUrl(overrideProps) {\n return `https://${\n overrideProps?.storeDomain ?? storeDomain\n }.myshopify.com/api/${\n overrideProps?.storefrontApiVersion ?? storefrontApiVersion\n }/graphql.json`;\n },\n getPrivateTokenHeaders(overrideProps) {\n if (!privateStorefrontToken && !overrideProps?.privateStorefrontToken) {\n throw new Error(\n `StorefrontClient: You did not pass in a 'privateStorefrontToken' while using 'getPrivateTokenHeaders()'`\n );\n }\n\n if (__HYDROGEN_DEV__ && !overrideProps?.buyerIp) {\n console.warn(\n `StorefrontClient: it is recommended to pass in the 'buyerIp' property which improves analytics and data in the admin.`\n );\n }\n\n const finalContentType = overrideProps?.contentType ?? contentType;\n\n return {\n // default to json\n 'content-type':\n finalContentType === 'graphql'\n ? 'application/graphql'\n : 'application/json',\n 'X-SDK-Variant': 'hydrogen-ui',\n 'X-SDK-Variant-Source': 'react',\n 'X-SDK-Version': storefrontApiVersion,\n 'Shopify-Storefront-Private-Token':\n overrideProps?.privateStorefrontToken ?? privateStorefrontToken ?? '',\n ...(overrideProps?.buyerIp\n ? {'Shopify-Storefront-Buyer-IP': overrideProps.buyerIp}\n : {}),\n };\n },\n getPublicTokenHeaders(overrideProps) {\n if (!publicStorefrontToken && !overrideProps?.publicStorefrontToken) {\n throw new Error(\n `StorefrontClient: You did not pass in a 'publicStorefrontToken' while using 'getPublicTokenHeaders()'`\n );\n }\n\n const finalContentType = overrideProps?.contentType ?? contentType;\n\n return {\n // default to json\n 'content-type':\n finalContentType === 'graphql'\n ? 'application/graphql'\n : 'application/json',\n 'X-SDK-Variant': 'hydrogen-ui',\n 'X-SDK-Variant-Source': 'react',\n 'X-SDK-Version': storefrontApiVersion,\n 'X-Shopify-Storefront-Access-Token':\n overrideProps?.publicStorefrontToken ?? publicStorefrontToken ?? '',\n };\n },\n };\n}\n\ntype StorefrontClientProps = {\n /** The host name of the domain (eg: `{shop}.myshopify.com`). */\n storeDomain: string;\n /** The Storefront API delegate access token. Refer to the [authentication](https://shopify.dev/api/storefront#authentication) and [delegate access token](https://shopify.dev/apps/auth/oauth/delegate-access-tokens) documentation for more details. */\n privateStorefrontToken?: string;\n /** The Storefront API access token. Refer to the [authentication](https://shopify.dev/api/storefront#authentication) documentation for more details. */\n publicStorefrontToken?: string;\n /** The Storefront API version. This should almost always be the same as the version Hydrogen-UI was built for. Learn more about Shopify [API versioning](https://shopify.dev/api/usage/versioning) for more details. */\n storefrontApiVersion: string;\n /**\n * Customizes which `\"content-type\"` header is added when using `getPrivateTokenHeaders()` and `getPublicTokenHeaders()`. When fetching with a `JSON.stringify()`-ed `body`, use `\"json\"`. When fetching with a `body` that is a plain string, use `\"graphql\"`. Defaults to `\"json\"`\n *\n * Can also be customized on a call-by-call basis by passing in `'contentType'` to both `getPrivateTokenHeaders({...})` and `getPublicTokenHeaders({...})`, for example: `getPublicTokenHeaders({contentType: 'graphql'})`\n */\n contentType?: 'json' | 'graphql';\n};\n\ntype OverrideTokenHeaderProps = Partial<\n Pick<StorefrontClientProps, 'contentType'>\n>;\n\ntype StorefrontClientReturn = {\n /**\n * Creates the fully-qualified URL to your store's GraphQL endpoint.\n *\n * By default, it will use the config you passed in when calling `createStorefrontClient()`. However, you can override the following settings on each invocation of `getStorefrontApiUrl({...})`:\n *\n * - `storeDomain`\n * - `storefrontApiVersion`\n */\n getStorefrontApiUrl: (\n props?: Partial<\n Pick<StorefrontClientProps, 'storeDomain' | 'storefrontApiVersion'>\n >\n ) => string;\n /**\n * Returns an object that contains headers that are needed for each query to Storefront API GraphQL endpoint. This method uses the private Server-to-Server token which reduces the chance of throttling but must not be exposed to clients. Server-side calls should prefer using this over `getPublicTokenHeaders()`.\n *\n * By default, it will use the config you passed in when calling `createStorefrontClient()`. However, you can override the following settings on each invocation of `getPrivateTokenHeaders({...})`:\n *\n * - `contentType`\n * - `privateStorefrontToken`\n * - `buyerIp`\n *\n * Note that `contentType` defaults to what you configured in `createStorefrontClient({...})` and defaults to `'json'`, but a specific call may require using `graphql`. When using `JSON.stringify()` on the `body`, use `'json'`; otherwise, use `'graphql'`.\n */\n getPrivateTokenHeaders: (\n props?: OverrideTokenHeaderProps &\n Pick<StorefrontClientProps, 'privateStorefrontToken'> & {\n /**\n * The client's IP address. Passing this to the Storefront API when using a server-to-server token will help improve your store's analytics data.\n */\n buyerIp?: string;\n }\n ) => Record<string, string>;\n /**\n * Returns an object that contains headers that are needed for each query to Storefront API GraphQL endpoint. This method uses the private Server-to-Server token which reduces the chance of throttling but must not be exposed to clients. Server-side calls should prefer using this over `getPublicTokenHeaders()`.\n *\n * By default, it will use the config you passed in when calling `createStorefrontClient()`. However, you can override the following settings on each invocation of `getPrivateTokenHeaders({...})`:\n *\n * - `contentType`\n * - `publicStorefrontToken`\n *\n * Note that `contentType` defaults to what you configured in `createStorefrontClient({...})` and defaults to `'json'`, but a specific call may require using `graphql`. When using `JSON.stringify()` on the `body`, use `'json'`; otherwise, use `'graphql'`.\n */\n getPublicTokenHeaders: (\n props?: OverrideTokenHeaderProps &\n Pick<StorefrontClientProps, 'publicStorefrontToken'>\n ) => Record<string, string>;\n};\n"],"names":["t","n","e","r","i","o","a","u","s","l","v","g","c","useLayoutEffect","require$$0","f","React","error","shim","module","require$$1","d","b","isEqual","this","useRef","useState","queue","service","interpret","createMachine","InterpreterStatus","useIsomorphicLayoutEffect","useEffect","useCallback","useSyncExternalStoreWithSelector","ShopifyContext","createContext","storeDomain","storefrontToken","storefrontApiVersion","SFAPI_VERSION","country","isoCode","language","locale","ShopifyProvider","children","shopifyConfig","Error","console","warn","finalConfig","useMemo","replace","_jsxFileName","useShop","shopContext","useContext","useCartFetch","storefrontId","query","variables","headers","STOREFRONT_API_PUBLIC_TOKEN_HEADER","SHOPIFY_STOREFRONT_ID_HEADER","cookieData","parse","document","cookie","SHOPIFY_Y","SHOPIFY_S","SHOPIFY_STOREFRONT_Y_HEADER","SHOPIFY_STOREFRONT_S_HEADER","fetch","method","body","JSON","stringify","toString","then","res","json","catch","data","undefined","errors","useCartActions","numCartLines","cartFragment","countryCode","fetchCart","cartFetch","cartId","CartQuery","id","cartCreate","cart","CartCreate","input","cartLineAdd","lines","CartLineAdd","cartLineUpdate","CartLineUpdate","cartLineRemove","CartLineRemove","noteUpdate","note","CartNoteUpdate","buyerIdentityUpdate","buyerIdentity","CartBuyerIdentityUpdate","cartAttributesUpdate","attributes","CartAttributesUpdate","discountCodesUpdate","discountCodes","CartDiscountCodesUpdate","invokeCart","action","options","entry","entryActions","on","RESOLVE","target","resolveTarget","actions","assign","prevCart","context","_","event","payload","rawCartResult","ERROR","errorTarget","lastValidCart","CART_COMPLETED","exit","exitActions","INITIALIZING_CART_EVENTS","CART_FETCH","CART_CREATE","CART_SET","cartFromGraphQL","UPDATING_CART_EVENTS","CARTLINE_ADD","CARTLINE_UPDATE","CARTLINE_REMOVE","NOTE_UPDATE","BUYER_IDENTITY_UPDATE","CART_ATTRIBUTES_UPDATE","DISCOUNT_CODES_UPDATE","createCartMachine","initialCart","initial","states","uninitialized","cartCompleted","initializationError","idle","cartFetching","cartCreating","cartLineRemoving","cartLineUpdating","cartLineAdding","noteUpdating","buyerIdentityUpdating","cartAttributesUpdating","discountCodesUpdating","useCartAPIStateMachine","onCartActionEntry","onCartActionOptimisticUI","onCartActionComplete","cartMachine","state","send","useMachine","cartFetchAction","type","resultEvent","eventFromFetchResult","cartCreateAction","cartLineAddAction","cartLinesAdd","cartLineUpdateAction","cartLinesUpdate","cartLineRemoveAction","cartLinesRemove","noteUpdateAction","cartNoteUpdate","buyerIdentityUpdateAction","cartBuyerIdentityUpdate","cartAttributesUpdateAction","discountCodesUpdateAction","cartDiscountCodesUpdate","isCartActionEvent","isCartFetchResultEvent","flattenConnection","cartActionEvent","CartContext","useCart","CartProvider","onCreate","onLineAdd","onLineRemove","onLineUpdate","onNoteUpdate","onBuyerIdentityUpdate","onAttributesUpdate","onDiscountCodesUpdate","onCreateComplete","onLineAddComplete","onLineRemoveComplete","onLineUpdateComplete","onNoteUpdateComplete","onBuyerIdentityUpdateComplete","onAttributesUpdateComplete","onDiscountCodesUpdateComplete","defaultCartFragment","customerAccessToken","toUpperCase","prevCountryCode","setPrevCountryCode","prevCustomerAccessToken","setPrevCustomerAccessToken","customerOverridesCountryCode","current","cartState","cartSend","filter","line","includes","map","updatedLine","find","quantity","countryCodeNotUpdated","cartReady","matches","countryChanged","value","fetchingFromStorage","storageAvailable","window","localStorage","getItem","CART_ID_STORAGE_KEY","onCartReadySend","cartEvent","setItem","removeItem","cartInput","cartDisplayState","useDelayedStateUntilHydration","cartContextValue","status","transposeStatus","totalQuantity","linesAdd","linesRemove","linesUpdate","isPending","startTransition","useTransition","delayedState","setDelayedState","firstTimePending","firstTimePendingFinished","displayState","storage","x","DOMException","code","name","length","ProductOptionsContext","ProductProvider","product","initialVariantId","explicitVariantId","variants","isProductVariantArray","getOptions","selectedVariant","setSelectedVariant","getVariantBasedOnIdProp","selectedOptions","setSelectedOptions","getSelectedOptions","newSelectedVariant","setSelectedOption","opts","getSelectedVariant","isOptionInStock","option","proposedVariant","availableForSale","sellingPlanGroups","sellingPlanGroup","sellingPlans","selectedSellingPlan","setSelectedSellingPlan","selectedSellingPlanAllocation","sellingPlanAllocations","nodes","edges","allocation","sellingPlan","variantsConnection","sellingPlanGroupsConnection","useProduct","choices","Object","keys","variant","entries","every","some","reduce","memo","forEach","opt","Set","add","values","Array","from","foundVariant","optionSet","maybeVariantArray","isArray","BaseButton","props","as","onClick","defaultOnClick","buttonRef","passthroughProps","handleOnClick","clickShouldContinue","defaultPrevented","Component","AddToCartButton","addingItem","setAddingItem","variantId","sellingPlanId","accessibleAddingToCartLabel","disabled","handleAddItem","merchandiseId","position","width","height","padding","margin","overflow","clip","whiteSpace","borderWidth","BuyNowButton","checkoutUrl","loading","setLoading","location","href","handleBuyNow","CartCheckoutButton","requestedCheckout","setRequestedCheckout","ExternalVideo","frameBorder","allow","allowFullScreen","embedUrl","finalUrl","urlObject","URL","key","searchParams","set","alt","Image","loader","shopifyImageLoader","loaderOptions","widths","decoding","rest","url","missingUrlError","altText","imgElementWidth","imgElementHeight","getShopifyImageDimensions","elementProps","finalSrc","src","maxWidth","finalSrcset","srcSet","internalImageSrcSet","crop","scale","hasCustomWidths","size","isNaN","aspectRatio","Number","setSizes","IMG_SRC_SET_SIZES","srcGenerator","addImageSizeParametersToUrl","join","Video","previewImageOptions","playsInline","controls","sourceProps","posterUrl","previewImage","sources","source","mimeType","SCRIPTS_LOADED","loadScript","isScriptLoaded","promise","Promise","resolve","reject","script","createElement","onload","onerror","in","head","appendChild","useLoadScript","setStatus","stringifiedOptions","loadScriptWrapper","ModelViewer","modelViewer","setModelViewer","callbackRef","node","className","modelViewerLoadedStatus","onError","addEventListener","onLoad","onPreload","onModelVisibility","onProgress","onArStatus","onArTracking","onQuickLookButtonTapped","onCameraChange","onEnvironmentChange","onPlay","onPause","onSceneGraphReady","removeEventListener","sourcesUrlError","__HYDROGEN_DEV__","cameraControls","poster","autoplay","reveal","ar","arModes","arScale","arPlacement","iosSrc","touchAction","disableZoom","orbitSensitivity","autoRotate","autoRotateDelay","rotationPerSecond","interactionPolicy","interactionPrompt","interactionPromptStyle","interactionPromptThreshold","cameraOrbit","cameraTarget","fieldOfView","maxCameraOrbit","minCameraOrbit","maxFieldOfView","minFieldOfView","bounds","interpolationDecay","skyboxImage","environmentImage","exposure","shadowIntensity","shadowSoftness","animationName","animationCrossfadeDuration","variantName","orientation","MediaFile","mediaOptions","__typename","image","noDataImage","video","externalVideo","typenameMissingMessage","Metafield","parsedMetafield","parseMetafield","noDataPropWarning","noValueWarning","Wrapper","toLocaleDateString","toLocaleString","getMeasurementAsString","__html","split","protocolLessUrl","protocol","ref","reference","title","refArray","references","index","metafield","info","parseMetafieldValue","parseInt","parseFloat","Date","parseJSON","String","k","UNIT_MAPPING","mm","cm","m","ft","yd","ml","us_fl_oz","us_gal","kg","lb","oz","measurement","measure","unit","convertToSupportedUnit","Intl","NumberFormat","style","format","useMoney","money","amount","currency","currencyCode","defaultFormatter","useLazyFormatter","nameFormatter","currencyDisplay","narrowSymbolFormatter","withoutTrailingZerosFormatter","minimumFractionDigits","maximumFractionDigits","withoutCurrencyFormatter","withoutTrailingZerosOrCurrencyFormatter","isPartCurrency","part","lazyFormatters","original","localizedString","parts","formatToParts","withoutTrailingZeros","withoutTrailingZerosAndCurrency","currencyName","currencySymbol","currencyNarrowSymbol","Proxy","get","Reflect","call","memoized","Money","withoutCurrency","measurementSeparator","isMoney","moneyObject","output","referenceUnit","maybeMoney","ProductPrice","priceType","valueType","price","compareAtPriceV2","priceV2","compareAtPriceRange","maxVariantPrice","minVariantPrice","unitPrice","unitPriceMeasurement","priceRange","SHOPJS_URL","ShopPayButton","variantIds","variantIdsAndQuantities","shopPayLoadedStatus","ids","DoublePropsErrorMessage","prev","curr","bareId","getIdFromGid","push","MissingPropsErrorMessage","pop"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,WAAS,EAAEA,IAAEC,IAAE;AAAC,QAAIC,KAAE,cAAY,OAAO,UAAQF,GAAE,OAAO;AAAU,QAAG,CAACE;AAAE,aAAOF;AAAE,QAAIG,IAAEC,IAAEC,KAAEH,GAAE,KAAKF,EAAC,GAAEM,KAAE;AAAG,QAAG;AAAC,cAAM,WAASL,MAAGA,OAAK,MAAI,EAAEE,KAAEE,GAAE,KAAM,GAAE;AAAM,QAAAC,GAAE,KAAKH,GAAE,KAAK;AAAA,IAAC,SAAOH,IAAN;AAAS,MAAAI,KAAE,EAAC,OAAMJ,GAAC;AAAA,IAAC,UAAC;AAAQ,UAAG;AAAC,QAAAG,MAAG,CAACA,GAAE,SAAOD,KAAEG,GAAE,WAASH,GAAE,KAAKG,EAAC;AAAA,MAAC,UAAC;AAAQ,YAAGD;AAAE,gBAAMA,GAAE;AAAA,MAAK;AAAA,IAAC;AAAC,WAAOE;AAAA,EAAC;AAAC,MAAI;AAAE,GAAC,SAASN,IAAE;AAAC,IAAAA,GAAEA,GAAE,aAAW,KAAG,cAAaA,GAAEA,GAAE,UAAQ,KAAG,WAAUA,GAAEA,GAAE,UAAQ,KAAG;AAAA,EAAS,EAAE,MAAI,IAAE,CAAE,EAAC;AAAE,MAAI,IAAE,EAAC,MAAK,cAAa;AAAE,WAAS,EAAEA,IAAE;AAAC,WAAO,WAASA,KAAE,CAAE,IAAC,GAAG,OAAOA,EAAC;AAAA,EAAC;AAAC,WAAS,EAAEA,IAAE;AAAC,WAAM,EAAC,MAAK,iBAAgB,YAAWA,GAAC;AAAA,EAAC;AAAC,WAAS,EAAEA,IAAEC,IAAE;AAAC,WAAM,YAAU,QAAOD,KAAE,YAAU,OAAOA,MAAGC,MAAGA,GAAED,MAAGC,GAAED,MAAGA,MAAG,EAAC,MAAKA,GAAC,IAAE,cAAY,OAAOA,KAAE,EAAC,MAAKA,GAAE,MAAK,MAAKA,GAAC,IAAEA;AAAA,EAAC;AAAC,WAAS,EAAEA,IAAE;AAAC,WAAO,SAASC,IAAE;AAAC,aAAOD,OAAIC;AAAA,IAAC;AAAA,EAAC;AAAC,WAASM,IAAEP,IAAE;AAAC,WAAM,YAAU,OAAOA,KAAE,EAAC,MAAKA,GAAC,IAAEA;AAAA,EAAC;AAAC,WAAS,EAAEA,IAAEC,IAAE;AAAC,WAAM,EAAC,OAAMD,IAAE,SAAQC,IAAE,SAAQ,CAAA,GAAG,SAAQ,OAAG,SAAQ,EAAED,EAAC,EAAC;AAAA,EAAC;AAAC,WAAS,EAAEA,IAAEC,IAAEC,IAAE;AAAC,QAAIC,KAAEF,IAAEG,KAAE;AAAG,WAAM,CAACJ,GAAE,OAAQ,SAASA,IAAE;AAAC,UAAG,oBAAkBA,GAAE,MAAK;AAAC,QAAAI,KAAE;AAAG,YAAIH,KAAE,OAAO,OAAO,CAAA,GAAGE,EAAC;AAAE,eAAM,cAAY,OAAOH,GAAE,aAAWC,KAAED,GAAE,WAAWG,IAAED,EAAC,IAAE,OAAO,KAAKF,GAAE,UAAU,EAAE,QAAS,SAASI,IAAE;AAAC,UAAAH,GAAEG,MAAG,cAAY,OAAOJ,GAAE,WAAWI,MAAGJ,GAAE,WAAWI,IAAGD,IAAED,EAAC,IAAEF,GAAE,WAAWI;AAAA,QAAE,CAAC,GAAGD,KAAEF,IAAE;AAAA,MAAE;AAAC,aAAM;AAAA,IAAE,CAAG,GAACE,IAAEC,EAAC;AAAA,EAAC;AAAC,WAAS,EAAEH,IAAEG,IAAE;AAAC,eAASA,OAAIA,KAAE,CAAE;AAAE,QAAII,KAAE,EAAE,EAAE,EAAEP,GAAE,OAAOA,GAAE,SAAS,KAAK,EAAE,IAAK,SAASD,IAAE;AAAC,aAAO,EAAEA,IAAEI,GAAE,OAAO;AAAA,IAAC,CAAG,GAACH,GAAE,SAAQ,CAAC,GAAE,CAAC,GAAEQ,KAAED,GAAE,IAAGE,KAAEF,GAAE,IAAG,IAAE,EAAC,QAAOP,IAAE,UAASG,IAAE,cAAa,EAAC,OAAMH,GAAE,SAAQ,SAAQQ,IAAE,SAAQC,IAAE,SAAQ,EAAET,GAAE,OAAO,EAAC,GAAE,YAAW,SAASC,IAAEE,IAAE;AAAC,UAAII,IAAEC,IAAEC,KAAE,YAAU,OAAOR,KAAE,EAAC,OAAMA,IAAE,SAAQD,GAAE,QAAO,IAAEC,IAAE,IAAEQ,GAAE,OAAMC,KAAED,GAAE,SAAQ,IAAEH,IAAEH,EAAC,GAAE,IAAEH,GAAE,OAAO;AAAG,UAAG,EAAE,IAAG;AAAC,YAAI,IAAE,EAAE,EAAE,GAAG,EAAE,KAAK;AAAE,YAAG;AAAC,mBAAQ,IAAE,SAASD,IAAE;AAAC,gBAAIC,KAAE,cAAY,OAAO,UAAQ,OAAO,UAASC,KAAED,MAAGD,GAAEC,KAAGE,KAAE;AAAE,gBAAGD;AAAE,qBAAOA,GAAE,KAAKF,EAAC;AAAE,gBAAGA,MAAG,YAAU,OAAOA,GAAE;AAAO,qBAAM,EAAC,MAAK,WAAU;AAAC,uBAAOA,MAAGG,MAAGH,GAAE,WAASA,KAAE,SAAQ,EAAC,OAAMA,MAAGA,GAAEG,OAAK,MAAK,CAACH,GAAC;AAAA,cAAC,EAAC;AAAE,kBAAM,IAAI,UAAUC,KAAE,4BAA0B,iCAAiC;AAAA,UAAC,EAAE,CAAC,GAAE,IAAE,EAAE,QAAO,CAAC,EAAE,MAAK,IAAE,EAAE,KAAM,GAAC;AAAC,gBAAI,IAAE,EAAE;AAAM,gBAAG,WAAS;AAAE,qBAAO,EAAE,GAAEU,EAAC;AAAE,gBAAI,IAAE,YAAU,OAAO,IAAE,EAAC,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,SAAQ,IAAE,WAAS,IAAE,KAAG,GAAE,IAAE,EAAE,MAAK,IAAE,WAAS,IAAE,WAAU;AAAC,qBAAM;AAAA,YAAE,IAAE,GAAE,IAAE,WAAS,GAAE,IAAE,QAAM,IAAE,IAAE,GAAE,IAAEV,GAAE,OAAO;AAAG,gBAAG,EAAEU,IAAE,CAAC,GAAE;AAAC,kBAAI,IAAE,EAAE,GAAG,IAAE,EAAE,CAAC,IAAE,CAAE,EAAC,OAAO,EAAE,MAAK,GAAE,EAAE,KAAK,EAAE,OAAQ,SAASX,IAAE;AAAC,uBAAOA;AAAA,cAAC,CAAC,GAAI,IAAK,SAASA,IAAE;AAAC,uBAAO,EAAEA,IAAE,EAAE,SAAS,OAAO;AAAA,cAAC,IAAIW,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,IAAG,IAAE,EAAE,IAAG,IAAE,EAAE,IAAG,IAAE,QAAM,IAAE,IAAE;AAAE,qBAAM,EAAC,OAAM,GAAE,SAAQ,GAAE,SAAQ,GAAE,SAAQ,MAAI,KAAG,EAAE,SAAO,KAAG,GAAE,SAAQ,EAAE,CAAC,EAAC;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC,SAAOX,IAAN;AAAS,UAAAQ,KAAE,EAAC,OAAMR,GAAC;AAAA,QAAC,UAAC;AAAQ,cAAG;AAAC,iBAAG,CAAC,EAAE,SAAOS,KAAE,EAAE,WAASA,GAAE,KAAK,CAAC;AAAA,UAAC,UAAC;AAAQ,gBAAGD;AAAE,oBAAMA,GAAE;AAAA,UAAK;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,EAAE,GAAEG,EAAC;AAAA,IAAC,EAAC;AAAE,WAAO;AAAA,EAAC;AAAC,MAAI,IAAE,SAASX,IAAEC,IAAE;AAAC,WAAOD,GAAE,QAAQ,QAAS,SAASE,IAAE;AAAC,UAAIC,KAAED,GAAE;AAAK,aAAOC,MAAGA,GAAEH,GAAE,SAAQC,EAAC;AAAA,IAAC;EAAG;AAAE,WAAS,EAAED,IAAE;AAAC,QAAIG,KAAEH,GAAE,cAAaI,KAAE,EAAE,YAAWC,KAAE,oBAAI,OAAIO,KAAE,EAAC,UAASZ,IAAE,MAAK,SAASE,IAAE;AAAC,MAAAE,OAAI,EAAE,YAAUD,KAAEH,GAAE,WAAWG,IAAED,EAAC,GAAE,EAAEC,IAAEI,IAAEL,EAAC,CAAC,GAAEG,GAAE,QAAS,SAASL,IAAE;AAAC,eAAOA,GAAEG,EAAC;AAAA,MAAC,CAAC;AAAA,IAAG,GAAE,WAAU,SAASH,IAAE;AAAC,aAAOK,GAAE,IAAIL,EAAC,GAAEA,GAAEG,EAAC,GAAE,EAAC,aAAY,WAAU;AAAC,eAAOE,GAAE,OAAOL,EAAC;AAAA,MAAC,EAAC;AAAA,IAAC,GAAE,OAAM,SAASK,IAAE;AAAC,UAAGA,IAAE;AAAC,YAAIE,KAAE,YAAU,OAAOF,KAAEA,KAAE,EAAC,SAAQL,GAAE,OAAO,SAAQ,OAAMK,GAAC;AAAE,QAAAF,KAAE,EAAC,OAAMI,GAAE,OAAM,SAAQ,CAAE,GAAC,SAAQA,GAAE,SAAQ,SAAQ,EAAEA,GAAE,KAAK,EAAC;AAAA,MAAC;AAAM,QAAAJ,KAAEH,GAAE;AAAa,aAAOI,KAAE,EAAE,SAAQ,EAAED,IAAE,CAAC,GAAES;AAAA,IAAC,GAAE,MAAK,WAAU;AAAC,aAAOR,KAAE,EAAE,SAAQC,GAAE,MAAO,GAACO;AAAA,IAAC,GAAE,IAAI,QAAO;AAAC,aAAOT;AAAA,IAAC,GAAE,IAAI,SAAQ;AAAC,aAAOC;AAAA,IAAC,EAAC;AAAE,WAAOQ;AAAA,EAAC;ACZ/lG,MAAI,QAASC,MAAe;;;;;;;;;;;;;;;;;;;ACOf,QAAIX,KAAEY,eAAgB;AAAC,aAAS,EAAER,IAAE,GAAE;AAAC,aAAOA,OAAI,MAAI,MAAIA,MAAG,IAAEA,OAAI,IAAE,MAAIA,OAAIA,MAAG,MAAI;AAAA,IAAC;AAAC,QAAI,IAAE,eAAa,OAAO,OAAO,KAAG,OAAO,KAAG,GAAEG,KAAEP,GAAE,UAAS,IAAEA,GAAE,WAAUD,KAAEC,GAAE,iBAAgB,IAAEA,GAAE;AAAc,aAAS,EAAEI,IAAE,GAAE;AAAC,UAAI,IAAE,EAAC,GAAGS,KAAEN,GAAE,EAAC,MAAK,EAAC,OAAM,GAAE,aAAY,EAAC,EAAC,CAAC,GAAEG,KAAEG,GAAE,GAAG,MAAKJ,KAAEI,GAAE;AAAG,MAAAd,GAAE,WAAU;AAAC,QAAAW,GAAE,QAAM;AAAE,QAAAA,GAAE,cAAY;AAAE,QAAAT,GAAES,EAAC,KAAGD,GAAE,EAAC,MAAKC,GAAC,CAAC;AAAA,MAAC,GAAE,CAACN,IAAE,GAAE,CAAC,CAAC;AAAE,QAAE,WAAU;AAAC,QAAAH,GAAES,EAAC,KAAGD,GAAE,EAAC,MAAKC,GAAC,CAAC;AAAE,eAAON,GAAE,WAAU;AAAC,UAAAH,GAAES,EAAC,KAAGD,GAAE,EAAC,MAAKC,GAAC,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC,GAAE,CAACN,EAAC,CAAC;AAAE,QAAE,CAAC;AAAE,aAAO;AAAA,IAAC;AAClc,aAASH,GAAEG,IAAE;AAAC,UAAI,IAAEA,GAAE;AAAY,MAAAA,KAAEA,GAAE;AAAM,UAAG;AAAC,YAAI,IAAE,EAAG;AAAC,eAAM,CAAC,EAAEA,IAAE,CAAC;AAAA,MAAC,SAAOS,IAAN;AAAS,eAAM;AAAA,MAAE;AAAA,IAAC;AAAC,aAASf,GAAEM,IAAE,GAAE;AAAC,aAAO,EAAC;AAAA,IAAE;AAAC,QAAIC,KAAE,gBAAc,OAAO,UAAQ,gBAAc,OAAO,OAAO,YAAU,gBAAc,OAAO,OAAO,SAAS,gBAAcP,KAAE;AAAE,4CAA4B,uBAAC,WAASE,GAAE,uBAAqBA,GAAE,uBAAqBK;;;;;;;;;;;;;;;;;;ACE1U,QAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,OAAC,WAAW;AAKd,YACE,OAAO,mCAAmC,eAC1C,OAAO,+BAA+B,gCACpC,YACF;AACA,yCAA+B,4BAA4B,IAAI,MAAK,CAAE;AAAA,QACvE;AACS,YAAIS,SAAQF,eAAAA;AAEtB,YAAI,uBAAuBE,OAAM;AAEjC,iBAAS,MAAM,QAAQ;AACrB;AACE;AACE,uBAAS,QAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,GAAG,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACjH,qBAAK,QAAQ,KAAK,UAAU;AAAA,cAC7B;AAED,2BAAa,SAAS,QAAQ,IAAI;AAAA,YACnC;AAAA,UACF;AAAA,QACF;AAED,iBAAS,aAAa,OAAO,QAAQ,MAAM;AAGzC;AACE,gBAAI,yBAAyB,qBAAqB;AAClD,gBAAI,QAAQ,uBAAuB;AAEnC,gBAAI,UAAU,IAAI;AAChB,wBAAU;AACV,qBAAO,KAAK,OAAO,CAAC,KAAK,CAAC;AAAA,YAC3B;AAGD,gBAAI,iBAAiB,KAAK,IAAI,SAAU,MAAM;AAC5C,qBAAO,OAAO,IAAI;AAAA,YACxB,CAAK;AAED,2BAAe,QAAQ,cAAc,MAAM;AAI3C,qBAAS,UAAU,MAAM,KAAK,QAAQ,QAAQ,SAAS,cAAc;AAAA,UACtE;AAAA,QACF;AAMD,iBAAS,GAAG,GAAG,GAAG;AAChB,iBAAO,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,MAAM,KAAK,MAAM;AAAA,QAEpE;AAED,YAAI,WAAW,OAAO,OAAO,OAAO,aAAa,OAAO,KAAK;AAI7D,YAAI,WAAWA,OAAM,UACjB,YAAYA,OAAM,WAClB,kBAAkBA,OAAM,iBACxB,gBAAgBA,OAAM;AAC1B,YAAI,oBAAoB;AACxB,YAAI,6BAA6B;AAWjC,iBAAS,qBAAqB,WAAW,aAIzC,mBAAmB;AACjB;AACE,gBAAI,CAAC,mBAAmB;AACtB,kBAAIA,OAAM,oBAAoB,QAAW;AACvC,oCAAoB;AAEpB,sBAAM,gMAA+M;AAAA,cACtN;AAAA,YACF;AAAA,UACF;AAMD,cAAI,QAAQ;AAEZ;AACE,gBAAI,CAAC,4BAA4B;AAC/B,kBAAI,cAAc;AAElB,kBAAI,CAAC,SAAS,OAAO,WAAW,GAAG;AACjC,sBAAM,sEAAsE;AAE5E,6CAA6B;AAAA,cAC9B;AAAA,YACF;AAAA,UACF;AAgBD,cAAI,YAAY,SAAS;AAAA,YACvB,MAAM;AAAA,cACJ;AAAA,cACA;AAAA,YACD;AAAA,UACL,CAAG,GACG,OAAO,UAAU,GAAG,MACpB,cAAc,UAAU;AAK5B,0BAAgB,WAAY;AAC1B,iBAAK,QAAQ;AACb,iBAAK,cAAc;AAKnB,gBAAI,uBAAuB,IAAI,GAAG;AAEhC,0BAAY;AAAA,gBACV;AAAA,cACR,CAAO;AAAA,YACF;AAAA,UACF,GAAE,CAAC,WAAW,OAAO,WAAW,CAAC;AAClC,oBAAU,WAAY;AAGpB,gBAAI,uBAAuB,IAAI,GAAG;AAEhC,0BAAY;AAAA,gBACV;AAAA,cACR,CAAO;AAAA,YACF;AAED,gBAAI,oBAAoB,WAAY;AAOlC,kBAAI,uBAAuB,IAAI,GAAG;AAEhC,4BAAY;AAAA,kBACV;AAAA,gBACV,CAAS;AAAA,cACF;AAAA,YACP;AAGI,mBAAO,UAAU,iBAAiB;AAAA,UACtC,GAAK,CAAC,SAAS,CAAC;AACd,wBAAc,KAAK;AACnB,iBAAO;AAAA,QACR;AAED,iBAAS,uBAAuB,MAAM;AACpC,cAAI,oBAAoB,KAAK;AAC7B,cAAI,YAAY,KAAK;AAErB,cAAI;AACF,gBAAI,YAAY;AAChB,mBAAO,CAAC,SAAS,WAAW,SAAS;AAAA,UACtC,SAAQC,QAAP;AACA,mBAAO;AAAA,UACR;AAAA,QACF;AAED,iBAAS,uBAAuB,WAAW,aAAa,mBAAmB;AAKzE,iBAAO,YAAW;AAAA,QACnB;AAED,YAAI,YAAY,CAAC,EAAE,OAAO,WAAW,eAAe,OAAO,OAAO,aAAa,eAAe,OAAO,OAAO,SAAS,kBAAkB;AAEvI,YAAI,sBAAsB,CAAC;AAE3B,YAAIC,QAAO,sBAAsB,yBAAyB;AAC1D,YAAI,yBAAyBF,OAAM,yBAAyB,SAAYA,OAAM,uBAAuBE;AAEzE,6CAAA,uBAAG;AAE/B,YACE,OAAO,mCAAmC,eAC1C,OAAO,+BAA+B,+BACpC,YACF;AACA,yCAA+B,2BAA2B,IAAI,MAAK,CAAE;AAAA,QACtE;AAAA,MAED;IACA;;;;;;;;;AC5OA,UAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,QAAAC,QAAA,UAAiBL;MACnB,OAAO;AACL,QAAAK,QAAA,UAAiBC;MACnB;AAAA;;;;;;;;;;;;;;;;;ACGa,QAAI,IAAEN,eAAAA,SAAiBb,KAAEmB,YAAuC;AAAC,aAAS,EAAEd,IAAE,GAAE;AAAC,aAAOA,OAAI,MAAI,MAAIA,MAAG,IAAEA,OAAI,IAAE,MAAIA,OAAIA,MAAG,MAAI;AAAA,IAAC;AAAC,QAAI,IAAE,eAAa,OAAO,OAAO,KAAG,OAAO,KAAG,GAAEH,KAAEF,GAAE,sBAAqBD,KAAE,EAAE,QAAOO,KAAE,EAAE,WAAUG,KAAE,EAAE,SAAQ,IAAE,EAAE;AAC/P,gCAAA,mCAAyC,SAASJ,IAAE,GAAEJ,IAAEO,IAAEE,IAAE;AAAC,UAAIC,KAAEZ,GAAE,IAAI;AAAE,UAAG,SAAOY,GAAE,SAAQ;AAAC,YAAIG,KAAE,EAAC,UAAS,OAAG,OAAM,KAAI;AAAE,QAAAH,GAAE,UAAQG;AAAA,MAAC;AAAM,QAAAA,KAAEH,GAAE;AAAQ,MAAAA,KAAEF,GAAE,WAAU;AAAC,iBAASJ,GAAEA,IAAE;AAAC,cAAG,CAACM,IAAE;AAAC,YAAAA,KAAE;AAAG,YAAAS,KAAEf;AAAE,YAAAA,KAAEG,GAAEH,EAAC;AAAE,gBAAG,WAASK,MAAGI,GAAE,UAAS;AAAC,kBAAIO,KAAEP,GAAE;AAAM,kBAAGJ,GAAEW,IAAEhB,EAAC;AAAE,uBAAO,IAAEgB;AAAA,YAAC;AAAC,mBAAO,IAAEhB;AAAA,UAAC;AAAC,UAAAgB,KAAE;AAAE,cAAG,EAAED,IAAEf,EAAC;AAAE,mBAAOgB;AAAE,cAAIpB,KAAEO,GAAEH,EAAC;AAAE,cAAG,WAASK,MAAGA,GAAEW,IAAEpB,EAAC;AAAE,mBAAOoB;AAAE,UAAAD,KAAEf;AAAE,iBAAO,IAAEJ;AAAA,QAAC;AAAC,YAAIU,KAAE,OAAGS,IAAE,GAAE,IAAE,WAASnB,KAAE,OAAKA;AAAE,eAAM,CAAC,WAAU;AAAC,iBAAOI,GAAE,EAAG,CAAA;AAAA,QAAC,GAAE,SAAO,IAAE,SAAO,WAAU;AAAC,iBAAOA,GAAE,EAAC,CAAE;AAAA,QAAC,CAAC;AAAA,MAAC,GAAE,CAAC,GAAEJ,IAAEO,IAAEE,EAAC,CAAC;AAAE,UAAI,IAAER,GAAEG,IAAEM,GAAE,IAAGA,GAAE,EAAE;AACrf,MAAAL,GAAE,WAAU;AAAC,QAAAQ,GAAE,WAAS;AAAG,QAAAA,GAAE,QAAM;AAAA,MAAC,GAAE,CAAC,CAAC,CAAC;AAAE,QAAE,CAAC;AAAE,aAAO;AAAA,IAAC;;;;;;;;;;;;;;;;;;ACCxD,QAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,OAAC,WAAW;AAKd,YACE,OAAO,mCAAmC,eAC1C,OAAO,+BAA+B,gCACpC,YACF;AACA,yCAA+B,4BAA4B,IAAI,MAAK,CAAE;AAAA,QACvE;AACS,YAAIC,SAAQF,eAAAA;AACtB,YAAII,QAAOE;AAMX,iBAAS,GAAG,GAAG,GAAG;AAChB,iBAAO,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,IAAI,MAAM,MAAM,KAAK,MAAM;AAAA,QAEpE;AAED,YAAI,WAAW,OAAO,OAAO,OAAO,aAAa,OAAO,KAAK;AAE7D,YAAI,uBAAuBF,MAAK;AAIhC,YAAI,SAASF,OAAM,QACf,YAAYA,OAAM,WAClB,UAAUA,OAAM,SAChB,gBAAgBA,OAAM;AAE1B,iBAAS,iCAAiC,WAAW,aAAa,mBAAmB,UAAUO,UAAS;AAEtG,cAAI,UAAU,OAAO,IAAI;AACzB,cAAI;AAEJ,cAAI,QAAQ,YAAY,MAAM;AAC5B,mBAAO;AAAA,cACL,UAAU;AAAA,cACV,OAAO;AAAA,YACb;AACI,oBAAQ,UAAU;AAAA,UACtB,OAAS;AACL,mBAAO,QAAQ;AAAA,UAChB;AAED,cAAI,WAAW,QAAQ,WAAY;AAKjC,gBAAI,UAAU;AACd,gBAAI;AACJ,gBAAI;AAEJ,gBAAI,mBAAmB,SAAU,cAAc;AAC7C,kBAAI,CAAC,SAAS;AAEZ,0BAAU;AACV,mCAAmB;AAEnB,oBAAI,iBAAiB,SAAS,YAAY;AAE1C,oBAAIA,aAAY,QAAW;AAIzB,sBAAI,KAAK,UAAU;AACjB,wBAAI,mBAAmB,KAAK;AAE5B,wBAAIA,SAAQ,kBAAkB,cAAc,GAAG;AAC7C,0CAAoB;AACpB,6BAAO;AAAA,oBACR;AAAA,kBACF;AAAA,gBACF;AAED,oCAAoB;AACpB,uBAAO;AAAA,cACR;AAID,kBAAI,eAAe;AACnB,kBAAI,gBAAgB;AAEpB,kBAAI,SAAS,cAAc,YAAY,GAAG;AAExC,uBAAO;AAAA,cACR;AAID,kBAAI,gBAAgB,SAAS,YAAY;AASzC,kBAAIA,aAAY,UAAaA,SAAQ,eAAe,aAAa,GAAG;AAClE,uBAAO;AAAA,cACR;AAED,iCAAmB;AACnB,kCAAoB;AACpB,qBAAO;AAAA,YACb;AAII,gBAAI,yBAAyB,sBAAsB,SAAY,OAAO;AAEtE,gBAAI,0BAA0B,WAAY;AACxC,qBAAO,iBAAiB,YAAW,CAAE;AAAA,YAC3C;AAEI,gBAAI,gCAAgC,2BAA2B,OAAO,SAAY,WAAY;AAC5F,qBAAO,iBAAiB,uBAAsB,CAAE;AAAA,YACtD;AACI,mBAAO,CAAC,yBAAyB,6BAA6B;AAAA,UAC/D,GAAE,CAAC,aAAa,mBAAmB,UAAUA,QAAO,CAAC,GAClD,eAAe,SAAS,IACxB,qBAAqB,SAAS;AAElC,cAAI,QAAQ,qBAAqB,WAAW,cAAc,kBAAkB;AAC5E,oBAAU,WAAY;AACpB,iBAAK,WAAW;AAChB,iBAAK,QAAQ;AAAA,UACjB,GAAK,CAAC,KAAK,CAAC;AACV,wBAAc,KAAK;AACnB,iBAAO;AAAA,QACR;AAEuC,iCAAA,mCAAG;AAE3C,YACE,OAAO,mCAAmC,eAC1C,OAAO,+BAA+B,+BACpC,YACF;AACA,yCAA+B,2BAA2B,IAAI,MAAK,CAAE;AAAA,QACtE;AAAA,MAED;IACA;;;;AClKA,QAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,MAAAJ,QAAA,UAAiBL;IACnB,OAAO;AACL,MAAAK,QAAA,UAAiBC;IACnB;AAAA;ACLe,WAAS,YAAY,IAAI;AACpC,QAAI,MAAMJ,iBAAM;AAChB,QAAI,CAAC,IAAI,SAAS;AACd,UAAI,UAAU,EAAE,GAAG,GAAI,EAAA;AAAA,IAC1B;AACD,WAAO,IAAI,QAAQ;AAAA,EACvB;ACPA,MAAI,SAAUQ,cAAQA,WAAK,UAAW,SAAUnB,IAAGJ,IAAG;AAClD,QAAI,IAAI,OAAO,WAAW,cAAcI,GAAE,OAAO;AACjD,QAAI,CAAC;AAAG,aAAOA;AACf,QAAID,KAAI,EAAE,KAAKC,EAAC,GAAGF,IAAG,KAAK,CAAE,GAAED;AAC/B,QAAI;AACA,cAAQD,OAAM,UAAUA,OAAM,MAAM,EAAEE,KAAIC,GAAE,KAAM,GAAE;AAAM,WAAG,KAAKD,GAAE,KAAK;AAAA,IAC5E,SACM,OAAP;AAAgB,MAAAD,KAAI,EAAE,MAAc;AAAA,IAAG,UAC/B;AACJ,UAAI;AACA,YAAIC,MAAK,CAACA,GAAE,SAAS,IAAIC,GAAE;AAAY,YAAE,KAAKA,EAAC;AAAA,MAClD,UACO;AAAE,YAAIF;AAAG,gBAAMA,GAAE;AAAA,MAAQ;AAAA,IACpC;AACD,WAAO;AAAA,EACX;AAMA,WAAS,SAASI,IAAG;AACjB,WAAOA;AAAA,EACX;AACA,MAAI,kBAAkB,SAAU,SAAS;AACrC,QAAI;AACJ,YACK,UAAU,SAAU,OAAO;AAC5B,qBAAe;AAAA,IACvB,CAAK,EACI;AACL,WAAO;AAAA,EACX;AACO,WAAS,WAAW,cAAc,SAAS;AAC9C,QAAI,oBAAoBmB,MAAAA;AACxB,QAAI,QAAQ,IAAI,aAAa,cAAc;AACvC,UAAI,KAAK,OAAOC,MAAAA,SAAS,YAAY,GAAG,CAAC,GAAG,iBAAiB,GAAG;AAChE,UAAI,iBAAiB,gBAAgB;AACjC,gBAAQ,KAAK,gMAC+D;AAAA,MAC/E;AAAA,IACJ;AACD,QAAI,KAAK,OAAO,YAAY,WAAY;AACpC,UAAIC,SAAQ,CAAA;AACZ,UAAIC,WAAUC,EAAUC,EAAc,aAAa,QAAQ,UAAU,UAAU,aAAa,QAAQ,CAAC;AACrG,UAAI,OAAOF,SAAQ;AACnB,MAAAA,SAAQ,OAAO,SAAU,OAAO;AAC5B,YAAIA,SAAQ,WAAWG,EAAkB,YAAY;AACjD,UAAAJ,OAAM,KAAK,KAAK;AAChB;AAAA,QACH;AACD,aAAK,KAAK;AACV,0BAAkB,UAAUC,SAAQ;AAAA,MAChD;AACQ,aAAO,CAACA,UAASD,MAAK;AAAA,IAC9B,CAAK,GAAG,CAAC,GAAG,UAAU,GAAG,IAAI,QAAQ,GAAG;AACpCK,UAA0B,WAAY;AAClC,UAAI,SAAS;AACT,gBAAQ,SAAS,WAAW;AAAA,MAC/B;AAAA,IACT,CAAK;AACD,QAAI,mBAAmB,WAAW,OAAO;AACzCC,UAAAA,UAAU,WAAY;AAClB,cAAQ,MAAM,kBAAkB,OAAO;AACvC,YAAM,QAAQ,QAAQ,IAAI;AAC1B,wBAAkB,UAAU,QAAQ;AACpC,aAAO,WAAY;AACf,gBAAQ,KAAI;AAAA,MACxB;AAAA,IACK,GAAE,CAAE,CAAA;AACL,WAAO;AAAA,EACX;AACA,MAAI,UAAU,SAAU,YAAY,WAAW;AAAE,WAAO,UAAU,YAAY;AAAA;AACvE,WAAS,WAAW,SAAS;AAChC,QAAI,cAAcC,kBAAY,WAAY;AAAE,aAAO,gBAAgB,OAAO;AAAA,IAAI,GAAE,CAAC,OAAO,CAAC;AACzF,QAAI,YAAYA,kBAAY,SAAU,mBAAmB;AACrD,UAAI,cAAc,QAAQ,UAAU,iBAAiB,EAAE;AACvD,aAAO;AAAA,IACf,GAAO,CAAC,OAAO,CAAC;AACZ,QAAI,gBAAgBC,aAAAA,QAAAA,iCAAiC,WAAW,aAAa,aAAa,UAAU,OAAO;AAC3G,WAAO,CAAC,eAAe,QAAQ,MAAM,OAAO;AAAA,EAChD;ACzEO,WAAS,kBACd,YAC6C;AAC7C,QAAI,CAAC,YAAY;AACf,YAAM,kBAAkB,uEAAuE;AACzE;AACd,cAAA,IAAI,MAAM,eAAe;AAAA,MAIjC;AAAA,IACF;AAEA,QAAI,WAAW,OAAO;AACpB,aAAO,WAAW;AAAA,IACpB;AAEA,QAAI,WAAW,OAAO;AACpB,aAAO,WAAW,MAAM,IAAI,CAAC,SAAS;AAChC,YAAA,EAAC,6BAAM,OAAM;AACT,gBAAA,IAAI,MAAM,qCAAqC;AAAA,QACvD;AACA,eAAO,KAAK;AAAA,MAAA,CACb;AAAA,IACH;AAEsB;AACZ,cAAA;AAAA,QACN;AAAA,MAAA;AAAA,IAEJ;AAEA,WAAO;EACT;ACzCa,QAAA,cAAc,CAAC,iBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnD;AAAA;AAGW,QAAA,aAAa,CAAC,iBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASlD;AAAA;AAGW,QAAA,iBAAiB,CAAC,iBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAStD;AAAA;AAGW,QAAA,iBAAiB,CAAC,iBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAStD;AAAA;AAGW,QAAA,iBAAiB,CAAC,iBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAStD;AAAA;AAGW,QAAA,0BAA0B,CAAC,iBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc/D;AAAA;AAGW,QAAA,uBAAuB,CAAC,iBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS5D;AAAA;AAGW,QAAA,0BAA0B,CAAC,iBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS/D;AAAA;AAGW,QAAA,YAAY,CAAC,iBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjD;AAAA;AC5GK,QAAM,gBAAgB;;ACI7B,QAAMC,iBAAiBC,MAAAA,cAAmC;AAAA,IACxDC,aAAa;AAAA,IACbC,iBAAiB;AAAA,IACjBC,sBAAsBC;AAAAA,IACtBC,SAAS;AAAA,MACPC,SAAS;AAAA,IADF;AAAA,IAGTC,UAAU;AAAA,MACRD,SAAS;AAAA,IADD;AAAA,IAGVE,QAAQ;AAAA,EAVgD,CAAtB;AAgB7B,WAASC,gBAAgB;AAAA,IAC9BC;AAAAA,IACAC;AAAAA,EAF8B,GAM7B;AACD,QAAI,CAACA,eAAe;AACZ,YAAA,IAAIC,MACP,iEADG;AAAA,IAGP;AAEGD,QAAAA,cAAcR,yBAAyBC,eAAe;AACxDS,cAAQC,KACL,6EAA4EV,yDAAyDO,cAAcR,0HADtJ;AAAA,IAGD;AAEKY,UAAAA,cAAcC,MAAAA,QAClB,OAAO;AAAA,MACL,GAAGL;AAAAA,MACHV,aAAaU,cAAcV,YAAYgB,QAAQ,gBAAgB,EAAlD;AAAA,IAAA,IAEf,CAACN,aAAD,CALyB;AASzB,WAAAhC,uCAAA,cAAC,eAAe,UAAf;AAAA,MAAwB,OAAOoC;AAAAA,MAAhC,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAAG;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,GACGR,QACH;AAAA,EAEH;AAKM,WAASS,UAAU;AAClBC,UAAAA,cAAcC,iBAAWtB,cAAD;AAC9B,QAAI,CAACqB,aAAa;AACV,YAAA,IAAIR,MAAO,wDAAX;AAAA,IACP;AACMQ,WAAAA;AAAAA,EACR;AC/DM,QAAM,sBAAsB;AAI5B,QAAM,qCACX;AACK,QAAM,+BAA+B;AACrC,QAAM,8BAA8B;AACpC,QAAM,8BAA8B;AACpC,QAAM,YAAY;AAClB,QAAM,YAAY;ACTzB,MAAI,IAAI,oBAAI,IAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,WAAS,EAAEnD,IAAG;AACZ,QAAIH,KAAI,CAAE,GAAED,IAAGF,IAAGC,KAAI,GAAG,IAAIK,GAAE,MAAM,OAAO,GAAGE,IAAGJ;AAClD,WAAOH,KAAI,EAAE,QAAQA;AACnB,UAAID,KAAI,EAAEC,KAAIC,KAAIF,GAAE,QAAQ,GAAG,GAAG,CAACE,IAAG;AACpC,YAAIM,KAAIR,GAAE,UAAU,GAAGE,IAAG,EAAE,KAAM,GAAEE,KAAIJ,GAAE,UAAUE,EAAC,EAAE,KAAM,GAAEE,GAAE,OAAO,QAAQA,KAAIA,GAAE,UAAU,GAAGA,GAAE,SAAS,CAAC,IAAI,CAACA,GAAE,QAAQ,GAAG;AAC/H,cAAI;AACF,YAAAA,KAAI,mBAAmBA,EAAC;AAAA,UACzB,SAAQW,IAAP;AAAA,UACD;AACH,UAAE,IAAIf,KAAIQ,GAAE,YAAa,CAAA,IAAIR,OAAM,YAAYG,GAAE,UAAU,IAAI,KAAKC,EAAC,IAAIJ,OAAM,YAAYG,GAAE,SAAS,CAACC,KAAID,GAAEH,MAAKI,KAAID,GAAEK,MAAKJ;AAAA,MAC9H;AACC,SAACI,KAAIR,GAAE,KAAM,EAAC,YAAW,OAAQQ,OAAM,cAAcA,OAAM,cAAcL,GAAEK,MAAK;AACpF,WAAOL;AAAA,EACT;ACNO,WAASwD,eAAe;AACvB,UAAA;AAAA,MAACrB;AAAAA,MAAaE;AAAAA,MAAsBD;AAAAA,MAAiBqB;AAAAA,QACzDJ,QADF;AAGA,WAAOtB,kBACL,CAAqB;AAAA,MACnB2B;AAAAA,MACAC;AAAAA,IAAAA,MAIgE;AAChE,YAAMC,UAAkC;AAAA,QACtC,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,iBAAiBvB;AAAAA,QACjB,CAACwB,qCAAqCzB;AAAAA,MAAAA;AAGxC,UAAIqB,cAAc;AAChBG,gBAAQE,gCAAgCL;AAAAA,MACzC;AAGKM,YAAAA,aAAaC,EAAMC,SAASC,MAAV;AACpBH,UAAAA,WAAWI,cAAcJ,WAAWK,YAAY;AAClDR,gBAAQS,+BAA+BN,WAAWI;AAClDP,gBAAQU,+BAA+BP,WAAWK;AAAAA,MACnD;AAEMG,aAAAA,MACJ,WAAUpC,mBAAmBE,qCAC9B;AAAA,QACEmC,QAAQ;AAAA,QACRZ;AAAAA,QACAa,MAAMC,KAAKC,UAAU;AAAA,UACnBjB,OAAOA,MAAMkB,SADM;AAAA,UAEnBjB;AAAAA,QAAAA,CAFI;AAAA,MAAA,CALE,EAWTkB,KAAMC,CAAAA,QAAQA,IAAIC,MAXd,EAYJC,MAAOlE,CAAU,UAAA;AACT,eAAA;AAAA,UACLmE,MAAMC;AAAAA,UACNC,QAAQrE,MAAM8D,SAAN;AAAA,QAAA;AAAA,MAFH,CAbJ;AAAA,OAmBT,CAACzC,aAAaE,sBAAsBD,iBAAiBqB,YAArD,CA7CgB;AAAA,EA+CnB;ACnCM,WAAS2B,eAAe;AAAA,IAC7BC;AAAAA,IACAC;AAAAA,IACAC,cAAc;AAAA,EAHe,GAW5B;AACD,UAAMC,YAAYhC;AAEZiC,UAAAA,YAAY1D,kBAChB,CAAC2D,WAAmB;AAClB,aAAOF,UAAgC;AAAA,QACrC9B,OAAOiC,UAAUL,YAAD;AAAA,QAChB3B,WAAW;AAAA,UACTiC,IAAIF;AAAAA,UACJL;AAAAA,UACA9C,SAASgD;AAAAA,QAHA;AAAA,MAAA,CAFG;AAAA,OASlB,CAACC,WAAWF,cAAcD,cAAcE,WAAxC,CAX2B;AAcvBM,UAAAA,aAAa9D,kBACjB,CAAC+D,SAAoB;AACnB,aAAON,UAA8C;AAAA,QACnD9B,OAAOqC,WAAWT,YAAD;AAAA,QACjB3B,WAAW;AAAA,UACTqC,OAAOF;AAAAA,UACPT;AAAAA,UACA9C,SAASgD;AAAAA,QAHA;AAAA,MAAA,CAFG;AAAA,OASlB,CAACD,cAAcC,aAAaC,WAAWH,YAAvC,CAX4B;AAc9B,UAAMY,cAAclE,MAAAA,YAClB,CAAC2D,QAAgBQ,UAA2B;AAC1C,aAAOV,UAAgD;AAAA,QACrD9B,OAAOyC,YAAYb,YAAD;AAAA,QAClB3B,WAAW;AAAA,UACT+B;AAAAA,UACAQ;AAAAA,UACAb;AAAAA,UACA9C,SAASgD;AAAAA,QAJA;AAAA,MAAA,CAFG;AAAA,OAUlB,CAACD,cAAcC,aAAaC,WAAWH,YAAvC,CAZ6B;AAe/B,UAAMe,iBAAiBrE,MAAAA,YACrB,CAAC2D,QAAgBQ,UAAiC;AAChD,aAAOV,UAAmD;AAAA,QACxD9B,OAAO2C,eAAef,YAAD;AAAA,QACrB3B,WAAW;AAAA,UACT+B;AAAAA,UACAQ;AAAAA,UACAb;AAAAA,UACA9C,SAASgD;AAAAA,QAJA;AAAA,MAAA,CAFG;AAAA,OAUlB,CAACD,cAAcC,aAAaC,WAAWH,YAAvC,CAZgC;AAelC,UAAMiB,iBAAiBvE,MAAAA,YACrB,CAAC2D,QAAgBQ,UAAoB;AACnC,aAAOV,UAAmD;AAAA,QACxD9B,OAAO6C,eAAejB,YAAD;AAAA,QACrB3B,WAAW;AAAA,UACT+B;AAAAA,UACAQ;AAAAA,UACAb;AAAAA,UACA9C,SAASgD;AAAAA,QAJA;AAAA,MAAA,CAFG;AAAA,OAUlB,CAACD,cAAcC,aAAaC,WAAWH,YAAvC,CAZgC;AAelC,UAAMmB,aAAazE,MAAAA,YACjB,CAAC2D,QAAgBe,SAA6C;AAC5D,aAAOjB,UAAkD;AAAA,QACvD9B,OAAOgD,eAAepB,YAAD;AAAA,QACrB3B,WAAW;AAAA,UACT+B;AAAAA,UACAe;AAAAA,UACApB;AAAAA,UACA9C,SAASgD;AAAAA,QAJA;AAAA,MAAA,CAFG;AAAA,OAUlB,CAACC,WAAWF,cAAcD,cAAcE,WAAxC,CAZ4B;AAe9B,UAAMoB,sBAAsB5E,MAAAA,YAC1B,CAAC2D,QAAgBkB,kBAA0C;AACzD,aAAOpB,UAA2D;AAAA,QAChE9B,OAAOmD,wBAAwBvB,YAAD;AAAA,QAC9B3B,WAAW;AAAA,UACT+B;AAAAA,UACAkB;AAAAA,UACAvB;AAAAA,UACA9C,SAASgD;AAAAA,QAJA;AAAA,MAAA,CAFG;AAAA,OAUlB,CAACD,cAAcC,aAAaC,WAAWH,YAAvC,CAZqC;AAevC,UAAMyB,uBAAuB/E,MAAAA,YAC3B,CAAC2D,QAAgBqB,eAAiC;AAChD,aAAOvB,UAAwD;AAAA,QAC7D9B,OAAOsD,qBAAqB1B,YAAD;AAAA,QAC3B3B,WAAW;AAAA,UACT+B;AAAAA,UACAqB;AAAAA,UACA1B;AAAAA,UACA9C,SAASgD;AAAAA,QAJA;AAAA,MAAA,CAFG;AAAA,OAUlB,CAACD,cAAcC,aAAaC,WAAWH,YAAvC,CAZsC;AAexC,UAAM4B,sBAAsBlF,MAAAA,YAC1B,CACE2D,QACAwB,kBACG;AACH,aAAO1B,UAA2D;AAAA,QAChE9B,OAAOyD,wBAAwB7B,YAAD;AAAA,QAC9B3B,WAAW;AAAA,UACT+B;AAAAA,UACAwB;AAAAA,UACA7B;AAAAA,UACA9C,SAASgD;AAAAA,QAJA;AAAA,MAAA,CAFG;AAAA,OAUlB,CAACD,cAAcC,aAAaC,WAAWH,YAAvC,CAfqC;AAkBvC,WAAOnC,cACL,OAAO;AAAA,MACLuC;AAAAA,MACAI;AAAAA,MACAI;AAAAA,MACAG;AAAAA,MACAE;AAAAA,MACAE;AAAAA,MACAG;AAAAA,MACAG;AAAAA,MACAG;AAAAA,MACA3B;AAAAA,IAEF,IAAA,CACEG,WACAI,YACAI,aACAG,gBACAE,gBACAE,YACAG,qBACAG,sBACAG,qBACA3B,YAVF,CAbY;AAAA,EA0Bf;AC/LD,WAAS8B,WACPC,QACAC,SAM2E;AACpE,WAAA;AAAA,MACLC,OAAO,CACL,IAAID,mCAASE,iBAAgB,CAAA,GAC7B,qBACA,4BACAH,MAJK;AAAA,MAMPI,IAAI;AAAA,QACFC,SAAS;AAAA,UACPC,SAAQL,mCAASM,kBAAiB;AAAA,UAClCC,SAAS,CACPC,EAAO;AAAA,YACLC,UAAWC,aAAYA,mCAASlC;AAAAA,YAChCA,MAAM,CAACmC,GAAGC,UAAAA;;AAAUA,0DAAOC,YAAPD,mBAAgBpC;AAAAA;AAAAA,YACpCsC,eAAe,CAACH,GAAGC,UAAAA;;AAAUA,0DAAOC,YAAPD,mBAAgBE;AAAAA;AAAAA,YAE7CjD,QAAS8C,CAAM/C,MAAAA;AAAAA,UAAAA,CALX,CADC;AAAA,QAFF;AAAA,QAYTmD,OAAO;AAAA,UACLV,SAAQL,mCAASgB,gBAAe;AAAA,UAChCT,SAAS,CACPC,EAAO;AAAA,YACLC,UAAWC,aAAYA,mCAASlC;AAAAA,YAChCA,MAAOkC,aAAYA,mCAASO;AAAAA,YAC5BpD,QAAQ,CAAC8C,GAAGC,UAAAA;;AAAUA,0DAAOC,YAAPD,mBAAgB/C;AAAAA;AAAAA,UAAAA,CAHlC,CADC;AAAA,QAFJ;AAAA,QAUPqD,gBAAgB;AAAA,UACdb,QAAQ;AAAA,UACRE,SAASC,EAAO;AAAA,YAEdC,UAAWE,CAAM/C,MAAAA;AAAAA,YAEjBY,MAAOmC,CAAM/C,MAAAA;AAAAA,YAEbqD,eAAgBN,CAAM/C,MAAAA;AAAAA,YAEtBC,QAAS8C,CAAM/C,MAAAA;AAAAA,UAAAA,CARF;AAAA,QAFD;AAAA,MAvBd;AAAA,MAqCJuD,MAAM,CAAC,wBAAwB,IAAInB,mCAASoB,gBAAe,CAAA,CAArD;AAAA,IAAA;AAAA,EAET;AAED,QAAMC,2BAIyC;AAAA,IAC7CC,YAAY;AAAA,MACVjB,QAAQ;AAAA,IADE;AAAA,IAGZkB,aAAa;AAAA,MACXlB,QAAQ;AAAA,IADG;AAAA,IAGbmB,UAAU;AAAA,MACRnB,QAAQ;AAAA,MACRE,SAAS,CACPC,EAAO;AAAA,QACLM,eAAe,CAACH,GAAGC,UAAUA,MAAMC,QAAQrC;AAAAA,QAC3CA,MAAM,CAACmC,GAAGC,UAAUa,gBAAgBb,MAAMC,QAAQrC,IAAf;AAAA,MAAA,CAF/B,CADC;AAAA,IAFD;AAAA,EAPmC;AAkB/C,QAAMkD,uBAIgC;AAAA,IACpCC,cAAc;AAAA,MACZtB,QAAQ;AAAA,IADI;AAAA,IAGduB,iBAAiB;AAAA,MACfvB,QAAQ;AAAA,IADO;AAAA,IAGjBwB,iBAAiB;AAAA,MACfxB,QAAQ;AAAA,IADO;AAAA,IAGjByB,aAAa;AAAA,MACXzB,QAAQ;AAAA,IADG;AAAA,IAGb0B,uBAAuB;AAAA,MACrB1B,QAAQ;AAAA,IADa;AAAA,IAGvB2B,wBAAwB;AAAA,MACtB3B,QAAQ;AAAA,IADc;AAAA,IAGxB4B,uBAAuB;AAAA,MACrB5B,QAAQ;AAAA,IADa;AAAA,EAnBa;AAwBtC,WAAS6B,kBACPC,aACA;AACA,WAAO9H,EAIL;AAAA,MACAiE,IAAI;AAAA,MACJ8D,SAASD,cAAc,SAAS;AAAA,MAChCzB,SAAS;AAAA,QACPlC,MAAM2D,eAAeV,gBAAgBU,WAAD;AAAA,MAD7B;AAAA,MAGTE,QAAQ;AAAA,QACNC,eAAe;AAAA,UACbnC,IAAIkB;AAAAA,QADS;AAAA,QAGfkB,eAAe;AAAA,UACbpC,IAAIkB;AAAAA,QADS;AAAA,QAGfmB,qBAAqB;AAAA,UACnBrC,IAAIkB;AAAAA,QADe;AAAA,QAGrBoB,MAAM;AAAA,UACJtC,IAAI;AAAA,YAAC,GAAGkB;AAAAA,YAA0B,GAAGK;AAAAA,UAAjC;AAAA,QADA;AAAA,QAGNlI,OAAO;AAAA,UACL2G,IAAI;AAAA,YAAC,GAAGkB;AAAAA,YAA0B,GAAGK;AAAAA,UAAjC;AAAA,QADC;AAAA,QAGPgB,cAAc5C,WAAW,mBAAmB;AAAA,UAC1CkB,aAAa;AAAA,QAAA,CADS;AAAA,QAGxB2B,cAAc7C,WAAW,oBAAoB;AAAA,UAC3CkB,aAAa;AAAA,QAAA,CADS;AAAA,QAGxB4B,kBAAkB9C,WAAW,sBAAD;AAAA,QAC5B+C,kBAAkB/C,WAAW,sBAAD;AAAA,QAC5BgD,gBAAgBhD,WAAW,mBAAD;AAAA,QAC1BiD,cAAcjD,WAAW,kBAAD;AAAA,QACxBkD,uBAAuBlD,WAAW,2BAAD;AAAA,QACjCmD,wBAAwBnD,WAAW,4BAAD;AAAA,QAClCoD,uBAAuBpD,WAAW,2BAAD;AAAA,MA5B3B;AAAA,IAAA,CAVU;AAAA,EAyCrB;AAEM,WAASqD,uBAAuB;AAAA,IACrCpF;AAAAA,IACAqF;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACA3F,MAAMa;AAAAA,IACNR;AAAAA,IACAC;AAAAA,EAPqC,GAgCpC;AACK,UAAA;AAAA,MACJE;AAAAA,MACAI;AAAAA,MACAI;AAAAA,MACAG;AAAAA,MACAE;AAAAA,MACAE;AAAAA,MACAG;AAAAA,MACAG;AAAAA,MACAG;AAAAA,QACE7B,eAAe;AAAA,MACjBC;AAAAA,MACAC;AAAAA,MACAC;AAAAA,IAAAA,CAHgB;AAMZsF,UAAAA,cAAc3H,MAAAA,QAAQ,MAAMsG,kBAAkB1D,IAAD,GAAQ,CAACA,IAAD,CAAhC;AAE3B,UAAM,CAACgF,OAAOC,MAAMtJ,OAAd,IAAyBuJ,WAAWH,aAAa;AAAA,MACrDhD,SAAS;AAAA,QACPoD,iBAAiB,OAAOhD,GAAGC,UAAyB;;AAClD,cAAIA,MAAMgD,SAAS;AAAc;AAE3B,gBAAA;AAAA,YAACjG;AAAAA,YAAME;AAAAA,UAAU,IAAA,MAAMM,WAAUyC,oCAAOC,YAAPD,mBAAgBxC,MAAjB;AACtC,gBAAMyF,cAAcC,qBAAqBlD,OAAOjD,6BAAMa,MAAMX,MAApB;AACxC4F,eAAKI,WAAD;AAAA,QACL;AAAA,QACDE,kBAAkB,OAAOpD,GAAGC,UAAyB;;AACnD,cAAIA,MAAMgD,SAAS;AAAe;AAE5B,gBAAA;AAAA,YAACjG;AAAAA,YAAME;AAAAA,UAAU,IAAA,MAAMU,WAAWqC,+BAAOC,OAAR;AACvC,gBAAMgD,cAAcC,qBAClBlD,QACAjD,kCAAMY,eAANZ,mBAAkBa,MAClBX,MAHsC;AAKxC4F,eAAKI,WAAD;AAAA,QACL;AAAA,QACDG,mBAAmB,OAAOtD,SAASE,UAAyB;;AAC1D,cAAIA,MAAMgD,SAAS,kBAAkB,GAAClD,wCAASlC,SAATkC,mBAAepC;AAAI;AAEnD,gBAAA;AAAA,YAACX;AAAAA,YAAME;AAAAA,UAAAA,IAAU,MAAMc,YAC3B+B,QAAQlC,KAAKF,IACbsC,MAAMC,QAAQjC,KAFwB;AAKxC,gBAAMiF,cAAcC,qBAClBlD,QACAjD,kCAAMsG,iBAANtG,mBAAoBa,MACpBX,MAHsC;AAMxC4F,eAAKI,WAAD;AAAA,QACL;AAAA,QACDK,sBAAsB,OAAOxD,SAASE,UAAyB;;AAC7D,cAAIA,MAAMgD,SAAS,qBAAqB,GAAClD,wCAASlC,SAATkC,mBAAepC;AAAI;AACtD,gBAAA;AAAA,YAACX;AAAAA,YAAME;AAAAA,UAAAA,IAAU,MAAMiB,eAC3B4B,QAAQlC,KAAKF,IACbsC,MAAMC,QAAQjC,KAF2B;AAK3C,gBAAMiF,cAAcC,qBAClBlD,QACAjD,kCAAMwG,oBAANxG,mBAAuBa,MACvBX,MAHsC;AAMxC4F,eAAKI,WAAD;AAAA,QACL;AAAA,QACDO,sBAAsB,OAAO1D,SAASE,UAAyB;;AAC7D,cAAIA,MAAMgD,SAAS,qBAAqB,GAAClD,wCAASlC,SAATkC,mBAAepC;AAAI;AACtD,gBAAA;AAAA,YAACX;AAAAA,YAAME;AAAAA,UAAAA,IAAU,MAAMmB,eAC3B0B,QAAQlC,KAAKF,IACbsC,MAAMC,QAAQjC,KAF2B;AAK3C,gBAAMiF,cAAcC,qBAClBlD,QACAjD,kCAAM0G,oBAAN1G,mBAAuBa,MACvBX,MAHsC;AAMxC4F,eAAKI,WAAD;AAAA,QACL;AAAA,QACDS,kBAAkB,OAAO5D,SAASE,UAAyB;;AACzD,cAAIA,MAAMgD,SAAS,iBAAiB,GAAClD,wCAASlC,SAATkC,mBAAepC;AAAI;AAClD,gBAAA;AAAA,YAACX;AAAAA,YAAME;AAAAA,UAAAA,IAAU,MAAMqB,WAC3BwB,QAAQlC,KAAKF,IACbsC,MAAMC,QAAQ1B,IAFuB;AAKvC,gBAAM0E,cAAcC,qBAClBlD,QACAjD,kCAAM4G,mBAAN5G,mBAAsBa,MACtBX,MAHsC;AAMxC4F,eAAKI,WAAD;AAAA,QACL;AAAA,QACDW,2BAA2B,OAAO9D,SAASE,UAAyB;;AAClE,cAAIA,MAAMgD,SAAS,2BAA2B,GAAClD,wCAASlC,SAATkC,mBAAepC;AAC5D;AACI,gBAAA;AAAA,YAACX;AAAAA,YAAME;AAAAA,UAAAA,IAAU,MAAMwB,oBAC3BqB,QAAQlC,KAAKF,IACbsC,MAAMC,QAAQvB,aAFgC;AAKhD,gBAAMuE,cAAcC,qBAClBlD,QACAjD,kCAAM8G,4BAAN9G,mBAA+Ba,MAC/BX,MAHsC;AAMxC4F,eAAKI,WAAD;AAAA,QACL;AAAA,QACDa,4BAA4B,OAAOhE,SAASE,UAAyB;;AACnE,cAAIA,MAAMgD,SAAS,4BAA4B,GAAClD,wCAASlC,SAATkC,mBAAepC;AAC7D;AACI,gBAAA;AAAA,YAACX;AAAAA,YAAME;AAAAA,UAAAA,IAAU,MAAM2B,qBAC3BkB,QAAQlC,KAAKF,IACbsC,MAAMC,QAAQpB,UAFiC;AAKjD,gBAAMoE,cAAcC,qBAClBlD,QACAjD,kCAAM6B,yBAAN7B,mBAA4Ba,MAC5BX,MAHsC;AAMxC4F,eAAKI,WAAD;AAAA,QACL;AAAA,QACDc,2BAA2B,OAAOjE,SAASE,UAAyB;;AAClE,cAAIA,MAAMgD,SAAS,2BAA2B,GAAClD,wCAASlC,SAATkC,mBAAepC;AAC5D;AACI,gBAAA;AAAA,YAACX;AAAAA,YAAME;AAAAA,UAAAA,IAAU,MAAM8B,oBAC3Be,QAAQlC,KAAKF,IACbsC,MAAMC,QAAQjB,aAFgC;AAIhD,gBAAMiE,cAAcC,qBAClBlD,QACAjD,kCAAMiH,4BAANjH,mBAA+Ba,MAC/BX,MAHsC;AAMxC4F,eAAKI,WAAD;AAAA,QACL;AAAA,QACD,GAAIT,qBAAqB;AAAA,UACvBA,mBAAmB,CAAC1C,SAASE,UAAU;AACjCiE,gBAAAA,kBAAkBjE,KAAD,GAAS;AAC5BwC,gCAAkB1C,SAASE,KAAV;AAAA,YAClB;AAAA,UACF;AAAA,QALsB;AAAA,QAOzB,GAAIyC,4BAA4B;AAAA,UAC9BA,0BAA0B7C,EAAO,CAACE,SAASE,UAAU;AAC5CyC,mBAAAA,yBAAyB3C,SAASE,KAAV;AAAA,UAAA,CADD;AAAA,QADF;AAAA,QAKhC,GAAI0C,wBAAwB;AAAA,UAC1BA,sBAAsB,CAAC5C,SAASE,UAAU;AACpCkE,gBAAAA,uBAAuBlE,KAAD,GAAS;AACjC0C,mCAAqB5C,SAASE,KAAV;AAAA,YACrB;AAAA,UACF;AAAA,QALyB;AAAA,MA3IrB;AAAA,IAAA,CAD8B;AAsJlChF,WAAAA,cAAQ,MAAM,CAAC4H,OAAOC,MAAMtJ,OAAd,GAAiC,CAACqJ,OAAOC,MAAMtJ,OAAd,CAAxC;AAAA,EACf;AAEM,WAASsH,gBACdjD,MACM;;AACC,WAAA;AAAA,MACL,GAAGA;AAAAA,MACHI,OAAOmG,kBAAkBvG,6BAAMI,KAAP;AAAA,MACxBO,OAAMX,UAAKW,SAALX,YAAaZ;AAAAA,IAAAA;AAAAA,EAEtB;AAED,WAASkG,qBACPkB,iBACAxG,MACAX,QAC6B;AAC7B,QAAIA,QAAQ;AACH,aAAA;AAAA,QAAC+F,MAAM;AAAA,QAAS/C,SAAS;AAAA,UAAChD;AAAAA,UAAQmH;AAAAA,QAAT;AAAA,MAAA;AAAA,IACjC;AAED,QAAI,CAACxG,MAAM;AACF,aAAA;AAAA,QACLoF,MAAM;AAAA,QACN/C,SAAS;AAAA,UACPmE;AAAAA,QADO;AAAA,MAAA;AAAA,IAIZ;AAEM,WAAA;AAAA,MACLpB,MAAM;AAAA,MACN/C,SAAS;AAAA,QACPrC,MAAMiD,gBAAgBjD,IAAD;AAAA,QACrBsC,eAAetC;AAAAA,QACfwG;AAAAA,MAHO;AAAA,IAAA;AAAA,EAMZ;AAED,WAASH,kBACPjE,OACiC;AAE/BA,WAAAA,MAAMgD,SAAS,iBACfhD,MAAMgD,SAAS,kBACfhD,MAAMgD,SAAS,qBACfhD,MAAMgD,SAAS,qBACfhD,MAAMgD,SAAS,iBACfhD,MAAMgD,SAAS,2BACfhD,MAAMgD,SAAS,4BACfhD,MAAMgD,SAAS;AAAA,EAElB;AAED,WAASkB,uBACPlE,OACsC;AACtC,WACEA,MAAMgD,SAAS,aACfhD,MAAMgD,SAAS,WACfhD,MAAMgD,SAAS;AAAA,EAElB;;ACrZYqB,QAAAA,cAAcrK,MAAAA,cAAsC,IAAzB;AAKjC,WAASsK,UAAU;AAClBxE,UAAAA,UAAUzE,iBAAWgJ,WAAD;AAE1B,QAAI,CAACvE,SAAS;AACN,YAAA,IAAIlF,MAAM,wDAAV;AAAA,IACP;AAEMkF,WAAAA;AAAAA,EACR;AAEM,WAASyE,aAAa;AAAA,IAC3B7J;AAAAA,IACAyC;AAAAA,IACAqH;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAxI,MAAMa;AAAAA,IACNR,eAAeoI;AAAAA,IACfC;AAAAA,IACApI,cAAc;AAAA,EAtBa,GAoE1B;;AACGA,QAAAA;AAAaA,oBAAcA,YAAYqI;AAC3C,UAAM,CAACC,iBAAiBC,kBAAlB,IAAwCvM,eAASgE,WAAD;AACtD,UAAM,CAACwI,yBAAyBC,0BAA1B,IACJzM,eAASoM,mBAAD;AACJM,UAAAA,+BAA+B3M,aAAO,KAAD;AAGzCuM,QAAAA,oBAAoBtI,eACpBwI,4BAA4BJ,qBAC5B;AACAG,yBAAmBvI,WAAD;AAClByI,iCAA2BL,mBAAD;AAC1BM,mCAA6BC,UAAU;AAAA,IACxC;AAED,UAAM,CAACC,WAAWC,QAAZ,IAAwB3D,uBAAuB;AAAA,MACnDpF;AAAAA,MACAJ,MAAMa;AAAAA,MACNR;AAAAA,MACAC;AAAAA,MACAmF,kBAAkB1C,SAASE,OAAO;AAC5B,YAAA;AACF,kBAAQA,MAAMgD,MAAd;AAAA,YACE,KAAK;AACH,qBAAOwB;AAAAA,YACT,KAAK;AACH,qBAAOC;AAAAA,YACT,KAAK;AACH,qBAAOC;AAAAA,YACT,KAAK;AACH,qBAAOC;AAAAA,YACT,KAAK;AACH,qBAAOC;AAAAA,YACT,KAAK;AACH,qBAAOC;AAAAA,YACT,KAAK;AACH,qBAAOC;AAAAA,YACT,KAAK;AACH,qBAAOC;AAAAA,UAhBX;AAAA,iBAkBOnM;AACCA,kBAAAA,MAAM,4BAA4BA,KAA1C;AAAA,QACD;AAAA,MACF;AAAA,MACD6J,yBAAyB3C,SAASE,OAAO;;AACvC,YAAI,EAACF,mCAASlC;AAAa,iBAAA;AAAA,YAACA,MAAMZ;AAAAA,UAAAA;AAClC,gBAAQgD,MAAMgD,MAAd;AAAA,UACE,KAAK;AACI,mBAAA;AAAA,cACL,GAAGlD;AAAAA,cACHO,eAAeP,QAAQlC;AAAAA,cACvBA,MAAM;AAAA,gBACJ,GAAGkC,QAAQlC;AAAAA,gBACXI,QAAO8B,OAAAA,MAAAA,mCAASlC,SAATkC,gBAAAA,IAAe9B,UAAf8B,gBAAAA,IAAsBqG,OAC1BC,CAASA,UAAAA,6BAAM1I,OAAM,CAACsC,MAAMC,QAAQjC,MAAMqI,SAASD,6BAAM1I,EAAnC;AAAA,cAHrB;AAAA,YAAA;AAAA,UAOV,KAAK;AACI,mBAAA;AAAA,cACL,GAAGoC;AAAAA,cACHO,eAAeP,QAAQlC;AAAAA,cACvBA,MAAM;AAAA,gBACJ,GAAGkC,QAAQlC;AAAAA,gBACXI,QAAO8B,OAAAA,MAAAA,mCAASlC,SAATkC,gBAAAA,IAAe9B,UAAf8B,gBAAAA,IAAsBwG,IAAKF,CAAS,SAAA;AACzC,wBAAMG,cAAcvG,MAAMC,QAAQjC,MAAMwI,KACtC,CAAC;AAAA,oBAAC9I;AAAAA,kBAAAA,MAAQA,QAAO0I,6BAAM1I,GADL;AAIhB6I,sBAAAA,eAAeA,YAAYE,UAAU;AAChC,2BAAA;AAAA,sBACL,GAAGL;AAAAA,sBACHK,UAAUF,YAAYE;AAAAA,oBAAAA;AAAAA,kBAEzB;AAEML,yBAAAA;AAAAA,gBAAAA;AAAAA,cAdL;AAAA,YAAA;AAAA,QAhBZ;AAmCO,eAAA;AAAA,UAACxI,MAAMkC,QAAQlC,OAAO;AAAA,YAAC,GAAGkC,QAAQlC;AAAAA,UAAQZ,IAAAA;AAAAA,QAAAA;AAAAA,MAClD;AAAA,MACD0F,qBAAqB5C,SAASE,OAAO;AAC7BoE,cAAAA,kBAAkBpE,MAAMC,QAAQmE;AAClC,YAAA;AACF,kBAAQpE,MAAMgD,MAAd;AAAA,YACE,KAAK;AACH,sBAAQoB,gBAAgBpB,MAAxB;AAAA,gBACE,KAAK;AACH,yBAAOgC;AAAAA,gBACT,KAAK;AACH,yBAAOC;AAAAA,gBACT,KAAK;AACH,yBAAOC;AAAAA,gBACT,KAAK;AACH,yBAAOC;AAAAA,gBACT,KAAK;AACH,yBAAOC;AAAAA,gBACT,KAAK;AACCsB,sBAAAA,sBAAsB5G,SAASsE,eAAV,GAA4B;AACnD2B,iDAA6BC,UAAU;AAAA,kBACxC;AACD,yBAAOX;AAAAA,gBACT,KAAK;AACH,yBAAOC;AAAAA,gBACT,KAAK;AACH,yBAAOC;AAAAA,cAnBX;AAAA,UAFJ;AAAA,iBAwBO3M;AACCA,kBAAAA,MAAM,+BAA+BA,KAA7C;AAAA,QACD;AAAA,MACF;AAAA,IAAA,CAlGiD;AAqG9C+N,UAAAA,YAAYvN,aAAO,KAAD;AAClBuI,UAAAA,gBAAgBsE,UAAUW,QAAQ,eAAlB;AAEtB,UAAMC,kBACHZ,UAAUa,UAAU,UACnBb,UAAUa,UAAU,WACpBb,UAAUa,UAAU,oBACtBzJ,kBAAgB4I,wDAAWnG,YAAXmG,mBAAoBrI,SAApBqI,mBAA0BvH,kBAA1BuH,mBAAyC5I,gBACzD,CAAC4I,UAAUnG,QAAQ7C;AAEf8J,UAAAA,sBAAsB3N,aAAO,KAAD;AAOlCQ,UAAAA,UAAU,MAAM;AACd,UAAI,CAAC+M,UAAUX,WAAW,CAACe,oBAAoBf,SAAS;AACtD,YAAI,CAACpI,QAAQoJ,iBAAiB,cAAD,GAAkB;AAC7CD,8BAAoBf,UAAU;AAC1B,cAAA;AACF,kBAAMxI,SAASyJ,OAAOC,aAAaC,QAAQC,mBAA5B;AACf,gBAAI5J,QAAQ;AACD,uBAAA;AAAA,gBAACwF,MAAM;AAAA,gBAAc/C,SAAS;AAAA,kBAACzC;AAAAA,gBAAD;AAAA,cAAA,CAA/B;AAAA,YACT;AAAA,mBACM5E;AACPiC,oBAAQC,KAAK,uBAAb;AACAD,oBAAQC,KAAKlC,KAAb;AAAA,UACD;AAAA,QACF;AACD+N,kBAAUX,UAAU;AAAA,MACrB;AAAA,IACA,GAAA,CAACpI,MAAM+I,WAAWT,QAAlB,CAhBM;AAmBTtM,UAAAA,UAAU,MAAM;AACV,UAAA,CAACiN,kBAAkBd,6BAA6BC;AAAS;AACpD,eAAA;AAAA,QACPhD,MAAM;AAAA,QACN/C,SAAS;AAAA,UAACvB,eAAe;AAAA,YAACrB;AAAAA,YAAaoI;AAAAA,UAAd;AAAA,QAAhB;AAAA,MAAA,CAFH;AAAA,IAAA,GAIP,CACDpI,aACAoI,qBACAoB,gBACAd,8BACAG,QALC,CANM;AAeHmB,UAAAA,kBAAkBxN,kBACtB,CAACyN,cAAgC;AAC3B,UAAA,CAACX,UAAUX,SAAS;AACfnL,eAAAA,QAAQC,KAAK,sBAAb;AAAA,MACR;AACDoL,eAASoB,SAAD;AAAA,IAAA,GAEV,CAACpB,QAAD,CAPiC;AAWnCtM,UAAAA,UAAU,MAAM;;AACd,YAAIqM,OAAAA,MAAAA,uCAAWnG,YAAXmG,gBAAAA,IAAoBrI,SAApBqI,gBAAAA,IAA0BvI,OAAMsJ,iBAAiB,cAAD,GAAkB;AAChE,YAAA;AACFC,iBAAOC,aAAaK,QAClBH,sBACAnB,MAAAA,UAAUnG,QAAQlC,SAAlBqI,gBAAAA,IAAwBvI,EAF1B;AAAA,iBAIO9E;AACCkC,kBAAAA,KAAK,yCAAyClC,KAAtD;AAAA,QACD;AAAA,MACF;AAAA,OACA,EAACqN,kDAAWnG,YAAXmG,mBAAoBrI,SAApBqI,mBAA0BvI,EAA3B,CAXM;AAcT9D,UAAAA,UAAU,MAAM;AACV+H,UAAAA,iBAAiBqF,iBAAiB,cAAD,GAAkB;AACjD,YAAA;AACKE,iBAAAA,aAAaM,WAAWJ,mBAA/B;AAAA,iBACOxO;AACCkC,kBAAAA,KAAK,6CAA6ClC,KAA1D;AAAA,QACD;AAAA,MACF;AAAA,IAAA,GACA,CAAC+I,aAAD,CARM;AAUHhE,UAAAA,aAAa9D,kBACjB,CAAC4N,cAAyB;;AACxB,UAAIpK,eAAe,GAACoK,MAAAA,UAAU/I,kBAAV+I,gBAAAA,IAAyBpK,cAAa;AACpDoK,YAAAA,UAAU/I,iBAAiB,MAAM;AACnC+I,oBAAU/I,gBAAgB;QAC3B;AACD+I,kBAAU/I,cAAcrB,cAAcA;AAAAA,MACvC;AAED,UACEoI,uBACA,GAACgC,MAAAA,UAAU/I,kBAAV+I,gBAAAA,IAAyBhC,sBAC1B;AACIgC,YAAAA,UAAU/I,iBAAiB,MAAM;AACnC+I,oBAAU/I,gBAAgB;QAC3B;AACD+I,kBAAU/I,cAAc+G,sBAAsBA;AAAAA,MAC/C;AACe,sBAAA;AAAA,QACdzC,MAAM;AAAA,QACN/C,SAASwH;AAAAA,MAAAA,CAFI;AAAA,IAKjB,GAAA,CAACpK,aAAaoI,qBAAqB4B,eAAnC,CAvB4B;AA4BxBK,UAAAA,mBAAmBC,8BAA8B1B,SAAD;AAEhD2B,UAAAA,mBAAmB5M,MAAAA,QAAyB,MAAM;;AAC/C,aAAA;AAAA,QACL,IAAI0M,OAAAA,MAAAA,qDAAkB5H,YAAlB4H,gBAAAA,IAA2B9J,SAA3B8J,OAAAA,MAAmC;AAAA,UAAC1J,OAAO,CAAR;AAAA,UAAYa,YAAY,CAAA;AAAA,QAAxB;AAAA,QACvCgJ,QAAQC,gBAAgBJ,iBAAiBZ,KAAlB;AAAA,QACvBlO,QAAO8O,MAAAA,qDAAkB5H,YAAlB4H,gBAAAA,IAA2BzK;AAAAA,QAClC8K,gBAAeL,OAAAA,OAAAA,MAAAA,qDAAkB5H,YAAlB4H,gBAAAA,IAA2B9J,SAA3B8J,gBAAAA,IAAiCK,kBAAjCL,OAAAA,MAAkD;AAAA,QACjE/J;AAAAA,QACAqK,SAAShK,OAAwB;;AAC3B0J,eAAAA,OAAAA,MAAAA,qDAAkB5H,YAAlB4H,gBAAAA,IAA2B9J,SAA3B8J,gBAAAA,IAAiChK,IAAI;AACvB,4BAAA;AAAA,cACdsF,MAAM;AAAA,cACN/C,SAAS;AAAA,gBAACjC;AAAAA,cAAD;AAAA,YAAA,CAFI;AAAA,UAAA,OAIV;AACM,uBAAA;AAAA,cAACA;AAAAA,YAAAA,CAAF;AAAA,UACX;AAAA,QACF;AAAA,QACDiK,YAAYjK,OAAiB;AACX,0BAAA;AAAA,YACdgF,MAAM;AAAA,YACN/C,SAAS;AAAA,cACPjC;AAAAA,YADO;AAAA,UAAA,CAFI;AAAA,QAMhB;AAAA,QACDkK,YAAYlK,OAA8B;AACxB,0BAAA;AAAA,YACdgF,MAAM;AAAA,YACN/C,SAAS;AAAA,cACPjC;AAAAA,YADO;AAAA,UAAA,CAFI;AAAA,QAMhB;AAAA,QACDM,WAAWC,MAA0C;AACnC,0BAAA;AAAA,YACdyE,MAAM;AAAA,YACN/C,SAAS;AAAA,cACP1B;AAAAA,YADO;AAAA,UAAA,CAFI;AAAA,QAMhB;AAAA,QACDE,oBAAoBC,eAAuC;AACzC,0BAAA;AAAA,YACdsE,MAAM;AAAA,YACN/C,SAAS;AAAA,cACPvB;AAAAA,YADO;AAAA,UAAA,CAFI;AAAA,QAMhB;AAAA,QACDE,qBAAqBC,YAA8B;AACjC,0BAAA;AAAA,YACdmE,MAAM;AAAA,YACN/C,SAAS;AAAA,cACPpB;AAAAA,YADO;AAAA,UAAA,CAFI;AAAA,QAMhB;AAAA,QACDE,oBAAoBC,eAAyB;AAC3B,0BAAA;AAAA,YACdgE,MAAM;AAAA,YACN/C,SAAS;AAAA,cACPjB;AAAAA,YADO;AAAA,UAAA,CAFI;AAAA,QAMhB;AAAA,QACD5B;AAAAA,MAAAA;AAAAA,IAED,GAAA,CACDO,aACA+J,0DAAkB5H,YAAlB4H,mBAA2B9J,OAC3B8J,0DAAkB5H,YAAlB4H,mBAA2BzK,QAC3ByK,iBAAiBZ,OACjB1J,cACAiK,eANC,CAnE6B;AA6E9B,WAAA1O,uCAAA,cAAC,YAAY,UAAZ;AAAA,MAAqB,OAAOiP;AAAAA,MAA7B,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA1M;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,GACGR,QACH;AAAA,EAEH;AAED,WAASoN,gBACPD,QAC2B;AAC3B,YAAQA,QAAR;AAAA,MACE,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AACI,eAAA;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,IAnBX;AAAA,EAqBD;AAMD,WAASF,8BAAiC/E,OAAU;AAClD,UAAM,CAACuF,WAAWC,eAAZ,IAA+BC,MAArC,cAAA;AACA,UAAM,CAACC,cAAcC,eAAf,IAAkClP,eAASuJ,KAAD;AAE1C4F,UAAAA,mBAAmBpP,aAAO,KAAD;AAC/B,QAAI+O,WAAW;AACbK,uBAAiBxC,UAAU;AAAA,IAC5B;AAEKyC,UAAAA,2BAA2BrP,aAAO,KAAD;AACnC,QAAA,CAAC+O,aAAaK,iBAAiBxC,SAAS;AAC1CyC,+BAAyBzC,UAAU;AAAA,IACpC;AAEDpM,UAAAA,UAAU,MAAM;AACdwO,sBAAgB,MAAM;AAChB,YAAA,CAACK,yBAAyBzC,SAAS;AACrCuC,0BAAgB3F,KAAD;AAAA,QAChB;AAAA,MAAA,CAHY;AAAA,IAAA,GAKd,CAACA,KAAD,CANM;AAQH8F,UAAAA,eAAeD,yBAAyBzC,UAAUpD,QAAQ0F;AAEzDI,WAAAA;AAAAA,EACR;AAKM,WAAS1B,iBAAiBhE,MAAyC;AACpE2F,QAAAA;AACA,QAAA;AACFA,gBAAU1B,OAAOjE;AACjB,YAAM4F,IAAI;AACFrB,cAAAA,QAAQqB,GAAGA,CAAnB;AACAD,cAAQnB,WAAWoB,CAAnB;AACO,aAAA;AAAA,aACA/Q;AACP,aACEA,cAAagR,iBAEZhR,GAAEiR,SAAS,MAEVjR,GAAEiR,SAAS,QAGXjR,GAAEkR,SAAS,wBAEXlR,GAAEkR,SAAS,iCAEbJ,WACAA,QAAQK,WAAW;AAAA,IAEtB;AAAA,EACF;AAED,WAAStC,sBACP5G,SACAE,OACA;;AAEEA,WAAAA,MAAMC,QAAQvB,cAAcrB,iBAC5ByC,mBAAQlC,SAARkC,mBAAcpB,kBAAdoB,mBAA6BzC,iBAC3B2C,MAAMC,QAAQvB,cAAcrB;AAAAA,EAEjC;AAEM,QAAMmI,sBAAuB;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;ACzfpC,QAAMyD,wBAAwBjP,MAAAA,cAAuC,IAA1B;AAyBpC,WAASkP,gBAAgB;AAAA,IAC9BxO;AAAAA,IACAqC,MAAMoM;AAAAA,IACNC,kBAAkBC;AAAAA,EAHY,GAIP;AAEvB,UAAMC,WAAWtO,MAAAA,QACf,MAAMmJ;;AAAAA,gCAAkBgF,aAAQG,aAARH,YAAoB,CAAA,CAArB;AAAA,OACvB,CAACA,QAAQG,QAAT,CAFsB;AAKpB,QAAA,CAACC,sBAAsBD,QAAD,GAAY;AAC9B,YAAA,IAAI1O,MACP,kFADG;AAAA,IAGP;AAGKwE,UAAAA,UAAUpE,MAAAA,QAAQ,MAAMwO,WAAWF,QAAD,GAAY,CAACA,QAAD,CAA7B;AAKjB,UAAA,CAACG,iBAAiBC,kBAAlB,IAAwCrQ,MAAAA,SAI5C,MAAMsQ,wBAAwBN,mBAAmBC,QAApB,CAJuB;AAUhD,UAAA,CAACM,iBAAiBC,kBAAlB,IAAwCxQ,eAA0B,MACtEyQ,mBAAmBL,eAAD,CADkC;AAUtD7P,UAAAA,UAAU,MAAM;AACRmQ,YAAAA,qBAAqBJ,wBACzBN,mBACAC,QAFgD;AAIlDI,yBAAmBK,kBAAD;AACCD,yBAAAA,mBAAmBC,kBAAD,CAAnB;AAAA,IAAA,GACjB,CAACV,mBAAmBC,QAApB,CAPM;AAYT,UAAMU,oBAAoBnQ,MAAAA,YACxB,CAACkP,MAAcjC,WAAkB;AAC/B+C,yBAAoBD,CAAAA,qBAAoB;AACtC,cAAMK,OAAO;AAAA,UAAC,GAAGL;AAAAA,UAAiB,CAACb,OAAOjC;AAAAA,QAAAA;AACvBoD,2BAAAA,mBAAmBZ,UAAUW,IAAX,CAAnB;AACXA,eAAAA;AAAAA,MAAAA,CAHS;AAAA,IAAA,GAMpB,CAACJ,oBAAoBP,QAArB,CARmC;AAWrC,UAAMa,kBAAkBtQ,MAAAA,YACtB,CAACuQ,QAAgBtD,WAAkB;;AAC3BuD,YAAAA,kBAAkBH,mBAAmBZ,UAAU;AAAA,QACnD,GAAGM;AAAAA,QACH,GAAG;AAAA,UAAC,CAACQ,SAAStD;AAAAA,QAAX;AAAA,MAAA,CAFqC;AAK1C,cAAOuD,wDAAiBC,qBAAjBD,YAAqC;AAAA,IAAA,GAE9C,CAACT,iBAAiBN,QAAlB,CATiC;AAY7BiB,UAAAA,oBAAoBvP,cACxB,MAAA;;AACEmJ,gCAAkBgF,aAAQoB,sBAARpB,YAA6B,EAA9B,EAAkC7C,IAChDkE,CAAsB,qBAAA;;AAAA;AAAA,UACrB,GAAGA;AAAAA,UACHC,cAActG,mBAAkBqG,MAAAA,qDAAkBC,iBAAlBD,OAAAA,MAAkC,CAAA,CAAnC;AAAA,QAHnC;AAAA,OAAA;AAAA,OAMF,CAACrB,QAAQoB,iBAAT,CAR+B;AAgBjC,UAAM,CAACG,qBAAqBC,sBAAtB,IAAgDtR,MAAAA,SAEpD2D,MAF4D;AAIxD4N,UAAAA,gCAAgC5P,MAAAA,QAEpC,MAAM;;AACF,UAAA,CAACyO,mBAAmB,CAACiB,qBAAqB;AAC5C;AAAA,MACD;AAED,UACE,GAACjB,qBAAgBoB,2BAAhBpB,mBAAwCqB,UACzC,GAACrB,qBAAgBoB,2BAAhBpB,mBAAwCsB,QACzC;AACM,cAAA,IAAInQ,MACP,4KADG;AAAA,MAGP;AAEMuJ,aAAAA,kBAAkBsF,gBAAgBoB,sBAAjB,EAAyCrE,KAC9DwE,gBAAeA;;AAAAA,iBAAAA,MAAAA,yCAAYC,gBAAZD,gBAAAA,IAAyBtN,QAAOgN,oBAAoBhN;AAAAA,OAD/D;AAAA,IAAA,GAGN,CAAC+L,iBAAiBiB,mBAAlB,CAnB0C;AAqBvC5D,UAAAA,QAAQ9L,MAAAA,QACZ,OAAO;AAAA,MACLsO;AAAAA,MACA4B,oBAAoB/B,QAAQG;AAAAA,MAC5BlK;AAAAA,MACAqK;AAAAA,MACAC;AAAAA,MACAE;AAAAA,MACAI;AAAAA,MACAH;AAAAA,MACAM;AAAAA,MACAO;AAAAA,MACAC;AAAAA,MACAC;AAAAA,MACAL;AAAAA,MACAY,6BAA6BhC,QAAQoB;AAAAA,IAAAA,IAEvC,CACEJ,iBACA/K,SACA+J,QAAQoB,mBACRpB,QAAQG,UACRM,iBACAc,qBACAE,+BACAnB,iBACAc,mBACAP,mBACAV,QAXF,CAjBmB;AAiCnB,WAAA3Q,uCAAA,cAAC,sBAAsB,UAAtB;AAAA,MAA+B;AAAA,MAAhC,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAAuC;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,GACGR,QACH;AAAA,EAEH;AAKM,WAAS0Q,aAAa;AACrBtL,UAAAA,UAAUzE,iBAAW4N,qBAAD;AAE1B,QAAI,CAACnJ,SAAS;AACN,YAAA,IAAIlF,MAAO,qDAAX;AAAA,IACP;AAEMkF,WAAAA;AAAAA,EACR;AAED,WAASoK,mBACPZ,UACA+B,SACwE;;AAKtE,QAAA,CAAC/B,SAASN,YACVM,gDAAW,OAAXA,mBAAeM,oBAAfN,mBAAgCN,YAAWsC,OAAOC,KAAKF,OAAZ,EAAqBrC,QAChE;AACA;AAAA,IACD;AAEMM,WAAAA,qCAAU9C,KAAMgF,CAAY,YAAA;AAC1BF,aAAAA,OAAOG,QAAQJ,OAAf,EAAwBK,MAAM,CAAC,CAAC3C,MAAMjC,KAAP,MAAkB;;AAC/C0E,gBAAAA,MAAAA,mCAAS5B,oBAAT4B,gBAAAA,IAA0BG,KAC9BvB,CAAAA,YAAWA,iCAAQrB,UAASA,SAAQqB,iCAAQtD,WAAUA;AAAAA,MADlD,CADF;AAAA,IAAA;AAAA,EAMV;AAED,WAAS0C,WACPF,UACoB;AACpB,UAAMhD,MAAMgD,SAASsC,OAAO,CAACC,MAAML,YAAY;;AACzC,UAAA,CAACA,QAAQ5B,iBAAiB;AACtB,cAAA,IAAIhP,MAAO,iDAAX;AAAA,MACP;AACQgP,+CAAAA,oBAAAA,mBAAiBkC,QAASC,CAAQ,QAAA;;AACpCA,cAAAA,MAAAA,2BAAKhD,SAALgD,OAAAA,MAAa,MAAMF,MAAKE,gCAAKhD,SAALgD,YAAa,2BAAWC,IAArD;AACAH,cAAKE,gCAAKhD,SAALgD,YAAa,IAAIE,KAAIF,gCAAKjF,UAALiF,YAAc,EAAxC;AAAA,MAAA;AAGKF,aAAAA;AAAAA,IACR,GAAE,CAVH,CAAA;AAYA,WAAOP,OAAOC,KAAKjF,GAAZ,EAAiBA,IAAK8D,CAAW,WAAA;AAC/B,aAAA;AAAA,QACLrB,MAAMqB;AAAAA,QACN8B,QAAQC,MAAMC,KAAK9F,IAAI8D,OAAf;AAAA,MAAA;AAAA,IAFH,CADF;AAAA,EAMR;AAED,WAAST,wBACPN,mBACAC,UAGA;AAGA,QAAID,mBAAmB;AACrB,YAAMgD,eAAe/C,SAAS9C,KAC3BgF,CAAYA,aAAAA,mCAAS9N,QAAO2L,iBADV;AAGrB,UAAI,CAACgD,cAAc;AACjBxR,gBAAQC,KACL,2GADH;AAAA,MAGD;AACMuR,aAAAA;AAAAA,IACR;AAED,QAAIhD,sBAAsB,MAAM;AACvB,aAAA;AAAA,IACR;AAGD,QAAIA,sBAAsBrM,QAAW;AACnC,aAAOsM,SAAS9C,KAAMgF,CAAAA,YAAYA,mCAASlB,gBAApC,KAAyDhB,SAAS;AAAA,IAC1E;AAAA,EACF;AAED,WAASQ,mBACPL,iBAIiB;AACjB,YAAOA,mDAAiBG,mBACpBH,gBAAgBG,gBAAgBgC,OAC9B,CAACC,MAAMS,cAAc;;AACnBT,YAAKS,4CAAWvD,SAAXuD,YAAmB,OAAMA,4CAAWxF,UAAXwF,YAAoB;AAC3CT,aAAAA;AAAAA,IAAAA,GAET,CAAA,CALF,IAOA;EACL;AAED,WAAStC,sBACPgD,mBAME;AACF,QAAI,CAACA,qBAAqB,CAACJ,MAAMK,QAAQD,iBAAd,GAAkC;AACpD,aAAA;AAAA,IACR;AAEM,WAAA;AAAA,EACR;;AC3SM,WAASE,WACdC,OACA;AACM,UAAA;AAAA,MACJC;AAAAA,MACAC;AAAAA,MACAC;AAAAA,MACAnS;AAAAA,MACAoS;AAAAA,SACGC;AAAAA,IACDL,IAAAA;AAEEM,UAAAA,gBAAgBnT,kBACpB,CAACmG,UAA4D;AAC3D,UAAI4M,SAAS;AACLK,cAAAA,sBAAsBL,QAAQ5M,KAAD;AACnC,YACG,OAAOiN,wBAAwB,aAC9BA,wBAAwB,UAC1BjN,+BAAOkN;AAEP;AAAA,MACH;AAEDL,uDAAiB7M;AAAAA,IAAH,GAEhB,CAAC6M,gBAAgBD,OAAjB,CAd+B;AAiBjC,UAAMO,YAAYR,MAAM;AAExB,WACGhU,+BAAA,QAAA,cAAA,WAAA;AAAA,MAAU,KAAKmU;AAAAA,MAAW,SAASE;AAAAA,MAAe,GAAID;AAAAA,MAAvD,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA7R;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,GACGR,QACH;AAAA,EAEH;;ACpCM,WAAS0S,gBACdV,OACA;;AACA,UAAM,CAACW,YAAYC,aAAb,IAA8BjU,eAAkB,KAAV;AACtC,UAAA;AAAA,MACJkU,WAAWlE;AAAAA,MACX5C,WAAW;AAAA,MACX5H;AAAAA,MACA2O;AAAAA,MACAZ;AAAAA,MACAlS;AAAAA,MACA+S;AAAAA,SACGV;AAAAA,IACDL,IAAAA;AACE,UAAA;AAAA,MAAC7E;AAAAA,MAAQG;AAAAA,QAAY1D,QAA3B;AACM,UAAA;AAAA,MAACmF;AAAAA,QAAmB2B,WAA1B;AACMmC,UAAAA,aAAYlE,qDAAqBI,mDAAiB/L,OAAtC2L,YAA4C;AACxDqE,UAAAA,WACJrE,sBAAsB,QACtBkE,cAAc,MACd9D,oBAAoB,QACpB4D,cACAN,iBAAiBW;AAEnB9T,UAAAA,UAAU,MAAM;AACVyT,UAAAA,cAAcxF,WAAW,QAAQ;AACnCyF,sBAAc,KAAD;AAAA,MACd;AAAA,IAAA,GACA,CAACzF,QAAQwF,UAAT,CAJM;AAMHM,UAAAA,gBAAgB9T,MAAAA,YAAY,MAAM;AACtCyT,oBAAc,IAAD;AACbtF,eAAS,CACP;AAAA,QACEvB;AAAAA,QACAmH,eAAeL,aAAa;AAAA,QAC5B1O;AAAAA,QACA2O;AAAAA,MALK,CAAA,CAAD;AAAA,IAAA,GAQP,CAACxF,UAAUvB,UAAU8G,WAAW1O,YAAY2O,aAA5C,CAV8B;AAYjC,uGAEK7U,+BAAA,QAAA,cAAA,YAAA;AAAA,MACC,GAAIoU;AAAAA,MACJ;AAAA,MACA;AAAA,MACA,gBAAgBY;AAAAA,MAJlB,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAAzS;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAMGR,GAAAA,QACH,GACC+S,8BACE9U,+BAAAA,QAAA,cAAA,KAAA;AAAA,MACC,OAAO;AAAA,QACLkV,UAAU;AAAA,QACVC,OAAO;AAAA,QACPC,QAAQ;AAAA,QACRC,SAAS;AAAA,QACTC,QAAQ;AAAA,QACRC,UAAU;AAAA,QACVC,MAAM;AAAA,QACNC,YAAY;AAAA,QACZC,aAAa;AAAA,MATR;AAAA,MAWP,MAAK;AAAA,MACL,aAAU;AAAA,MAbZ,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAAnT;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,GAeGmS,aAAaI,8BAA8B,IAC9C,IACE,IACN;AAAA,EAEH;;AClFM,WAASa,aACd5B,OACA;AACM,UAAA;AAAA,MAAC/O;AAAAA,MAAY4Q;AAAAA,QAAejK,QAAlC;AACA,UAAM,CAACkK,SAASC,UAAV,IAAwBpV,eAAkB,KAAV;AAEhC,UAAA;AAAA,MACJoN;AAAAA,MACA8G;AAAAA,MACAX;AAAAA,MACA/N;AAAAA,MACAnE;AAAAA,SACGqS;AAAAA,IACDL,IAAAA;AAEJ9S,UAAAA,UAAU,MAAM;AACd,UAAI2U,aAAa;AACftH,eAAOyH,SAASC,OAAOJ;AAAAA,MACxB;AAAA,IAAA,GACA,CAACA,WAAD,CAJM;AAMHK,UAAAA,eAAe/U,MAAAA,YAAY,MAAM;AACrC4U,iBAAW,IAAD;AACC,iBAAA;AAAA,QACTzQ,OAAO,CACL;AAAA,UACEyI,UAAUA,8BAAY;AAAA,UACtBmH,eAAeL;AAAAA,UACf1O;AAAAA,QAAAA,CAJG;AAAA,MAAA,CADC;AAAA,OAST,CAAClB,YAAY8I,UAAU8G,WAAW1O,UAAlC,CAX6B;AAahC,WACGlG,+BAAA,QAAA,cAAA,YAAA;AAAA,MACC,UAAU6V,4BAAWzB,iBAAiBW;AAAAA,SAClCX;AAAAA,MACJ;AAAA,MACA,gBAAgB6B;AAAAA,MAJlB,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA1T;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,GAMGR,QACH;AAAA,EAEH;;ACnDM,WAASmU,mBACdnC,OAIA;AACA,UAAM,CAACoC,mBAAmBC,oBAApB,IAA4C1V,eAAS,KAAD;AACpD,UAAA;AAAA,MAACwO;AAAAA,MAAQ0G;AAAAA,QAAejK,QAA9B;AACM,UAAA;AAAA,MAAC5J;AAAAA,SAAaqS;AAAAA,IAAoBL,IAAAA;AAExC9S,UAAAA,UAAU,MAAM;AACVkV,UAAAA,qBAAqBP,eAAe1G,WAAW,QAAQ;AACzDZ,eAAOyH,SAASC,OAAOJ;AAAAA,MACxB;AAAA,IACA,GAAA,CAACO,mBAAmBjH,QAAQ0G,WAA5B,CAJM;AAMT,WACG5V,+BAAA,QAAA,cAAA,YAAA;AAAA,MACC,GAAIoU;AAAAA,MACJ,UAAU+B,qBAAqB/B,iBAAiBW;AAAAA,MAChD,SAAS,MAAMqB,qBAAqB,IAAD;AAAA,MAHrC,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA7T;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,GAKGR,QACH;AAAA,EAEH;;ACRM,WAASsU,cAActC,OAA2B;;AACjD,UAAA;AAAA,MACJ3P;AAAAA,MACAqC;AAAAA,MACA1B,KAAKX,KAAKW;AAAAA,MACVuR,cAAc;AAAA,MACdC,QAAQ;AAAA,MACRC,kBAAkB;AAAA,MAClBX,UAAU;AAAA,SACPzB;AAAAA,IACDL,IAAAA;AAEA,QAAA,CAAC3P,KAAKqS,UAAU;AACZ,YAAA,IAAIxU,MAAO,mDAAX;AAAA,IACP;AAED,QAAIyU,WAAmBtS,KAAKqS;AAE5B,QAAIhQ,SAAS;AACX,YAAMkQ,YAAY,IAAIC,IAAIxS,KAAKqS,QAAb;AAClB,iBAAWI,OAAOlE,OAAOC,KAAKnM,OAAZ,GAAsB;AAEtCkQ,kBAAUG,aAAaC,IAAIF,KAAKpQ,QAAQoQ,IAAxC;AAAA,MACD;AACDH,iBAAWC,UAAU5S;IACtB;AAED,WACG/D,+BAAA,QAAA,cAAA,UAAA;AAAA,MACKoU,GAAAA;AAAAA,MACJ,IAAIrP,kBAAMX,KAAKqS;AAAAA,MACf,QAAOrS,gBAAK4S,QAAL5S,YAAYA,KAAKW,OAAjBX,YAAuB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAKsS;AAAAA,MACL;AAAA,MARF,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAAnU;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,CASC;AAAA,EAEJ;AC7DD,QAAM,2BAA2B;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,sBAAsB,CAAC,UAAU;AACvC,QAAM,oBAAoB,CAAC,GAAG,0BAA0B,GAAG,mBAAmB;AAIvE,QAAM,oBAAoB,CAAC,KAAK,KAAK,MAAM,MAAM,IAAI;AAKrD,WAAS,4BAA4B;AAAA,IAC1C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAwB;AAChB,UAAA,SAAS,IAAI,IAAI,GAAG;AAE1B,UAAM,kBAAkB,wBAAS;AAEjC,QAAI,OAAO;AACL,UAAA;AAEA,UAAA,OAAO,UAAU,UAAU;AACf,sBAAA,kBAAkB,KAAK,iBAAiB,SAAS;AAAA,MAAA,OAC1D;AACL,sBAAc,OAAO,KAAK,IAAI,iBAAiB,SAAS;AAAA,MAC1D;AAEO,aAAA,aAAa,OAAO,SAAS,UAAU;AAAA,IAChD;AAEI,QAAA,UAAU,OAAO,WAAW,UAAU;AACxC,aAAO,aAAa,OAAO,WAAW,SAAS,iBAAiB,UAAU;AAAA,IAC5E;AAEA,YAAQ,OAAO,aAAa,OAAO,QAAQ,IAAI;AAK/C,WAAO,OAAO;EAChB;AAEO,WAAS,mBAAmB,QAA6B;AAC9D,UAAM,SAAS,IAAI,IAAI,OAAO,GAAG;AACjC,UAAM,uBAAuB,kBAAkB;AAAA,MAAK,CAAC,oBACnD,OAAO,SAAS,SAAS,eAAe;AAAA,IAAA;AAG1C,QACE,CAAC,wBACA,CAAC,OAAO,SAAS,CAAC,OAAO,UAAU,CAAC,OAAO,QAAQ,CAAC,OAAO,OAC5D;AACA,aAAO,OAAO;AAAA,IAChB;AAEA,WAAO,4BAA4B,MAAM;AAAA,EAC3C;AA+BO,WAAS,0BAA0B;AAAA,IACxC,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,GAAyE;;AACvE,QAAI,cAA6B;AAE7B,SAAA,yCAAY,WAAS,yCAAY,SAAQ;AAC7B,qBAAA,yCAAY,UAAQ,yCAAY;AAAA,IAChD;AAGI,SAAA,+CAAe,WAAS,+CAAe,SAAQ;AAC1C,aAAA;AAAA,QACL,QACE,oDAAe,UAAf,YACC,eAAe,OAAO,cAAc,WAAW,WAC5C,KAAK,MAAM,cAAc,cAAc,MAAM,IAC7C;AAAA,QACN,SACE,oDAAe,WAAf,YACC,eAAe,OAAO,cAAc,UAAU,WAC3C,KAAK,MAAM,cAAc,cAAc,KAAK,IAC5C;AAAA,MAAA;AAAA,IAEV;AAGI,SAAA,6CAAc,WAAS,6CAAc,SAAQ;AACxC,aAAA;AAAA,QACL,QACE,kDAAc,UAAd,YACC,eAAe,OAAO,aAAa,WAAW,WAC3C,KAAK,MAAM,cAAc,aAAa,MAAM,IAC5C;AAAA,QACN,SACE,kDAAc,WAAd,YACC,eAAe,OAAO,aAAa,UAAU,WAC1C,KAAK,MAAM,cAAc,aAAa,KAAK,IAC3C;AAAA,MAAA;AAAA,IAEV;AAGI,SAAA,yCAAY,WAAS,yCAAY,SAAQ;AACpC,aAAA;AAAA,QAEL,QAAO,8CAAY,UAAZ,YAAqB;AAAA,QAC5B,SAAQ,8CAAY,WAAZ,YAAsB;AAAA,MAAA;AAAA,IAElC;AAEA,WAAO,EAAC,OAAO,MAAM,QAAQ,KAAI;AAAA,EACnC;;AC7FO,WAAS0U,MAAM;AAAA,IACpB7S;AAAAA,IACA+Q;AAAAA,IACAC;AAAAA,IACAS;AAAAA,IACAqB,SAASC;AAAAA,IACTC;AAAAA,IACAC;AAAAA,IACAC,WAAW;AAAA,OACRC;AAAAA,EATiB,GAUA;;AAChB,QAAA,CAACnT,KAAKoT,KAAK;AACPC,YAAAA,kBAAmB,kEACvBrT,UAAKW,OAALX,YAAW;AAGS;AACd,cAAA,IAAInC,MAAMwV,eAAV;AAAA,MAGP;AAAA,IAGF;AAED,QAAwB,CAACrT,KAAKsT,WAAW,CAACH,KAAKP,KAAK;AAClD9U,cAAQC,KACL,iIACCiC,UAAKW,OAALX,YAAWA,KAAKoT,KAFpB;AAAA,IAKD;AAEK,UAAA;AAAA,MAACrC,OAAOwC;AAAAA,MAAiBvC,QAAQwC;AAAAA,QACrCC,0BAA0B;AAAA,MACxBzT;AAAAA,MACAgT;AAAAA,MACAU,cAAc;AAAA,QACZ3C;AAAAA,QACAC;AAAAA,MAFY;AAAA,IAAA,CAHS;AAS3B,QAAyB,CAACuC,mBAAmB,CAACC,kBAAmB;AAC/D1V,cAAQC,KACL,wHACCiC,UAAKW,OAALX,YAAWA,KAAKoT,KAFpB;AAAA,IAKD;AAED,QAAIO,WAAW3T,KAAKoT;AAEpB,QAAIN,QAAQ;AACVa,iBAAWb,OAAO;AAAA,QAChB,GAAGE;AAAAA,QACHY,KAAK5T,KAAKoT;AAAAA,QACVrC,OAAOwC;AAAAA,QACPvC,QAAQwC;AAAAA,MAAAA,CAJO;AAMjB,UAAI,OAAOG,aAAa,YAAY,CAACA,UAAU;AAC7C,cAAM,IAAI9V,MACP,6DACCmC,UAAKW,OAALX,YAAWA,KAAKoT,KAFd;AAAA,MAKP;AAAA,IACF;AAID,UAAMS,WACJ9C,SAASwC,mBAAmBxC,QAAQwC,kBAChCxC,QACAwC;AACAO,UAAAA,eACJX,UAAKY,WAALZ,YACAa,oBAAoB;AAAA,MAClB,GAAGhB;AAAAA,MACHC;AAAAA,MACAW,KAAK5T,KAAKoT;AAAAA,MACVrC,OAAO8C;AAAAA,MACP7C,QAAQwC;AAAAA,MACRV;AAAAA,IAAAA,CANiB;AAUrB,WACGlX,iCAAA,cAAA,OAAA;AAAA,MACC,KAAIoE,UAAKW,OAALX,YAAW;AAAA,MACf,MAAKA,gBAAKsT,YAALtT,YAAgBmT,KAAKP,QAArB5S,YAA4B;AAAA,MACjC,SAASyR,4BAAW;AAAA,MACpB,GAAI0B;AAAAA,MACJ,KAAKQ;AAAAA,MACL,OAAOJ,4CAAmBtT;AAAAA,MAC1B,QAAQuT,8CAAoBvT;AAAAA,MAC5B,QAAQ6T;AAAAA,MACR;AAAA,MATF,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA3V;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,CADF;AAAA,EAcD;AASD,WAAS6V,oBAAoB;AAAA,IAC3BJ;AAAAA,IACA7C;AAAAA,IACAkD;AAAAA,IACAC;AAAAA,IACAjB;AAAAA,IACAH;AAAAA,IACA9B;AAAAA,EAP2B,GAQa;AACxC,UAAMmD,kBAAkBlB,UAAU7D,MAAMK,QAAQwD,MAAd;AAClC,QAAIkB,mBAAmBlB,OAAOrE,KAAMwF,UAASC,MAAMD,IAAD,CAA3B,GAA8C;AAC7D,YAAA,IAAIvW,MACP,8DAA6D+V,KAD1D;AAAA,IAGP;AAED,QAAIU,cAAc;AAClB,QAAIvD,SAASC,QAAQ;AACnBsD,oBAAcC,OAAOvD,MAAD,IAAWuD,OAAOxD,KAAD;AAAA,IACtC;AAEGyD,QAAAA,WAAWL,kBAAkBlB,SAASwB;AAC1C,QACE,CAACN,mBACDpD,SACAA,QAAQ0D,kBAAkBA,kBAAkBxI,SAAS,IACrD;AACAuI,iBAAWC,kBAAkBrL,OAAQgL,CAASA,SAAAA,QAAQrD,KAA3C;AAAA,IACZ;AACK2D,UAAAA,eAAe5B,SAASA,SAAS6B;AACvC,WAAOH,SACJjL,IACE6K,CACE,SAAA,GAAEM,aAAa;AAAA,MACdd;AAAAA,MACA7C,OAAOqD;AAAAA,MAGPpD,QAAQiD,OAAOM,OAAOH,IAAD,IAASE,cAAcrU;AAAAA,MAC5CgU;AAAAA,MACAC;AAAAA,IAAAA,CAPa,KAQTE,OAXL,EAaJQ,KAAK,IAbD;AAAA,EAcR;;ACpMM,WAASC,MAAMlF,OAAoD;;AAClE,UAAA;AAAA,MACJ3P;AAAAA,MACA8U;AAAAA,MACAnU,KAAKX,KAAKW;AAAAA,MACVoU,cAAc;AAAA,MACdC,WAAW;AAAA,MACXC,cAAc,CANV;AAAA,SAODjF;AAAAA,IACDL,IAAAA;AAEJ,UAAMuF,YAAYnC,mBAAmB;AAAA,MACnCa,MAAK5T,gBAAKmV,iBAALnV,mBAAmBoT,QAAnBpT,YAA0B;AAAA,MAC/B,GAAG8U;AAAAA,IAAAA,CAF+B;AAKhC,QAAA,CAAC9U,KAAKoV,SAAS;AACX,YAAA,IAAIvX,MAAO,0CAAX;AAAA,IACP;AAED,WAEGjC,+BAAA,QAAA,cAAA,SAAA;AAAA,MACC,GAAIoU;AAAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQkF;AAAAA,MALV,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA/W;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAOG6B,GAAAA,KAAKoV,QAAQ7L,IAAK8L,CAAW,WAAA;AAC5B,UAAI,GAAEA,iCAAQjC,SAAOiC,iCAAQC,YAAW;AAChC,cAAA,IAAIzX,MAAO,mDAAX;AAAA,MACP;AACD,aACGjC,+BAAA,QAAA,cAAA,UAAA;AAAA,QACKqZ,GAAAA;AAAAA,QACJ,KAAKI,OAAOjC;AAAAA,QACZ,KAAKiC,OAAOjC;AAAAA,QACZ,MAAMiC,OAAOC;AAAAA,QAJf,QAAA;AAAA,QAAA,UAAA;AAAA,UAAA,UAAAnX;AAAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA;AAAA,MAAA,CADF;AAAA,IAJD,CAAA,CAaH;AAAA,EAEH;AC7DD,QAAMoX,iBAAmD,CAAA;AAEzCC,WAAAA,WACd5B,KACAvR,SACkB;AAClB,UAAMoT,iBAAmCF,eAAe3B;AAExD,QAAI6B,gBAAgB;AACXA,aAAAA;AAAAA,IACR;AAED,UAAMC,UAAU,IAAIC,QAAiB,CAACC,SAASC,WAAW;AAClDC,YAAAA,SAAS9W,SAAS+W,cAAc,QAAvB;AACf,UAAI1T,mCAAStG,QAAQ;AACnB+Z,eAAO7P,OAAO;AAAA,MAAA,OACT;AACL6P,eAAO7P,OAAO;AAAA,MACf;AACD6P,aAAOlC,MAAMA;AACbkC,aAAOE,SAAS,MAAM;AACpBJ,gBAAQ,IAAD;AAAA,MAAA;AAETE,aAAOG,UAAU,MAAM;AACrBJ,eAAO,KAAD;AAAA,MAAA;AAEJxT,WAAAA,mCAAS6T,QAAO,QAAQ;AACjBC,iBAAAA,KAAKC,YAAYN,MAA1B;AAAA,MAAA,OACK;AACItW,iBAAAA,KAAK4W,YAAYN,MAA1B;AAAA,MACD;AAAA,IAAA,CAlBa;AAqBhBP,mBAAe3B,OAAO8B;AAEfA,WAAAA;AAAAA,EACR;AAOeW,WAAAA,cACdjD,KACA/Q,SACa;AACb,UAAM,CAACyI,QAAQwL,SAAT,IAAsBha,eAAsB,SAAd;AAC9Bia,UAAAA,qBAAqB9W,KAAKC,UAAU2C,OAAf;AAE3BxF,UAAAA,UAAU,MAAM;AACd,qBAAe2Z,oBAAoB;AAC7B,YAAA;AACFF,oBAAU,SAAD;AACHd,gBAAAA,WAAWpC,KAAK/Q,OAAN;AAChBiU,oBAAU,MAAD;AAAA,iBACFza;AACPya,oBAAU,OAAD;AAAA,QACV;AAAA,MACF;AAEgB;IAChB,GAAA,CAAClD,KAAKmD,oBAAoBlU,OAA1B,CAZM;AAcFyI,WAAAA;AAAAA,EACR;;ACLM,WAAS2L,YAAY9G,OAAyB;;AACnD,UAAM,CAAC+G,aAAaC,cAAd,IAAgCra,MAAAA,SACpC2D,MAD4C;AAGxC2W,UAAAA,cAAc9Z,kBAAY,CAAC+Z,SAAsB;AACrDF,qBAAeE,IAAD;AAAA,IACf,GAAE,CAF4B,CAAA;AAGzB,UAAA;AAAA,MAAC7W;AAAAA,MAAMrC;AAAAA,MAAUmZ;AAAAA,SAAc9G;AAAAA,IAAoBL,IAAAA;AAEnDoH,UAAAA,0BAA0BV,cAC9B,2EACA;AAAA,MACEta,QAAQ;AAAA,IAAA,CAHiC;AAO7Cc,UAAAA,UAAU,MAAM;AACd,UAAI,CAAC6Z,aAAa;AAChB;AAAA,MACD;AACD,UAAI1G,iBAAiBgH;AACPC,oBAAAA,iBAAiB,SAASjH,iBAAiBgH,OAAvD;AACF,UAAIhH,iBAAiBkH;AACPD,oBAAAA,iBAAiB,QAAQjH,iBAAiBkH,MAAtD;AACF,UAAIlH,iBAAiBmH;AACPF,oBAAAA,iBAAiB,WAAWjH,iBAAiBmH,SAAzD;AACF,UAAInH,iBAAiBoH;AACPH,oBAAAA,iBACV,oBACAjH,iBAAiBoH,iBAFnB;AAIF,UAAIpH,iBAAiBqH;AACPJ,oBAAAA,iBAAiB,YAAYjH,iBAAiBqH,UAA1D;AACF,UAAIrH,iBAAiBsH;AACPL,oBAAAA,iBAAiB,aAAajH,iBAAiBsH,UAA3D;AACF,UAAItH,iBAAiBuH;AACPN,oBAAAA,iBACV,eACAjH,iBAAiBuH,YAFnB;AAIF,UAAIvH,iBAAiBwH;AACPP,oBAAAA,iBACV,4BACAjH,iBAAiBwH,uBAFnB;AAIF,UAAIxH,iBAAiByH;AACPR,oBAAAA,iBACV,iBACAjH,iBAAiByH,cAFnB;AAIF,UAAIzH,iBAAiB0H;AACPT,oBAAAA,iBACV,sBACAjH,iBAAiB0H,mBAFnB;AAIF,UAAI1H,iBAAiB2H;AACPV,oBAAAA,iBAAiB,QAAQjH,iBAAiB2H,MAAtD;AACF,UAAI3H,iBAAiB4H;AACPX,oBAAAA,iBAAiB,aAAajH,iBAAiB4H,OAA3D;AACF,UAAI5H,iBAAiB6H;AACPZ,oBAAAA,iBACV,qBACAjH,iBAAiB6H,iBAFnB;AAKF,aAAO,MAAM;AACX,YAAInB,eAAe,MAAM;AACvB;AAAA,QACD;AACD,YAAI1G,iBAAiBgH;AACPc,sBAAAA,oBAAoB,SAAS9H,iBAAiBgH,OAA1D;AACF,YAAIhH,iBAAiBkH;AACPY,sBAAAA,oBAAoB,QAAQ9H,iBAAiBkH,MAAzD;AACF,YAAIlH,iBAAiBmH;AACPW,sBAAAA,oBAAoB,WAAW9H,iBAAiBmH,SAA5D;AACF,YAAInH,iBAAiBoH;AACPU,sBAAAA,oBACV,oBACA9H,iBAAiBoH,iBAFnB;AAIF,YAAIpH,iBAAiBqH;AACPS,sBAAAA,oBACV,YACA9H,iBAAiBqH,UAFnB;AAIF,YAAIrH,iBAAiBsH;AACPQ,sBAAAA,oBACV,aACA9H,iBAAiBsH,UAFnB;AAIF,YAAItH,iBAAiBuH;AACPO,sBAAAA,oBACV,eACA9H,iBAAiBuH,YAFnB;AAIF,YAAIvH,iBAAiBwH;AACPM,sBAAAA,oBACV,4BACA9H,iBAAiBwH,uBAFnB;AAIF,YAAIxH,iBAAiByH;AACPK,sBAAAA,oBACV,iBACA9H,iBAAiByH,cAFnB;AAIF,YAAIzH,iBAAiB0H;AACPI,sBAAAA,oBACV,sBACA9H,iBAAiB0H,mBAFnB;AAIF,YAAI1H,iBAAiB2H;AACPG,sBAAAA,oBAAoB,QAAQ9H,iBAAiB2H,MAAzD;AACF,YAAI3H,iBAAiB4H;AACPE,sBAAAA,oBAAoB,aAAa9H,iBAAiB4H,OAA9D;AACF,YAAI5H,iBAAiB6H;AACPC,sBAAAA,oBACV,qBACA9H,iBAAiB6H,iBAFnB;AAAA,MAAA;AAAA,IAKH,GAAA,CACDnB,aACA1G,iBAAiBsH,YACjBtH,iBAAiBuH,cACjBvH,iBAAiByH,gBACjBzH,iBAAiB0H,qBACjB1H,iBAAiBgH,SACjBhH,iBAAiBkH,QACjBlH,iBAAiBoH,mBACjBpH,iBAAiB4H,SACjB5H,iBAAiB2H,QACjB3H,iBAAiBmH,WACjBnH,iBAAiBqH,YACjBrH,iBAAiBwH,yBACjBxH,iBAAiB6H,iBAdhB,CAxGM;AAyHT,QAAId,4BAA4B,QAAQ;AAE/B,aAAA;AAAA,IACR;AAED,QAAI,GAAC/W,gBAAKoV,YAALpV,mBAAe,OAAfA,mBAAmBoT,MAAK;AAC3B,YAAM2E,kBAAmB;AACH;AACd,cAAA,IAAIla,MAAMka,eAAV;AAAA,MAIP;AAAA,IACF;AAEGC,QAAoB,CAAChY,KAAK4S,KAAK;AACjC9U,cAAQC,KACL,+DADH;AAAA,IAGD;AAED,WACGnC,+BAAA,QAAA,cAAA,gBAAA;AAAA,MAEC,KAAKgb;AAAAA,MACL,GAAI5G;AAAAA,MACJ;AAAA,MACA,KAAIA,sBAAiBrP,OAAjBqP,YAAuBhQ,KAAKW;AAAAA,MAChC,KAAKX,KAAKoV,QAAQ,GAAGhC;AAAAA,MACrB,MAAKpT,UAAK4S,QAAL5S,YAAY;AAAA,MACjB,oBAAiBgQ,sBAAiBiI,mBAAjBjI,YAAmC;AAAA,MACpD,SAASA,sBAAiBkI,YAAUlY,UAAKmV,iBAALnV,mBAAmBoT,SAA9CpD,YAAsD;AAAA,MAC/D,WAAUA,sBAAiBmI,aAAjBnI,YAA6B;AAAA,MACvC,SAASA,iBAAiByB;AAAAA,MAC1B,QAAQzB,iBAAiBoI;AAAAA,MACzB,IAAIpI,iBAAiBqI;AAAAA,MACrB,YAAUrI,iBAAiBsI;AAAAA,MAC3B,YAAUtI,iBAAiBuI;AAAAA,MAE3B,gBAAcvI,iBAAiBwI;AAAAA,MAC/B,WAASxI,iBAAiByI;AAAAA,MAC1B,gBAAczI,iBAAiB0I;AAAAA,MAC/B,gBAAc1I,iBAAiB2I;AAAAA,MAC/B,qBAAmB3I,iBAAiB4I;AAAAA,MACpC,eAAa5I,iBAAiB6I;AAAAA,MAC9B,qBAAmB7I,iBAAiB8I;AAAAA,MAEpC,uBAAqB9I,iBAAiB+I;AAAAA,MACtC,sBAAoB/I,iBAAiBgJ;AAAAA,MACrC,sBAAoBhJ,iBAAiBiJ;AAAAA,MACrC,4BAA0BjJ,iBAAiBkJ;AAAAA,MAC3C,gCAA8BlJ,iBAAiBmJ;AAAAA,MAC/C,gBAAcnJ,iBAAiBoJ;AAAAA,MAC/B,iBAAepJ,iBAAiBqJ;AAAAA,MAChC,iBAAerJ,iBAAiBsJ;AAAAA,MAChC,oBAAkBtJ,iBAAiBuJ;AAAAA,MACnC,oBAAkBvJ,iBAAiBwJ;AAAAA,MACnC,qBAAmBxJ,iBAAiByJ;AAAAA,MACpC,qBAAmBzJ,iBAAiB0J;AAAAA,MACpC,QAAQ1J,iBAAiB2J;AAAAA,MACzB,wBAAqB3J,sBAAiB4J,uBAAjB5J,YAAuC;AAAA,MAC5D,gBAAcA,iBAAiB6J;AAAAA,MAC/B,qBAAmB7J,iBAAiB8J;AAAAA,MACpC,UAAU9J,iBAAiB+J;AAAAA,MAC3B,qBAAkB/J,sBAAiBgK,oBAAjBhK,YAAoC;AAAA,MACtD,oBAAiBA,sBAAiBiK,mBAAjBjK,YAAmC;AAAA,MACpD,kBAAgBA,iBAAiBkK;AAAAA,MACjC,gCAA8BlK,iBAAiBmK;AAAAA,MAC/C,gBAAcnK,iBAAiBoK;AAAAA,MAC/B,aAAapK,iBAAiBqK;AAAAA,MAC9B,OAAOrK,iBAAiBkE;AAAAA,MAhD1B,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA/V;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,GAkDGR,QACH;AAAA,EAEH;;AC/OM,WAAS2c,UAAU;AAAA,IACxBta;AAAAA,IACAua;AAAAA,OACGvK;AAAAA,EAHqB,GAIP;AACjB,YAAQhQ,KAAKwa,YAAb;AAAA,MACE,KAAK,cAAc;AACb,YAAA,CAACxa,KAAKya,OAAO;AACf,gBAAMC,cAAe;AACC;AACd,kBAAA,IAAI7c,MAAM6c,WAAV;AAAA,UAIP;AAAA,QACF;AAED,eACG9e,+BAAA,QAAA,cAAA,OAAA;AAAA,aACKoU;AAAAA,UACAuK,GAAAA,6CAAcE;AAAAA,UAClB,MAAMza,KAAKya;AAAAA,UAHb,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAAtc;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,CADF;AAAA,MAOD;AAAA,MACD,KAAK,SAAS;AACZ,eACGvC,+BAAA,QAAA,cAAA,OAAA;AAAA,UAAUoU,GAAAA;AAAAA,UAAkB,GAAIuK,6CAAcI;AAAAA,UAAO;AAAA,UAAtD,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAAxc;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,CADF;AAAA,MAGD;AAAA,MACD,KAAK,iBAAiB;AACpB,eACGvC,+BAAA,QAAA,cAAA,eAAA;AAAA,UACKoU,GAAAA;AAAAA,UACJ,GAAIuK,6CAAcK;AAAAA,UAClB;AAAA,UAHF,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAAzc;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,CADF;AAAA,MAOD;AAAA,MACD,KAAK,WAAW;AACd,eAEGvC,+BAAA,QAAA,cAAA,aAAA;AAAA,UACKoU,GAAAA;AAAAA,UACJ,GAAIuK,6CAAc7D;AAAAA,UAClB;AAAA,UAHF,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAAvY;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,CAAA;AAAA,MAMH;AAAA,MACD,SAAS;AACP,cAAM0c,yBAA0B;AACV;AACd,gBAAA,IAAIhd,MAAMgd,sBAAV;AAAA,QAIP;AAAA,MACF;AAAA,IApDH;AAAA,EAsDD;;AC7DM,WAASC,UACdnL,OACA;;AACM,UAAA;AAAA,MAAC3P;AAAAA,MAAM4P;AAAAA,SAAOI;AAAAA,IAAoBL,IAAAA;AAClC,UAAA;AAAA,MAAClS;AAAAA,QAAUW,QAAjB;AAEM2c,UAAAA,kBAAkB9c,MAAAA,QAAQ,MAAM+c,eAAehb,IAAD,GAAQ,CAACA,IAAD,CAA7B;AAE/B,QAAI,CAAC+a,iBAAiB;AACpB,YAAME,oBAAqB;AACL;AACd,cAAA,IAAIpd,MAAMod,iBAAV;AAAA,MAGP;AAAA,IAEF;AAED,QAAIF,gBAAgBhR,UAAU,QAAQgR,gBAAgBhR,UAAU9J,QAAW;AACzE,YAAMib,iBAAkB,mDACtBH,qBAAgBpa,OAAhBoa,YAAsBA,gBAAgBtI;AAElB;AACd,cAAA,IAAI5U,MAAMqd,cAAV;AAAA,MAGP;AAAA,IAEF;AAED,YAAQH,gBAAgB9U,MAAxB;AAAA,MACE,KAAK,QAAQ;AACX,cAAMkV,WAAUvL,kBAAM;AACtB,oEACGuL,UAAA;AAAA,UAAQ,GAAInL;AAAAA,UAAb,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA7R;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,GACI4c,gBAAgBhR,MAAeqR,mBAAmB3d,MAAnD,CACH;AAAA,MAEH;AAAA,MACD,KAAK,aAAa;AAChB,cAAM0d,WAAUvL,kBAAM;AACtB,oEACGuL,UAAA;AAAA,UAAQ,GAAInL;AAAAA,UAAb,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA7R;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,GACI4c,gBAAgBhR,MAAesR,eAAe5d,MAA/C,CACH;AAAA,MAEH;AAAA,MACD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,UAAU;AACb,cAAM0d,WAAUvL,kBAAM;AACtB,oEACGuL,UAAA;AAAA,UAAQ,GAAInL;AAAAA,UAAb,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA7R;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,GACGmd,uBAAuBP,gBAAgBhR,OAAsBtM,MAAvC,CACzB;AAAA,MAEH;AAAA,MACD,KAAK,UAAU;AACb,cAAM0d,WAAUvL,kBAAM;AACtB,oEACGuL,UAAA;AAAA,UAAQ,GAAInL;AAAAA,UAAb,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA7R;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,GACI4c,gBAAgBhR,MAAiBA,KACrC;AAAA,MAEH;AAAA,MACD,KAAK,0BAA0B;AAC7B,cAAMoR,WAAUvL,kBAAM;AACtB,oEACGuL,UAAA;AAAA,UACC,GAAInL;AAAAA,UACJ,yBAAyB;AAAA,YAACuL,QAAQR,gBAAgBhR;AAAAA,UAAzB;AAAA,UAF3B,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA5L;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,CADF;AAAA,MAMD;AAAA,MACD,KAAK,yBAAyB;AAC5B,cAAMgd,WAAUvL,kBAAM;AACtB,oEACGuL,UAAA;AAAA,UACC,GAAInL;AAAAA,UACJ,yBAAyB;AAAA,YACvBuL,QAASR,gBAAgBhR,MAAiByR,MAAM,IAAxC,EAA8C5G,KAAK,OAAnD;AAAA,UADe;AAAA,UAF3B,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAAzW;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,CADF;AAAA,MAQD;AAAA,MACD,KAAK,OAAO;AACV,cAAMsd,kBAAkB,IAAIjJ,IAAIuI,gBAAgBhR,KAAhD;AACA,eACGnO,+BAAA,QAAA,cAAA,KAAA;AAAA,UACC,MAAM6f,gBAAgB7J,KAAK1T,QAAQud,gBAAgBC,UAAU,EAAvD;AAAA,UACF1L,GAAAA;AAAAA,UAFN,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA7R;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,GAIG4c,gBAAgBhR,KACnB;AAAA,MAEH;AAAA,MACD,KAAK,QAAQ;AACX,cAAMoR,WAAUvL,kBAAM;AACtB,oEACGuL,UAAA;AAAA,UAAQ,GAAInL;AAAAA,UAAb,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA7R;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,GACGsB,KAAKC,UAAUqb,gBAAgBhR,KAA/B,CACH;AAAA,MAEH;AAAA,MACD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,kBAAkB;AACrB,cAAMoR,WAAUvL,kBAAM;AACtB,cAAM+L,MAAMZ,gBAAgBa;AAC5B,oEACGT,UAAA;AAAA,UAAQ,GAAInL;AAAAA,UAAb,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA7R;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,IAAgCwd,sCAAKE,UAALF,YAAcA,2BAAKhb,OAAnBgb,YAAyB,EAAG;AAAA,MAE/D;AAAA,MACD,KAAK,+BAA+B;AAClC,cAAMR,WAAUvL,kBAAM;AAEtB,cAAMkM,WAAWf,gBAAgBgB,aAC5B3U,kBAAkB2T,gBAAgBgB,UAAjB,IAClB;AACJ,oEACGZ,UAAA;AAAA,UAAQ,GAAInL;AAAAA,UAAb,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA7R;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,GACG2d,SAASvS,IAAI,CAACoS,KAAKK,WAGjBpgB,+BAAA,QAAA,cAAA,MAAA;AAAA,UAAG,KAAM,GAAE+f,oBAAO,MAAMK;AAAAA,UAAzB,QAAA;AAAA,UAAA,UAAA;AAAA,YAAA,UAAA7d;AAAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA;AAAA,QAAA,GAAmCwd,GAAI,CAHxC,CAKH;AAAA,MAEH;AAAA,MACD,KAAK,kBAAkB;AACjBZ,cAAAA,qBAAgBa,cAAhBb,mBAA2BP,gBAAe,cAAc;AAC1D,gBAAMmB,MAAMZ,gBAAgBa;AACrBD,iBAAAA,IAAIlB,QACR7e,uCAAA,cAAA,OAAA;AAAA,YAAM,MAAM+f,IAAIlB;AAAAA,YAAO,GAAIzK;AAAAA,YAA5B,QAAA;AAAA,YAAA,UAAA;AAAA,cAAA,UAAA7R;AAAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA;AAAA,UAAA,CAAA,IACE;AAAA,QACK4c,aAAAA,qBAAgBa,cAAhBb,mBAA2BP,gBAAe,eAAe;AAClE,gBAAMmB,MAAMZ,gBAAgBa;AACrBD,iBAAAA,IAAIxG,eACRvZ,uCAAA,cAAA,KAAA;AAAA,YAAE,OAAMmf,2BAAgBa,cAAhBb,mBAA2B3H,QAA3B2H,YAAkC;AAAA,YAAI,GAAI/K;AAAAA,YAAnD,QAAA;AAAA,YAAA,UAAA;AAAA,cAAA,UAAA7R;AAAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA;AAAA,UAAA,GACGvC,+BAAA,QAAA,cAAA,OAAA;AAAA,YAAM,MAAM+f,IAAIxG;AAAAA,YAAjB,QAAA;AAAA,YAAA,UAAA;AAAA,cAAA,UAAAhX;AAAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA;AAAA,UAAA,CAAA,CACF,IACE;AAAA,QACK4c,aAAAA,qBAAgBa,cAAhBb,mBAA2BP,gBAAe,SAAS;AAC5D,gBAAMmB,MAAMZ,gBAAgBa;AAC5B,iBAAQhgB,+BAAA,QAAA,cAAA,OAAA;AAAA,YAAUoU,GAAAA;AAAAA,YAAkB,MAAM2L;AAAAA,YAAnC,QAAA;AAAA,YAAA,UAAA;AAAA,cAAA,UAAAxd;AAAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA;AAAA,UAAA,CAAP;AAAA,QACD;AAAA,MACF;AAAA,IApHH;AAuHA,UAAMgd,UAAUvL,kBAAM;AACtB,WACGhU,+BAAA,QAAA,cAAA,SAAA;AAAA,MAAQ,GAAIoU;AAAAA,MAAb,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA7R;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAgC4c,IAAAA,qBAAgBhR,UAAhBgR,mBAAuBpb,UAAW;AAAA,EAErE;AASM,WAASqb,eAEdiB,WACgE;AAC1C;AACpBne,cAAQoe,KACL,yHADH;AAAA,IAGD;AAED,QAAI,CAACD,WAAW;AACQ;AACpBne,gBAAQC,KACL,wEADH;AAAA,MAGD;AACM,aAAA;AAAA,IACR;AACD,QAEGke,UAAUlS,UAAU,QAAQkS,UAAUlS,UAAU9J,QACjD;AACQlC,cAAAA,KACL,iCAAgCke,UAAUlS,6BAD7C;AAAA,IAGD;AAEM,WAAA;AAAA,MACL,GAAGkS;AAAAA,MACHlS,OAAOoS,oBAAoBF,SAAD;AAAA,IAAA;AAAA,EAE7B;AAMM,WAASE,oBACdF,WAC0B;AACJ;AACpBne,cAAQoe,KAAM,6DAAd;AAAA,IACD;AAED,QAAI,CAACD,WAAW;AACP,aAAA;AAAA,IACR;AAED,QAAIA,UAAUlS,UAAU,QAAQkS,UAAUlS,UAAU9J,QAAW;AACvC;AACZlC,gBAAAA,KACL,sCAAqCke,UAAUlS,6BADlD;AAAA,MAGD;AACD,aAAOkS,UAAUlS;AAAAA,IAClB;AAED,YAAQkS,UAAUhW,MAAlB;AAAA,MACE,KAAK;AACH,eAAOgW,UAAUlS,UAAU;AAAA,MAC7B,KAAK;AACIqS,eAAAA,SAASH,UAAUlS,KAAX;AAAA,MACjB,KAAK;AACIsS,eAAAA,WAAWJ,UAAUlS,KAAX;AAAA,MACnB,KAAK;AAAA,MACL,KAAK;AACI,eAAA,IAAIuS,KAAKL,UAAUlS,KAAnB;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACIwS,eAAAA,UAAUN,UAAUlS,KAAX;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AACE,eAAOkS,UAAUlS;AAAAA,IAzBrB;AAAA,EA2BD;AAKM,WAASwS,UAAUzc,MAAc;AACtC,QAAI0c,OAAO1c,IAAD,EAAOwJ,SAAS,WAAtB,GAAoC;AACtC,aAAO7J,KAAKV,MAAMe,MAAM,CAAC2c,GAAGnhB,OAAM;AAChC,YAAImhB,MAAM;AAAoBnhB,iBAAAA;AAAAA,MAAAA,CADzB;AAAA,IAGR;AAEMmE,WAAAA,KAAKV,MAAMe,IAAX;AAAA,EACR;AAED,QAAM4c,eAAuC;AAAA,IAE3CC,IAAI;AAAA,IACJC,IAAI;AAAA,IACJC,GAAG;AAAA,IACH3G,IAAI;AAAA,IACJ4G,IAAI;AAAA,IACJC,IAAI;AAAA,IAEJC,IAAI;AAAA,IACJ3hB,GAAG;AAAA,IACH4hB,UAAU;AAAA,IACVC,QAAQ;AAAA,IAERC,IAAI;AAAA,IACJ5hB,GAAG;AAAA,IACH6hB,IAAI;AAAA,IACJC,IAAI;AAAA,EAjBuC;AAoBtC,WAAS/B,uBACdgC,aACA7f,SAAS,SACT4E,UAAoC,CAAA,GACpC;AACA,QAAIkb,UAAuB;AAAA,MACzBxT,OAAOuT,YAAYvT;AAAAA,MACnByT,MAAMd,aAAaY,YAAYE;AAAAA,IAAAA;AAG7BD,QAAAA,QAAQC,QAAQ,MAAM;AACxBD,gBAAUE,uBAAuBH,YAAYvT,OAAOuT,YAAYE,IAAhC;AAAA,IACjC;AAEM,WAAA,IAAIE,KAAKC,aAAalgB,QAAQ;AAAA,MACnC,GAAG4E;AAAAA,MACHmb,MAAMD,QAAQC;AAAAA,MACdI,OAAO;AAAA,IAHF,CAAA,EAIJC,OAAON,QAAQxT,KAJX;AAAA,EAKR;AAED,WAAS0T,uBAAuB1T,OAAeyT,MAA2B;AACxE,YAAQA,MAAR;AAAA,MACE,KAAK;AACI,eAAA;AAAA,UACLzT,OAAOA,QAAQ;AAAA,UACfyT,MAAM;AAAA,QAAA;AAAA,MAEV,KAAK;AACI,eAAA;AAAA,UACLzT,OAAOA,QAAQ;AAAA,UACfyT,MAAM;AAAA,QAAA;AAAA,MAEV,KAAK;AACI,eAAA;AAAA,UACLzT,OAAOA,QAAQ;AAAA,UACfyT,MAAM;AAAA,QAAA;AAAA,MAEV,KAAK;AACI,eAAA;AAAA,UACLzT,OAAOA,QAAQ;AAAA,UACfyT,MAAM;AAAA,QAAA;AAAA,MAEV,KAAK;AACI,eAAA;AAAA,UACLzT,OAAOA,QAAQ;AAAA,UACfyT,MAAM;AAAA,QAAA;AAAA,MAEV,KAAK;AACI,eAAA;AAAA,UACLzT,OAAOA,QAAQ;AAAA,UACfyT,MAAM;AAAA,QAAA;AAAA,MAEV,KAAK;AACI,eAAA;AAAA,UACLzT,OAAOA,QAAQ;AAAA,UACfyT,MAAM;AAAA,QAAA;AAAA,MAEV,KAAK;AACI,eAAA;AAAA,UACLzT,OAAOA,QAAQ;AAAA,UACfyT,MAAM;AAAA,QAAA;AAAA,MAEV,KAAK;AACI,eAAA;AAAA,UACLzT,OAAOA,QAAQ;AAAA,UACfyT,MAAM;AAAA,QAAA;AAAA,MAEV;AACQ,cAAA,IAAI3f,MAAO,uBAAsB2f,MAAjC;AAAA,IA/CV;AAAA,EAiDD;ACzWM,WAAS,gBACd,WACe;;AACX,QAAA,CAAC,UAAU,MAAM;AACnB,YAAM,cAAc;AACE;AACd,cAAA,IAAI,MAAM,WAAW;AAAA,MAO7B;AAAA,IACF;AAEA,YAAQ,UAAU,MAAM;AAAA,MACtB,KAAK;AACI,eAAA;AAAA,UACL,GAAG;AAAA,UACH,aAAa,UAAU,UAAU;AAAA,QAAA;AAAA,MAGrC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,UACL,GAAG;AAAA,UACH,aAAa,UAAU;AAAA,QAAA;AAAA,MAG3B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,UACL,GAAG;AAAA,UACH,aAAa,UAAU;AAAA,QAAA;AAAA,MAI3B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,eAAe;AAClB,YAAI,cAAc;AACd,YAAA;AACY,wBAAA,WAAU,eAAU,UAAV,YAAmB,EAAE;AAAA,iBACtC;AACP,gBAAM,aAAa;AACG;AACd,kBAAA,IAAI,MAAM,UAAU;AAAA,UAG5B;AAAA,QAEF;AACO,eAAA;AAAA,UACL,GAAG;AAAA,UACH;AAAA,QAAA;AAAA,MAEJ;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,UACL,GAAG;AAAA,UACH,aAAa,IAAI,MAAK,eAAU,UAAV,YAAmB,EAAE;AAAA,QAAA;AAAA,MAG/C,KAAK;AAAA,MACL,KAAK,kBAAkB;AACrB,cAAM,iBAAiB,WAAU,4CAAW,UAAX,YAAoB,EAAE;AAChD,eAAA;AAAA,UACL,GAAG;AAAA,UACH,aAAa,eAAe,IAAI,CAAC,eAAe,IAAI,KAAK,UAAU,CAAC;AAAA,QAAA;AAAA,MAExE;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,UACL,GAAG;AAAA,UACH,aAAa,OAAO,UAAU,KAAK;AAAA,QAAA;AAAA,MAGvC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACI,eAAA;AAAA,UACL,GAAG;AAAA,UACH,aAAa,mBAAkB,eAAU,eAAV,YAAwB,MAAS;AAAA,QAAA;AAAA,MAGpE,SAAS;AACD,cAAA,oBAAoB,uFAAuF,UAAU;AACrG;AACd,gBAAA,IAAI,MAAM,iBAAiB;AAAA,QASnC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AC1FO,WAASM,SAASC,OAA+B;AAChD,UAAA;AAAA,MAACtgB;AAAAA,QAAUW,QAAjB;AAEA,QAAI,CAACX,QAAQ;AACL,YAAA,IAAII,MACP,sKADG;AAAA,IAGP;AAEKmgB,UAAAA,SAAS3B,WAAW0B,MAAMC,MAAP;AAEnB3b,UAAAA,UAAUpE,MAAAA,QACd,OAAO;AAAA,MACL2f,OAAO;AAAA,MACPK,UAAUF,MAAMG;AAAAA,IAElB,IAAA,CAACH,MAAMG,YAAP,CALqB;AAQjBC,UAAAA,mBAAmBC,iBAAiB3gB,QAAQ4E,OAAT;AAEnCgc,UAAAA,gBAAgBD,iBAAiB3gB,QAAQ;AAAA,MAC7C,GAAG4E;AAAAA,MACHic,iBAAiB;AAAA,IAAA,CAFmB;AAKhCC,UAAAA,wBAAwBH,iBAAiB3gB,QAAQ;AAAA,MACrD,GAAG4E;AAAAA,MACHic,iBAAiB;AAAA,IAAA,CAF2B;AAKxCE,UAAAA,gCAAgCJ,iBAAiB3gB,QAAQ;AAAA,MAC7D,GAAG4E;AAAAA,MACHoc,uBAAuB;AAAA,MACvBC,uBAAuB;AAAA,IAAA,CAH6B;AAMhDC,UAAAA,2BAA2BP,iBAAiB3gB,MAAD;AAE3CmhB,UAAAA,0CAA0CR,iBAAiB3gB,QAAQ;AAAA,MACvEghB,uBAAuB;AAAA,MACvBC,uBAAuB;AAAA,IAAA,CAFuC;AAKhE,UAAMG,iBAAiB,CAACC,SACtBA,KAAK7Y,SAAS;AAIV8Y,UAAAA,iBAAiB9gB,MAAAA,QACrB,OAAO;AAAA,MACL+gB,UAAU,MAAMjB;AAAAA,MAChBG,cAAc,MAAMH,MAAMG;AAAAA,MAE1Be,iBAAiB,MAAMd,mBAAmBN,OAAOG,MAA1B;AAAA,MAEvBkB,OAAO,MAAMf,mBAAmBgB,cAAcnB,MAAjC;AAAA,MAEboB,sBAAsB,MACpBpB,SAAS,MAAM,IACXQ,8BAAAA,EAAgCX,OAAOG,MAAvC,IACAG,mBAAmBN,OAAOG,MAA1B;AAAA,MAENqB,iCAAiC,MAC/BrB,SAAS,MAAM,IACXY,wCAAAA,EAA0Cf,OAAOG,MAAjD,IACAW,2BAA2Bd,OAAOG,MAAlC;AAAA,MAENsB,cAAc,MACZjB;;AAAAA,2CAAgBc,cAAcnB,MAA9B,EAAsCvU,KAAKoV,cAA3C,MAAAR,mBAA4DtU,UAA5DsU,YACAN,MAAMG;AAAAA;AAAAA,MAERqB,gBAAgB,MACdpB;;AAAAA,8CAAmBgB,cAAcnB,MAAjC,EAAyCvU,KAAKoV,cAA9C,MAAAV,mBAA+DpU,UAA/DoU,YACAJ,MAAMG;AAAAA;AAAAA,MAERsB,sBAAsB,MAAA;;AACpBjB,iDAAwBY,EAAAA,cAAcnB,MAAtC,EAA8CvU,KAAKoV,cAAnD,MAAAN,mBACIxU,UADJwU,YACa;AAAA;AAAA,MAEfP,QAAQ,MACNG,mBACGgB,cAAcnB,MADjB,EAEG5U,OAAQ0V,CAAAA,SACP,CAAC,WAAW,YAAY,SAAS,WAAW,SAA5C,EAAuDxV,SACrDwV,KAAK7Y,IADP,CAHJ,EAOGsD,IAAKuV,CAAAA,SAASA,KAAK/U,KAPtB,EAQG6K,KAAK,EARR;AAAA,IA/BG,IAyCP,CACEmJ,OACAC,QACAK,eACAF,kBACAI,uBACAI,0BACAH,+BACAI,uCARF,CA1C4B;AAwD9B,WAAO3gB,cACL,MACE,IAAIwhB,MAAM,gBAA4C;AAAA,MACpDC,KAAK,CAAChd,QAAQ+P;;AAAQkN,6BAAQD,IAAIhd,QAAQ+P,GAApB,MAAAkN,mBAA0BC,KAAK;AAAA;AAAA,IAA/B,CADxB,GAGF,CAACb,cAAD,CALY;AAAA,EAOf;AAED,WAASX,iBAAiB3gB,QAAgB4E,SAAoC;AAC5E,WAAOpE,cAAQ,MAAM;AACf4hB,UAAAA;AACJ,aAAO,MAAOA,yCAAa,IAAInC,KAAKC,aAAalgB,QAAQ4E,OAA9B;AAAA,IAAA,GAC1B,CAAC5E,QAAQ4E,OAAT,CAHW;AAAA,EAIf;;AChJM,WAASyd,MAAkD;AAAA,IAChE9f;AAAAA,IACA4P;AAAAA,IACAmQ;AAAAA,IACAX;AAAAA,IACA9B;AAAAA,IACA0C,uBAAuB;AAAA,OACpBhQ;AAAAA,EAP6D,GAQjC;AAC3B,QAAA,CAACiQ,QAAQjgB,IAAD,GAAQ;AACZ,YAAA,IAAInC,MACP,yEADG;AAAA,IAGP;AACKqiB,UAAAA,cAAcpC,SAAS9d,IAAD;AAC5B,UAAMmb,UAAUvL,kBAAM;AAEtB,QAAIuQ,SAASD,YAAYjB;AAEzB,QAAIc,mBAAmBX,sBAAsB;AACvCW,UAAAA,mBAAmB,CAACX,sBAAsB;AAC5Ce,iBAASD,YAAYlC;AAAAA,MAAAA,WACZ,CAAC+B,mBAAmBX,sBAAsB;AACnDe,iBAASD,YAAYd;AAAAA,MAAAA,OAChB;AAELe,iBAASD,YAAYb;AAAAA,MACtB;AAAA,IACF;AAED,WACGzjB,+BAAA,QAAA,cAAA,SAAA;AAAA,MAAQ,GAAIoU;AAAAA,MAAb,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA7R;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IACGgiB,GAAAA,QACA7C,eAAeA,YAAY8C,6GAEvBJ,sBACA1C,YAAY8C,aACf,CAEJ;AAAA,EAEH;AAGD,WAASH,QACPI,YACuB;AACvB,WACE,OAAOA,WAAWrC,WAAW,YAC7B,CAAC,CAACqC,WAAWrC,UACb,OAAOqC,WAAWnC,iBAAiB,YACnC,CAAC,CAACmC,WAAWnC;AAAAA,EAEhB;;AC9DM,WAASoC,aACd3Q,OAEA;;AACM,UAAA;AAAA,MACJ4Q,YAAY;AAAA,MACZ/P;AAAAA,MACAgQ,YAAY;AAAA,MACZxgB,MAAMoM;AAAAA,SACH4D;AAAAA,IACDL,IAAAA;AAEJ,QAAIvD,WAAW,MAAM;AACb,YAAA,IAAIvO,MAAO,uDAAX;AAAA,IACP;AAEG4iB,QAAAA;AACAnD,QAAAA;AAEJ,UAAM7O,UAAU+B,aACZpJ,wBAAkBgF,wCAASG,aAATH,YAAqB,CAAA,CAAtB,EAA0B3C,KACxCgF,CAAAA,cAAYA,qCAAS9N,QAAO6P,SAD/B,MAAApJ,YAEK,OACL;AAEJ,QAAImZ,cAAc,aAAa;AAC7B,UAAI/P,aAAa/B,SAAS;AACxB,cAAIA,aAAQiS,qBAARjS,mBAA0BuP,cAAWvP,aAAQkS,YAARlS,mBAAiBuP,SAAQ;AACzD,iBAAA;AAAA,QACR;AACDyC,gBAAQhS,QAAQiS;AAAAA,MAAAA,WACPF,cAAc,OAAO;AAC9BC,iBAAQrU,wCAASwU,wBAATxU,mBAA8ByU;AAAAA,MAAAA,OACjC;AACLJ,iBAAQrU,wCAASwU,wBAATxU,mBAA8B0U;AAAAA,MACvC;AAAA,IAAA,OACI;AACL,UAAItQ,aAAa/B,SAAS;AACxBgS,gBAAQhS,QAAQkS;AAChB,YAAIH,cAAc,QAAQ;AACxBC,kBAAQhS,QAAQsS;AAChBzD,wBAAc7O,QAAQuS;AAAAA,QACvB;AAAA,MAAA,WACQR,cAAc,OAAO;AAC9BC,iBAAQrU,aAAQ6U,eAAR7U,mBAAoByU;AAAAA,MAAAA,OACvB;AACLJ,iBAAQrU,aAAQ6U,eAAR7U,mBAAoB0U;AAAAA,MAC7B;AAAA,IACF;AAED,QAAI,CAACL,OAAO;AACH,aAAA;AAAA,IACR;AAED,QAAInD,aAAa;AACf,aACG1hB,+BAAA,QAAA,cAAA,OAAA;AAAA,QAAM,GAAIoU;AAAAA,QAAkB,MAAMyQ;AAAAA,QAAO;AAAA,QAA1C,QAAA;AAAA,QAAA,UAAA;AAAA,UAAA,UAAAtiB;AAAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA;AAAA,MAAA,CADF;AAAA,IAGD;AAED,WAAQvC,+BAAA,QAAA,cAAA,OAAA;AAAA,MAAUoU,GAAAA;AAAAA,MAAkB,MAAMyQ;AAAAA,MAAnC,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAAtiB;AAAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IAAA,CAAP;AAAA,EACD;;AC9CD,QAAM+iB,aACJ;AAOK,WAASC,cAAc;AAAA,IAC5BC;AAAAA,IACAtK;AAAAA,IACAuK;AAAAA,IACAtQ;AAAAA,EAJ4B,GAKP;AACf,UAAA;AAAA,MAAC7T;AAAAA,QAAekB,QAAtB;AACMkjB,UAAAA,sBAAsBjL,cAAc6K,UAAD;AAErCK,QAAAA;AAEJ,QAAIH,cAAcC,yBAAyB;AACnC,YAAA,IAAIxjB,MAAM2jB,uBAAV;AAAA,IACP;AAED,QAAIJ,YAAY;AACdG,YAAMH,WAAWvS,OAAiB,CAAC4S,MAAMC,SAAS;AAC1CC,cAAAA,SAASC,aAAaF,IAAD;AAC3B,YAAIC,QAAQ;AACVF,eAAKI,KAAKF,MAAV;AAAA,QACD;AACMF,eAAAA;AAAAA,MACR,GAAE,CANG,CAAA;AAAA,eAOGJ,yBAAyB;AAClCE,YAAMF,wBAAwBxS,OAAiB,CAAC4S,MAAMC,SAAS;;AACvDC,cAAAA,SAASC,aAAaF,6BAAM/gB,EAAP;AAC3B,YAAIghB,QAAQ;AACVF,eAAKI,KAAM,GAAEF,WAAUD,kCAAMhY,aAANgY,YAAkB,GAAzC;AAAA,QACD;AACMD,eAAAA;AAAAA,MACR,GAAE,CANG,CAAA;AAAA,IAAA,OAOD;AACC,YAAA,IAAI5jB,MAAMikB,wBAAV;AAAA,IACP;AAED,UAAMlE,QAAQ7M,QACT;AAAA,MACC,2BAA2BA;AAAAA,IAE7B9Q,IAAAA;AAEJ,WACGrE,+BAAA,QAAA,cAAA,OAAA;AAAA,MAAI;AAAA,MAAsB;AAAA,MAA3B,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IACG0lB,GAAAA,wBAAwB,UACtB1lB,uCAAA,cAAA,mBAAA;AAAA,MACC,aAAY,WAAUsB;AAAAA,MACtB,UAAUqkB,IAAI3M,KAAK,GAAT;AAAA,MAFZ,QAAA;AAAA,MAAA,UAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA;AAAA,IADF,CAAA,CAMF;AAAA,EAEH;AAKM,WAASgN,aAAajhB,IAAa;AACxC,QAAI,CAACA;AAAI;AACT,WAAOA,GAAG6a,MAAM,GAAT,EAAcuG,IAArB;AAAA,EACD;AAEM,QAAMD,2BAA4B;AAClC,QAAMN,0BAA2B;ACtGjC,WAAS,uBAAuB;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAkD;AAChD,QAAI,yBAAyB,eAAe;AAClC,cAAA;AAAA,QACN,4NAA4N,4CAA4C;AAAA,MAAA;AAAA,IAE5Q;AAGA,QAAwB,CAAC,0BAA0B,CAAC,WAAW,UAAU;AAC/D,cAAA;AAAA,QACN;AAAA,MAAA;AAAA,IAEJ;AAGI,QAAoB,0BAA0B,YAAY;AACpD,cAAA;AAAA,QACN;AAAA,MAAA;AAAA,IAEJ;AAEO,WAAA;AAAA,MACL,oBAAoB,eAAe;;AACjC,eAAO,YACL,oDAAe,gBAAf,YAA8B,kCAE9B,oDAAe,yBAAf,YAAuC;AAAA,MAE3C;AAAA,MACA,uBAAuB,eAAe;;AACpC,YAAI,CAAC,0BAA0B,EAAC,+CAAe,yBAAwB;AACrE,gBAAM,IAAI;AAAA,YACR;AAAA,UAAA;AAAA,QAEJ;AAEI,YAAoB,EAAC,+CAAe,UAAS;AACvC,kBAAA;AAAA,YACN;AAAA,UAAA;AAAA,QAEJ;AAEM,cAAA,oBAAmB,oDAAe,gBAAf,YAA8B;AAEhD,eAAA;AAAA,UAEL,gBACE,qBAAqB,YACjB,wBACA;AAAA,UACN,iBAAiB;AAAA,UACjB,wBAAwB;AAAA,UACxB,iBAAiB;AAAA,UACjB,qCACE,0DAAe,2BAAf,YAAyC,2BAAzC,YAAmE;AAAA,UACrE,IAAI,+CAAe,WACf,EAAC,+BAA+B,cAAc,QAAA,IAC9C,CAAC;AAAA,QAAA;AAAA,MAET;AAAA,MACA,sBAAsB,eAAe;;AACnC,YAAI,CAAC,yBAAyB,EAAC,+CAAe,wBAAuB;AACnE,gBAAM,IAAI;AAAA,YACR;AAAA,UAAA;AAAA,QAEJ;AAEM,cAAA,oBAAmB,oDAAe,gBAAf,YAA8B;AAEhD,eAAA;AAAA,UAEL,gBACE,qBAAqB,YACjB,wBACA;AAAA,UACN,iBAAiB;AAAA,UACjB,wBAAwB;AAAA,UACxB,iBAAiB;AAAA,UACjB,sCACE,0DAAe,0BAAf,YAAwC,0BAAxC,YAAiE;AAAA,QAAA;AAAA,MAEvE;AAAA,IAAA;AAAA,EAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|