@anker-in/campaign-ui 0.3.3 → 0.3.4
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/cjs/components/LiveChatWidget/LiveChatWidget.d.ts +21 -1
- package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js +1 -1
- package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/api/chat.d.ts +23 -2
- package/dist/cjs/components/LiveChatWidget/api/chat.js +2 -2
- package/dist/cjs/components/LiveChatWidget/api/chat.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js.map +2 -2
- package/dist/cjs/components/LiveChatWidget/components/ChatInput.d.ts +5 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatInput.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/ChatInput.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js +2 -2
- package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/ChatWindow.d.ts +5 -0
- package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/ComplianceDialog.d.ts +51 -0
- package/dist/cjs/components/LiveChatWidget/components/ComplianceDialog.js +33 -0
- package/dist/cjs/components/LiveChatWidget/components/ComplianceDialog.js.map +7 -0
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +2 -2
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +2 -2
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +17 -24
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js +1 -4
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +7 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +4 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +2 -2
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/components/MessageContent.js +1 -1
- package/dist/cjs/components/LiveChatWidget/components/MessageContent.js.map +2 -2
- package/dist/cjs/components/LiveChatWidget/components/MessageList.js +2 -2
- package/dist/cjs/components/LiveChatWidget/components/MessageList.js.map +2 -2
- package/dist/cjs/components/LiveChatWidget/constants.d.ts +5 -0
- package/dist/cjs/components/LiveChatWidget/constants.js +1 -1
- package/dist/cjs/components/LiveChatWidget/constants.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.d.ts +9 -0
- package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js +1 -1
- package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/hooks/useChatState.d.ts +35 -2
- package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js +1 -1
- package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js.map +3 -3
- package/dist/cjs/components/LiveChatWidget/index.d.ts +1 -1
- package/dist/cjs/components/LiveChatWidget/index.js +1 -1
- package/dist/cjs/components/LiveChatWidget/index.js.map +2 -2
- package/dist/cjs/components/LiveChatWidget/types.d.ts +212 -3
- package/dist/cjs/components/LiveChatWidget/types.js +1 -1
- package/dist/cjs/components/LiveChatWidget/types.js.map +1 -1
- package/dist/cjs/components/LiveChatWidget/utils/fetcher.d.ts +42 -0
- package/dist/cjs/components/LiveChatWidget/utils/fetcher.js +2 -0
- package/dist/cjs/components/LiveChatWidget/utils/fetcher.js.map +7 -0
- package/dist/cjs/components/chat/markdown.js +1 -1
- package/dist/cjs/components/chat/markdown.js.map +2 -2
- package/dist/cjs/components/credits/creditsBanner/index.js +2 -2
- package/dist/cjs/components/credits/creditsBanner/index.js.map +2 -2
- package/dist/cjs/components/index.d.ts +2 -0
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/index.js.map +3 -3
- package/dist/cjs/stories/LiveChatWidget.stories.d.ts +1 -79
- package/dist/cjs/stories/LiveChatWidget.stories.js +8 -47
- package/dist/cjs/stories/LiveChatWidget.stories.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.d.ts +21 -1
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.js +1 -1
- package/dist/esm/components/LiveChatWidget/LiveChatWidget.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/api/chat.d.ts +23 -2
- package/dist/esm/components/LiveChatWidget/api/chat.js +2 -2
- package/dist/esm/components/LiveChatWidget/api/chat.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/ChatHeader.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/ChatHeader.js.map +2 -2
- package/dist/esm/components/LiveChatWidget/components/ChatInput.d.ts +5 -0
- package/dist/esm/components/LiveChatWidget/components/ChatInput.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/ChatInput.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/ChatMessage.js +2 -2
- package/dist/esm/components/LiveChatWidget/components/ChatMessage.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/ChatWindow.d.ts +5 -0
- package/dist/esm/components/LiveChatWidget/components/ChatWindow.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/ChatWindow.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/ComplianceDialog.d.ts +51 -0
- package/dist/esm/components/LiveChatWidget/components/ComplianceDialog.js +33 -0
- package/dist/esm/components/LiveChatWidget/components/ComplianceDialog.js.map +7 -0
- package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +2 -2
- package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +2 -2
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +17 -24
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js +1 -4
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +7 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +4 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +2 -2
- package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/components/MessageContent.js +1 -1
- package/dist/esm/components/LiveChatWidget/components/MessageContent.js.map +2 -2
- package/dist/esm/components/LiveChatWidget/components/MessageList.js +2 -2
- package/dist/esm/components/LiveChatWidget/components/MessageList.js.map +2 -2
- package/dist/esm/components/LiveChatWidget/constants.d.ts +5 -0
- package/dist/esm/components/LiveChatWidget/constants.js +1 -1
- package/dist/esm/components/LiveChatWidget/constants.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.d.ts +9 -0
- package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js +1 -1
- package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/hooks/useChatState.d.ts +35 -2
- package/dist/esm/components/LiveChatWidget/hooks/useChatState.js +1 -1
- package/dist/esm/components/LiveChatWidget/hooks/useChatState.js.map +3 -3
- package/dist/esm/components/LiveChatWidget/index.d.ts +1 -1
- package/dist/esm/components/LiveChatWidget/index.js +1 -1
- package/dist/esm/components/LiveChatWidget/index.js.map +2 -2
- package/dist/esm/components/LiveChatWidget/types.d.ts +212 -3
- package/dist/esm/components/LiveChatWidget/utils/fetcher.d.ts +42 -0
- package/dist/esm/components/LiveChatWidget/utils/fetcher.js +2 -0
- package/dist/esm/components/LiveChatWidget/utils/fetcher.js.map +7 -0
- package/dist/esm/components/chat/markdown.js +1 -1
- package/dist/esm/components/chat/markdown.js.map +2 -2
- package/dist/esm/components/credits/creditsBanner/index.js +2 -2
- package/dist/esm/components/credits/creditsBanner/index.js.map +2 -2
- package/dist/esm/components/index.d.ts +2 -0
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/index.js.map +3 -3
- package/dist/esm/stories/LiveChatWidget.stories.d.ts +1 -79
- package/dist/esm/stories/LiveChatWidget.stories.js +8 -47
- package/dist/esm/stories/LiveChatWidget.stories.js.map +3 -3
- package/dist/index.d.mts +1305 -0
- package/dist/index.d.ts +1305 -0
- package/dist/index.js +26656 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +26641 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +9 -2
- package/src/components/LiveChatWidget/LiveChatWidget.tsx +887 -0
- package/src/components/LiveChatWidget/api/chat.ts +175 -0
- package/src/components/LiveChatWidget/components/ChatBubble.tsx +152 -0
- package/src/components/LiveChatWidget/components/ChatHeader.tsx +150 -0
- package/src/components/LiveChatWidget/components/ChatInput.tsx +253 -0
- package/src/components/LiveChatWidget/components/ChatMessage.tsx +190 -0
- package/src/components/LiveChatWidget/components/ChatWindow.tsx +363 -0
- package/src/components/LiveChatWidget/components/ComplianceDialog.tsx +216 -0
- package/src/components/LiveChatWidget/components/MessageContent/CartCard.tsx +202 -0
- package/src/components/LiveChatWidget/components/MessageContent/ErrorBlock.tsx +75 -0
- package/src/components/LiveChatWidget/components/MessageContent/FAQList.tsx +128 -0
- package/src/components/LiveChatWidget/components/MessageContent/PolicyBlock.tsx +152 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductCard.tsx +227 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductComparison.tsx +377 -0
- package/src/components/LiveChatWidget/components/MessageContent/ProductList.tsx +293 -0
- package/src/components/LiveChatWidget/components/MessageContent/PromotionList.tsx +170 -0
- package/src/components/LiveChatWidget/components/MessageContent/QuickReplies.tsx +91 -0
- package/src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx +110 -0
- package/src/components/LiveChatWidget/components/MessageContent/ThinkingBlock.tsx +53 -0
- package/src/components/LiveChatWidget/components/MessageContent/index.ts +16 -0
- package/src/components/LiveChatWidget/components/MessageContent.tsx +113 -0
- package/src/components/LiveChatWidget/components/MessageList.tsx +261 -0
- package/src/components/LiveChatWidget/components/ScrollAnchor.tsx +75 -0
- package/src/components/LiveChatWidget/constants.ts +36 -0
- package/src/components/LiveChatWidget/hooks/useChatAPI.ts +146 -0
- package/src/components/LiveChatWidget/hooks/useChatState.ts +1090 -0
- package/src/components/LiveChatWidget/hooks/useSession.ts +123 -0
- package/src/components/LiveChatWidget/index.tsx +63 -0
- package/src/components/LiveChatWidget/types.ts +1011 -0
- package/src/components/LiveChatWidget/utils/cartTransformers.ts +72 -0
- package/src/components/LiveChatWidget/utils/fetcher.ts +131 -0
- package/src/components/LiveChatWidget/utils/messageRenderers.ts +120 -0
- package/src/components/LiveChatWidget/utils/productTransformers.ts +149 -0
- package/src/components/LiveChatWidget/utils/userId.ts +140 -0
- package/src/components/LiveChatWidget/utils/validation.ts +99 -0
- package/src/components/chat/markdown.tsx +1 -1
- package/src/components/credits/creditsBanner/index.tsx +5 -5
- package/src/components/index.ts +23 -0
- package/src/stories/LiveChatWidget.stories.tsx +322 -0
- package/src/styles/livechat.css +317 -0
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.d.ts +0 -7
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js +0 -2
- package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/atobID.d.ts +0 -1
- package/dist/cjs/components/credits/context/utils/atobID.js +0 -2
- package/dist/cjs/components/credits/context/utils/atobID.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.d.ts +0 -5
- package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js +0 -2
- package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.d.ts +0 -8
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js +0 -2
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +0 -9
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +0 -2
- package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +0 -7
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.d.ts +0 -6
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js +0 -2
- package/dist/cjs/components/credits/context/utils/variantGetCoupon.js.map +0 -7
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.d.ts +0 -7
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js +0 -2
- package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js.map +0 -7
- package/dist/esm/components/credits/context/utils/atobID.d.ts +0 -1
- package/dist/esm/components/credits/context/utils/atobID.js +0 -2
- package/dist/esm/components/credits/context/utils/atobID.js.map +0 -7
- package/dist/esm/components/credits/context/utils/functionDiscountCalculate.d.ts +0 -5
- package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js +0 -2
- package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js.map +0 -7
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.d.ts +0 -8
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js +0 -2
- package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js.map +0 -7
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +0 -9
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +0 -2
- package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +0 -7
- package/dist/esm/components/credits/context/utils/variantGetCoupon.d.ts +0 -6
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js +0 -2
- package/dist/esm/components/credits/context/utils/variantGetCoupon.js.map +0 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@18.3.1/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@18.3.1/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@18.3.1/node_modules/use-sync-external-store/shim/index.js","../../../node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.development.js","../../../node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js","../../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/lib/has.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/checkPropTypes.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/factoryWithTypeCheckers.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/factoryWithThrowingShims.js","../../../node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/helpers/tabbable.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/helpers/focusManager.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/helpers/scopeTab.js","../../../node_modules/.pnpm/warning@4.0.3/node_modules/warning/warning.js","../../../node_modules/.pnpm/exenv@1.2.2/node_modules/exenv/index.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/helpers/safeHTMLElement.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/helpers/ariaAppHider.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/helpers/classList.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/helpers/portalOpenInstances.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/helpers/bodyTrap.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/components/ModalPortal.js","../../../node_modules/.pnpm/react-lifecycles-compat@3.0.4/node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/components/Modal.js","../../../node_modules/.pnpm/react-modal@3.16.3_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-modal/lib/index.js","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../../../node_modules/.pnpm/js-cookie@2.2.1/node_modules/js-cookie/src/js.cookie.js","../../../node_modules/.pnpm/toggle-selection@1.0.6/node_modules/toggle-selection/index.js","../../../node_modules/.pnpm/copy-to-clipboard@3.3.3/node_modules/copy-to-clipboard/index.js","../../../node_modules/.pnpm/@swc+helpers@0.5.5/node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../../node_modules/.pnpm/@swc+helpers@0.5.5/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/remove-trailing-slash.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/get-asset-path-from-route.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/trusted-types.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/request-idle-callback.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/build/deployment-id.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/route-loader.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/head-manager-context.shared-runtime.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/head-manager.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/script.tsx","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/is-plain-object.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/lib/is-error.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/sorted-routes.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/page-path/ensure-leading-slash.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/segment.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/app-paths.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/server/future/helpers/interception-routes.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/is-dynamic.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/index.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/page-path/normalize-path-sep.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/page-path/denormalize-page-path.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/i18n/normalize-locale-path.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/mitt.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/utils.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/querystring.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/parse-relative-url.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/dist/compiled/path-to-regexp/index.js","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/path-match.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/escape-regexp.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/parse-url.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/components/app-router-headers.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/dist/compiled/cookie/index.js","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/server/api-utils/get-cookie-parser.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/prepare-destination.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/parse-path.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/path-has-prefix.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/has-base-path.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/remove-base-path.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/resolve-rewrites.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/route-matcher.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/route-regex.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/format-url.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/i18n/detect-domain-locale.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/detect-domain-locale.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/normalize-trailing-slash.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/add-path-prefix.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/add-locale.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/add-locale.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/remove-locale.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/add-base-path.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/omit.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/is-local-url.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/interpolate-as.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/resolve-href.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/lib/is-api-route.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/remove-path-prefix.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/get-next-pathname-info.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/add-path-suffix.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/format-next-pathname-info.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/compare-states.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/is-bot.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/utils/handle-smooth-scroll.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/dist/compiled/react-is/cjs/react-is.production.min.js","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/dist/compiled/react-is/index.js","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/dist/compiled/gzip-size/index.js","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/bloom-filter.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router/router.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/shared/lib/router-context.shared-runtime.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/with-router.tsx","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/src/client/router.ts","../../../node_modules/.pnpm/next@14.2.3_@babel+core@7.28.5_@opentelemetry+api@1.9.0_babel-plugin-macros@3.1.0_react-dom@1_5mfwnxvshge4ctowfwp7upi7hm/node_modules/next/router.js","../../../node_modules/.pnpm/strict-uri-encode@2.0.0/node_modules/strict-uri-encode/index.js","../../../node_modules/.pnpm/decode-uri-component@0.2.2/node_modules/decode-uri-component/index.js","../../../node_modules/.pnpm/split-on-first@1.1.0/node_modules/split-on-first/index.js","../../../node_modules/.pnpm/filter-obj@1.1.0/node_modules/filter-obj/index.js","../../../node_modules/.pnpm/query-string@7.1.3/node_modules/query-string/index.js","../src/components/chat/index.tsx","../src/components/chat/button.tsx","../src/components/chat/messages.tsx","../src/components/chat/markdown.tsx","../../../node_modules/.pnpm/micromark-util-chunked@1.1.0/node_modules/micromark-util-chunked/index.js","../../../node_modules/.pnpm/micromark-util-combine-extensions@1.1.0/node_modules/micromark-util-combine-extensions/index.js","../../../node_modules/.pnpm/micromark-util-character@1.2.0/node_modules/micromark-util-character/lib/unicode-punctuation-regex.js","../../../node_modules/.pnpm/micromark-util-character@1.2.0/node_modules/micromark-util-character/index.js","../../../node_modules/.pnpm/micromark-extension-gfm-autolink-literal@1.0.5/node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../../../node_modules/.pnpm/micromark-util-classify-character@1.1.0/node_modules/micromark-util-classify-character/index.js","../../../node_modules/.pnpm/micromark-util-resolve-all@1.1.0/node_modules/micromark-util-resolve-all/index.js","../../../node_modules/.pnpm/micromark-factory-space@1.1.0/node_modules/micromark-factory-space/index.js","../../../node_modules/.pnpm/micromark-core-commonmark@1.1.0/node_modules/micromark-core-commonmark/lib/blank-line.js","../../../node_modules/.pnpm/character-entities@2.0.2/node_modules/character-entities/index.js","../../../node_modules/.pnpm/decode-named-character-reference@1.2.0/node_modules/decode-named-character-reference/index.js","../../../node_modules/.pnpm/micromark-util-normalize-identifier@1.1.0/node_modules/micromark-util-normalize-identifier/index.js","../../../node_modules/.pnpm/micromark-extension-gfm-footnote@1.1.2/node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../../../node_modules/.pnpm/micromark-extension-gfm-strikethrough@1.0.7/node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../../../node_modules/.pnpm/micromark-extension-gfm-table@1.0.7/node_modules/micromark-extension-gfm-table/lib/edit-map.js","../../../node_modules/.pnpm/micromark-extension-gfm-table@1.0.7/node_modules/micromark-extension-gfm-table/lib/infer.js","../../../node_modules/.pnpm/micromark-extension-gfm-table@1.0.7/node_modules/micromark-extension-gfm-table/lib/syntax.js","../../../node_modules/.pnpm/micromark-extension-gfm-task-list-item@1.0.5/node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../../../node_modules/.pnpm/micromark-extension-gfm@2.0.3/node_modules/micromark-extension-gfm/index.js","../../../node_modules/.pnpm/ccount@2.0.1/node_modules/ccount/index.js","../../../node_modules/.pnpm/escape-string-regexp@5.0.0/node_modules/escape-string-regexp/index.js","../../../node_modules/.pnpm/unist-util-is@5.2.1/node_modules/unist-util-is/lib/index.js","../../../node_modules/.pnpm/unist-util-visit-parents@5.1.3/node_modules/unist-util-visit-parents/lib/color.js","../../../node_modules/.pnpm/unist-util-visit-parents@5.1.3/node_modules/unist-util-visit-parents/lib/index.js","../../../node_modules/.pnpm/mdast-util-find-and-replace@2.2.2/node_modules/mdast-util-find-and-replace/lib/index.js","../../../node_modules/.pnpm/mdast-util-gfm-autolink-literal@1.0.3/node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../../../node_modules/.pnpm/micromark-util-decode-numeric-character-reference@1.1.0/node_modules/micromark-util-decode-numeric-character-reference/index.js","../../../node_modules/.pnpm/micromark-util-decode-string@1.1.0/node_modules/micromark-util-decode-string/index.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/association.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/container-flow.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/indent-lines.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/pattern-compile.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/safe.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/track.js","../../../node_modules/.pnpm/mdast-util-gfm-footnote@1.0.2/node_modules/mdast-util-gfm-footnote/lib/index.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js","../../../node_modules/.pnpm/mdast-util-gfm-strikethrough@1.0.3/node_modules/mdast-util-gfm-strikethrough/lib/index.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../../../node_modules/.pnpm/markdown-table@3.0.4/node_modules/markdown-table/index.js","../../../node_modules/.pnpm/mdast-util-gfm-table@1.0.7/node_modules/mdast-util-gfm-table/lib/index.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../../../node_modules/.pnpm/mdast-util-to-markdown@1.5.0/node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../../../node_modules/.pnpm/mdast-util-gfm-task-list-item@1.0.2/node_modules/mdast-util-gfm-task-list-item/lib/index.js","../../../node_modules/.pnpm/mdast-util-gfm@2.0.2/node_modules/mdast-util-gfm/lib/index.js","../../../node_modules/.pnpm/remark-gfm@3.0.1/node_modules/remark-gfm/index.js","../../../node_modules/.pnpm/micromark-extension-math@2.1.2/node_modules/micromark-extension-math/lib/math-flow.js","../../../node_modules/.pnpm/micromark-extension-math@2.1.2/node_modules/micromark-extension-math/lib/math-text.js","../../../node_modules/.pnpm/micromark-extension-math@2.1.2/node_modules/micromark-extension-math/lib/syntax.js","../../../node_modules/.pnpm/longest-streak@3.1.0/node_modules/longest-streak/index.js","../../../node_modules/.pnpm/mdast-util-math@2.0.2/node_modules/mdast-util-math/lib/index.js","../../../node_modules/.pnpm/remark-math@5.1.1/node_modules/remark-math/index.js","../src/components/chat/response.tsx","../src/components/chat/suggestions.tsx","../src/components/chat/action.tsx","../src/components/chat/utils.ts","../src/components/credits/context/provider.tsx","../../../node_modules/.pnpm/swr@2.3.6_react@18.3.1/node_modules/swr/dist/mutation/index.mjs","../../../node_modules/.pnpm/swr@2.3.6_react@18.3.1/node_modules/swr/dist/index/index.mjs","../../../node_modules/.pnpm/swr@2.3.6_react@18.3.1/node_modules/swr/dist/_internal/config-context-client-BoS53ST9.mjs","../../../node_modules/.pnpm/swr@2.3.6_react@18.3.1/node_modules/swr/dist/_internal/events.mjs","../../../node_modules/.pnpm/dequal@2.0.3/node_modules/dequal/lite/index.mjs","../../../node_modules/.pnpm/swr@2.3.6_react@18.3.1/node_modules/swr/dist/_internal/constants.mjs","../../../node_modules/.pnpm/swr@2.3.6_react@18.3.1/node_modules/swr/dist/_internal/index.mjs","../src/components/credits/context/hooks/useUploadReceipt.tsx","../src/components/credits/modal/creditsUploadReceiptModal.tsx","../src/components/credits/modal/modalContainer.tsx","../src/constants.ts","../src/components/credits/creditsBanner/index.tsx","../src/components/credits/creditsBenefits/index.tsx","../src/components/credits/creditsBenefits/BenefitItem.tsx","../src/components/credits/creditsBenefits/IconInfo.tsx","../src/components/credits/creditsInfoCard/index.tsx","../src/components/credits/context/utils.ts","../src/components/credits/context/const.ts","../src/components/credits/modal/activitiesModal.tsx","../src/components/credits/context/hooks/useActivities.ts","../src/components/credits/context/hooks/useAlpcFetch.ts","../src/components/credits/modal/loadingDots.tsx","../src/components/credits/modal/MyRewardsModal.tsx","../src/components/credits/modal/tip.tsx","../src/components/credits/context/hooks/useMyRewards.ts","../src/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.tsx","../../../node_modules/.pnpm/@heroicons+react@2.2.0_react@18.3.1/node_modules/@heroicons/react/24/outline/esm/ChevronDownIcon.js","../../../node_modules/.pnpm/@heroicons+react@2.2.0_react@18.3.1/node_modules/@heroicons/react/24/outline/esm/ChevronUpIcon.js","../src/components/credits/creditsWaysToGetCredits/useActions.ts","../src/components/credits/context/hooks/useReceiptUploaded.ts","../src/components/credits/context/hooks/useFirstPurchaseFinished.ts","../src/components/credits/context/hooks/useSubscribed.ts","../src/components/registration/authCodeActivate/index.tsx","../src/components/registration/authCodeActivate/Message.tsx","../src/components/registration/context/provider.tsx","../src/components/registration/modalContainer.tsx","../src/components/credits/modal/subscribeModal.tsx","../src/components/credits/creditsFaq/index.tsx","../src/components/credits/creditsFaq/faqItem/FaqItem.tsx","../src/components/credits/creditsCash/CreditsCash.tsx","../src/components/credits/creditsCash/RedeemableItem.tsx","../src/components/credits/context/hooks/useRedeemCoupon.ts","../src/components/credits/context/hooks/useRedeemAndBuy.ts","../src/components/credits/context/hooks/useRedeemableList.ts","../src/components/credits/modal/rulesModal.tsx","../src/components/credits/creditsRedeemList/CreditsRedeemList.tsx","../src/components/credits/creditsRedeemList/RedeemCouponModal.tsx","../src/components/credits/context/hooks/useCopy.ts","../src/components/credits/creditsRedeemList/RedeemProductModal/NonProductValue.tsx","../src/components/credits/creditsRedeemList/RedeemProductModal/index.tsx","../src/components/credits/context/hooks/useCountries.ts","../src/components/credits/context/hooks/useAddressValidate.ts","../src/components/credits/context/hooks/useRedeemProduct.ts","../src/components/credits/creditsRedeemList/RedeemProductModal/Error.tsx","../src/components/credits/creditsRedeemList/RedeemProductModal/Success.tsx","../src/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.tsx","../src/components/credits/creditsRedeemList/RedeemProductModal/Address.tsx","../src/components/credits/creditsRedeemList/AddressForm/index.tsx","../src/components/credits/creditsRedeemList/AddressForm/CountrySelect.tsx","../src/components/credits/context/hooks/useClickOutside.ts","../src/components/credits/creditsRedeemList/AddressForm/FormItem.tsx","../src/components/credits/creditsRedeemList/AddressForm/Input.tsx","../src/components/credits/creditsRedeemList/AddressForm/StateSelect.tsx","../src/components/credits/creditsRedeemList/RedeemProductModal/Init.tsx","../src/components/credits/creditsRedeemList/RedeemableItem.tsx","../src/components/credits/creditsRedeemList/NonProductValue.tsx","../src/components/LiveChatWidget/LiveChatWidget.tsx","../src/components/LiveChatWidget/constants.ts","../src/components/LiveChatWidget/components/ChatBubble.tsx","../src/components/LiveChatWidget/components/ChatWindow.tsx","../src/components/LiveChatWidget/components/ChatHeader.tsx","../src/components/LiveChatWidget/components/MessageList.tsx","../src/components/LiveChatWidget/components/MessageContent.tsx","../src/components/LiveChatWidget/components/ChatMessage.tsx","../src/components/LiveChatWidget/components/ScrollAnchor.tsx","../src/components/LiveChatWidget/components/ChatInput.tsx","../src/components/LiveChatWidget/hooks/useChatState.ts","../src/components/LiveChatWidget/utils/userId.ts","../src/components/LiveChatWidget/hooks/useSession.ts","../src/components/LiveChatWidget/utils/productTransformers.ts","../src/components/LiveChatWidget/utils/cartTransformers.ts","../src/components/LiveChatWidget/hooks/useChatAPI.ts","../src/components/LiveChatWidget/utils/fetcher.ts","../src/components/LiveChatWidget/api/chat.ts","../src/components/LiveChatWidget/utils/messageRenderers.ts","../src/components/LiveChatWidget/utils/validation.ts","../src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx","../src/components/LiveChatWidget/components/MessageContent/ProductCard.tsx","../src/components/LiveChatWidget/components/MessageContent/ProductList.tsx","../src/components/LiveChatWidget/components/MessageContent/ProductComparison.tsx","../src/components/LiveChatWidget/components/MessageContent/PolicyBlock.tsx","../src/components/LiveChatWidget/components/MessageContent/QuickReplies.tsx","../src/components/LiveChatWidget/components/MessageContent/ThinkingBlock.tsx","../src/components/LiveChatWidget/components/MessageContent/ErrorBlock.tsx","../src/components/LiveChatWidget/components/MessageContent/FAQList.tsx","../src/components/LiveChatWidget/components/MessageContent/PromotionList.tsx","../src/components/LiveChatWidget/components/MessageContent/CartCard.tsx","../src/templates/Credits.tsx","../src/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.tsx","../src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx","../src/components/credits/creditsMemberPrice/MemberPriceItem.tsx","../src/components/credits/creditsMemberPrice/Pagination.tsx","../src/components/credits/creditsNavigation/CreditsNavigation.tsx"],"sourcesContent":["/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"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 var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/** @license React v16.13.1\n * react-is.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\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.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\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\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 */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = findTabbableDescendants;\n/*!\n * Adapted from jQuery UI core\n *\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/ui-core/\n */\n\nvar DISPLAY_NONE = \"none\";\nvar DISPLAY_CONTENTS = \"contents\";\n\n// match the whole word to prevent fuzzy searching\nvar tabbableNode = /^(input|select|textarea|button|object|iframe)$/;\n\nfunction isNotOverflowing(element, style) {\n return style.getPropertyValue(\"overflow\") !== \"visible\" ||\n // if 'overflow: visible' set, check if there is actually any overflow\n element.scrollWidth <= 0 && element.scrollHeight <= 0;\n}\n\nfunction hidesContents(element) {\n var zeroSize = element.offsetWidth <= 0 && element.offsetHeight <= 0;\n\n // If the node is empty, this is good enough\n if (zeroSize && !element.innerHTML) return true;\n\n try {\n // Otherwise we need to check some styles\n var style = window.getComputedStyle(element);\n var displayValue = style.getPropertyValue(\"display\");\n return zeroSize ? displayValue !== DISPLAY_CONTENTS && isNotOverflowing(element, style) : displayValue === DISPLAY_NONE;\n } catch (exception) {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to inspect element style\");\n return false;\n }\n}\n\nfunction visible(element) {\n var parentElement = element;\n var rootNode = element.getRootNode && element.getRootNode();\n while (parentElement) {\n if (parentElement === document.body) break;\n\n // if we are not hidden yet, skip to checking outside the Web Component\n if (rootNode && parentElement === rootNode) parentElement = rootNode.host.parentNode;\n\n if (hidesContents(parentElement)) return false;\n parentElement = parentElement.parentNode;\n }\n return true;\n}\n\nfunction focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n var res = tabbableNode.test(nodeName) && !element.disabled || (nodeName === \"a\" ? element.href || isTabIndexNotNaN : isTabIndexNotNaN);\n return res && visible(element);\n}\n\nfunction tabbable(element) {\n var tabIndex = element.getAttribute(\"tabindex\");\n if (tabIndex === null) tabIndex = undefined;\n var isTabIndexNaN = isNaN(tabIndex);\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN);\n}\n\nfunction findTabbableDescendants(element) {\n var descendants = [].slice.call(element.querySelectorAll(\"*\"), 0).reduce(function (finished, el) {\n return finished.concat(!el.shadowRoot ? [el] : findTabbableDescendants(el.shadowRoot));\n }, []);\n return descendants.filter(tabbable);\n}\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.resetState = resetState;\nexports.log = log;\nexports.handleBlur = handleBlur;\nexports.handleFocus = handleFocus;\nexports.markForFocusLater = markForFocusLater;\nexports.returnFocus = returnFocus;\nexports.popWithoutFocus = popWithoutFocus;\nexports.setupScopedFocus = setupScopedFocus;\nexports.teardownScopedFocus = teardownScopedFocus;\n\nvar _tabbable = require(\"../helpers/tabbable\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar focusLaterElements = [];\nvar modalElement = null;\nvar needToFocus = false;\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction resetState() {\n focusLaterElements = [];\n}\n\n/* istanbul ignore next */\nfunction log() {\n if (process.env.NODE_ENV !== \"production\") {\n console.log(\"focusManager ----------\");\n focusLaterElements.forEach(function (f) {\n var check = f || {};\n console.log(check.nodeName, check.className, check.id);\n });\n console.log(\"end focusManager ----------\");\n }\n}\n/* eslint-enable no-console */\n\nfunction handleBlur() {\n needToFocus = true;\n}\n\nfunction handleFocus() {\n if (needToFocus) {\n needToFocus = false;\n if (!modalElement) {\n return;\n }\n // need to see how jQuery shims document.on('focusin') so we don't need the\n // setTimeout, firefox doesn't support focusin, if it did, we could focus\n // the element outside of a setTimeout. Side-effect of this implementation\n // is that the document.body gets focus, and then we focus our element right\n // after, seems fine.\n setTimeout(function () {\n if (modalElement.contains(document.activeElement)) {\n return;\n }\n var el = (0, _tabbable2.default)(modalElement)[0] || modalElement;\n el.focus();\n }, 0);\n }\n}\n\nfunction markForFocusLater() {\n focusLaterElements.push(document.activeElement);\n}\n\n/* eslint-disable no-console */\nfunction returnFocus() {\n var preventScroll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var toFocus = null;\n try {\n if (focusLaterElements.length !== 0) {\n toFocus = focusLaterElements.pop();\n toFocus.focus({ preventScroll: preventScroll });\n }\n return;\n } catch (e) {\n console.warn([\"You tried to return focus to\", toFocus, \"but it is not in the DOM anymore\"].join(\" \"));\n }\n}\n/* eslint-enable no-console */\n\nfunction popWithoutFocus() {\n focusLaterElements.length > 0 && focusLaterElements.pop();\n}\n\nfunction setupScopedFocus(element) {\n modalElement = element;\n\n if (window.addEventListener) {\n window.addEventListener(\"blur\", handleBlur, false);\n document.addEventListener(\"focus\", handleFocus, true);\n } else {\n window.attachEvent(\"onBlur\", handleBlur);\n document.attachEvent(\"onFocus\", handleFocus);\n }\n}\n\nfunction teardownScopedFocus() {\n modalElement = null;\n\n if (window.addEventListener) {\n window.removeEventListener(\"blur\", handleBlur);\n document.removeEventListener(\"focus\", handleFocus);\n } else {\n window.detachEvent(\"onBlur\", handleBlur);\n document.detachEvent(\"onFocus\", handleFocus);\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = scopeTab;\n\nvar _tabbable = require(\"./tabbable\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getActiveElement() {\n var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n\n return el.activeElement.shadowRoot ? getActiveElement(el.activeElement.shadowRoot) : el.activeElement;\n}\n\nfunction scopeTab(node, event) {\n var tabbable = (0, _tabbable2.default)(node);\n\n if (!tabbable.length) {\n // Do nothing, since there are no elements that can receive focus.\n event.preventDefault();\n return;\n }\n\n var target = void 0;\n\n var shiftKey = event.shiftKey;\n var head = tabbable[0];\n var tail = tabbable[tabbable.length - 1];\n var activeElement = getActiveElement();\n\n // proceed with default browser behavior on tab.\n // Focus on last element on shift + tab.\n if (node === activeElement) {\n if (!shiftKey) return;\n target = tail;\n }\n\n if (tail === activeElement && !shiftKey) {\n target = head;\n }\n\n if (head === activeElement && shiftKey) {\n target = tail;\n }\n\n if (target) {\n event.preventDefault();\n target.focus();\n return;\n }\n\n // Safari radio issue.\n //\n // Safari does not move the focus to the radio button,\n // so we need to force it to really walk through all elements.\n //\n // This is very error prone, since we are trying to guess\n // if it is a safari browser from the first occurence between\n // chrome or safari.\n //\n // The chrome user agent contains the first ocurrence\n // as the 'chrome/version' and later the 'safari/version'.\n var checkSafari = /(\\bChrome\\b|\\bSafari\\b)\\//.exec(navigator.userAgent);\n var isSafariDesktop = checkSafari != null && checkSafari[1] != \"Chrome\" && /\\biPod\\b|\\biPad\\b/g.exec(navigator.userAgent) == null;\n\n // If we are not in safari desktop, let the browser control\n // the focus\n if (!isSafariDesktop) return;\n\n var x = tabbable.indexOf(activeElement);\n\n if (x > -1) {\n x += shiftKey ? -1 : 1;\n }\n\n target = tabbable[x];\n\n // If the tabbable element does not exist,\n // focus head/tail based on shiftKey\n if (typeof target === \"undefined\") {\n event.preventDefault();\n target = shiftKey ? tail : head;\n target.focus();\n return;\n }\n\n event.preventDefault();\n\n target.focus();\n}\nmodule.exports = exports[\"default\"];","/**\n * Copyright (c) 2014-present, Facebook, Inc.\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\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","/*!\n Copyright (c) 2015 Jed Watson.\n Based on code that is Copyright 2013-2015, Facebook, Inc.\n All rights reserved.\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar canUseDOM = !!(\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.document &&\n\t\twindow.document.createElement\n\t);\n\n\tvar ExecutionEnvironment = {\n\n\t\tcanUseDOM: canUseDOM,\n\n\t\tcanUseWorkers: typeof Worker !== 'undefined',\n\n\t\tcanUseEventListeners:\n\t\t\tcanUseDOM && !!(window.addEventListener || window.attachEvent),\n\n\t\tcanUseViewport: canUseDOM && !!window.screen\n\n\t};\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn ExecutionEnvironment;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = ExecutionEnvironment;\n\t} else {\n\t\twindow.ExecutionEnvironment = ExecutionEnvironment;\n\t}\n\n}());\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.canUseDOM = exports.SafeNodeList = exports.SafeHTMLCollection = undefined;\n\nvar _exenv = require(\"exenv\");\n\nvar _exenv2 = _interopRequireDefault(_exenv);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar EE = _exenv2.default;\n\nvar SafeHTMLElement = EE.canUseDOM ? window.HTMLElement : {};\n\nvar SafeHTMLCollection = exports.SafeHTMLCollection = EE.canUseDOM ? window.HTMLCollection : {};\n\nvar SafeNodeList = exports.SafeNodeList = EE.canUseDOM ? window.NodeList : {};\n\nvar canUseDOM = exports.canUseDOM = EE.canUseDOM;\n\nexports.default = SafeHTMLElement;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.resetState = resetState;\nexports.log = log;\nexports.assertNodeList = assertNodeList;\nexports.setElement = setElement;\nexports.validateElement = validateElement;\nexports.hide = hide;\nexports.show = show;\nexports.documentNotReadyOrSSRTesting = documentNotReadyOrSSRTesting;\n\nvar _warning = require(\"warning\");\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _safeHTMLElement = require(\"./safeHTMLElement\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar globalElement = null;\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction resetState() {\n if (globalElement) {\n if (globalElement.removeAttribute) {\n globalElement.removeAttribute(\"aria-hidden\");\n } else if (globalElement.length != null) {\n globalElement.forEach(function (element) {\n return element.removeAttribute(\"aria-hidden\");\n });\n } else {\n document.querySelectorAll(globalElement).forEach(function (element) {\n return element.removeAttribute(\"aria-hidden\");\n });\n }\n }\n globalElement = null;\n}\n\n/* istanbul ignore next */\nfunction log() {\n if (process.env.NODE_ENV !== \"production\") {\n var check = globalElement || {};\n console.log(\"ariaAppHider ----------\");\n console.log(check.nodeName, check.className, check.id);\n console.log(\"end ariaAppHider ----------\");\n }\n}\n/* eslint-enable no-console */\n\nfunction assertNodeList(nodeList, selector) {\n if (!nodeList || !nodeList.length) {\n throw new Error(\"react-modal: No elements were found for selector \" + selector + \".\");\n }\n}\n\nfunction setElement(element) {\n var useElement = element;\n if (typeof useElement === \"string\" && _safeHTMLElement.canUseDOM) {\n var el = document.querySelectorAll(useElement);\n assertNodeList(el, useElement);\n useElement = el;\n }\n globalElement = useElement || globalElement;\n return globalElement;\n}\n\nfunction validateElement(appElement) {\n var el = appElement || globalElement;\n if (el) {\n return Array.isArray(el) || el instanceof HTMLCollection || el instanceof NodeList ? el : [el];\n } else {\n (0, _warning2.default)(false, [\"react-modal: App element is not defined.\", \"Please use `Modal.setAppElement(el)` or set `appElement={el}`.\", \"This is needed so screen readers don't see main content\", \"when modal is opened. It is not recommended, but you can opt-out\", \"by setting `ariaHideApp={false}`.\"].join(\" \"));\n\n return [];\n }\n}\n\nfunction hide(appElement) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = validateElement(appElement)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var el = _step.value;\n\n el.setAttribute(\"aria-hidden\", \"true\");\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n\nfunction show(appElement) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = validateElement(appElement)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var el = _step2.value;\n\n el.removeAttribute(\"aria-hidden\");\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n}\n\nfunction documentNotReadyOrSSRTesting() {\n globalElement = null;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.resetState = resetState;\nexports.log = log;\nvar htmlClassList = {};\nvar docBodyClassList = {};\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction removeClass(at, cls) {\n at.classList.remove(cls);\n}\n\n/* istanbul ignore next */\nfunction resetState() {\n var htmlElement = document.getElementsByTagName(\"html\")[0];\n for (var cls in htmlClassList) {\n removeClass(htmlElement, htmlClassList[cls]);\n }\n\n var body = document.body;\n for (var _cls in docBodyClassList) {\n removeClass(body, docBodyClassList[_cls]);\n }\n\n htmlClassList = {};\n docBodyClassList = {};\n}\n\n/* istanbul ignore next */\nfunction log() {\n if (process.env.NODE_ENV !== \"production\") {\n var classes = document.getElementsByTagName(\"html\")[0].className;\n var buffer = \"Show tracked classes:\\n\\n\";\n\n buffer += \"<html /> (\" + classes + \"):\\n \";\n for (var x in htmlClassList) {\n buffer += \" \" + x + \" \" + htmlClassList[x] + \"\\n \";\n }\n\n classes = document.body.className;\n\n buffer += \"\\n\\ndoc.body (\" + classes + \"):\\n \";\n for (var _x in docBodyClassList) {\n buffer += \" \" + _x + \" \" + docBodyClassList[_x] + \"\\n \";\n }\n\n buffer += \"\\n\";\n\n console.log(buffer);\n }\n}\n/* eslint-enable no-console */\n\n/**\n * Track the number of reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\nvar incrementReference = function incrementReference(poll, className) {\n if (!poll[className]) {\n poll[className] = 0;\n }\n poll[className] += 1;\n return className;\n};\n\n/**\n * Drop the reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\nvar decrementReference = function decrementReference(poll, className) {\n if (poll[className]) {\n poll[className] -= 1;\n }\n return className;\n};\n\n/**\n * Track a class and add to the given class list.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll The poll to be used.\n * @param {Array} classes The list of classes to be tracked.\n */\nvar trackClass = function trackClass(classListRef, poll, classes) {\n classes.forEach(function (className) {\n incrementReference(poll, className);\n classListRef.add(className);\n });\n};\n\n/**\n * Untrack a class and remove from the given class list if the reference\n * reaches 0.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll The poll to be used.\n * @param {Array} classes The list of classes to be untracked.\n */\nvar untrackClass = function untrackClass(classListRef, poll, classes) {\n classes.forEach(function (className) {\n decrementReference(poll, className);\n poll[className] === 0 && classListRef.remove(className);\n });\n};\n\n/**\n * Public inferface to add classes to the document.body.\n * @param {string} bodyClass The class string to be added.\n * It may contain more then one class\n * with ' ' as separator.\n */\nvar add = exports.add = function add(element, classString) {\n return trackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};\n\n/**\n * Public inferface to remove classes from the document.body.\n * @param {string} bodyClass The class string to be added.\n * It may contain more then one class\n * with ' ' as separator.\n */\nvar remove = exports.remove = function remove(element, classString) {\n return untrackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.log = log;\nexports.resetState = resetState;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Tracks portals that are open and emits events to subscribers\n\nvar PortalOpenInstances = function PortalOpenInstances() {\n var _this = this;\n\n _classCallCheck(this, PortalOpenInstances);\n\n this.register = function (openInstance) {\n if (_this.openInstances.indexOf(openInstance) !== -1) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Cannot register modal instance that's already open\");\n }\n return;\n }\n _this.openInstances.push(openInstance);\n _this.emit(\"register\");\n };\n\n this.deregister = function (openInstance) {\n var index = _this.openInstances.indexOf(openInstance);\n if (index === -1) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Unable to deregister \" + openInstance + \" as \" + \"it was never registered\");\n }\n return;\n }\n _this.openInstances.splice(index, 1);\n _this.emit(\"deregister\");\n };\n\n this.subscribe = function (callback) {\n _this.subscribers.push(callback);\n };\n\n this.emit = function (eventType) {\n _this.subscribers.forEach(function (subscriber) {\n return subscriber(eventType,\n // shallow copy to avoid accidental mutation\n _this.openInstances.slice());\n });\n };\n\n this.openInstances = [];\n this.subscribers = [];\n};\n\nvar portalOpenInstances = new PortalOpenInstances();\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction log() {\n console.log(\"portalOpenInstances ----------\");\n console.log(portalOpenInstances.openInstances.length);\n portalOpenInstances.openInstances.forEach(function (p) {\n return console.log(p);\n });\n console.log(\"end portalOpenInstances ----------\");\n}\n\n/* istanbul ignore next */\nfunction resetState() {\n portalOpenInstances = new PortalOpenInstances();\n}\n/* eslint-enable no-console */\n\nexports.default = portalOpenInstances;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.resetState = resetState;\nexports.log = log;\n\nvar _portalOpenInstances = require(\"./portalOpenInstances\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Body focus trap see Issue #742\n\nvar before = void 0,\n after = void 0,\n instances = [];\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction resetState() {\n var _arr = [before, after];\n\n for (var _i = 0; _i < _arr.length; _i++) {\n var item = _arr[_i];\n if (!item) continue;\n item.parentNode && item.parentNode.removeChild(item);\n }\n before = after = null;\n instances = [];\n}\n\n/* istanbul ignore next */\nfunction log() {\n console.log(\"bodyTrap ----------\");\n console.log(instances.length);\n var _arr2 = [before, after];\n for (var _i2 = 0; _i2 < _arr2.length; _i2++) {\n var item = _arr2[_i2];\n var check = item || {};\n console.log(check.nodeName, check.className, check.id);\n }\n console.log(\"edn bodyTrap ----------\");\n}\n/* eslint-enable no-console */\n\nfunction focusContent() {\n if (instances.length === 0) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Open instances > 0 expected\");\n }\n return;\n }\n instances[instances.length - 1].focusContent();\n}\n\nfunction bodyTrap(eventType, openInstances) {\n if (!before && !after) {\n before = document.createElement(\"div\");\n before.setAttribute(\"data-react-modal-body-trap\", \"\");\n before.style.position = \"absolute\";\n before.style.opacity = \"0\";\n before.setAttribute(\"tabindex\", \"0\");\n before.addEventListener(\"focus\", focusContent);\n after = before.cloneNode();\n after.addEventListener(\"focus\", focusContent);\n }\n\n instances = openInstances;\n\n if (instances.length > 0) {\n // Add focus trap\n if (document.body.firstChild !== before) {\n document.body.insertBefore(before, document.body.firstChild);\n }\n if (document.body.lastChild !== after) {\n document.body.appendChild(after);\n }\n } else {\n // Remove focus trap\n if (before.parentElement) {\n before.parentElement.removeChild(before);\n }\n if (after.parentElement) {\n after.parentElement.removeChild(after);\n }\n }\n}\n\n_portalOpenInstances2.default.subscribe(bodyTrap);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require(\"react\");\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _focusManager = require(\"../helpers/focusManager\");\n\nvar focusManager = _interopRequireWildcard(_focusManager);\n\nvar _scopeTab = require(\"../helpers/scopeTab\");\n\nvar _scopeTab2 = _interopRequireDefault(_scopeTab);\n\nvar _ariaAppHider = require(\"../helpers/ariaAppHider\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _classList = require(\"../helpers/classList\");\n\nvar classList = _interopRequireWildcard(_classList);\n\nvar _safeHTMLElement = require(\"../helpers/safeHTMLElement\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _portalOpenInstances = require(\"../helpers/portalOpenInstances\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\nrequire(\"../helpers/bodyTrap\");\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// so that our CSS is statically analyzable\nvar CLASS_NAMES = {\n overlay: \"ReactModal__Overlay\",\n content: \"ReactModal__Content\"\n};\n\n/**\n * We need to support the deprecated `KeyboardEvent.keyCode` in addition to\n * `KeyboardEvent.code` for apps that still support IE11. Can be removed when\n * `react-modal` only supports React >18 (which dropped IE support).\n */\nvar isTabKey = function isTabKey(event) {\n return event.code === \"Tab\" || event.keyCode === 9;\n};\nvar isEscKey = function isEscKey(event) {\n return event.code === \"Escape\" || event.keyCode === 27;\n};\n\nvar ariaHiddenInstances = 0;\n\nvar ModalPortal = function (_Component) {\n _inherits(ModalPortal, _Component);\n\n function ModalPortal(props) {\n _classCallCheck(this, ModalPortal);\n\n var _this = _possibleConstructorReturn(this, (ModalPortal.__proto__ || Object.getPrototypeOf(ModalPortal)).call(this, props));\n\n _this.setOverlayRef = function (overlay) {\n _this.overlay = overlay;\n _this.props.overlayRef && _this.props.overlayRef(overlay);\n };\n\n _this.setContentRef = function (content) {\n _this.content = content;\n _this.props.contentRef && _this.props.contentRef(content);\n };\n\n _this.afterClose = function () {\n var _this$props = _this.props,\n appElement = _this$props.appElement,\n ariaHideApp = _this$props.ariaHideApp,\n htmlOpenClassName = _this$props.htmlOpenClassName,\n bodyOpenClassName = _this$props.bodyOpenClassName,\n parentSelector = _this$props.parentSelector;\n\n\n var parentDocument = parentSelector && parentSelector().ownerDocument || document;\n\n // Remove classes.\n bodyOpenClassName && classList.remove(parentDocument.body, bodyOpenClassName);\n\n htmlOpenClassName && classList.remove(parentDocument.getElementsByTagName(\"html\")[0], htmlOpenClassName);\n\n // Reset aria-hidden attribute if all modals have been removed\n if (ariaHideApp && ariaHiddenInstances > 0) {\n ariaHiddenInstances -= 1;\n\n if (ariaHiddenInstances === 0) {\n ariaAppHider.show(appElement);\n }\n }\n\n if (_this.props.shouldFocusAfterRender) {\n if (_this.props.shouldReturnFocusAfterClose) {\n focusManager.returnFocus(_this.props.preventScroll);\n focusManager.teardownScopedFocus();\n } else {\n focusManager.popWithoutFocus();\n }\n }\n\n if (_this.props.onAfterClose) {\n _this.props.onAfterClose();\n }\n\n _portalOpenInstances2.default.deregister(_this);\n };\n\n _this.open = function () {\n _this.beforeOpen();\n if (_this.state.afterOpen && _this.state.beforeClose) {\n clearTimeout(_this.closeTimer);\n _this.setState({ beforeClose: false });\n } else {\n if (_this.props.shouldFocusAfterRender) {\n focusManager.setupScopedFocus(_this.node);\n focusManager.markForFocusLater();\n }\n\n _this.setState({ isOpen: true }, function () {\n _this.openAnimationFrame = requestAnimationFrame(function () {\n _this.setState({ afterOpen: true });\n\n if (_this.props.isOpen && _this.props.onAfterOpen) {\n _this.props.onAfterOpen({\n overlayEl: _this.overlay,\n contentEl: _this.content\n });\n }\n });\n });\n }\n };\n\n _this.close = function () {\n if (_this.props.closeTimeoutMS > 0) {\n _this.closeWithTimeout();\n } else {\n _this.closeWithoutTimeout();\n }\n };\n\n _this.focusContent = function () {\n return _this.content && !_this.contentHasFocus() && _this.content.focus({ preventScroll: true });\n };\n\n _this.closeWithTimeout = function () {\n var closesAt = Date.now() + _this.props.closeTimeoutMS;\n _this.setState({ beforeClose: true, closesAt: closesAt }, function () {\n _this.closeTimer = setTimeout(_this.closeWithoutTimeout, _this.state.closesAt - Date.now());\n });\n };\n\n _this.closeWithoutTimeout = function () {\n _this.setState({\n beforeClose: false,\n isOpen: false,\n afterOpen: false,\n closesAt: null\n }, _this.afterClose);\n };\n\n _this.handleKeyDown = function (event) {\n if (isTabKey(event)) {\n (0, _scopeTab2.default)(_this.content, event);\n }\n\n if (_this.props.shouldCloseOnEsc && isEscKey(event)) {\n event.stopPropagation();\n _this.requestClose(event);\n }\n };\n\n _this.handleOverlayOnClick = function (event) {\n if (_this.shouldClose === null) {\n _this.shouldClose = true;\n }\n\n if (_this.shouldClose && _this.props.shouldCloseOnOverlayClick) {\n if (_this.ownerHandlesClose()) {\n _this.requestClose(event);\n } else {\n _this.focusContent();\n }\n }\n _this.shouldClose = null;\n };\n\n _this.handleContentOnMouseUp = function () {\n _this.shouldClose = false;\n };\n\n _this.handleOverlayOnMouseDown = function (event) {\n if (!_this.props.shouldCloseOnOverlayClick && event.target == _this.overlay) {\n event.preventDefault();\n }\n };\n\n _this.handleContentOnClick = function () {\n _this.shouldClose = false;\n };\n\n _this.handleContentOnMouseDown = function () {\n _this.shouldClose = false;\n };\n\n _this.requestClose = function (event) {\n return _this.ownerHandlesClose() && _this.props.onRequestClose(event);\n };\n\n _this.ownerHandlesClose = function () {\n return _this.props.onRequestClose;\n };\n\n _this.shouldBeClosed = function () {\n return !_this.state.isOpen && !_this.state.beforeClose;\n };\n\n _this.contentHasFocus = function () {\n return document.activeElement === _this.content || _this.content.contains(document.activeElement);\n };\n\n _this.buildClassName = function (which, additional) {\n var classNames = (typeof additional === \"undefined\" ? \"undefined\" : _typeof(additional)) === \"object\" ? additional : {\n base: CLASS_NAMES[which],\n afterOpen: CLASS_NAMES[which] + \"--after-open\",\n beforeClose: CLASS_NAMES[which] + \"--before-close\"\n };\n var className = classNames.base;\n if (_this.state.afterOpen) {\n className = className + \" \" + classNames.afterOpen;\n }\n if (_this.state.beforeClose) {\n className = className + \" \" + classNames.beforeClose;\n }\n return typeof additional === \"string\" && additional ? className + \" \" + additional : className;\n };\n\n _this.attributesFromObject = function (prefix, items) {\n return Object.keys(items).reduce(function (acc, name) {\n acc[prefix + \"-\" + name] = items[name];\n return acc;\n }, {});\n };\n\n _this.state = {\n afterOpen: false,\n beforeClose: false\n };\n\n _this.shouldClose = null;\n _this.moveFromContentToOverlay = null;\n return _this;\n }\n\n _createClass(ModalPortal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.props.isOpen) {\n this.open();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (process.env.NODE_ENV !== \"production\") {\n if (prevProps.bodyOpenClassName !== this.props.bodyOpenClassName) {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"bodyOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n }\n if (prevProps.htmlOpenClassName !== this.props.htmlOpenClassName) {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"htmlOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n }\n }\n\n if (this.props.isOpen && !prevProps.isOpen) {\n this.open();\n } else if (!this.props.isOpen && prevProps.isOpen) {\n this.close();\n }\n\n // Focus only needs to be set once when the modal is being opened\n if (this.props.shouldFocusAfterRender && this.state.isOpen && !prevState.isOpen) {\n this.focusContent();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.state.isOpen) {\n this.afterClose();\n }\n clearTimeout(this.closeTimer);\n cancelAnimationFrame(this.openAnimationFrame);\n }\n }, {\n key: \"beforeOpen\",\n value: function beforeOpen() {\n var _props = this.props,\n appElement = _props.appElement,\n ariaHideApp = _props.ariaHideApp,\n htmlOpenClassName = _props.htmlOpenClassName,\n bodyOpenClassName = _props.bodyOpenClassName,\n parentSelector = _props.parentSelector;\n\n\n var parentDocument = parentSelector && parentSelector().ownerDocument || document;\n\n // Add classes.\n bodyOpenClassName && classList.add(parentDocument.body, bodyOpenClassName);\n\n htmlOpenClassName && classList.add(parentDocument.getElementsByTagName(\"html\")[0], htmlOpenClassName);\n\n if (ariaHideApp) {\n ariaHiddenInstances += 1;\n ariaAppHider.hide(appElement);\n }\n\n _portalOpenInstances2.default.register(this);\n }\n\n // Don't steal focus from inner elements\n\n }, {\n key: \"render\",\n value: function render() {\n var _props2 = this.props,\n id = _props2.id,\n className = _props2.className,\n overlayClassName = _props2.overlayClassName,\n defaultStyles = _props2.defaultStyles,\n children = _props2.children;\n\n var contentStyles = className ? {} : defaultStyles.content;\n var overlayStyles = overlayClassName ? {} : defaultStyles.overlay;\n\n if (this.shouldBeClosed()) {\n return null;\n }\n\n var overlayProps = {\n ref: this.setOverlayRef,\n className: this.buildClassName(\"overlay\", overlayClassName),\n style: _extends({}, overlayStyles, this.props.style.overlay),\n onClick: this.handleOverlayOnClick,\n onMouseDown: this.handleOverlayOnMouseDown\n };\n\n var contentProps = _extends({\n id: id,\n ref: this.setContentRef,\n style: _extends({}, contentStyles, this.props.style.content),\n className: this.buildClassName(\"content\", className),\n tabIndex: \"-1\",\n onKeyDown: this.handleKeyDown,\n onMouseDown: this.handleContentOnMouseDown,\n onMouseUp: this.handleContentOnMouseUp,\n onClick: this.handleContentOnClick,\n role: this.props.role,\n \"aria-label\": this.props.contentLabel\n }, this.attributesFromObject(\"aria\", _extends({ modal: true }, this.props.aria)), this.attributesFromObject(\"data\", this.props.data || {}), {\n \"data-testid\": this.props.testId\n });\n\n var contentElement = this.props.contentElement(contentProps, children);\n return this.props.overlayElement(overlayProps, contentElement);\n }\n }]);\n\n return ModalPortal;\n}(_react.Component);\n\nModalPortal.defaultProps = {\n style: {\n overlay: {},\n content: {}\n },\n defaultStyles: {}\n};\nModalPortal.propTypes = {\n isOpen: _propTypes2.default.bool.isRequired,\n defaultStyles: _propTypes2.default.shape({\n content: _propTypes2.default.object,\n overlay: _propTypes2.default.object\n }),\n style: _propTypes2.default.shape({\n content: _propTypes2.default.object,\n overlay: _propTypes2.default.object\n }),\n className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),\n overlayClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),\n parentSelector: _propTypes2.default.func,\n bodyOpenClassName: _propTypes2.default.string,\n htmlOpenClassName: _propTypes2.default.string,\n ariaHideApp: _propTypes2.default.bool,\n appElement: _propTypes2.default.oneOfType([_propTypes2.default.instanceOf(_safeHTMLElement2.default), _propTypes2.default.instanceOf(_safeHTMLElement.SafeHTMLCollection), _propTypes2.default.instanceOf(_safeHTMLElement.SafeNodeList), _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(_safeHTMLElement2.default))]),\n onAfterOpen: _propTypes2.default.func,\n onAfterClose: _propTypes2.default.func,\n onRequestClose: _propTypes2.default.func,\n closeTimeoutMS: _propTypes2.default.number,\n shouldFocusAfterRender: _propTypes2.default.bool,\n shouldCloseOnOverlayClick: _propTypes2.default.bool,\n shouldReturnFocusAfterClose: _propTypes2.default.bool,\n preventScroll: _propTypes2.default.bool,\n role: _propTypes2.default.string,\n contentLabel: _propTypes2.default.string,\n aria: _propTypes2.default.object,\n data: _propTypes2.default.object,\n children: _propTypes2.default.node,\n shouldCloseOnEsc: _propTypes2.default.bool,\n overlayRef: _propTypes2.default.func,\n contentRef: _propTypes2.default.func,\n id: _propTypes2.default.string,\n overlayElement: _propTypes2.default.func,\n contentElement: _propTypes2.default.func,\n testId: _propTypes2.default.string\n};\nexports.default = ModalPortal;\nmodule.exports = exports[\"default\"];","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.bodyOpenClassName = exports.portalClassName = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require(\"react-dom\");\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ModalPortal = require(\"./ModalPortal\");\n\nvar _ModalPortal2 = _interopRequireDefault(_ModalPortal);\n\nvar _ariaAppHider = require(\"../helpers/ariaAppHider\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _safeHTMLElement = require(\"../helpers/safeHTMLElement\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar portalClassName = exports.portalClassName = \"ReactModalPortal\";\nvar bodyOpenClassName = exports.bodyOpenClassName = \"ReactModal__Body--open\";\n\nvar isReact16 = _safeHTMLElement.canUseDOM && _reactDom2.default.createPortal !== undefined;\n\nvar createHTMLElement = function createHTMLElement(name) {\n return document.createElement(name);\n};\n\nvar getCreatePortal = function getCreatePortal() {\n return isReact16 ? _reactDom2.default.createPortal : _reactDom2.default.unstable_renderSubtreeIntoContainer;\n};\n\nfunction getParentElement(parentSelector) {\n return parentSelector();\n}\n\nvar Modal = function (_Component) {\n _inherits(Modal, _Component);\n\n function Modal() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Modal);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Modal.__proto__ || Object.getPrototypeOf(Modal)).call.apply(_ref, [this].concat(args))), _this), _this.removePortal = function () {\n !isReact16 && _reactDom2.default.unmountComponentAtNode(_this.node);\n var parent = getParentElement(_this.props.parentSelector);\n if (parent && parent.contains(_this.node)) {\n parent.removeChild(_this.node);\n } else {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"parentSelector\" prop did not returned any DOM ' + \"element. Make sure that the parent element is unmounted to \" + \"avoid any memory leaks.\");\n }\n }, _this.portalRef = function (ref) {\n _this.portal = ref;\n }, _this.renderPortal = function (props) {\n var createPortal = getCreatePortal();\n var portal = createPortal(_this, _react2.default.createElement(_ModalPortal2.default, _extends({ defaultStyles: Modal.defaultStyles }, props)), _this.node);\n _this.portalRef(portal);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!_safeHTMLElement.canUseDOM) return;\n\n if (!isReact16) {\n this.node = createHTMLElement(\"div\");\n }\n this.node.className = this.props.portalClassName;\n\n var parent = getParentElement(this.props.parentSelector);\n parent.appendChild(this.node);\n\n !isReact16 && this.renderPortal(this.props);\n }\n }, {\n key: \"getSnapshotBeforeUpdate\",\n value: function getSnapshotBeforeUpdate(prevProps) {\n var prevParent = getParentElement(prevProps.parentSelector);\n var nextParent = getParentElement(this.props.parentSelector);\n return { prevParent: prevParent, nextParent: nextParent };\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, _, snapshot) {\n if (!_safeHTMLElement.canUseDOM) return;\n var _props = this.props,\n isOpen = _props.isOpen,\n portalClassName = _props.portalClassName;\n\n\n if (prevProps.portalClassName !== portalClassName) {\n this.node.className = portalClassName;\n }\n\n var prevParent = snapshot.prevParent,\n nextParent = snapshot.nextParent;\n\n if (nextParent !== prevParent) {\n prevParent.removeChild(this.node);\n nextParent.appendChild(this.node);\n }\n\n // Stop unnecessary renders if modal is remaining closed\n if (!prevProps.isOpen && !isOpen) return;\n\n !isReact16 && this.renderPortal(this.props);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (!_safeHTMLElement.canUseDOM || !this.node || !this.portal) return;\n\n var state = this.portal.state;\n var now = Date.now();\n var closesAt = state.isOpen && this.props.closeTimeoutMS && (state.closesAt || now + this.props.closeTimeoutMS);\n\n if (closesAt) {\n if (!state.beforeClose) {\n this.portal.closeWithTimeout();\n }\n\n setTimeout(this.removePortal, closesAt - now);\n } else {\n this.removePortal();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!_safeHTMLElement.canUseDOM || !isReact16) {\n return null;\n }\n\n if (!this.node && isReact16) {\n this.node = createHTMLElement(\"div\");\n }\n\n var createPortal = getCreatePortal();\n return createPortal(_react2.default.createElement(_ModalPortal2.default, _extends({\n ref: this.portalRef,\n defaultStyles: Modal.defaultStyles\n }, this.props)), this.node);\n }\n }], [{\n key: \"setAppElement\",\n value: function setAppElement(element) {\n ariaAppHider.setElement(element);\n }\n\n /* eslint-disable react/no-unused-prop-types */\n\n /* eslint-enable react/no-unused-prop-types */\n\n }]);\n\n return Modal;\n}(_react.Component);\n\nModal.propTypes = {\n isOpen: _propTypes2.default.bool.isRequired,\n style: _propTypes2.default.shape({\n content: _propTypes2.default.object,\n overlay: _propTypes2.default.object\n }),\n portalClassName: _propTypes2.default.string,\n bodyOpenClassName: _propTypes2.default.string,\n htmlOpenClassName: _propTypes2.default.string,\n className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n base: _propTypes2.default.string.isRequired,\n afterOpen: _propTypes2.default.string.isRequired,\n beforeClose: _propTypes2.default.string.isRequired\n })]),\n overlayClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n base: _propTypes2.default.string.isRequired,\n afterOpen: _propTypes2.default.string.isRequired,\n beforeClose: _propTypes2.default.string.isRequired\n })]),\n appElement: _propTypes2.default.oneOfType([_propTypes2.default.instanceOf(_safeHTMLElement2.default), _propTypes2.default.instanceOf(_safeHTMLElement.SafeHTMLCollection), _propTypes2.default.instanceOf(_safeHTMLElement.SafeNodeList), _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(_safeHTMLElement2.default))]),\n onAfterOpen: _propTypes2.default.func,\n onRequestClose: _propTypes2.default.func,\n closeTimeoutMS: _propTypes2.default.number,\n ariaHideApp: _propTypes2.default.bool,\n shouldFocusAfterRender: _propTypes2.default.bool,\n shouldCloseOnOverlayClick: _propTypes2.default.bool,\n shouldReturnFocusAfterClose: _propTypes2.default.bool,\n preventScroll: _propTypes2.default.bool,\n parentSelector: _propTypes2.default.func,\n aria: _propTypes2.default.object,\n data: _propTypes2.default.object,\n role: _propTypes2.default.string,\n contentLabel: _propTypes2.default.string,\n shouldCloseOnEsc: _propTypes2.default.bool,\n overlayRef: _propTypes2.default.func,\n contentRef: _propTypes2.default.func,\n id: _propTypes2.default.string,\n overlayElement: _propTypes2.default.func,\n contentElement: _propTypes2.default.func\n};\nModal.defaultProps = {\n isOpen: false,\n portalClassName: portalClassName,\n bodyOpenClassName: bodyOpenClassName,\n role: \"dialog\",\n ariaHideApp: true,\n closeTimeoutMS: 0,\n shouldFocusAfterRender: true,\n shouldCloseOnEsc: true,\n shouldCloseOnOverlayClick: true,\n shouldReturnFocusAfterClose: true,\n preventScroll: false,\n parentSelector: function parentSelector() {\n return document.body;\n },\n overlayElement: function overlayElement(props, contentEl) {\n return _react2.default.createElement(\n \"div\",\n props,\n contentEl\n );\n },\n contentElement: function contentElement(props, children) {\n return _react2.default.createElement(\n \"div\",\n props,\n children\n );\n }\n};\nModal.defaultStyles = {\n overlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.75)\"\n },\n content: {\n position: \"absolute\",\n top: \"40px\",\n left: \"40px\",\n right: \"40px\",\n bottom: \"40px\",\n border: \"1px solid #ccc\",\n background: \"#fff\",\n overflow: \"auto\",\n WebkitOverflowScrolling: \"touch\",\n borderRadius: \"4px\",\n outline: \"none\",\n padding: \"20px\"\n }\n};\n\n\n(0, _reactLifecyclesCompat.polyfill)(Modal);\n\nif (process.env.NODE_ENV !== \"production\") {\n Modal.setCreateHTMLElement = function (fn) {\n return createHTMLElement = fn;\n };\n}\n\nexports.default = Modal;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Modal = require(\"./components/Modal\");\n\nvar _Modal2 = _interopRequireDefault(_Modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Modal2.default;\nmodule.exports = exports[\"default\"];","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // avoid screen readers from reading out loud the text\n mark.ariaHidden = \"true\"\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","\"use strict\";\n\nexports._ = exports._interop_require_default = _interop_require_default;\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n","\"use strict\";\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nexports._ = exports._interop_require_wildcard = _interop_require_wildcard;\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Tokenize input string.\n */\nfunction lexer(str) {\n var tokens = [];\n var i = 0;\n while (i < str.length) {\n var char = str[i];\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n if (char === \":\") {\n var name = \"\";\n var j = i + 1;\n while (j < str.length) {\n var code = str.charCodeAt(j);\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95) {\n name += str[j++];\n continue;\n }\n break;\n }\n if (!name)\n throw new TypeError(\"Missing parameter name at \" + i);\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n if (char === \"(\") {\n var count = 1;\n var pattern = \"\";\n var j = i + 1;\n if (str[j] === \"?\") {\n throw new TypeError(\"Pattern cannot start with \\\"?\\\" at \" + j);\n }\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n }\n else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(\"Capturing groups are not allowed at \" + j);\n }\n }\n pattern += str[j++];\n }\n if (count)\n throw new TypeError(\"Unbalanced pattern at \" + i);\n if (!pattern)\n throw new TypeError(\"Missing pattern at \" + i);\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n tokens.push({ type: \"END\", index: i, value: \"\" });\n return tokens;\n}\n/**\n * Parse a string for the raw tokens.\n */\nfunction parse(str, options) {\n if (options === void 0) { options = {}; }\n var tokens = lexer(str);\n var _a = options.prefixes, prefixes = _a === void 0 ? \"./\" : _a;\n var defaultPattern = \"[^\" + escapeString(options.delimiter || \"/#?\") + \"]+?\";\n var result = [];\n var key = 0;\n var i = 0;\n var path = \"\";\n var tryConsume = function (type) {\n if (i < tokens.length && tokens[i].type === type)\n return tokens[i++].value;\n };\n var mustConsume = function (type) {\n var value = tryConsume(type);\n if (value !== undefined)\n return value;\n var _a = tokens[i], nextType = _a.type, index = _a.index;\n throw new TypeError(\"Unexpected \" + nextType + \" at \" + index + \", expected \" + type);\n };\n var consumeText = function () {\n var result = \"\";\n var value;\n // tslint:disable-next-line\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n while (i < tokens.length) {\n var char = tryConsume(\"CHAR\");\n var name = tryConsume(\"NAME\");\n var pattern = tryConsume(\"PATTERN\");\n if (name || pattern) {\n var prefix = char || \"\";\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n result.push({\n name: name || key++,\n prefix: prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n var value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n var open = tryConsume(\"OPEN\");\n if (open) {\n var prefix = consumeText();\n var name_1 = tryConsume(\"NAME\") || \"\";\n var pattern_1 = tryConsume(\"PATTERN\") || \"\";\n var suffix = consumeText();\n mustConsume(\"CLOSE\");\n result.push({\n name: name_1 || (pattern_1 ? key++ : \"\"),\n pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,\n prefix: prefix,\n suffix: suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n mustConsume(\"END\");\n }\n return result;\n}\nexports.parse = parse;\n/**\n * Compile a string to a template function for the path.\n */\nfunction compile(str, options) {\n return tokensToFunction(parse(str, options), options);\n}\nexports.compile = compile;\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction(tokens, options) {\n if (options === void 0) { options = {}; }\n var reFlags = flags(options);\n var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b;\n // Compile all the tokens into regexps.\n var matches = tokens.map(function (token) {\n if (typeof token === \"object\") {\n return new RegExp(\"^(?:\" + token.pattern + \")$\", reFlags);\n }\n });\n return function (data) {\n var path = \"\";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n var value = data ? data[token.name] : undefined;\n var optional = token.modifier === \"?\" || token.modifier === \"*\";\n var repeat = token.modifier === \"*\" || token.modifier === \"+\";\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not repeat, but got an array\");\n }\n if (value.length === 0) {\n if (optional)\n continue;\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not be empty\");\n }\n for (var j = 0; j < value.length; j++) {\n var segment = encode(value[j], token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected all \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n }\n continue;\n }\n if (typeof value === \"string\" || typeof value === \"number\") {\n var segment = encode(String(value), token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n continue;\n }\n if (optional)\n continue;\n var typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to be \" + typeOfMessage);\n }\n return path;\n };\n}\nexports.tokensToFunction = tokensToFunction;\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nfunction match(str, options) {\n var keys = [];\n var re = pathToRegexp(str, keys, options);\n return regexpToFunction(re, keys, options);\n}\nexports.match = match;\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nfunction regexpToFunction(re, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a;\n return function (pathname) {\n var m = re.exec(pathname);\n if (!m)\n return false;\n var path = m[0], index = m.index;\n var params = Object.create(null);\n var _loop_1 = function (i) {\n // tslint:disable-next-line\n if (m[i] === undefined)\n return \"continue\";\n var key = keys[i - 1];\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) {\n return decode(value, key);\n });\n }\n else {\n params[key.name] = decode(m[i], key);\n }\n };\n for (var i = 1; i < m.length; i++) {\n _loop_1(i);\n }\n return { path: path, index: index, params: params };\n };\n}\nexports.regexpToFunction = regexpToFunction;\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path, keys) {\n if (!keys)\n return path;\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n });\n }\n }\n return path;\n}\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(paths, keys, options) {\n var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; });\n return new RegExp(\"(?:\" + parts.join(\"|\") + \")\", flags(options));\n}\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(path, keys, options) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nfunction tokensToRegexp(tokens, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d;\n var endsWith = \"[\" + escapeString(options.endsWith || \"\") + \"]|$\";\n var delimiter = \"[\" + escapeString(options.delimiter || \"/#?\") + \"]\";\n var route = start ? \"^\" : \"\";\n // Iterate over the tokens and create our regexp string.\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n }\n else {\n var prefix = escapeString(encode(token.prefix));\n var suffix = escapeString(encode(token.suffix));\n if (token.pattern) {\n if (keys)\n keys.push(token);\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n var mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += \"(?:\" + prefix + \"((?:\" + token.pattern + \")(?:\" + suffix + prefix + \"(?:\" + token.pattern + \"))*)\" + suffix + \")\" + mod;\n }\n else {\n route += \"(?:\" + prefix + \"(\" + token.pattern + \")\" + suffix + \")\" + token.modifier;\n }\n }\n else {\n route += \"(\" + token.pattern + \")\" + token.modifier;\n }\n }\n else {\n route += \"(?:\" + prefix + suffix + \")\" + token.modifier;\n }\n }\n }\n if (end) {\n if (!strict)\n route += delimiter + \"?\";\n route += !options.endsWith ? \"$\" : \"(?=\" + endsWith + \")\";\n }\n else {\n var endToken = tokens[tokens.length - 1];\n var isEndDelimited = typeof endToken === \"string\"\n ? delimiter.indexOf(endToken[endToken.length - 1]) > -1\n : // tslint:disable-next-line\n endToken === undefined;\n if (!strict) {\n route += \"(?:\" + delimiter + \"(?=\" + endsWith + \"))?\";\n }\n if (!isEndDelimited) {\n route += \"(?=\" + delimiter + \"|\" + endsWith + \")\";\n }\n }\n return new RegExp(route, flags(options));\n}\nexports.tokensToRegexp = tokensToRegexp;\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nfunction pathToRegexp(path, keys, options) {\n if (path instanceof RegExp)\n return regexpToRegexp(path, keys);\n if (Array.isArray(path))\n return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\nexports.pathToRegexp = pathToRegexp;\n//# sourceMappingURL=index.js.map",null,null,null,null,"(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p<o.length;p++){var f=o[p];var u=f.indexOf(\"=\");if(u<0){continue}var v=f.substr(0,u).trim();var c=f.substr(++u,f.length).trim();if('\"'==c[0]){c=c.slice(1,-1)}if(undefined==t[v]){t[v]=tryDecode(c,s)}}return t}function serialize(e,r,i){var a=i||{};var o=a.encode||t;if(typeof o!==\"function\"){throw new TypeError(\"option encode is invalid\")}if(!n.test(e)){throw new TypeError(\"argument name is invalid\")}var s=o(r);if(s&&!n.test(s)){throw new TypeError(\"argument val is invalid\")}var p=e+\"=\"+s;if(null!=a.maxAge){var f=a.maxAge-0;if(isNaN(f)||!isFinite(f)){throw new TypeError(\"option maxAge is invalid\")}p+=\"; Max-Age=\"+Math.floor(f)}if(a.domain){if(!n.test(a.domain)){throw new TypeError(\"option domain is invalid\")}p+=\"; Domain=\"+a.domain}if(a.path){if(!n.test(a.path)){throw new TypeError(\"option path is invalid\")}p+=\"; Path=\"+a.path}if(a.expires){if(typeof a.expires.toUTCString!==\"function\"){throw new TypeError(\"option expires is invalid\")}p+=\"; Expires=\"+a.expires.toUTCString()}if(a.httpOnly){p+=\"; HttpOnly\"}if(a.secure){p+=\"; Secure\"}if(a.sameSite){var u=typeof a.sameSite===\"string\"?a.sameSite.toLowerCase():a.sameSite;switch(u){case true:p+=\"; SameSite=Strict\";break;case\"lax\":p+=\"; SameSite=Lax\";break;case\"strict\":p+=\"; SameSite=Strict\";break;case\"none\":p+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return p}function tryDecode(e,r){try{return r(e)}catch(r){return e}}})();module.exports=e})();",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/**\n * @license React\n * react-is.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 b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","/**\n * @license React\n * react-is.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'use strict';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n}\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false;\nvar hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\nfunction isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n}\n\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.SuspenseList = SuspenseList;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isSuspenseList = isSuspenseList;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","(()=>{var e={154:(e,r,t)=>{var n=t(781);var o=[\"write\",\"end\",\"destroy\"];var i=[\"resume\",\"pause\"];var s=[\"data\",\"close\"];var c=Array.prototype.slice;e.exports=duplex;function forEach(e,r){if(e.forEach){return e.forEach(r)}for(var t=0;t<e.length;t++){r(e[t],t)}}function duplex(e,r){var t=new n;var a=false;forEach(o,proxyWriter);forEach(i,proxyReader);forEach(s,proxyStream);r.on(\"end\",handleEnd);e.on(\"drain\",(function(){t.emit(\"drain\")}));e.on(\"error\",reemit);r.on(\"error\",reemit);t.writable=e.writable;t.readable=r.readable;return t;function proxyWriter(r){t[r]=method;function method(){return e[r].apply(e,arguments)}}function proxyReader(e){t[e]=method;function method(){t.emit(e);var n=r[e];if(n){return n.apply(r,arguments)}r.emit(e)}}function proxyStream(e){r.on(e,reemit);function reemit(){var r=c.call(arguments);r.unshift(e);t.emit.apply(t,r)}}function handleEnd(){if(a){return}a=true;var e=c.call(arguments);e.unshift(\"end\");t.emit.apply(t,e)}function reemit(e){t.emit(\"error\",e)}}},349:(e,r,t)=>{\"use strict\";const n=t(147);const o=t(781);const i=t(796);const s=t(154);const c=t(530);const getOptions=e=>Object.assign({level:9},e);e.exports=(e,r)=>{if(!e){return Promise.resolve(0)}return c(i.gzip)(e,getOptions(r)).then((e=>e.length)).catch((e=>0))};e.exports.sync=(e,r)=>i.gzipSync(e,getOptions(r)).length;e.exports.stream=e=>{const r=new o.PassThrough;const t=new o.PassThrough;const n=s(r,t);let c=0;const a=i.createGzip(getOptions(e)).on(\"data\",(e=>{c+=e.length})).on(\"error\",(()=>{n.gzipSize=0})).on(\"end\",(()=>{n.gzipSize=c;n.emit(\"gzip-size\",c);t.end()}));r.pipe(a);r.pipe(t,{end:false});return n};e.exports.file=(r,t)=>new Promise(((o,i)=>{const s=n.createReadStream(r);s.on(\"error\",i);const c=s.pipe(e.exports.stream(t));c.on(\"error\",i);c.on(\"gzip-size\",o)}));e.exports.fileSync=(r,t)=>e.exports.sync(n.readFileSync(r),t)},530:e=>{\"use strict\";const processFn=(e,r)=>function(...t){const n=r.promiseModule;return new n(((n,o)=>{if(r.multiArgs){t.push(((...e)=>{if(r.errorFirst){if(e[0]){o(e)}else{e.shift();n(e)}}else{n(e)}}))}else if(r.errorFirst){t.push(((e,r)=>{if(e){o(e)}else{n(r)}}))}else{t.push(n)}e.apply(this,t)}))};e.exports=(e,r)=>{r=Object.assign({exclude:[/.+(Sync|Stream)$/],errorFirst:true,promiseModule:Promise},r);const t=typeof e;if(!(e!==null&&(t===\"object\"||t===\"function\"))){throw new TypeError(`Expected \\`input\\` to be a \\`Function\\` or \\`Object\\`, got \\`${e===null?\"null\":t}\\``)}const filter=e=>{const match=r=>typeof r===\"string\"?e===r:r.test(e);return r.include?r.include.some(match):!r.exclude.some(match)};let n;if(t===\"function\"){n=function(...t){return r.excludeMain?e(...t):processFn(e,r).apply(this,t)}}else{n=Object.create(Object.getPrototypeOf(e))}for(const t in e){const o=e[t];n[t]=typeof o===\"function\"&&filter(t)?processFn(o,r):o}return n}},147:e=>{\"use strict\";e.exports=require(\"fs\")},781:e=>{\"use strict\";e.exports=require(\"stream\")},796:e=>{\"use strict\";e.exports=require(\"zlib\")}};var r={};function __nccwpck_require__(t){var n=r[t];if(n!==undefined){return n.exports}var o=r[t]={exports:{}};var i=true;try{e[t](o,o.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}return o.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(349);module.exports=t})();",null,null,null,null,null,"module.exports = require('./dist/client/router')\n","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), ':list='].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), ':list=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator' ?\n\t\t\t\t'[]=' :\n\t\t\t\t'=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tcase 'bracket-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[\\])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null ?\n\t\t\t\t\t[] :\n\t\t\t\t\tvalue.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], arrayValue);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useMemo } from 'react'\nimport { useCallback, useState, useEffect } from 'react'\nimport { CopilotKit } from '@copilotkit/react-core'\nimport { CopilotPopup } from '@copilotkit/react-ui'\nimport DefaultButton from './button'\nimport Messages from './messages'\nimport ResponseButton from './response'\nimport Suggestions from './suggestions'\nimport { CopilotAction } from './action'\nimport { fetcher } from '@anker-in/lib'\n\nexport interface ChatProps {\n title: string\n runtimeUrl: string\n shopifyDomain: string\n /** GA 的 client id\n */\n userId: string\n /** 是否登陆用户 0 or 1\n */\n account?: string\n /** 用户浏览器语言\n */\n locale?: string\n /** 开场白\n */\n prologue?: string\n /** ?a=1&b=2\n */\n query?: string\n /** 'follow' or 'unfollow' | true or false\n * follow: ResponseButton 会跟随在 messages 的后边\n * unfollow: ResponseButton 在聊天框底部\n */\n showResponseButton?: string | boolean\n /** messages 的回调事件\n * 每次生成/接受新的messages,会将 整个 messages list 传递给外部\n */\n messagesCallback?: (_messages: any) => void\n /** 通用 action 的触发事件\n */\n commonRender?: string | ((_props: any) => React.ReactElement)\n /** shulex的 action 的触发事件\n */\n shulexRender?: string | ((_props: any) => React.ReactElement)\n /** 通用 积分 换 Coupon 的触发事件\n */\n pointsExchangeCouponRender?: string | ((_props: any) => React.ReactElement)\n /** 跳转 checkout action 卡片,接受参数: {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * 后端接口文档:https://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n gotocheckoutRender?: string | ((_props: any) => React.ReactElement)\n /** 打开购物车 action 卡片,接受参数: {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * 后端接口文档:https://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n gotocartRender?: string | ((_props: any) => React.ReactElement)\n /** 打开购物车 action 的触发事件\n */\n addtocartHandler?: (_args: any) => Promise<any>\n /** 加购卡片,接受参数: {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * 后端接口文档:https://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n addtocartRender?: string | ((_props: any) => React.ReactElement)\n /** 订阅卡片,接受参数: {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * 后端接口文档:https://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n signupRender?: string | ((_props: any) => React.ReactElement)\n /** 产品卡片,接受参数: {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * 后端接口文档:https://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n productRender?: string | ((_props: any) => React.ReactElement)\n /** CopilotPopup 自定义参数,参考:https://docs.copilotkit.ai/reference/components/CopilotPopup */\n popup?: any\n /** 文案,{\"productRenderTipMessage\": \"\",\"popupTip\": \"Hi ! Welcome to soundcore Innovations live chat!\", \"popupTipTimeout\": [3000, 6000]} */\n lang?: any\n /** 参考此文档:https://docs.copilotkit.ai/concepts/customize-look-and-feel */\n style?: any\n className?: string\n}\n\nconst Chat = (props: ChatProps) => {\n const {\n title,\n runtimeUrl,\n popup,\n shopifyDomain,\n userId = '',\n account = '',\n prologue = '',\n locale = '',\n query = '',\n messagesCallback,\n showResponseButton,\n gotocheckoutRender,\n commonRender,\n shulexRender,\n pointsExchangeCouponRender,\n gotocartRender,\n addtocartRender,\n productRender,\n signupRender,\n addtocartHandler,\n style,\n className = '',\n lang,\n } = props\n const [autoTipOpen, autoTipClose] = lang?.popupTipTimeout || [3000, 6000]\n\n const [openTip, setOpenTip] = useState(false)\n const [openPopup, setOpenPopup] = useState(false)\n const [start, setstart] = useState(prologue)\n const [currentSuggestions, setCurrentSuggestions] = useState([])\n const [history, sethistory] = useState<[{ content: string; role: string }] | []>([])\n\n const headers = useMemo(\n () => ({\n 'x-user-id': userId || '',\n 'x-shopify-domain': shopifyDomain,\n 'x-member-ship': account,\n 'x-user-locale': locale,\n }),\n [userId, shopifyDomain, account, locale]\n )\n\n const getStart = useCallback(async () => {\n const result = await fetcher({\n url: `${runtimeUrl}/copilotkit/start${query}`,\n method: 'GET',\n headers,\n })\n\n setCurrentSuggestions(result?.suggested_questions?.map((item: string) => ({ message: item, title: item })) || [])\n setstart(result?.opening_statement || '')\n sethistory(result?.history || [])\n }, [userId, shopifyDomain, account, locale, query])\n\n const getSuggestions = useCallback(async () => {\n const result = await fetcher({\n url: `${runtimeUrl}/copilotkit/suggested_questions${query}`,\n method: 'GET',\n headers,\n })\n\n setCurrentSuggestions(\n result?.suggested_questions?.data?.map((item: string) => ({ message: item, title: item })) || []\n )\n }, [userId, shopifyDomain, account, locale, query])\n\n const setOpenTipFn = () => {\n if (!openTip) setOpenTip(true)\n setTimeout(() => {\n setOpenTip(false)\n }, autoTipClose)\n }\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setOpenTipFn()\n }, autoTipOpen)\n\n return () => {\n clearTimeout(timer)\n }\n }, [])\n\n return (\n <div className={className} style={style || {}}>\n {userId && runtimeUrl && (\n <CopilotKit runtimeUrl={`${runtimeUrl}/copilotkit/chat${query}`} showDevConsole={false} headers={headers}>\n <CopilotPopup\n {...popup}\n showResponseButton={showResponseButton !== 'follow'}\n labels={{\n title: title || 'DTC Live Chat',\n initial: start || '',\n }}\n instructions={start || ''}\n onInProgress={load => {\n if (openPopup && load) setCurrentSuggestions([])\n if (openPopup && !load) getSuggestions()\n }}\n Messages={({ messages, inProgress }) => (\n <Messages\n messages={messages}\n inProgress={inProgress}\n messagesCallback={messagesCallback}\n ResponseButton={\n showResponseButton === 'follow' ? (\n <ResponseButton messagesId={messages?.[messages.length - 1]?.id} />\n ) : undefined\n }\n >\n <Suggestions currentSuggestions={currentSuggestions} />\n </Messages>\n )}\n Button={({ open, setOpen: setOpenDefault }: { open: boolean; setOpen: (open: boolean) => void }) => {\n const Button = popup?.Button || DefaultButton\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n setOpenPopup(open)\n }, [open])\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const setOpen = useCallback(() => {\n setOpenDefault(!open)\n setOpenTip(false)\n if (!start || !history?.length) getStart()\n }, [start])\n\n return (\n <>\n {lang?.popupTip && openTip && !openPopup && (\n <div className=\"copilotKitPopup copilotKitPopupTip\">\n <button onClick={setOpen} aria-label=\"Open Chat\" className=\"copilotKitPopupTipContent\">\n {lang?.popupTip}\n </button>\n </div>\n )}\n <Button open={open} setOpen={setOpen} />\n </>\n )\n }}\n >\n <CopilotAction\n start={start}\n history={history}\n commonRender={commonRender}\n shulexRender={shulexRender}\n pointsExchangeCouponRender={pointsExchangeCouponRender}\n gotocartRender={gotocartRender}\n gotocheckoutRender={gotocheckoutRender}\n addtocartRender={addtocartRender}\n signupRender={signupRender}\n productRender={productRender}\n addtocartHandler={addtocartHandler}\n productRenderTipMessage={lang?.productRenderTipMessage}\n />\n </CopilotPopup>\n </CopilotKit>\n )}\n </div>\n )\n}\n\nexport default Chat\n","import { useChatContext } from '@copilotkit/react-ui'\n\nimport type { ButtonProps } from './props'\n\nconst DefaultButton = ({ setOpen }: ButtonProps) => {\n const context = useChatContext()\n\n return (\n <button onClick={() => setOpen()} className=\"copilotKitButton \" aria-label=\"Open Chat\">\n <div className=\"copilotKitButtonIcon copilotKitButtonIconOpen\">{context.icons.openIcon}</div>\n <div className=\"copilotKitButtonIcon copilotKitButtonIconClose\">{context.icons.closeIcon}</div>\n </button>\n )\n}\n\nexport default DefaultButton\n","import React, { useEffect, useMemo, useState } from 'react'\nimport type { MessagesProps } from './props'\nimport { useChatContext } from '@copilotkit/react-ui'\nimport { Markdown } from './markdown'\nimport { type RenderFunctionStatus, useCopilotContext } from '@copilotkit/react-core'\nimport {\n MessageStatusCode,\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n Role,\n} from '@copilotkit/runtime-client-gql'\n\nconst Messages = ({ messages, inProgress, ResponseButton, messagesCallback, children }: MessagesProps) => {\n const [isExpanded, setIsExpanded] = useState(true)\n\n const { chatComponentsCache } = useCopilotContext()\n\n const context = useChatContext()\n const initialMessages = useMemo(() => makeInitialMessages(context.labels.initial), [context.labels.initial])\n messages = [...initialMessages, ...messages]\n\n const functionResults: Record<string, string> = {}\n\n for (let i = 0; i < messages.length; i++) {\n if (messages[i] instanceof ActionExecutionMessage) {\n const id = messages[i].id\n const resultMessage: ResultMessage | undefined = messages.find(\n message => message instanceof ResultMessage && message.actionExecutionId === id\n ) as ResultMessage | undefined\n\n if (resultMessage) {\n functionResults[id] = ResultMessage.decodeResult(resultMessage.result || '')\n }\n }\n }\n\n const messagesEndRef = React.useRef<HTMLDivElement>(null)\n const messagesEndChildRef = React.useRef<HTMLDivElement>(null)\n\n const scrollToBottom = () => {\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({\n behavior: 'auto',\n })\n }\n }\n\n useEffect(() => {\n scrollToBottom()\n }, [messages])\n\n useEffect(() => {\n if (messagesCallback) messagesCallback(messages)\n }, [messages])\n\n useEffect(() => {\n const textarea = document.querySelector('.copilotKitInput textarea') as HTMLTextAreaElement\n\n textarea &&\n textarea.addEventListener('click', function () {\n if (textarea.value && document.activeElement === textarea) {\n setIsExpanded(false)\n } else {\n setIsExpanded(true)\n scrollToBottom()\n }\n })\n textarea &&\n textarea.addEventListener('input', function () {\n if (textarea.value && document.activeElement === textarea) {\n setIsExpanded(false)\n } else {\n setIsExpanded(true)\n scrollToBottom()\n }\n })\n }, [])\n\n useEffect(() => {\n const content = messagesEndChildRef.current\n if (isExpanded && content) {\n content.style.maxHeight = '500px'\n content.style.overflow = 'visible'\n } else if (!isExpanded && content) {\n content.style.maxHeight = '0'\n content.style.overflow = 'hidden'\n }\n }, [isExpanded])\n\n return (\n <div className=\"copilotKitMessages\">\n {messages.map((message, index) => {\n const isCurrentMessage = index === messages.length - 1\n\n if (message instanceof TextMessage && message.role === 'user') {\n return (\n <div key={index} className=\"copilotKitMessage copilotKitUserMessage\">\n <Markdown content={message.content} />\n </div>\n )\n } else if (message instanceof TextMessage && message.role == 'assistant') {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && !message.content ? (\n context.icons.spinnerIcon\n ) : (\n <Markdown content={message.content} />\n )}\n </div>\n )\n } else if (message instanceof ActionExecutionMessage) {\n if (\n chatComponentsCache.current !== null &&\n chatComponentsCache.current[message.name as keyof typeof chatComponentsCache.current]\n ) {\n const render = chatComponentsCache.current[message.name as keyof typeof chatComponentsCache.current]\n // render a static string\n if (typeof render === 'string') {\n // when render is static, we show it only when in progress\n if (isCurrentMessage && inProgress) {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon} <span className=\"inProgressLabel\">{render}</span>\n </div>\n )\n }\n // Done - silent by default to avoid a series of \"done\" messages\n else {\n return null\n }\n }\n // render is a function\n else {\n const args = message.arguments\n\n let status: RenderFunctionStatus = 'inProgress'\n\n if (functionResults[message.id] !== undefined) {\n status = 'complete'\n } else if (message.status.code !== MessageStatusCode.Pending) {\n status = 'executing'\n }\n const toRender = (render as any)({\n status: status as any,\n args,\n result: functionResults[message.id],\n })\n\n // No result and complete: stay silent\n if (!toRender && status === 'complete') {\n return null\n }\n\n if (typeof toRender === 'string') {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && context.icons.spinnerIcon} {toRender}\n </div>\n )\n } else {\n return (\n <div key={index} className=\"copilotKitCustomAssistantMessage\">\n {toRender}\n </div>\n )\n }\n }\n }\n // No render function found- show the default message\n else if (!inProgress || !isCurrentMessage) {\n // Done - silent by default to avoid a series of \"done\" messages\n return null\n } else {\n // In progress\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon}\n </div>\n )\n }\n }\n })}\n <div className=\"responseButtonBox\">{ResponseButton}</div>\n <footer ref={messagesEndRef}>\n <div className=\"copilotKitMessagesFooter\" ref={messagesEndChildRef}>\n {children}\n </div>\n </footer>\n </div>\n )\n}\n\nfunction makeInitialMessages(initial?: string | string[]): Message[] {\n let initialArray: string[] = []\n if (initial) {\n if (Array.isArray(initial)) {\n initialArray.push(...initial)\n } else {\n initialArray.push(initial)\n }\n }\n\n return initialArray.map(\n message =>\n new TextMessage({\n role: Role.Assistant,\n content: message,\n })\n )\n}\n\nexport default Messages\n","import { type FC, memo } from 'react'\nimport ReactMarkdown, { type Options, type Components } from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport remarkMath from 'remark-math'\n\nconst MemoizedReactMarkdown: FC<Options> = memo(\n ReactMarkdown,\n (prevProps, nextProps) => prevProps.children === nextProps.children\n)\n\ntype MarkdownProps = {\n content: string\n}\n\nexport const Markdown = ({ content }: MarkdownProps) => {\n return (\n <div className=\"copilotKitMarkdown\">\n <MemoizedReactMarkdown components={components} remarkPlugins={[remarkGfm, remarkMath]}>\n {content}\n </MemoizedReactMarkdown>\n </div>\n )\n}\n\nconst components: Components = {\n p({ children }) {\n return <p>{children}</p>\n },\n a({ children, ...props }) {\n return (\n <a style={{ color: 'blue', textDecoration: 'underline' }} {...props} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n )\n },\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {number} start\n * Index to remove/insert at (can be negative).\n * @param {number} remove\n * Number of items to remove.\n * @param {Array<T>} items\n * Items to inject into `list`.\n * @returns {void}\n * Nothing.\n */\nexport function splice(list, start, remove, items) {\n const end = list.length\n let chunkStart = 0\n /** @type {Array<unknown>} */\n let parameters\n\n // Make start between zero and `end` (included).\n if (start < 0) {\n start = -start > end ? 0 : end + start\n } else {\n start = start > end ? end : start\n }\n remove = remove > 0 ? remove : 0\n\n // No need to chunk the items if there’s only a couple (10k) items.\n if (items.length < 10000) {\n parameters = Array.from(items)\n parameters.unshift(start, remove)\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters)\n } else {\n // Delete `remove` items starting from `start`\n if (remove) list.splice(start, remove)\n\n // Insert the items in chunks to not cause stack overflows.\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000)\n parameters.unshift(start, 0)\n // @ts-expect-error Hush, it’s fine.\n list.splice(...parameters)\n chunkStart += 10000\n start += 10000\n }\n }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array<T>} list\n * List to operate on.\n * @param {Array<T>} items\n * Items to add to `list`.\n * @returns {Array<T>}\n * Either `list` or `items`.\n */\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items)\n return list\n }\n return items\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array<Extension>} extensions\n * List of syntax extensions.\n * @returns {NormalizedExtension}\n * A single combined extension.\n */\nexport function combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {}\n let index = -1\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index])\n }\n\n return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n * Extension to merge into.\n * @param {Extension} extension\n * Extension to merge.\n * @returns {void}\n */\nfunction syntaxExtension(all, extension) {\n /** @type {keyof Extension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n /** @type {Record<string, unknown>} */\n const left = maybe || (all[hook] = {})\n /** @type {Record<string, unknown> | undefined} */\n const right = extension[hook]\n /** @type {string} */\n let code\n\n if (right) {\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = []\n const value = right[code]\n constructs(\n // @ts-expect-error Looks like a list.\n left[code],\n Array.isArray(value) ? value : value ? [value] : []\n )\n }\n }\n }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * @param {Array<unknown>} list\n * @returns {void}\n */\nfunction constructs(existing, list) {\n let index = -1\n /** @type {Array<unknown>} */\n const before = []\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;(list[index].add === 'after' ? existing : before).push(list[index])\n }\n\n splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array<HtmlExtension>} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * A single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {}\n let index = -1\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index])\n }\n\n return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n * Extension to merge into.\n * @param {HtmlExtension} extension\n * Extension to merge.\n * @returns {void}\n */\nfunction htmlExtension(all, extension) {\n /** @type {keyof HtmlExtension} */\n let hook\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n const left = maybe || (all[hook] = {})\n const right = extension[hook]\n /** @type {keyof Handles} */\n let type\n\n if (right) {\n for (type in right) {\n // @ts-expect-error assume document vs regular handler are managed correctly.\n left[type] = right[type]\n }\n }\n }\n}\n","// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\n\n/**\n * Regular expression that matches a unicode punctuation character.\n */\nexport const unicodePunctuationRegex =\n /[!-\\/:-@\\[-`\\{-~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {unicodePunctuationRegex} from './lib/unicode-punctuation-regex.js'\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n )\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/)\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32)\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(unicodePunctuationRegex)\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/)\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n return check\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && regex.test(String.fromCharCode(code))\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n asciiControl,\n markdownLineEndingOrSpace,\n unicodePunctuation,\n unicodeWhitespace\n} from 'micromark-util-character'\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n}\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n}\nconst path = {\n tokenize: tokenizePath,\n partial: true\n}\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n}\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n}\nconst wwwAutolink = {\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n}\nconst protocolAutolink = {\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n}\nconst emailAutolink = {\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n}\n\n/** @type {ConstructRecord} */\nconst text = {}\n\n// To do: next major: expose functions that yields extension.\n\n/**\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n *\n * @type {Extension}\n */\nexport const gfmAutolinkLiteral = {\n text\n}\n\n/** @type {Code} */\nlet code = 48\n\n// Add alphanumerics.\nwhile (code < 123) {\n text[code] = emailAutolink\n code++\n if (code === 58) code = 65\n else if (code === 91) code = 97\n}\ntext[43] = emailAutolink\ntext[45] = emailAutolink\ntext[46] = emailAutolink\ntext[95] = emailAutolink\ntext[72] = [emailAutolink, protocolAutolink]\ntext[104] = [emailAutolink, protocolAutolink]\ntext[87] = [emailAutolink, wwwAutolink]\ntext[119] = [emailAutolink, wwwAutolink]\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n const self = this\n /** @type {boolean | undefined} */\n let dot\n /** @type {boolean} */\n let data\n return start\n\n /**\n * Start of email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (\n !gfmAtext(code) ||\n !previousEmail.call(self, self.previous) ||\n previousUnbalanced(self.events)\n ) {\n return nok(code)\n }\n effects.enter('literalAutolink')\n effects.enter('literalAutolinkEmail')\n return atext(code)\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code)\n return atext\n }\n if (code === 64) {\n effects.consume(code)\n return emailDomain\n }\n return nok(code)\n }\n\n /**\n * In email domain.\n *\n * The reference code is a bit overly complex as it handles the `@`, of which\n * there may be just one.\n * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomain(code) {\n // Dot followed by alphanumerical (not `-` or `_`).\n if (code === 46) {\n return effects.check(\n emailDomainDotTrail,\n emailDomainAfter,\n emailDomainDot\n )(code)\n }\n\n // Alphanumerical, `-`, and `_`.\n if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n data = true\n effects.consume(code)\n return emailDomain\n }\n\n // To do: `/` if xmpp.\n\n // Note: normally we’d truncate trailing punctuation from the link.\n // However, email autolink literals cannot contain any of those markers,\n // except for `.`, but that can only occur if it isn’t trailing.\n // So we can ignore truncating!\n return emailDomainAfter(code)\n }\n\n /**\n * In email domain, on dot that is not a trail.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainDot(code) {\n effects.consume(code)\n dot = true\n return emailDomain\n }\n\n /**\n * After email domain.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainAfter(code) {\n // Domain must not be empty, must include a dot, and must end in alphabetical.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit('literalAutolinkEmail')\n effects.exit('literalAutolink')\n return ok(code)\n }\n return nok(code)\n }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n const self = this\n return wwwStart\n\n /**\n * Start of www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwStart(code) {\n if (\n (code !== 87 && code !== 119) ||\n !previousWww.call(self, self.previous) ||\n previousUnbalanced(self.events)\n ) {\n return nok(code)\n }\n effects.enter('literalAutolink')\n effects.enter('literalAutolinkWww')\n // Note: we *check*, so we can discard the `www.` we parsed.\n // If it worked, we consider it as a part of the domain.\n return effects.check(\n wwwPrefix,\n effects.attempt(domain, effects.attempt(path, wwwAfter), nok),\n nok\n )(code)\n }\n\n /**\n * After a www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwAfter(code) {\n effects.exit('literalAutolinkWww')\n effects.exit('literalAutolink')\n return ok(code)\n }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n const self = this\n let buffer = ''\n let seen = false\n return protocolStart\n\n /**\n * Start of protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolStart(code) {\n if (\n (code === 72 || code === 104) &&\n previousProtocol.call(self, self.previous) &&\n !previousUnbalanced(self.events)\n ) {\n effects.enter('literalAutolink')\n effects.enter('literalAutolinkHttp')\n buffer += String.fromCodePoint(code)\n effects.consume(code)\n return protocolPrefixInside\n }\n return nok(code)\n }\n\n /**\n * In protocol.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^^^^\n * ```\n *\n * @type {State}\n */\n function protocolPrefixInside(code) {\n // `5` is size of `https`\n if (asciiAlpha(code) && buffer.length < 5) {\n // @ts-expect-error: definitely number.\n buffer += String.fromCodePoint(code)\n effects.consume(code)\n return protocolPrefixInside\n }\n if (code === 58) {\n const protocol = buffer.toLowerCase()\n if (protocol === 'http' || protocol === 'https') {\n effects.consume(code)\n return protocolSlashesInside\n }\n }\n return nok(code)\n }\n\n /**\n * In slashes.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^\n * ```\n *\n * @type {State}\n */\n function protocolSlashesInside(code) {\n if (code === 47) {\n effects.consume(code)\n if (seen) {\n return afterProtocol\n }\n seen = true\n return protocolSlashesInside\n }\n return nok(code)\n }\n\n /**\n * After protocol, before domain.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function afterProtocol(code) {\n // To do: this is different from `markdown-rs`:\n // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n return code === null ||\n asciiControl(code) ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)\n ? nok(code)\n : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code)\n }\n\n /**\n * After a protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolAfter(code) {\n effects.exit('literalAutolinkHttp')\n effects.exit('literalAutolink')\n return ok(code)\n }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n let size = 0\n return wwwPrefixInside\n\n /**\n * In www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixInside(code) {\n if ((code === 87 || code === 119) && size < 3) {\n size++\n effects.consume(code)\n return wwwPrefixInside\n }\n if (code === 46 && size === 3) {\n effects.consume(code)\n return wwwPrefixAfter\n }\n return nok(code)\n }\n\n /**\n * After www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixAfter(code) {\n // If there is *anything*, we can link.\n return code === null ? nok(code) : ok(code)\n }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n /** @type {boolean | undefined} */\n let underscoreInLastSegment\n /** @type {boolean | undefined} */\n let underscoreInLastLastSegment\n /** @type {boolean | undefined} */\n let seen\n return domainInside\n\n /**\n * In domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^^^^^^^^^^\n * ```\n *\n * @type {State}\n */\n function domainInside(code) {\n // Check whether this marker, which is a trailing punctuation\n // marker, optionally followed by more trailing markers, and then\n // followed by an end.\n if (code === 46 || code === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code)\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code) ||\n (code !== 45 && unicodePunctuation(code))\n ) {\n return domainAfter(code)\n }\n seen = true\n effects.consume(code)\n return domainInside\n }\n\n /**\n * In domain, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function domainAtPunctuation(code) {\n // There is an underscore in the last segment of the domain\n if (code === 95) {\n underscoreInLastSegment = true\n }\n // Otherwise, it’s a `.`: save the last segment underscore in the\n // penultimate segment slot.\n else {\n underscoreInLastLastSegment = underscoreInLastSegment\n underscoreInLastSegment = undefined\n }\n effects.consume(code)\n return domainInside\n }\n\n /**\n * After domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^\n * ```\n *\n * @type {State} */\n function domainAfter(code) {\n // Note: that’s GH says a dot is needed, but it’s not true:\n // <https://github.com/github/cmark-gfm/issues/279>\n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code)\n }\n return ok(code)\n }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n * ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n let sizeOpen = 0\n let sizeClose = 0\n return pathInside\n\n /**\n * In path.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^\n * ```\n *\n * @type {State}\n */\n function pathInside(code) {\n if (code === 40) {\n sizeOpen++\n effects.consume(code)\n return pathInside\n }\n\n // To do: `markdown-rs` also needs this.\n // If this is a paren, and there are less closings than openings,\n // we don’t check for a trail.\n if (code === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code)\n }\n\n // Check whether this trailing punctuation marker is optionally\n // followed by more trailing markers, and then followed\n // by an end.\n if (\n code === 33 ||\n code === 34 ||\n code === 38 ||\n code === 39 ||\n code === 41 ||\n code === 42 ||\n code === 44 ||\n code === 46 ||\n code === 58 ||\n code === 59 ||\n code === 60 ||\n code === 63 ||\n code === 93 ||\n code === 95 ||\n code === 126\n ) {\n return effects.check(trail, ok, pathAtPunctuation)(code)\n }\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return ok(code)\n }\n effects.consume(code)\n return pathInside\n }\n\n /**\n * In path, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com/a\"b\n * ^\n * ```\n *\n * @type {State}\n */\n function pathAtPunctuation(code) {\n // Count closing parens.\n if (code === 41) {\n sizeClose++\n }\n effects.consume(code)\n return pathInside\n }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n * ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n return trail\n\n /**\n * In trail of domain or path.\n *\n * ```markdown\n * > | https://example.com\").\n * ^\n * ```\n *\n * @type {State}\n */\n function trail(code) {\n // Regular trailing punctuation.\n if (\n code === 33 ||\n code === 34 ||\n code === 39 ||\n code === 41 ||\n code === 42 ||\n code === 44 ||\n code === 46 ||\n code === 58 ||\n code === 59 ||\n code === 63 ||\n code === 95 ||\n code === 126\n ) {\n effects.consume(code)\n return trail\n }\n\n // `&` followed by one or more alphabeticals and then a `;`, is\n // as a whole considered as trailing punctuation.\n // In all other cases, it is considered as continuation of the URL.\n if (code === 38) {\n effects.consume(code)\n return trailCharRefStart\n }\n\n // Needed because we allow literals after `[`, as we fix:\n // <https://github.com/github/cmark-gfm/issues/278>.\n // Check that it is not followed by `(` or `[`.\n if (code === 93) {\n effects.consume(code)\n return trailBracketAfter\n }\n if (\n // `<` is an end.\n code === 60 ||\n // So is whitespace.\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return ok(code)\n }\n return nok(code)\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n *\n * ```markdown\n * > | https://example.com](\n * ^\n * ```\n *\n * @type {State}\n */\n function trailBracketAfter(code) {\n // Whitespace or something that could start a resource or reference is the end.\n // Switch back to trail otherwise.\n if (\n code === null ||\n code === 40 ||\n code === 91 ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return ok(code)\n }\n return trail(code)\n }\n\n /**\n * In character-reference like trail, after `&`.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharRefStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharRefInside(code) : nok(code)\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharRefInside(code) {\n // Switch back to trail if this is well-formed.\n if (code === 59) {\n effects.consume(code)\n return trail\n }\n if (asciiAlpha(code)) {\n effects.consume(code)\n return trailCharRefInside\n }\n\n // It’s not a trail.\n return nok(code)\n }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n return start\n\n /**\n * Dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Must be dot.\n effects.consume(code)\n return after\n }\n\n /**\n * After dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Not a trail if alphanumeric.\n return asciiAlphanumeric(code) ? nok(code) : ok(code)\n }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n return (\n code === null ||\n code === 40 ||\n code === 42 ||\n code === 95 ||\n code === 91 ||\n code === 93 ||\n code === 126 ||\n markdownLineEndingOrSpace(code)\n )\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n return !asciiAlpha(code)\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n // Do not allow a slash “inside” atext.\n // The reference code is a bit weird, but that’s what it results in.\n // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n // Other than slash, every preceding character is allowed.\n return !(code === 47 || gfmAtext(code))\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n return (\n code === 43 ||\n code === 45 ||\n code === 46 ||\n code === 95 ||\n asciiAlphanumeric(code)\n )\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n let index = events.length\n let result = false\n while (index--) {\n const token = events[index][1]\n if (\n (token.type === 'labelLink' || token.type === 'labelImage') &&\n !token._balanced\n ) {\n result = true\n break\n }\n\n // If we’ve seen this token, and it was marked as not having any unbalanced\n // bracket before it, we can exit.\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false\n break\n }\n }\n if (events.length > 0 && !result) {\n // Mark the last token as “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true\n }\n return result\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n markdownLineEndingOrSpace,\n unicodePunctuation,\n unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return 1\n }\n if (unicodePunctuation(code)) {\n return 2\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array<Event>}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array<Resolver>} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownSpace} from 'micromark-util-character'\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * spaces in markdown are often optional, in which case this factory can be\n * used and `ok` will be switched to whether spaces were found or not\n * * one line ending or space can be detected with `markdownSpace(code)` right\n * before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {TokenType} type\n * Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n * Max (exclusive).\n * @returns\n * Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n let size = 0\n return start\n\n /** @type {State} */\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type)\n return prefix(code)\n }\n return ok(code)\n }\n\n /** @type {State} */\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code)\n return prefix\n }\n effects.exit(type)\n return ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return markdownSpace(code)\n ? factorySpace(effects, after, 'linePrefix')(code)\n : after(code)\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n }\n}\n","/**\n * Map of named character references.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntities = {\n AElig: 'Æ',\n AMP: '&',\n Aacute: 'Á',\n Abreve: 'Ă',\n Acirc: 'Â',\n Acy: 'А',\n Afr: '𝔄',\n Agrave: 'À',\n Alpha: 'Α',\n Amacr: 'Ā',\n And: '⩓',\n Aogon: 'Ą',\n Aopf: '𝔸',\n ApplyFunction: '',\n Aring: 'Å',\n Ascr: '𝒜',\n Assign: '≔',\n Atilde: 'Ã',\n Auml: 'Ä',\n Backslash: '∖',\n Barv: '⫧',\n Barwed: '⌆',\n Bcy: 'Б',\n Because: '∵',\n Bernoullis: 'ℬ',\n Beta: 'Β',\n Bfr: '𝔅',\n Bopf: '𝔹',\n Breve: '˘',\n Bscr: 'ℬ',\n Bumpeq: '≎',\n CHcy: 'Ч',\n COPY: '©',\n Cacute: 'Ć',\n Cap: '⋒',\n CapitalDifferentialD: 'ⅅ',\n Cayleys: 'ℭ',\n Ccaron: 'Č',\n Ccedil: 'Ç',\n Ccirc: 'Ĉ',\n Cconint: '∰',\n Cdot: 'Ċ',\n Cedilla: '¸',\n CenterDot: '·',\n Cfr: 'ℭ',\n Chi: 'Χ',\n CircleDot: '⊙',\n CircleMinus: '⊖',\n CirclePlus: '⊕',\n CircleTimes: '⊗',\n ClockwiseContourIntegral: '∲',\n CloseCurlyDoubleQuote: '”',\n CloseCurlyQuote: '’',\n Colon: '∷',\n Colone: '⩴',\n Congruent: '≡',\n Conint: '∯',\n ContourIntegral: '∮',\n Copf: 'ℂ',\n Coproduct: '∐',\n CounterClockwiseContourIntegral: '∳',\n Cross: '⨯',\n Cscr: '𝒞',\n Cup: '⋓',\n CupCap: '≍',\n DD: 'ⅅ',\n DDotrahd: '⤑',\n DJcy: 'Ђ',\n DScy: 'Ѕ',\n DZcy: 'Џ',\n Dagger: '‡',\n Darr: '↡',\n Dashv: '⫤',\n Dcaron: 'Ď',\n Dcy: 'Д',\n Del: '∇',\n Delta: 'Δ',\n Dfr: '𝔇',\n DiacriticalAcute: '´',\n DiacriticalDot: '˙',\n DiacriticalDoubleAcute: '˝',\n DiacriticalGrave: '`',\n DiacriticalTilde: '˜',\n Diamond: '⋄',\n DifferentialD: 'ⅆ',\n Dopf: '𝔻',\n Dot: '¨',\n DotDot: '⃜',\n DotEqual: '≐',\n DoubleContourIntegral: '∯',\n DoubleDot: '¨',\n DoubleDownArrow: '⇓',\n DoubleLeftArrow: '⇐',\n DoubleLeftRightArrow: '⇔',\n DoubleLeftTee: '⫤',\n DoubleLongLeftArrow: '⟸',\n DoubleLongLeftRightArrow: '⟺',\n DoubleLongRightArrow: '⟹',\n DoubleRightArrow: '⇒',\n DoubleRightTee: '⊨',\n DoubleUpArrow: '⇑',\n DoubleUpDownArrow: '⇕',\n DoubleVerticalBar: '∥',\n DownArrow: '↓',\n DownArrowBar: '⤓',\n DownArrowUpArrow: '⇵',\n DownBreve: '̑',\n DownLeftRightVector: '⥐',\n DownLeftTeeVector: '⥞',\n DownLeftVector: '↽',\n DownLeftVectorBar: '⥖',\n DownRightTeeVector: '⥟',\n DownRightVector: '⇁',\n DownRightVectorBar: '⥗',\n DownTee: '⊤',\n DownTeeArrow: '↧',\n Downarrow: '⇓',\n Dscr: '𝒟',\n Dstrok: 'Đ',\n ENG: 'Ŋ',\n ETH: 'Ð',\n Eacute: 'É',\n Ecaron: 'Ě',\n Ecirc: 'Ê',\n Ecy: 'Э',\n Edot: 'Ė',\n Efr: '𝔈',\n Egrave: 'È',\n Element: '∈',\n Emacr: 'Ē',\n EmptySmallSquare: '◻',\n EmptyVerySmallSquare: '▫',\n Eogon: 'Ę',\n Eopf: '𝔼',\n Epsilon: 'Ε',\n Equal: '⩵',\n EqualTilde: '≂',\n Equilibrium: '⇌',\n Escr: 'ℰ',\n Esim: '⩳',\n Eta: 'Η',\n Euml: 'Ë',\n Exists: '∃',\n ExponentialE: 'ⅇ',\n Fcy: 'Ф',\n Ffr: '𝔉',\n FilledSmallSquare: '◼',\n FilledVerySmallSquare: '▪',\n Fopf: '𝔽',\n ForAll: '∀',\n Fouriertrf: 'ℱ',\n Fscr: 'ℱ',\n GJcy: 'Ѓ',\n GT: '>',\n Gamma: 'Γ',\n Gammad: 'Ϝ',\n Gbreve: 'Ğ',\n Gcedil: 'Ģ',\n Gcirc: 'Ĝ',\n Gcy: 'Г',\n Gdot: 'Ġ',\n Gfr: '𝔊',\n Gg: '⋙',\n Gopf: '𝔾',\n GreaterEqual: '≥',\n GreaterEqualLess: '⋛',\n GreaterFullEqual: '≧',\n GreaterGreater: '⪢',\n GreaterLess: '≷',\n GreaterSlantEqual: '⩾',\n GreaterTilde: '≳',\n Gscr: '𝒢',\n Gt: '≫',\n HARDcy: 'Ъ',\n Hacek: 'ˇ',\n Hat: '^',\n Hcirc: 'Ĥ',\n Hfr: 'ℌ',\n HilbertSpace: 'ℋ',\n Hopf: 'ℍ',\n HorizontalLine: '─',\n Hscr: 'ℋ',\n Hstrok: 'Ħ',\n HumpDownHump: '≎',\n HumpEqual: '≏',\n IEcy: 'Е',\n IJlig: 'IJ',\n IOcy: 'Ё',\n Iacute: 'Í',\n Icirc: 'Î',\n Icy: 'И',\n Idot: 'İ',\n Ifr: 'ℑ',\n Igrave: 'Ì',\n Im: 'ℑ',\n Imacr: 'Ī',\n ImaginaryI: 'ⅈ',\n Implies: '⇒',\n Int: '∬',\n Integral: '∫',\n Intersection: '⋂',\n InvisibleComma: '',\n InvisibleTimes: '',\n Iogon: 'Į',\n Iopf: '𝕀',\n Iota: 'Ι',\n Iscr: 'ℐ',\n Itilde: 'Ĩ',\n Iukcy: 'І',\n Iuml: 'Ï',\n Jcirc: 'Ĵ',\n Jcy: 'Й',\n Jfr: '𝔍',\n Jopf: '𝕁',\n Jscr: '𝒥',\n Jsercy: 'Ј',\n Jukcy: 'Є',\n KHcy: 'Х',\n KJcy: 'Ќ',\n Kappa: 'Κ',\n Kcedil: 'Ķ',\n Kcy: 'К',\n Kfr: '𝔎',\n Kopf: '𝕂',\n Kscr: '𝒦',\n LJcy: 'Љ',\n LT: '<',\n Lacute: 'Ĺ',\n Lambda: 'Λ',\n Lang: '⟪',\n Laplacetrf: 'ℒ',\n Larr: '↞',\n Lcaron: 'Ľ',\n Lcedil: 'Ļ',\n Lcy: 'Л',\n LeftAngleBracket: '⟨',\n LeftArrow: '←',\n LeftArrowBar: '⇤',\n LeftArrowRightArrow: '⇆',\n LeftCeiling: '⌈',\n LeftDoubleBracket: '⟦',\n LeftDownTeeVector: '⥡',\n LeftDownVector: '⇃',\n LeftDownVectorBar: '⥙',\n LeftFloor: '⌊',\n LeftRightArrow: '↔',\n LeftRightVector: '⥎',\n LeftTee: '⊣',\n LeftTeeArrow: '↤',\n LeftTeeVector: '⥚',\n LeftTriangle: '⊲',\n LeftTriangleBar: '⧏',\n LeftTriangleEqual: '⊴',\n LeftUpDownVector: '⥑',\n LeftUpTeeVector: '⥠',\n LeftUpVector: '↿',\n LeftUpVectorBar: '⥘',\n LeftVector: '↼',\n LeftVectorBar: '⥒',\n Leftarrow: '⇐',\n Leftrightarrow: '⇔',\n LessEqualGreater: '⋚',\n LessFullEqual: '≦',\n LessGreater: '≶',\n LessLess: '⪡',\n LessSlantEqual: '⩽',\n LessTilde: '≲',\n Lfr: '𝔏',\n Ll: '⋘',\n Lleftarrow: '⇚',\n Lmidot: 'Ŀ',\n LongLeftArrow: '⟵',\n LongLeftRightArrow: '⟷',\n LongRightArrow: '⟶',\n Longleftarrow: '⟸',\n Longleftrightarrow: '⟺',\n Longrightarrow: '⟹',\n Lopf: '𝕃',\n LowerLeftArrow: '↙',\n LowerRightArrow: '↘',\n Lscr: 'ℒ',\n Lsh: '↰',\n Lstrok: 'Ł',\n Lt: '≪',\n Map: '⤅',\n Mcy: 'М',\n MediumSpace: ' ',\n Mellintrf: 'ℳ',\n Mfr: '𝔐',\n MinusPlus: '∓',\n Mopf: '𝕄',\n Mscr: 'ℳ',\n Mu: 'Μ',\n NJcy: 'Њ',\n Nacute: 'Ń',\n Ncaron: 'Ň',\n Ncedil: 'Ņ',\n Ncy: 'Н',\n NegativeMediumSpace: '',\n NegativeThickSpace: '',\n NegativeThinSpace: '',\n NegativeVeryThinSpace: '',\n NestedGreaterGreater: '≫',\n NestedLessLess: '≪',\n NewLine: '\\n',\n Nfr: '𝔑',\n NoBreak: '',\n NonBreakingSpace: ' ',\n Nopf: 'ℕ',\n Not: '⫬',\n NotCongruent: '≢',\n NotCupCap: '≭',\n NotDoubleVerticalBar: '∦',\n NotElement: '∉',\n NotEqual: '≠',\n NotEqualTilde: '≂̸',\n NotExists: '∄',\n NotGreater: '≯',\n NotGreaterEqual: '≱',\n NotGreaterFullEqual: '≧̸',\n NotGreaterGreater: '≫̸',\n NotGreaterLess: '≹',\n NotGreaterSlantEqual: '⩾̸',\n NotGreaterTilde: '≵',\n NotHumpDownHump: '≎̸',\n NotHumpEqual: '≏̸',\n NotLeftTriangle: '⋪',\n NotLeftTriangleBar: '⧏̸',\n NotLeftTriangleEqual: '⋬',\n NotLess: '≮',\n NotLessEqual: '≰',\n NotLessGreater: '≸',\n NotLessLess: '≪̸',\n NotLessSlantEqual: '⩽̸',\n NotLessTilde: '≴',\n NotNestedGreaterGreater: '⪢̸',\n NotNestedLessLess: '⪡̸',\n NotPrecedes: '⊀',\n NotPrecedesEqual: '⪯̸',\n NotPrecedesSlantEqual: '⋠',\n NotReverseElement: '∌',\n NotRightTriangle: '⋫',\n NotRightTriangleBar: '⧐̸',\n NotRightTriangleEqual: '⋭',\n NotSquareSubset: '⊏̸',\n NotSquareSubsetEqual: '⋢',\n NotSquareSuperset: '⊐̸',\n NotSquareSupersetEqual: '⋣',\n NotSubset: '⊂⃒',\n NotSubsetEqual: '⊈',\n NotSucceeds: '⊁',\n NotSucceedsEqual: '⪰̸',\n NotSucceedsSlantEqual: '⋡',\n NotSucceedsTilde: '≿̸',\n NotSuperset: '⊃⃒',\n NotSupersetEqual: '⊉',\n NotTilde: '≁',\n NotTildeEqual: '≄',\n NotTildeFullEqual: '≇',\n NotTildeTilde: '≉',\n NotVerticalBar: '∤',\n Nscr: '𝒩',\n Ntilde: 'Ñ',\n Nu: 'Ν',\n OElig: 'Œ',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Ocy: 'О',\n Odblac: 'Ő',\n Ofr: '𝔒',\n Ograve: 'Ò',\n Omacr: 'Ō',\n Omega: 'Ω',\n Omicron: 'Ο',\n Oopf: '𝕆',\n OpenCurlyDoubleQuote: '“',\n OpenCurlyQuote: '‘',\n Or: '⩔',\n Oscr: '𝒪',\n Oslash: 'Ø',\n Otilde: 'Õ',\n Otimes: '⨷',\n Ouml: 'Ö',\n OverBar: '‾',\n OverBrace: '⏞',\n OverBracket: '⎴',\n OverParenthesis: '⏜',\n PartialD: '∂',\n Pcy: 'П',\n Pfr: '𝔓',\n Phi: 'Φ',\n Pi: 'Π',\n PlusMinus: '±',\n Poincareplane: 'ℌ',\n Popf: 'ℙ',\n Pr: '⪻',\n Precedes: '≺',\n PrecedesEqual: '⪯',\n PrecedesSlantEqual: '≼',\n PrecedesTilde: '≾',\n Prime: '″',\n Product: '∏',\n Proportion: '∷',\n Proportional: '∝',\n Pscr: '𝒫',\n Psi: 'Ψ',\n QUOT: '\"',\n Qfr: '𝔔',\n Qopf: 'ℚ',\n Qscr: '𝒬',\n RBarr: '⤐',\n REG: '®',\n Racute: 'Ŕ',\n Rang: '⟫',\n Rarr: '↠',\n Rarrtl: '⤖',\n Rcaron: 'Ř',\n Rcedil: 'Ŗ',\n Rcy: 'Р',\n Re: 'ℜ',\n ReverseElement: '∋',\n ReverseEquilibrium: '⇋',\n ReverseUpEquilibrium: '⥯',\n Rfr: 'ℜ',\n Rho: 'Ρ',\n RightAngleBracket: '⟩',\n RightArrow: '→',\n RightArrowBar: '⇥',\n RightArrowLeftArrow: '⇄',\n RightCeiling: '⌉',\n RightDoubleBracket: '⟧',\n RightDownTeeVector: '⥝',\n RightDownVector: '⇂',\n RightDownVectorBar: '⥕',\n RightFloor: '⌋',\n RightTee: '⊢',\n RightTeeArrow: '↦',\n RightTeeVector: '⥛',\n RightTriangle: '⊳',\n RightTriangleBar: '⧐',\n RightTriangleEqual: '⊵',\n RightUpDownVector: '⥏',\n RightUpTeeVector: '⥜',\n RightUpVector: '↾',\n RightUpVectorBar: '⥔',\n RightVector: '⇀',\n RightVectorBar: '⥓',\n Rightarrow: '⇒',\n Ropf: 'ℝ',\n RoundImplies: '⥰',\n Rrightarrow: '⇛',\n Rscr: 'ℛ',\n Rsh: '↱',\n RuleDelayed: '⧴',\n SHCHcy: 'Щ',\n SHcy: 'Ш',\n SOFTcy: 'Ь',\n Sacute: 'Ś',\n Sc: '⪼',\n Scaron: 'Š',\n Scedil: 'Ş',\n Scirc: 'Ŝ',\n Scy: 'С',\n Sfr: '𝔖',\n ShortDownArrow: '↓',\n ShortLeftArrow: '←',\n ShortRightArrow: '→',\n ShortUpArrow: '↑',\n Sigma: 'Σ',\n SmallCircle: '∘',\n Sopf: '𝕊',\n Sqrt: '√',\n Square: '□',\n SquareIntersection: '⊓',\n SquareSubset: '⊏',\n SquareSubsetEqual: '⊑',\n SquareSuperset: '⊐',\n SquareSupersetEqual: '⊒',\n SquareUnion: '⊔',\n Sscr: '𝒮',\n Star: '⋆',\n Sub: '⋐',\n Subset: '⋐',\n SubsetEqual: '⊆',\n Succeeds: '≻',\n SucceedsEqual: '⪰',\n SucceedsSlantEqual: '≽',\n SucceedsTilde: '≿',\n SuchThat: '∋',\n Sum: '∑',\n Sup: '⋑',\n Superset: '⊃',\n SupersetEqual: '⊇',\n Supset: '⋑',\n THORN: 'Þ',\n TRADE: '™',\n TSHcy: 'Ћ',\n TScy: 'Ц',\n Tab: '\\t',\n Tau: 'Τ',\n Tcaron: 'Ť',\n Tcedil: 'Ţ',\n Tcy: 'Т',\n Tfr: '𝔗',\n Therefore: '∴',\n Theta: 'Θ',\n ThickSpace: ' ',\n ThinSpace: ' ',\n Tilde: '∼',\n TildeEqual: '≃',\n TildeFullEqual: '≅',\n TildeTilde: '≈',\n Topf: '𝕋',\n TripleDot: '⃛',\n Tscr: '𝒯',\n Tstrok: 'Ŧ',\n Uacute: 'Ú',\n Uarr: '↟',\n Uarrocir: '⥉',\n Ubrcy: 'Ў',\n Ubreve: 'Ŭ',\n Ucirc: 'Û',\n Ucy: 'У',\n Udblac: 'Ű',\n Ufr: '𝔘',\n Ugrave: 'Ù',\n Umacr: 'Ū',\n UnderBar: '_',\n UnderBrace: '⏟',\n UnderBracket: '⎵',\n UnderParenthesis: '⏝',\n Union: '⋃',\n UnionPlus: '⊎',\n Uogon: 'Ų',\n Uopf: '𝕌',\n UpArrow: '↑',\n UpArrowBar: '⤒',\n UpArrowDownArrow: '⇅',\n UpDownArrow: '↕',\n UpEquilibrium: '⥮',\n UpTee: '⊥',\n UpTeeArrow: '↥',\n Uparrow: '⇑',\n Updownarrow: '⇕',\n UpperLeftArrow: '↖',\n UpperRightArrow: '↗',\n Upsi: 'ϒ',\n Upsilon: 'Υ',\n Uring: 'Ů',\n Uscr: '𝒰',\n Utilde: 'Ũ',\n Uuml: 'Ü',\n VDash: '⊫',\n Vbar: '⫫',\n Vcy: 'В',\n Vdash: '⊩',\n Vdashl: '⫦',\n Vee: '⋁',\n Verbar: '‖',\n Vert: '‖',\n VerticalBar: '∣',\n VerticalLine: '|',\n VerticalSeparator: '❘',\n VerticalTilde: '≀',\n VeryThinSpace: ' ',\n Vfr: '𝔙',\n Vopf: '𝕍',\n Vscr: '𝒱',\n Vvdash: '⊪',\n Wcirc: 'Ŵ',\n Wedge: '⋀',\n Wfr: '𝔚',\n Wopf: '𝕎',\n Wscr: '𝒲',\n Xfr: '𝔛',\n Xi: 'Ξ',\n Xopf: '𝕏',\n Xscr: '𝒳',\n YAcy: 'Я',\n YIcy: 'Ї',\n YUcy: 'Ю',\n Yacute: 'Ý',\n Ycirc: 'Ŷ',\n Ycy: 'Ы',\n Yfr: '𝔜',\n Yopf: '𝕐',\n Yscr: '𝒴',\n Yuml: 'Ÿ',\n ZHcy: 'Ж',\n Zacute: 'Ź',\n Zcaron: 'Ž',\n Zcy: 'З',\n Zdot: 'Ż',\n ZeroWidthSpace: '',\n Zeta: 'Ζ',\n Zfr: 'ℨ',\n Zopf: 'ℤ',\n Zscr: '𝒵',\n aacute: 'á',\n abreve: 'ă',\n ac: '∾',\n acE: '∾̳',\n acd: '∿',\n acirc: 'â',\n acute: '´',\n acy: 'а',\n aelig: 'æ',\n af: '',\n afr: '𝔞',\n agrave: 'à',\n alefsym: 'ℵ',\n aleph: 'ℵ',\n alpha: 'α',\n amacr: 'ā',\n amalg: '⨿',\n amp: '&',\n and: '∧',\n andand: '⩕',\n andd: '⩜',\n andslope: '⩘',\n andv: '⩚',\n ang: '∠',\n ange: '⦤',\n angle: '∠',\n angmsd: '∡',\n angmsdaa: '⦨',\n angmsdab: '⦩',\n angmsdac: '⦪',\n angmsdad: '⦫',\n angmsdae: '⦬',\n angmsdaf: '⦭',\n angmsdag: '⦮',\n angmsdah: '⦯',\n angrt: '∟',\n angrtvb: '⊾',\n angrtvbd: '⦝',\n angsph: '∢',\n angst: 'Å',\n angzarr: '⍼',\n aogon: 'ą',\n aopf: '𝕒',\n ap: '≈',\n apE: '⩰',\n apacir: '⩯',\n ape: '≊',\n apid: '≋',\n apos: \"'\",\n approx: '≈',\n approxeq: '≊',\n aring: 'å',\n ascr: '𝒶',\n ast: '*',\n asymp: '≈',\n asympeq: '≍',\n atilde: 'ã',\n auml: 'ä',\n awconint: '∳',\n awint: '⨑',\n bNot: '⫭',\n backcong: '≌',\n backepsilon: '϶',\n backprime: '‵',\n backsim: '∽',\n backsimeq: '⋍',\n barvee: '⊽',\n barwed: '⌅',\n barwedge: '⌅',\n bbrk: '⎵',\n bbrktbrk: '⎶',\n bcong: '≌',\n bcy: 'б',\n bdquo: '„',\n becaus: '∵',\n because: '∵',\n bemptyv: '⦰',\n bepsi: '϶',\n bernou: 'ℬ',\n beta: 'β',\n beth: 'ℶ',\n between: '≬',\n bfr: '𝔟',\n bigcap: '⋂',\n bigcirc: '◯',\n bigcup: '⋃',\n bigodot: '⨀',\n bigoplus: '⨁',\n bigotimes: '⨂',\n bigsqcup: '⨆',\n bigstar: '★',\n bigtriangledown: '▽',\n bigtriangleup: '△',\n biguplus: '⨄',\n bigvee: '⋁',\n bigwedge: '⋀',\n bkarow: '⤍',\n blacklozenge: '⧫',\n blacksquare: '▪',\n blacktriangle: '▴',\n blacktriangledown: '▾',\n blacktriangleleft: '◂',\n blacktriangleright: '▸',\n blank: '␣',\n blk12: '▒',\n blk14: '░',\n blk34: '▓',\n block: '█',\n bne: '=⃥',\n bnequiv: '≡⃥',\n bnot: '⌐',\n bopf: '𝕓',\n bot: '⊥',\n bottom: '⊥',\n bowtie: '⋈',\n boxDL: '╗',\n boxDR: '╔',\n boxDl: '╖',\n boxDr: '╓',\n boxH: '═',\n boxHD: '╦',\n boxHU: '╩',\n boxHd: '╤',\n boxHu: '╧',\n boxUL: '╝',\n boxUR: '╚',\n boxUl: '╜',\n boxUr: '╙',\n boxV: '║',\n boxVH: '╬',\n boxVL: '╣',\n boxVR: '╠',\n boxVh: '╫',\n boxVl: '╢',\n boxVr: '╟',\n boxbox: '⧉',\n boxdL: '╕',\n boxdR: '╒',\n boxdl: '┐',\n boxdr: '┌',\n boxh: '─',\n boxhD: '╥',\n boxhU: '╨',\n boxhd: '┬',\n boxhu: '┴',\n boxminus: '⊟',\n boxplus: '⊞',\n boxtimes: '⊠',\n boxuL: '╛',\n boxuR: '╘',\n boxul: '┘',\n boxur: '└',\n boxv: '│',\n boxvH: '╪',\n boxvL: '╡',\n boxvR: '╞',\n boxvh: '┼',\n boxvl: '┤',\n boxvr: '├',\n bprime: '‵',\n breve: '˘',\n brvbar: '¦',\n bscr: '𝒷',\n bsemi: '⁏',\n bsim: '∽',\n bsime: '⋍',\n bsol: '\\\\',\n bsolb: '⧅',\n bsolhsub: '⟈',\n bull: '•',\n bullet: '•',\n bump: '≎',\n bumpE: '⪮',\n bumpe: '≏',\n bumpeq: '≏',\n cacute: 'ć',\n cap: '∩',\n capand: '⩄',\n capbrcup: '⩉',\n capcap: '⩋',\n capcup: '⩇',\n capdot: '⩀',\n caps: '∩︀',\n caret: '⁁',\n caron: 'ˇ',\n ccaps: '⩍',\n ccaron: 'č',\n ccedil: 'ç',\n ccirc: 'ĉ',\n ccups: '⩌',\n ccupssm: '⩐',\n cdot: 'ċ',\n cedil: '¸',\n cemptyv: '⦲',\n cent: '¢',\n centerdot: '·',\n cfr: '𝔠',\n chcy: 'ч',\n check: '✓',\n checkmark: '✓',\n chi: 'χ',\n cir: '○',\n cirE: '⧃',\n circ: 'ˆ',\n circeq: '≗',\n circlearrowleft: '↺',\n circlearrowright: '↻',\n circledR: '®',\n circledS: 'Ⓢ',\n circledast: '⊛',\n circledcirc: '⊚',\n circleddash: '⊝',\n cire: '≗',\n cirfnint: '⨐',\n cirmid: '⫯',\n cirscir: '⧂',\n clubs: '♣',\n clubsuit: '♣',\n colon: ':',\n colone: '≔',\n coloneq: '≔',\n comma: ',',\n commat: '@',\n comp: '∁',\n compfn: '∘',\n complement: '∁',\n complexes: 'ℂ',\n cong: '≅',\n congdot: '⩭',\n conint: '∮',\n copf: '𝕔',\n coprod: '∐',\n copy: '©',\n copysr: '℗',\n crarr: '↵',\n cross: '✗',\n cscr: '𝒸',\n csub: '⫏',\n csube: '⫑',\n csup: '⫐',\n csupe: '⫒',\n ctdot: '⋯',\n cudarrl: '⤸',\n cudarrr: '⤵',\n cuepr: '⋞',\n cuesc: '⋟',\n cularr: '↶',\n cularrp: '⤽',\n cup: '∪',\n cupbrcap: '⩈',\n cupcap: '⩆',\n cupcup: '⩊',\n cupdot: '⊍',\n cupor: '⩅',\n cups: '∪︀',\n curarr: '↷',\n curarrm: '⤼',\n curlyeqprec: '⋞',\n curlyeqsucc: '⋟',\n curlyvee: '⋎',\n curlywedge: '⋏',\n curren: '¤',\n curvearrowleft: '↶',\n curvearrowright: '↷',\n cuvee: '⋎',\n cuwed: '⋏',\n cwconint: '∲',\n cwint: '∱',\n cylcty: '⌭',\n dArr: '⇓',\n dHar: '⥥',\n dagger: '†',\n daleth: 'ℸ',\n darr: '↓',\n dash: '‐',\n dashv: '⊣',\n dbkarow: '⤏',\n dblac: '˝',\n dcaron: 'ď',\n dcy: 'д',\n dd: 'ⅆ',\n ddagger: '‡',\n ddarr: '⇊',\n ddotseq: '⩷',\n deg: '°',\n delta: 'δ',\n demptyv: '⦱',\n dfisht: '⥿',\n dfr: '𝔡',\n dharl: '⇃',\n dharr: '⇂',\n diam: '⋄',\n diamond: '⋄',\n diamondsuit: '♦',\n diams: '♦',\n die: '¨',\n digamma: 'ϝ',\n disin: '⋲',\n div: '÷',\n divide: '÷',\n divideontimes: '⋇',\n divonx: '⋇',\n djcy: 'ђ',\n dlcorn: '⌞',\n dlcrop: '⌍',\n dollar: '$',\n dopf: '𝕕',\n dot: '˙',\n doteq: '≐',\n doteqdot: '≑',\n dotminus: '∸',\n dotplus: '∔',\n dotsquare: '⊡',\n doublebarwedge: '⌆',\n downarrow: '↓',\n downdownarrows: '⇊',\n downharpoonleft: '⇃',\n downharpoonright: '⇂',\n drbkarow: '⤐',\n drcorn: '⌟',\n drcrop: '⌌',\n dscr: '𝒹',\n dscy: 'ѕ',\n dsol: '⧶',\n dstrok: 'đ',\n dtdot: '⋱',\n dtri: '▿',\n dtrif: '▾',\n duarr: '⇵',\n duhar: '⥯',\n dwangle: '⦦',\n dzcy: 'џ',\n dzigrarr: '⟿',\n eDDot: '⩷',\n eDot: '≑',\n eacute: 'é',\n easter: '⩮',\n ecaron: 'ě',\n ecir: '≖',\n ecirc: 'ê',\n ecolon: '≕',\n ecy: 'э',\n edot: 'ė',\n ee: 'ⅇ',\n efDot: '≒',\n efr: '𝔢',\n eg: '⪚',\n egrave: 'è',\n egs: '⪖',\n egsdot: '⪘',\n el: '⪙',\n elinters: '⏧',\n ell: 'ℓ',\n els: '⪕',\n elsdot: '⪗',\n emacr: 'ē',\n empty: '∅',\n emptyset: '∅',\n emptyv: '∅',\n emsp13: ' ',\n emsp14: ' ',\n emsp: ' ',\n eng: 'ŋ',\n ensp: ' ',\n eogon: 'ę',\n eopf: '𝕖',\n epar: '⋕',\n eparsl: '⧣',\n eplus: '⩱',\n epsi: 'ε',\n epsilon: 'ε',\n epsiv: 'ϵ',\n eqcirc: '≖',\n eqcolon: '≕',\n eqsim: '≂',\n eqslantgtr: '⪖',\n eqslantless: '⪕',\n equals: '=',\n equest: '≟',\n equiv: '≡',\n equivDD: '⩸',\n eqvparsl: '⧥',\n erDot: '≓',\n erarr: '⥱',\n escr: 'ℯ',\n esdot: '≐',\n esim: '≂',\n eta: 'η',\n eth: 'ð',\n euml: 'ë',\n euro: '€',\n excl: '!',\n exist: '∃',\n expectation: 'ℰ',\n exponentiale: 'ⅇ',\n fallingdotseq: '≒',\n fcy: 'ф',\n female: '♀',\n ffilig: 'ffi',\n fflig: 'ff',\n ffllig: 'ffl',\n ffr: '𝔣',\n filig: 'fi',\n fjlig: 'fj',\n flat: '♭',\n fllig: 'fl',\n fltns: '▱',\n fnof: 'ƒ',\n fopf: '𝕗',\n forall: '∀',\n fork: '⋔',\n forkv: '⫙',\n fpartint: '⨍',\n frac12: '½',\n frac13: '⅓',\n frac14: '¼',\n frac15: '⅕',\n frac16: '⅙',\n frac18: '⅛',\n frac23: '⅔',\n frac25: '⅖',\n frac34: '¾',\n frac35: '⅗',\n frac38: '⅜',\n frac45: '⅘',\n frac56: '⅚',\n frac58: '⅝',\n frac78: '⅞',\n frasl: '⁄',\n frown: '⌢',\n fscr: '𝒻',\n gE: '≧',\n gEl: '⪌',\n gacute: 'ǵ',\n gamma: 'γ',\n gammad: 'ϝ',\n gap: '⪆',\n gbreve: 'ğ',\n gcirc: 'ĝ',\n gcy: 'г',\n gdot: 'ġ',\n ge: '≥',\n gel: '⋛',\n geq: '≥',\n geqq: '≧',\n geqslant: '⩾',\n ges: '⩾',\n gescc: '⪩',\n gesdot: '⪀',\n gesdoto: '⪂',\n gesdotol: '⪄',\n gesl: '⋛︀',\n gesles: '⪔',\n gfr: '𝔤',\n gg: '≫',\n ggg: '⋙',\n gimel: 'ℷ',\n gjcy: 'ѓ',\n gl: '≷',\n glE: '⪒',\n gla: '⪥',\n glj: '⪤',\n gnE: '≩',\n gnap: '⪊',\n gnapprox: '⪊',\n gne: '⪈',\n gneq: '⪈',\n gneqq: '≩',\n gnsim: '⋧',\n gopf: '𝕘',\n grave: '`',\n gscr: 'ℊ',\n gsim: '≳',\n gsime: '⪎',\n gsiml: '⪐',\n gt: '>',\n gtcc: '⪧',\n gtcir: '⩺',\n gtdot: '⋗',\n gtlPar: '⦕',\n gtquest: '⩼',\n gtrapprox: '⪆',\n gtrarr: '⥸',\n gtrdot: '⋗',\n gtreqless: '⋛',\n gtreqqless: '⪌',\n gtrless: '≷',\n gtrsim: '≳',\n gvertneqq: '≩︀',\n gvnE: '≩︀',\n hArr: '⇔',\n hairsp: ' ',\n half: '½',\n hamilt: 'ℋ',\n hardcy: 'ъ',\n harr: '↔',\n harrcir: '⥈',\n harrw: '↭',\n hbar: 'ℏ',\n hcirc: 'ĥ',\n hearts: '♥',\n heartsuit: '♥',\n hellip: '…',\n hercon: '⊹',\n hfr: '𝔥',\n hksearow: '⤥',\n hkswarow: '⤦',\n hoarr: '⇿',\n homtht: '∻',\n hookleftarrow: '↩',\n hookrightarrow: '↪',\n hopf: '𝕙',\n horbar: '―',\n hscr: '𝒽',\n hslash: 'ℏ',\n hstrok: 'ħ',\n hybull: '⁃',\n hyphen: '‐',\n iacute: 'í',\n ic: '',\n icirc: 'î',\n icy: 'и',\n iecy: 'е',\n iexcl: '¡',\n iff: '⇔',\n ifr: '𝔦',\n igrave: 'ì',\n ii: 'ⅈ',\n iiiint: '⨌',\n iiint: '∭',\n iinfin: '⧜',\n iiota: '℩',\n ijlig: 'ij',\n imacr: 'ī',\n image: 'ℑ',\n imagline: 'ℐ',\n imagpart: 'ℑ',\n imath: 'ı',\n imof: '⊷',\n imped: 'Ƶ',\n in: '∈',\n incare: '℅',\n infin: '∞',\n infintie: '⧝',\n inodot: 'ı',\n int: '∫',\n intcal: '⊺',\n integers: 'ℤ',\n intercal: '⊺',\n intlarhk: '⨗',\n intprod: '⨼',\n iocy: 'ё',\n iogon: 'į',\n iopf: '𝕚',\n iota: 'ι',\n iprod: '⨼',\n iquest: '¿',\n iscr: '𝒾',\n isin: '∈',\n isinE: '⋹',\n isindot: '⋵',\n isins: '⋴',\n isinsv: '⋳',\n isinv: '∈',\n it: '',\n itilde: 'ĩ',\n iukcy: 'і',\n iuml: 'ï',\n jcirc: 'ĵ',\n jcy: 'й',\n jfr: '𝔧',\n jmath: 'ȷ',\n jopf: '𝕛',\n jscr: '𝒿',\n jsercy: 'ј',\n jukcy: 'є',\n kappa: 'κ',\n kappav: 'ϰ',\n kcedil: 'ķ',\n kcy: 'к',\n kfr: '𝔨',\n kgreen: 'ĸ',\n khcy: 'х',\n kjcy: 'ќ',\n kopf: '𝕜',\n kscr: '𝓀',\n lAarr: '⇚',\n lArr: '⇐',\n lAtail: '⤛',\n lBarr: '⤎',\n lE: '≦',\n lEg: '⪋',\n lHar: '⥢',\n lacute: 'ĺ',\n laemptyv: '⦴',\n lagran: 'ℒ',\n lambda: 'λ',\n lang: '⟨',\n langd: '⦑',\n langle: '⟨',\n lap: '⪅',\n laquo: '«',\n larr: '←',\n larrb: '⇤',\n larrbfs: '⤟',\n larrfs: '⤝',\n larrhk: '↩',\n larrlp: '↫',\n larrpl: '⤹',\n larrsim: '⥳',\n larrtl: '↢',\n lat: '⪫',\n latail: '⤙',\n late: '⪭',\n lates: '⪭︀',\n lbarr: '⤌',\n lbbrk: '❲',\n lbrace: '{',\n lbrack: '[',\n lbrke: '⦋',\n lbrksld: '⦏',\n lbrkslu: '⦍',\n lcaron: 'ľ',\n lcedil: 'ļ',\n lceil: '⌈',\n lcub: '{',\n lcy: 'л',\n ldca: '⤶',\n ldquo: '“',\n ldquor: '„',\n ldrdhar: '⥧',\n ldrushar: '⥋',\n ldsh: '↲',\n le: '≤',\n leftarrow: '←',\n leftarrowtail: '↢',\n leftharpoondown: '↽',\n leftharpoonup: '↼',\n leftleftarrows: '⇇',\n leftrightarrow: '↔',\n leftrightarrows: '⇆',\n leftrightharpoons: '⇋',\n leftrightsquigarrow: '↭',\n leftthreetimes: '⋋',\n leg: '⋚',\n leq: '≤',\n leqq: '≦',\n leqslant: '⩽',\n les: '⩽',\n lescc: '⪨',\n lesdot: '⩿',\n lesdoto: '⪁',\n lesdotor: '⪃',\n lesg: '⋚︀',\n lesges: '⪓',\n lessapprox: '⪅',\n lessdot: '⋖',\n lesseqgtr: '⋚',\n lesseqqgtr: '⪋',\n lessgtr: '≶',\n lesssim: '≲',\n lfisht: '⥼',\n lfloor: '⌊',\n lfr: '𝔩',\n lg: '≶',\n lgE: '⪑',\n lhard: '↽',\n lharu: '↼',\n lharul: '⥪',\n lhblk: '▄',\n ljcy: 'љ',\n ll: '≪',\n llarr: '⇇',\n llcorner: '⌞',\n llhard: '⥫',\n lltri: '◺',\n lmidot: 'ŀ',\n lmoust: '⎰',\n lmoustache: '⎰',\n lnE: '≨',\n lnap: '⪉',\n lnapprox: '⪉',\n lne: '⪇',\n lneq: '⪇',\n lneqq: '≨',\n lnsim: '⋦',\n loang: '⟬',\n loarr: '⇽',\n lobrk: '⟦',\n longleftarrow: '⟵',\n longleftrightarrow: '⟷',\n longmapsto: '⟼',\n longrightarrow: '⟶',\n looparrowleft: '↫',\n looparrowright: '↬',\n lopar: '⦅',\n lopf: '𝕝',\n loplus: '⨭',\n lotimes: '⨴',\n lowast: '∗',\n lowbar: '_',\n loz: '◊',\n lozenge: '◊',\n lozf: '⧫',\n lpar: '(',\n lparlt: '⦓',\n lrarr: '⇆',\n lrcorner: '⌟',\n lrhar: '⇋',\n lrhard: '⥭',\n lrm: '',\n lrtri: '⊿',\n lsaquo: '‹',\n lscr: '𝓁',\n lsh: '↰',\n lsim: '≲',\n lsime: '⪍',\n lsimg: '⪏',\n lsqb: '[',\n lsquo: '‘',\n lsquor: '‚',\n lstrok: 'ł',\n lt: '<',\n ltcc: '⪦',\n ltcir: '⩹',\n ltdot: '⋖',\n lthree: '⋋',\n ltimes: '⋉',\n ltlarr: '⥶',\n ltquest: '⩻',\n ltrPar: '⦖',\n ltri: '◃',\n ltrie: '⊴',\n ltrif: '◂',\n lurdshar: '⥊',\n luruhar: '⥦',\n lvertneqq: '≨︀',\n lvnE: '≨︀',\n mDDot: '∺',\n macr: '¯',\n male: '♂',\n malt: '✠',\n maltese: '✠',\n map: '↦',\n mapsto: '↦',\n mapstodown: '↧',\n mapstoleft: '↤',\n mapstoup: '↥',\n marker: '▮',\n mcomma: '⨩',\n mcy: 'м',\n mdash: '—',\n measuredangle: '∡',\n mfr: '𝔪',\n mho: '℧',\n micro: 'µ',\n mid: '∣',\n midast: '*',\n midcir: '⫰',\n middot: '·',\n minus: '−',\n minusb: '⊟',\n minusd: '∸',\n minusdu: '⨪',\n mlcp: '⫛',\n mldr: '…',\n mnplus: '∓',\n models: '⊧',\n mopf: '𝕞',\n mp: '∓',\n mscr: '𝓂',\n mstpos: '∾',\n mu: 'μ',\n multimap: '⊸',\n mumap: '⊸',\n nGg: '⋙̸',\n nGt: '≫⃒',\n nGtv: '≫̸',\n nLeftarrow: '⇍',\n nLeftrightarrow: '⇎',\n nLl: '⋘̸',\n nLt: '≪⃒',\n nLtv: '≪̸',\n nRightarrow: '⇏',\n nVDash: '⊯',\n nVdash: '⊮',\n nabla: '∇',\n nacute: 'ń',\n nang: '∠⃒',\n nap: '≉',\n napE: '⩰̸',\n napid: '≋̸',\n napos: 'ʼn',\n napprox: '≉',\n natur: '♮',\n natural: '♮',\n naturals: 'ℕ',\n nbsp: ' ',\n nbump: '≎̸',\n nbumpe: '≏̸',\n ncap: '⩃',\n ncaron: 'ň',\n ncedil: 'ņ',\n ncong: '≇',\n ncongdot: '⩭̸',\n ncup: '⩂',\n ncy: 'н',\n ndash: '–',\n ne: '≠',\n neArr: '⇗',\n nearhk: '⤤',\n nearr: '↗',\n nearrow: '↗',\n nedot: '≐̸',\n nequiv: '≢',\n nesear: '⤨',\n nesim: '≂̸',\n nexist: '∄',\n nexists: '∄',\n nfr: '𝔫',\n ngE: '≧̸',\n nge: '≱',\n ngeq: '≱',\n ngeqq: '≧̸',\n ngeqslant: '⩾̸',\n nges: '⩾̸',\n ngsim: '≵',\n ngt: '≯',\n ngtr: '≯',\n nhArr: '⇎',\n nharr: '↮',\n nhpar: '⫲',\n ni: '∋',\n nis: '⋼',\n nisd: '⋺',\n niv: '∋',\n njcy: 'њ',\n nlArr: '⇍',\n nlE: '≦̸',\n nlarr: '↚',\n nldr: '‥',\n nle: '≰',\n nleftarrow: '↚',\n nleftrightarrow: '↮',\n nleq: '≰',\n nleqq: '≦̸',\n nleqslant: '⩽̸',\n nles: '⩽̸',\n nless: '≮',\n nlsim: '≴',\n nlt: '≮',\n nltri: '⋪',\n nltrie: '⋬',\n nmid: '∤',\n nopf: '𝕟',\n not: '¬',\n notin: '∉',\n notinE: '⋹̸',\n notindot: '⋵̸',\n notinva: '∉',\n notinvb: '⋷',\n notinvc: '⋶',\n notni: '∌',\n notniva: '∌',\n notnivb: '⋾',\n notnivc: '⋽',\n npar: '∦',\n nparallel: '∦',\n nparsl: '⫽⃥',\n npart: '∂̸',\n npolint: '⨔',\n npr: '⊀',\n nprcue: '⋠',\n npre: '⪯̸',\n nprec: '⊀',\n npreceq: '⪯̸',\n nrArr: '⇏',\n nrarr: '↛',\n nrarrc: '⤳̸',\n nrarrw: '↝̸',\n nrightarrow: '↛',\n nrtri: '⋫',\n nrtrie: '⋭',\n nsc: '⊁',\n nsccue: '⋡',\n nsce: '⪰̸',\n nscr: '𝓃',\n nshortmid: '∤',\n nshortparallel: '∦',\n nsim: '≁',\n nsime: '≄',\n nsimeq: '≄',\n nsmid: '∤',\n nspar: '∦',\n nsqsube: '⋢',\n nsqsupe: '⋣',\n nsub: '⊄',\n nsubE: '⫅̸',\n nsube: '⊈',\n nsubset: '⊂⃒',\n nsubseteq: '⊈',\n nsubseteqq: '⫅̸',\n nsucc: '⊁',\n nsucceq: '⪰̸',\n nsup: '⊅',\n nsupE: '⫆̸',\n nsupe: '⊉',\n nsupset: '⊃⃒',\n nsupseteq: '⊉',\n nsupseteqq: '⫆̸',\n ntgl: '≹',\n ntilde: 'ñ',\n ntlg: '≸',\n ntriangleleft: '⋪',\n ntrianglelefteq: '⋬',\n ntriangleright: '⋫',\n ntrianglerighteq: '⋭',\n nu: 'ν',\n num: '#',\n numero: '№',\n numsp: ' ',\n nvDash: '⊭',\n nvHarr: '⤄',\n nvap: '≍⃒',\n nvdash: '⊬',\n nvge: '≥⃒',\n nvgt: '>⃒',\n nvinfin: '⧞',\n nvlArr: '⤂',\n nvle: '≤⃒',\n nvlt: '<⃒',\n nvltrie: '⊴⃒',\n nvrArr: '⤃',\n nvrtrie: '⊵⃒',\n nvsim: '∼⃒',\n nwArr: '⇖',\n nwarhk: '⤣',\n nwarr: '↖',\n nwarrow: '↖',\n nwnear: '⤧',\n oS: 'Ⓢ',\n oacute: 'ó',\n oast: '⊛',\n ocir: '⊚',\n ocirc: 'ô',\n ocy: 'о',\n odash: '⊝',\n odblac: 'ő',\n odiv: '⨸',\n odot: '⊙',\n odsold: '⦼',\n oelig: 'œ',\n ofcir: '⦿',\n ofr: '𝔬',\n ogon: '˛',\n ograve: 'ò',\n ogt: '⧁',\n ohbar: '⦵',\n ohm: 'Ω',\n oint: '∮',\n olarr: '↺',\n olcir: '⦾',\n olcross: '⦻',\n oline: '‾',\n olt: '⧀',\n omacr: 'ō',\n omega: 'ω',\n omicron: 'ο',\n omid: '⦶',\n ominus: '⊖',\n oopf: '𝕠',\n opar: '⦷',\n operp: '⦹',\n oplus: '⊕',\n or: '∨',\n orarr: '↻',\n ord: '⩝',\n order: 'ℴ',\n orderof: 'ℴ',\n ordf: 'ª',\n ordm: 'º',\n origof: '⊶',\n oror: '⩖',\n orslope: '⩗',\n orv: '⩛',\n oscr: 'ℴ',\n oslash: 'ø',\n osol: '⊘',\n otilde: 'õ',\n otimes: '⊗',\n otimesas: '⨶',\n ouml: 'ö',\n ovbar: '⌽',\n par: '∥',\n para: '¶',\n parallel: '∥',\n parsim: '⫳',\n parsl: '⫽',\n part: '∂',\n pcy: 'п',\n percnt: '%',\n period: '.',\n permil: '‰',\n perp: '⊥',\n pertenk: '‱',\n pfr: '𝔭',\n phi: 'φ',\n phiv: 'ϕ',\n phmmat: 'ℳ',\n phone: '☎',\n pi: 'π',\n pitchfork: '⋔',\n piv: 'ϖ',\n planck: 'ℏ',\n planckh: 'ℎ',\n plankv: 'ℏ',\n plus: '+',\n plusacir: '⨣',\n plusb: '⊞',\n pluscir: '⨢',\n plusdo: '∔',\n plusdu: '⨥',\n pluse: '⩲',\n plusmn: '±',\n plussim: '⨦',\n plustwo: '⨧',\n pm: '±',\n pointint: '⨕',\n popf: '𝕡',\n pound: '£',\n pr: '≺',\n prE: '⪳',\n prap: '⪷',\n prcue: '≼',\n pre: '⪯',\n prec: '≺',\n precapprox: '⪷',\n preccurlyeq: '≼',\n preceq: '⪯',\n precnapprox: '⪹',\n precneqq: '⪵',\n precnsim: '⋨',\n precsim: '≾',\n prime: '′',\n primes: 'ℙ',\n prnE: '⪵',\n prnap: '⪹',\n prnsim: '⋨',\n prod: '∏',\n profalar: '⌮',\n profline: '⌒',\n profsurf: '⌓',\n prop: '∝',\n propto: '∝',\n prsim: '≾',\n prurel: '⊰',\n pscr: '𝓅',\n psi: 'ψ',\n puncsp: ' ',\n qfr: '𝔮',\n qint: '⨌',\n qopf: '𝕢',\n qprime: '⁗',\n qscr: '𝓆',\n quaternions: 'ℍ',\n quatint: '⨖',\n quest: '?',\n questeq: '≟',\n quot: '\"',\n rAarr: '⇛',\n rArr: '⇒',\n rAtail: '⤜',\n rBarr: '⤏',\n rHar: '⥤',\n race: '∽̱',\n racute: 'ŕ',\n radic: '√',\n raemptyv: '⦳',\n rang: '⟩',\n rangd: '⦒',\n range: '⦥',\n rangle: '⟩',\n raquo: '»',\n rarr: '→',\n rarrap: '⥵',\n rarrb: '⇥',\n rarrbfs: '⤠',\n rarrc: '⤳',\n rarrfs: '⤞',\n rarrhk: '↪',\n rarrlp: '↬',\n rarrpl: '⥅',\n rarrsim: '⥴',\n rarrtl: '↣',\n rarrw: '↝',\n ratail: '⤚',\n ratio: '∶',\n rationals: 'ℚ',\n rbarr: '⤍',\n rbbrk: '❳',\n rbrace: '}',\n rbrack: ']',\n rbrke: '⦌',\n rbrksld: '⦎',\n rbrkslu: '⦐',\n rcaron: 'ř',\n rcedil: 'ŗ',\n rceil: '⌉',\n rcub: '}',\n rcy: 'р',\n rdca: '⤷',\n rdldhar: '⥩',\n rdquo: '”',\n rdquor: '”',\n rdsh: '↳',\n real: 'ℜ',\n realine: 'ℛ',\n realpart: 'ℜ',\n reals: 'ℝ',\n rect: '▭',\n reg: '®',\n rfisht: '⥽',\n rfloor: '⌋',\n rfr: '𝔯',\n rhard: '⇁',\n rharu: '⇀',\n rharul: '⥬',\n rho: 'ρ',\n rhov: 'ϱ',\n rightarrow: '→',\n rightarrowtail: '↣',\n rightharpoondown: '⇁',\n rightharpoonup: '⇀',\n rightleftarrows: '⇄',\n rightleftharpoons: '⇌',\n rightrightarrows: '⇉',\n rightsquigarrow: '↝',\n rightthreetimes: '⋌',\n ring: '˚',\n risingdotseq: '≓',\n rlarr: '⇄',\n rlhar: '⇌',\n rlm: '',\n rmoust: '⎱',\n rmoustache: '⎱',\n rnmid: '⫮',\n roang: '⟭',\n roarr: '⇾',\n robrk: '⟧',\n ropar: '⦆',\n ropf: '𝕣',\n roplus: '⨮',\n rotimes: '⨵',\n rpar: ')',\n rpargt: '⦔',\n rppolint: '⨒',\n rrarr: '⇉',\n rsaquo: '›',\n rscr: '𝓇',\n rsh: '↱',\n rsqb: ']',\n rsquo: '’',\n rsquor: '’',\n rthree: '⋌',\n rtimes: '⋊',\n rtri: '▹',\n rtrie: '⊵',\n rtrif: '▸',\n rtriltri: '⧎',\n ruluhar: '⥨',\n rx: '℞',\n sacute: 'ś',\n sbquo: '‚',\n sc: '≻',\n scE: '⪴',\n scap: '⪸',\n scaron: 'š',\n sccue: '≽',\n sce: '⪰',\n scedil: 'ş',\n scirc: 'ŝ',\n scnE: '⪶',\n scnap: '⪺',\n scnsim: '⋩',\n scpolint: '⨓',\n scsim: '≿',\n scy: 'с',\n sdot: '⋅',\n sdotb: '⊡',\n sdote: '⩦',\n seArr: '⇘',\n searhk: '⤥',\n searr: '↘',\n searrow: '↘',\n sect: '§',\n semi: ';',\n seswar: '⤩',\n setminus: '∖',\n setmn: '∖',\n sext: '✶',\n sfr: '𝔰',\n sfrown: '⌢',\n sharp: '♯',\n shchcy: 'щ',\n shcy: 'ш',\n shortmid: '∣',\n shortparallel: '∥',\n shy: '',\n sigma: 'σ',\n sigmaf: 'ς',\n sigmav: 'ς',\n sim: '∼',\n simdot: '⩪',\n sime: '≃',\n simeq: '≃',\n simg: '⪞',\n simgE: '⪠',\n siml: '⪝',\n simlE: '⪟',\n simne: '≆',\n simplus: '⨤',\n simrarr: '⥲',\n slarr: '←',\n smallsetminus: '∖',\n smashp: '⨳',\n smeparsl: '⧤',\n smid: '∣',\n smile: '⌣',\n smt: '⪪',\n smte: '⪬',\n smtes: '⪬︀',\n softcy: 'ь',\n sol: '/',\n solb: '⧄',\n solbar: '⌿',\n sopf: '𝕤',\n spades: '♠',\n spadesuit: '♠',\n spar: '∥',\n sqcap: '⊓',\n sqcaps: '⊓︀',\n sqcup: '⊔',\n sqcups: '⊔︀',\n sqsub: '⊏',\n sqsube: '⊑',\n sqsubset: '⊏',\n sqsubseteq: '⊑',\n sqsup: '⊐',\n sqsupe: '⊒',\n sqsupset: '⊐',\n sqsupseteq: '⊒',\n squ: '□',\n square: '□',\n squarf: '▪',\n squf: '▪',\n srarr: '→',\n sscr: '𝓈',\n ssetmn: '∖',\n ssmile: '⌣',\n sstarf: '⋆',\n star: '☆',\n starf: '★',\n straightepsilon: 'ϵ',\n straightphi: 'ϕ',\n strns: '¯',\n sub: '⊂',\n subE: '⫅',\n subdot: '⪽',\n sube: '⊆',\n subedot: '⫃',\n submult: '⫁',\n subnE: '⫋',\n subne: '⊊',\n subplus: '⪿',\n subrarr: '⥹',\n subset: '⊂',\n subseteq: '⊆',\n subseteqq: '⫅',\n subsetneq: '⊊',\n subsetneqq: '⫋',\n subsim: '⫇',\n subsub: '⫕',\n subsup: '⫓',\n succ: '≻',\n succapprox: '⪸',\n succcurlyeq: '≽',\n succeq: '⪰',\n succnapprox: '⪺',\n succneqq: '⪶',\n succnsim: '⋩',\n succsim: '≿',\n sum: '∑',\n sung: '♪',\n sup1: '¹',\n sup2: '²',\n sup3: '³',\n sup: '⊃',\n supE: '⫆',\n supdot: '⪾',\n supdsub: '⫘',\n supe: '⊇',\n supedot: '⫄',\n suphsol: '⟉',\n suphsub: '⫗',\n suplarr: '⥻',\n supmult: '⫂',\n supnE: '⫌',\n supne: '⊋',\n supplus: '⫀',\n supset: '⊃',\n supseteq: '⊇',\n supseteqq: '⫆',\n supsetneq: '⊋',\n supsetneqq: '⫌',\n supsim: '⫈',\n supsub: '⫔',\n supsup: '⫖',\n swArr: '⇙',\n swarhk: '⤦',\n swarr: '↙',\n swarrow: '↙',\n swnwar: '⤪',\n szlig: 'ß',\n target: '⌖',\n tau: 'τ',\n tbrk: '⎴',\n tcaron: 'ť',\n tcedil: 'ţ',\n tcy: 'т',\n tdot: '⃛',\n telrec: '⌕',\n tfr: '𝔱',\n there4: '∴',\n therefore: '∴',\n theta: 'θ',\n thetasym: 'ϑ',\n thetav: 'ϑ',\n thickapprox: '≈',\n thicksim: '∼',\n thinsp: ' ',\n thkap: '≈',\n thksim: '∼',\n thorn: 'þ',\n tilde: '˜',\n times: '×',\n timesb: '⊠',\n timesbar: '⨱',\n timesd: '⨰',\n tint: '∭',\n toea: '⤨',\n top: '⊤',\n topbot: '⌶',\n topcir: '⫱',\n topf: '𝕥',\n topfork: '⫚',\n tosa: '⤩',\n tprime: '‴',\n trade: '™',\n triangle: '▵',\n triangledown: '▿',\n triangleleft: '◃',\n trianglelefteq: '⊴',\n triangleq: '≜',\n triangleright: '▹',\n trianglerighteq: '⊵',\n tridot: '◬',\n trie: '≜',\n triminus: '⨺',\n triplus: '⨹',\n trisb: '⧍',\n tritime: '⨻',\n trpezium: '⏢',\n tscr: '𝓉',\n tscy: 'ц',\n tshcy: 'ћ',\n tstrok: 'ŧ',\n twixt: '≬',\n twoheadleftarrow: '↞',\n twoheadrightarrow: '↠',\n uArr: '⇑',\n uHar: '⥣',\n uacute: 'ú',\n uarr: '↑',\n ubrcy: 'ў',\n ubreve: 'ŭ',\n ucirc: 'û',\n ucy: 'у',\n udarr: '⇅',\n udblac: 'ű',\n udhar: '⥮',\n ufisht: '⥾',\n ufr: '𝔲',\n ugrave: 'ù',\n uharl: '↿',\n uharr: '↾',\n uhblk: '▀',\n ulcorn: '⌜',\n ulcorner: '⌜',\n ulcrop: '⌏',\n ultri: '◸',\n umacr: 'ū',\n uml: '¨',\n uogon: 'ų',\n uopf: '𝕦',\n uparrow: '↑',\n updownarrow: '↕',\n upharpoonleft: '↿',\n upharpoonright: '↾',\n uplus: '⊎',\n upsi: 'υ',\n upsih: 'ϒ',\n upsilon: 'υ',\n upuparrows: '⇈',\n urcorn: '⌝',\n urcorner: '⌝',\n urcrop: '⌎',\n uring: 'ů',\n urtri: '◹',\n uscr: '𝓊',\n utdot: '⋰',\n utilde: 'ũ',\n utri: '▵',\n utrif: '▴',\n uuarr: '⇈',\n uuml: 'ü',\n uwangle: '⦧',\n vArr: '⇕',\n vBar: '⫨',\n vBarv: '⫩',\n vDash: '⊨',\n vangrt: '⦜',\n varepsilon: 'ϵ',\n varkappa: 'ϰ',\n varnothing: '∅',\n varphi: 'ϕ',\n varpi: 'ϖ',\n varpropto: '∝',\n varr: '↕',\n varrho: 'ϱ',\n varsigma: 'ς',\n varsubsetneq: '⊊︀',\n varsubsetneqq: '⫋︀',\n varsupsetneq: '⊋︀',\n varsupsetneqq: '⫌︀',\n vartheta: 'ϑ',\n vartriangleleft: '⊲',\n vartriangleright: '⊳',\n vcy: 'в',\n vdash: '⊢',\n vee: '∨',\n veebar: '⊻',\n veeeq: '≚',\n vellip: '⋮',\n verbar: '|',\n vert: '|',\n vfr: '𝔳',\n vltri: '⊲',\n vnsub: '⊂⃒',\n vnsup: '⊃⃒',\n vopf: '𝕧',\n vprop: '∝',\n vrtri: '⊳',\n vscr: '𝓋',\n vsubnE: '⫋︀',\n vsubne: '⊊︀',\n vsupnE: '⫌︀',\n vsupne: '⊋︀',\n vzigzag: '⦚',\n wcirc: 'ŵ',\n wedbar: '⩟',\n wedge: '∧',\n wedgeq: '≙',\n weierp: '℘',\n wfr: '𝔴',\n wopf: '𝕨',\n wp: '℘',\n wr: '≀',\n wreath: '≀',\n wscr: '𝓌',\n xcap: '⋂',\n xcirc: '◯',\n xcup: '⋃',\n xdtri: '▽',\n xfr: '𝔵',\n xhArr: '⟺',\n xharr: '⟷',\n xi: 'ξ',\n xlArr: '⟸',\n xlarr: '⟵',\n xmap: '⟼',\n xnis: '⋻',\n xodot: '⨀',\n xopf: '𝕩',\n xoplus: '⨁',\n xotime: '⨂',\n xrArr: '⟹',\n xrarr: '⟶',\n xscr: '𝓍',\n xsqcup: '⨆',\n xuplus: '⨄',\n xutri: '△',\n xvee: '⋁',\n xwedge: '⋀',\n yacute: 'ý',\n yacy: 'я',\n ycirc: 'ŷ',\n ycy: 'ы',\n yen: '¥',\n yfr: '𝔶',\n yicy: 'ї',\n yopf: '𝕪',\n yscr: '𝓎',\n yucy: 'ю',\n yuml: 'ÿ',\n zacute: 'ź',\n zcaron: 'ž',\n zcy: 'з',\n zdot: 'ż',\n zeetrf: 'ℨ',\n zeta: 'ζ',\n zfr: '𝔷',\n zhcy: 'ж',\n zigrarr: '⇝',\n zopf: '𝕫',\n zscr: '𝓏',\n zwj: '',\n zwnj: ''\n}\n","import {characterEntities} from 'character-entities'\n\n// To do: next major: use `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/**\n * Decode a single character reference (without the `&` or `;`).\n * You probably only need this when you’re building parsers yourself that follow\n * different rules compared to HTML.\n * This is optimized to be tiny in browsers.\n *\n * @param {string} value\n * `notin` (named), `#123` (deci), `#x123` (hexa).\n * @returns {string|false}\n * Decoded reference.\n */\nexport function decodeNamedCharacterReference(value) {\n return own.call(characterEntities, value) ? characterEntities[value] : false\n}\n","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n return (\n value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ')\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase()\n .toUpperCase()\n )\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {blankLine} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n}\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to\n * enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n /** @type {Extension} */\n return {\n document: {\n [91]: {\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n add: 'after',\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n }\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {Array<string>} */\n // @ts-expect-error It’s fine!\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n /** @type {Token} */\n let labelStart\n\n // Find an opening.\n while (index--) {\n const token = self.events[index][1]\n if (token.type === 'labelImage') {\n labelStart = token\n break\n }\n\n // Exit if we’ve walked far enough.\n if (\n token.type === 'gfmFootnoteCall' ||\n token.type === 'labelLink' ||\n token.type === 'label' ||\n token.type === 'image' ||\n token.type === 'link'\n ) {\n break\n }\n }\n return start\n\n /**\n * @type {State}\n */\n function start(code) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code)\n }\n const id = normalizeIdentifier(\n self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })\n )\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code)\n }\n effects.enter('gfmFootnoteCallLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteCallLabelMarker')\n return ok(code)\n }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length\n /** @type {Token | undefined} */\n let labelStart\n\n // Find an opening.\n while (index--) {\n if (\n events[index][1].type === 'labelImage' &&\n events[index][0] === 'enter'\n ) {\n labelStart = events[index][1]\n break\n }\n }\n // Change the `labelImageMarker` to a `data`.\n events[index + 1][1].type = 'data'\n events[index + 3][1].type = 'gfmFootnoteCallLabelMarker'\n\n // The whole (without `!`):\n /** @type {Token} */\n const call = {\n type: 'gfmFootnoteCall',\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }\n // The `^` marker\n /** @type {Token} */\n const marker = {\n type: 'gfmFootnoteCallMarker',\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n }\n // Increment the end 1 character.\n marker.end.column++\n marker.end.offset++\n marker.end._bufferIndex++\n /** @type {Token} */\n const string = {\n type: 'gfmFootnoteCallString',\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n }\n /** @type {Token} */\n const chunk = {\n type: 'chunkString',\n contentType: 'string',\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n }\n\n /** @type {Array<Event>} */\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1],\n events[index + 2],\n ['enter', call, context],\n // The `[`\n events[index + 3],\n events[index + 4],\n // The `^`.\n ['enter', marker, context],\n ['exit', marker, context],\n // Everything in between.\n ['enter', string, context],\n ['enter', chunk, context],\n ['exit', chunk, context],\n ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2],\n events[events.length - 1],\n ['exit', call, context]\n ]\n events.splice(index, events.length - index + 1, ...replacement)\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n const self = this\n /** @type {Array<string>} */\n // @ts-expect-error It’s fine!\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n let size = 0\n /** @type {boolean} */\n let data\n\n // Note: the implementation of `markdown-rs` is different, because it houses\n // core *and* extensions in one project.\n // Therefore, it can include footnote logic inside `label-end`.\n // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n // needed for labels.\n return start\n\n /**\n * Start of footnote label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteCall')\n effects.enter('gfmFootnoteCallLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteCallLabelMarker')\n return callStart\n }\n\n /**\n * After `[`, at `^`.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callStart(code) {\n if (code !== 94) return nok(code)\n effects.enter('gfmFootnoteCallMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteCallMarker')\n effects.enter('gfmFootnoteCallString')\n effects.enter('chunkString').contentType = 'string'\n return callData\n }\n\n /**\n * In label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callData(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n (code === 93 && !data) ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null ||\n code === 91 ||\n markdownLineEndingOrSpace(code)\n ) {\n return nok(code)\n }\n if (code === 93) {\n effects.exit('chunkString')\n const token = effects.exit('gfmFootnoteCallString')\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code)\n }\n effects.enter('gfmFootnoteCallLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteCallLabelMarker')\n effects.exit('gfmFootnoteCall')\n return ok\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true\n }\n size++\n effects.consume(code)\n return code === 92 ? callEscape : callData\n }\n\n /**\n * On character after escape.\n *\n * ```markdown\n * > | a [^b\\c] d\n * ^\n * ```\n *\n * @type {State}\n */\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return callData\n }\n return callData(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n const self = this\n /** @type {Array<string>} */\n // @ts-expect-error It’s fine!\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n /** @type {string} */\n let identifier\n let size = 0\n /** @type {boolean | undefined} */\n let data\n return start\n\n /**\n * Start of GFM footnote definition.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteDefinition')._container = true\n effects.enter('gfmFootnoteDefinitionLabel')\n effects.enter('gfmFootnoteDefinitionLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteDefinitionLabelMarker')\n return labelAtMarker\n }\n\n /**\n * In label, at caret.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAtMarker(code) {\n if (code === 94) {\n effects.enter('gfmFootnoteDefinitionMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteDefinitionMarker')\n effects.enter('gfmFootnoteDefinitionLabelString')\n effects.enter('chunkString').contentType = 'string'\n return labelInside\n }\n return nok(code)\n }\n\n /**\n * In label.\n *\n * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n * > definition labels.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n (code === 93 && !data) ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null ||\n code === 91 ||\n markdownLineEndingOrSpace(code)\n ) {\n return nok(code)\n }\n if (code === 93) {\n effects.exit('chunkString')\n const token = effects.exit('gfmFootnoteDefinitionLabelString')\n identifier = normalizeIdentifier(self.sliceSerialize(token))\n effects.enter('gfmFootnoteDefinitionLabelMarker')\n effects.consume(code)\n effects.exit('gfmFootnoteDefinitionLabelMarker')\n effects.exit('gfmFootnoteDefinitionLabel')\n return labelAfter\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true\n }\n size++\n effects.consume(code)\n return code === 92 ? labelEscape : labelInside\n }\n\n /**\n * After `\\`, at a special character.\n *\n * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n * > <https://github.com/github/cmark-gfm/issues/240>\n *\n * ```markdown\n * > | [^a\\*b]: c\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code)\n size++\n return labelInside\n }\n return labelInside(code)\n }\n\n /**\n * After definition label.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n if (code === 58) {\n effects.enter('definitionMarker')\n effects.consume(code)\n effects.exit('definitionMarker')\n if (!defined.includes(identifier)) {\n defined.push(identifier)\n }\n\n // Any whitespace after the marker is eaten, forming indented code\n // is not possible.\n // No space is also fine, just like a block quote marker.\n return factorySpace(\n effects,\n whitespaceAfter,\n 'gfmFootnoteDefinitionWhitespace'\n )\n }\n return nok(code)\n }\n\n /**\n * After definition prefix.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function whitespaceAfter(code) {\n // `markdown-rs` has a wrapping token for the prefix that is closed here.\n return ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n /// Start of footnote definition continuation.\n ///\n /// ```markdown\n /// | [^a]: b\n /// > | c\n /// ^\n /// ```\n //\n // Either a blank line, which is okay, or an indented thing.\n return effects.check(blankLine, ok, effects.attempt(indent, ok, nok))\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit('gfmFootnoteDefinition')\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this\n return factorySpace(\n effects,\n afterPrefix,\n 'gfmFootnoteDefinitionIndent',\n 4 + 1\n )\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1]\n return tail &&\n tail[1].type === 'gfmFootnoteDefinitionIndent' &&\n tail[2].sliceSerialize(tail[1], true).length === 4\n ? ok(code)\n : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean} [singleTilde=true]\n * Whether to support strikethrough with a single tilde.\n *\n * Single tildes work on github.com, but are technically prohibited by the\n * GFM spec.\n */\n\nimport {splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n const options_ = options || {}\n let single = options_.singleTilde\n const tokenizer = {\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n }\n if (single === null || single === undefined) {\n single = true\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n }\n\n /**\n * Take events and resolve strikethrough.\n *\n * @type {Resolver}\n */\n function resolveAllStrikethrough(events, context) {\n let index = -1\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (\n events[index][0] === 'enter' &&\n events[index][1].type === 'strikethroughSequenceTemporary' &&\n events[index][1]._close\n ) {\n let open = index\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (\n events[open][0] === 'exit' &&\n events[open][1].type === 'strikethroughSequenceTemporary' &&\n events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset ===\n events[open][1].end.offset - events[open][1].start.offset\n ) {\n events[index][1].type = 'strikethroughSequence'\n events[open][1].type = 'strikethroughSequence'\n\n /** @type {Token} */\n const strikethrough = {\n type: 'strikethrough',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n }\n\n /** @type {Token} */\n const text = {\n type: 'strikethroughText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n }\n\n // Opening.\n /** @type {Array<Event>} */\n const nextEvents = [\n ['enter', strikethrough, context],\n ['enter', events[open][1], context],\n ['exit', events[open][1], context],\n ['enter', text, context]\n ]\n const insideSpan = context.parser.constructs.insideSpan.null\n if (insideSpan) {\n // Between.\n splice(\n nextEvents,\n nextEvents.length,\n 0,\n resolveAll(insideSpan, events.slice(open + 1, index), context)\n )\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [\n ['exit', text, context],\n ['enter', events[index][1], context],\n ['exit', events[index][1], context],\n ['exit', strikethrough, context]\n ])\n splice(events, open - 1, index - open + 3, nextEvents)\n index = open + nextEvents.length - 2\n break\n }\n }\n }\n }\n index = -1\n while (++index < events.length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = 'data'\n }\n }\n return events\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeStrikethrough(effects, ok, nok) {\n const previous = this.previous\n const events = this.events\n let size = 0\n return start\n\n /** @type {State} */\n function start(code) {\n if (\n previous === 126 &&\n events[events.length - 1][1].type !== 'characterEscape'\n ) {\n return nok(code)\n }\n effects.enter('strikethroughSequenceTemporary')\n return more(code)\n }\n\n /** @type {State} */\n function more(code) {\n const before = classifyCharacter(previous)\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code)\n effects.consume(code)\n size++\n return more\n }\n if (size < 2 && !single) return nok(code)\n const token = effects.exit('strikethroughSequenceTemporary')\n const after = classifyCharacter(code)\n token._open = !after || (after === 2 && Boolean(before))\n token._close = !before || (before === 2 && Boolean(after))\n return ok(code)\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n /**\n * Record of changes.\n *\n * @type {Array<Change>}\n */\n this.map = []\n }\n\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {void}\n */\n add(index, remove, add) {\n addImpl(this, index, remove, add)\n }\n\n // To do: not used here.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array<Event>} add\n // * @returns {void}\n // */\n // addBefore(index, remove, add) {\n // addImpl(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array<Event>} events\n * @returns {void}\n */\n consume(events) {\n this.map.sort((a, b) => a[0] - b[0])\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (this.map.length === 0) {\n return\n }\n\n // To do: if links are added in events, like they are in `markdown-rs`,\n // this is needed.\n // // Calculate jumps: where items in the current list move to.\n // /** @type {Array<Jump>} */\n // const jumps = []\n // let index = 0\n // let addAcc = 0\n // let removeAcc = 0\n // while (index < this.map.length) {\n // const [at, remove, add] = this.map[index]\n // removeAcc += remove\n // addAcc += add.length\n // jumps.push([at, removeAcc, addAcc])\n // index += 1\n // }\n //\n // . shiftLinks(events, jumps)\n\n let index = this.map.length\n /** @type {Array<Array<Event>>} */\n const vecs = []\n while (index > 0) {\n index -= 1\n vecs.push(events.slice(this.map[index][0] + this.map[index][1]))\n // eslint-disable-next-line unicorn/no-array-push-push\n vecs.push(this.map[index][2])\n\n // Truncate rest.\n events.length = this.map[index][0]\n }\n vecs.push([...events])\n events.length = 0\n let slice = vecs.pop()\n while (slice) {\n events.push(...slice)\n slice = vecs.pop()\n }\n\n // Truncate everything.\n this.map.length = 0\n }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {void}\n */\nfunction addImpl(editMap, at, remove, add) {\n let index = 0\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (remove === 0 && add.length === 0) {\n return\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove\n\n // To do: before not used.\n // if (before) {\n // add.push(...editMap.map[index][2])\n // editMap.map[index][2] = add\n // } else {\n editMap.map[index][2].push(...add)\n // }\n\n return\n }\n index += 1\n }\n editMap.map.push([at, remove, add])\n}\n\n// /**\n// * Shift `previous` and `next` links according to `jumps`.\n// *\n// * This fixes links in case there are events removed or added between them.\n// *\n// * @param {Array<Event>} events\n// * @param {Array<Jump>} jumps\n// */\n// function shiftLinks(events, jumps) {\n// let jumpIndex = 0\n// let index = 0\n// let add = 0\n// let rm = 0\n\n// while (index < events.length) {\n// const rmCurr = rm\n\n// while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n// add = jumps[jumpIndex][2]\n// rm = jumps[jumpIndex][1]\n// jumpIndex += 1\n// }\n\n// // Ignore items that will be removed.\n// if (rm > rmCurr) {\n// index += rm - rmCurr\n// } else {\n// console.log('to do: links?', add, rmCurr)\n// // ?\n// // if let Some(link) = &events[index].link {\n// // if let Some(next) = link.next {\n// // events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n// // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n// // add = jumps[jumpIndex].2;\n// // rm = jumps[jumpIndex].1;\n// // jumpIndex += 1;\n// // }\n// // events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n// // index = next;\n// // continue;\n// // }\n// // }\n// index += 1\n// }\n// }\n// }\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n/**\n * @typedef {'left' | 'center' | 'right' | 'none'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Array<Event>} events\n * @param {number} index\n * @returns {Array<Align>}\n */\nexport function gfmTableAlign(events, index) {\n let inDelimiterRow = false\n /** @type {Array<Align>} */\n const align = []\n while (index < events.length) {\n const event = events[index]\n if (inDelimiterRow) {\n if (event[0] === 'enter') {\n // Start of alignment value: set a new column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n if (event[1].type === 'tableContent') {\n align.push(\n events[index + 1][1].type === 'tableDelimiterMarker'\n ? 'left'\n : 'none'\n )\n }\n }\n // Exits:\n // End of alignment value: change the column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n else if (event[1].type === 'tableContent') {\n if (events[index - 1][1].type === 'tableDelimiterMarker') {\n const alignIndex = align.length - 1\n align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right'\n }\n }\n // Done!\n else if (event[1].type === 'tableDelimiterRow') {\n break\n }\n } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n inDelimiterRow = true\n }\n index += 1\n }\n return align\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n * Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n * Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {EditMap} from './edit-map.js'\nimport {gfmTableAlign} from './infer.js'\n\n// To do: next major: expose functions.\n\n/**\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n *\n * @type {Extension}\n */\nexport const gfmTable = {\n flow: {\n null: {\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n const self = this\n let size = 0\n let sizeB = 0\n /** @type {boolean | undefined} */\n let seen\n return start\n\n /**\n * Start of a GFM table.\n *\n * If there is a valid table row or table head before, then we try to parse\n * another row.\n * Otherwise, we try to parse a head.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * > | | b |\n * ^\n * ```\n * @type {State}\n */\n function start(code) {\n let index = self.events.length - 1\n while (index > -1) {\n const type = self.events[index][1].type\n if (\n type === 'lineEnding' ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === 'linePrefix'\n )\n index--\n else break\n }\n const tail = index > -1 ? self.events[index][1].type : null\n const next =\n tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore\n\n // Don’t allow lazy body rows.\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code)\n }\n return next(code)\n }\n\n /**\n * Before table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBefore(code) {\n effects.enter('tableHead')\n effects.enter('tableRow')\n return headRowStart(code)\n }\n\n /**\n * Before table head row, after whitespace.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowStart(code) {\n if (code === 124) {\n return headRowBreak(code)\n }\n\n // To do: micromark-js should let us parse our own whitespace in extensions,\n // like `markdown-rs`:\n //\n // ```js\n // // 4+ spaces.\n // if (markdownSpace(code)) {\n // return nok(code)\n // }\n // ```\n\n seen = true\n // Count the first character, that isn’t a pipe, double.\n sizeB += 1\n return headRowBreak(code)\n }\n\n /**\n * At break in table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * ^\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBreak(code) {\n if (code === null) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code)\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n if (sizeB > 1) {\n sizeB = 0\n // To do: check if this works.\n // Feel free to interrupt:\n self.interrupt = true\n effects.exit('tableRow')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return headDelimiterStart\n }\n\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code)\n }\n if (markdownSpace(code)) {\n // To do: check if this is fine.\n // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n // State::Retry(space_or_tab(tokenizer))\n return factorySpace(effects, headRowBreak, 'whitespace')(code)\n }\n sizeB += 1\n if (seen) {\n seen = false\n // Header cell count.\n size += 1\n }\n if (code === 124) {\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n // Whether a delimiter was seen.\n seen = true\n return headRowBreak\n }\n\n // Anything else is cell data.\n effects.enter('data')\n return headRowData(code)\n }\n\n /**\n * In table head row data.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit('data')\n return headRowBreak(code)\n }\n effects.consume(code)\n return code === 92 ? headRowEscape : headRowData\n }\n\n /**\n * In table head row escape.\n *\n * ```markdown\n * > | | a\\-b |\n * ^\n * | | ---- |\n * | | c |\n * ```\n *\n * @type {State}\n */\n function headRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code)\n return headRowData\n }\n return headRowData(code)\n }\n\n /**\n * Before delimiter row.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterStart(code) {\n // Reset `interrupt`.\n self.interrupt = false\n\n // Note: in `markdown-rs`, we need to handle piercing here too.\n if (self.parser.lazy[self.now().line]) {\n return nok(code)\n }\n effects.enter('tableDelimiterRow')\n // Track if we’ve seen a `:` or `|`.\n seen = false\n if (markdownSpace(code)) {\n return factorySpace(\n effects,\n headDelimiterBefore,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n }\n return headDelimiterBefore(code)\n }\n\n /**\n * Before delimiter row, after optional whitespace.\n *\n * Reused when a `|` is found later, to parse another cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterBefore(code) {\n if (code === 45 || code === 58) {\n return headDelimiterValueBefore(code)\n }\n if (code === 124) {\n seen = true\n // If we start with a pipe, we open a cell marker.\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n return headDelimiterCellBefore\n }\n\n // More whitespace / empty row not allowed at start.\n return headDelimiterNok(code)\n }\n\n /**\n * After `|`, before delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellBefore(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterValueBefore, 'whitespace')(code)\n }\n return headDelimiterValueBefore(code)\n }\n\n /**\n * Before delimiter cell value.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterValueBefore(code) {\n // Align: left.\n if (code === 58) {\n sizeB += 1\n seen = true\n effects.enter('tableDelimiterMarker')\n effects.consume(code)\n effects.exit('tableDelimiterMarker')\n return headDelimiterLeftAlignmentAfter\n }\n\n // Align: none.\n if (code === 45) {\n sizeB += 1\n // To do: seems weird that this *isn’t* left aligned, but that state is used?\n return headDelimiterLeftAlignmentAfter(code)\n }\n if (code === null || markdownLineEnding(code)) {\n return headDelimiterCellAfter(code)\n }\n return headDelimiterNok(code)\n }\n\n /**\n * After delimiter cell left alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | :- |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterLeftAlignmentAfter(code) {\n if (code === 45) {\n effects.enter('tableDelimiterFiller')\n return headDelimiterFiller(code)\n }\n\n // Anything else is not ok after the left-align colon.\n return headDelimiterNok(code)\n }\n\n /**\n * In delimiter cell filler.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterFiller(code) {\n if (code === 45) {\n effects.consume(code)\n return headDelimiterFiller\n }\n\n // Align is `center` if it was `left`, `right` otherwise.\n if (code === 58) {\n seen = true\n effects.exit('tableDelimiterFiller')\n effects.enter('tableDelimiterMarker')\n effects.consume(code)\n effects.exit('tableDelimiterMarker')\n return headDelimiterRightAlignmentAfter\n }\n effects.exit('tableDelimiterFiller')\n return headDelimiterRightAlignmentAfter(code)\n }\n\n /**\n * After delimiter cell right alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterRightAlignmentAfter(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterCellAfter, 'whitespace')(code)\n }\n return headDelimiterCellAfter(code)\n }\n\n /**\n * After delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellAfter(code) {\n if (code === 124) {\n return headDelimiterBefore(code)\n }\n if (code === null || markdownLineEnding(code)) {\n // Exit when:\n // * there was no `:` or `|` at all (it’s a thematic break or setext\n // underline instead)\n // * the header cell count is not the delimiter cell count\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code)\n }\n\n // Note: in markdown-rs`, a reset is needed here.\n effects.exit('tableDelimiterRow')\n effects.exit('tableHead')\n // To do: in `markdown-rs`, resolvers need to be registered manually.\n // effects.register_resolver(ResolveName::GfmTable)\n return ok(code)\n }\n return headDelimiterNok(code)\n }\n\n /**\n * In delimiter row, at a disallowed byte.\n *\n * ```markdown\n * | | a |\n * > | | x |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterNok(code) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code)\n }\n\n /**\n * Before table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowStart(code) {\n // Note: in `markdown-rs` we need to manually take care of a prefix,\n // but in `micromark-js` that is done for us, so if we’re here, we’re\n // never at whitespace.\n effects.enter('tableRow')\n return bodyRowBreak(code)\n }\n\n /**\n * At break in table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ^\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowBreak(code) {\n if (code === 124) {\n effects.enter('tableCellDivider')\n effects.consume(code)\n effects.exit('tableCellDivider')\n return bodyRowBreak\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('tableRow')\n return ok(code)\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, bodyRowBreak, 'whitespace')(code)\n }\n\n // Anything else is cell content.\n effects.enter('data')\n return bodyRowData(code)\n }\n\n /**\n * In table body row data.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit('data')\n return bodyRowBreak(code)\n }\n effects.consume(code)\n return code === 92 ? bodyRowEscape : bodyRowData\n }\n\n /**\n * In table body row escape.\n *\n * ```markdown\n * | | a |\n * | | ---- |\n * > | | b\\-c |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code)\n return bodyRowData\n }\n return bodyRowData(code)\n }\n}\n\n/** @type {Resolver} */\n// eslint-disable-next-line complexity\nfunction resolveTable(events, context) {\n let index = -1\n let inFirstCellAwaitingPipe = true\n /** @type {RowKind} */\n let rowKind = 0\n /** @type {Range} */\n let lastCell = [0, 0, 0, 0]\n /** @type {Range} */\n let cell = [0, 0, 0, 0]\n let afterHeadAwaitingFirstBodyRow = false\n let lastTableEnd = 0\n /** @type {Token | undefined} */\n let currentTable\n /** @type {Token | undefined} */\n let currentBody\n /** @type {Token | undefined} */\n let currentCell\n const map = new EditMap()\n while (++index < events.length) {\n const event = events[index]\n const token = event[1]\n if (event[0] === 'enter') {\n // Start of head.\n if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = false\n\n // Inject previous (body end and) table end.\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n currentBody = undefined\n lastTableEnd = 0\n }\n\n // Inject table start.\n currentTable = {\n type: 'table',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n }\n map.add(index, 0, [['enter', currentTable, context]])\n } else if (\n token.type === 'tableRow' ||\n token.type === 'tableDelimiterRow'\n ) {\n inFirstCellAwaitingPipe = true\n currentCell = undefined\n lastCell = [0, 0, 0, 0]\n cell = [0, index + 1, 0, 0]\n\n // Inject table body start.\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false\n currentBody = {\n type: 'tableBody',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n }\n map.add(index, 0, [['enter', currentBody, context]])\n }\n rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1\n }\n // Cell data.\n else if (\n rowKind &&\n (token.type === 'data' ||\n token.type === 'tableDelimiterMarker' ||\n token.type === 'tableDelimiterFiller')\n ) {\n inFirstCellAwaitingPipe = false\n\n // First value in cell.\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1]\n currentCell = flushCell(\n map,\n context,\n lastCell,\n rowKind,\n undefined,\n currentCell\n )\n lastCell = [0, 0, 0, 0]\n }\n cell[2] = index\n }\n } else if (token.type === 'tableCellDivider') {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1]\n currentCell = flushCell(\n map,\n context,\n lastCell,\n rowKind,\n undefined,\n currentCell\n )\n }\n lastCell = cell\n cell = [lastCell[1], index, 0, 0]\n }\n }\n }\n // Exit events.\n else if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = true\n lastTableEnd = index\n } else if (\n token.type === 'tableRow' ||\n token.type === 'tableDelimiterRow'\n ) {\n lastTableEnd = index\n if (lastCell[1] !== 0) {\n cell[0] = cell[1]\n currentCell = flushCell(\n map,\n context,\n lastCell,\n rowKind,\n index,\n currentCell\n )\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell)\n }\n rowKind = 0\n } else if (\n rowKind &&\n (token.type === 'data' ||\n token.type === 'tableDelimiterMarker' ||\n token.type === 'tableDelimiterFiller')\n ) {\n cell[3] = index\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n }\n map.consume(context.events)\n\n // To do: move this into `html`, when events are exposed there.\n // That’s what `markdown-rs` does.\n // That needs updates to `mdast-util-gfm-table`.\n index = -1\n while (++index < context.events.length) {\n const event = context.events[index]\n if (event[0] === 'enter' && event[1].type === 'table') {\n event[1]._align = gfmTableAlign(context.events, index)\n }\n }\n return events\n}\n\n/// Generate a cell.\n/**\n *\n * @param {EditMap} map\n * @param {TokenizeContext} context\n * @param {Range} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n const groupName =\n rowKind === 1\n ? 'tableHeader'\n : rowKind === 2\n ? 'tableDelimiter'\n : 'tableData'\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n const valueName = 'tableContent'\n\n // Insert an exit for the previous cell, if there is one.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]))\n map.add(range[0], 0, [['exit', previousCell, context]])\n }\n\n // Insert enter of this cell.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^^^^-- this cell\n // ```\n const now = getPoint(context.events, range[1])\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n }\n map.add(range[1], 0, [['enter', previousCell, context]])\n\n // Insert text start at first data start and end at last data end, and\n // remove events between.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2])\n const relatedEnd = getPoint(context.events, range[3])\n /** @type {Token} */\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n }\n map.add(range[2], 0, [['enter', valueToken, context]])\n if (rowKind !== 2) {\n // Fix positional info on remaining events\n const start = context.events[range[2]]\n const end = context.events[range[3]]\n start[1].end = Object.assign({}, end[1].end)\n start[1].type = 'chunkText'\n start[1].contentType = 'text'\n\n // Remove if needed.\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1\n const b = range[3] - range[2] - 1\n map.add(a, b, [])\n }\n }\n map.add(range[3] + 1, 0, [['exit', valueToken, context]])\n }\n\n // Insert an exit for the last cell, if at the row end.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^^^-- this cell (the last one contains two “between” parts)\n // ```\n if (rowEnd !== undefined) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd))\n map.add(rowEnd, 0, [['exit', previousCell, context]])\n previousCell = undefined\n }\n return previousCell\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {EditMap} map\n * @param {TokenizeContext} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n /** @type {Array<Event>} */\n const exits = []\n const related = getPoint(context.events, index)\n if (tableBody) {\n tableBody.end = Object.assign({}, related)\n exits.push(['exit', tableBody, context])\n }\n table.end = Object.assign({}, related)\n exits.push(['exit', table, context])\n map.add(index + 1, 0, exits)\n}\n\n/**\n * @param {Array<Event>} events\n * @param {number} index\n * @returns {readonly Point}\n */\nfunction getPoint(events, index) {\n const event = events[index]\n const side = event[0] === 'enter' ? 'start' : 'end'\n return event[1][side]\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n markdownLineEndingOrSpace,\n markdownLineEnding,\n markdownSpace\n} from 'micromark-util-character'\nconst tasklistCheck = {\n tokenize: tokenizeTasklistCheck\n}\n\n// To do: next major: expose function to make extension.\n\n/**\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM task list items syntax.\n *\n * @type {Extension}\n */\nexport const gfmTaskListItem = {\n text: {\n [91]: tasklistCheck\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n const self = this\n return open\n\n /**\n * At start of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem\n ) {\n return nok(code)\n }\n effects.enter('taskListCheck')\n effects.enter('taskListCheckMarker')\n effects.consume(code)\n effects.exit('taskListCheckMarker')\n return inside\n }\n\n /**\n * In task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // Currently we match how GH works in files.\n // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n if (markdownLineEndingOrSpace(code)) {\n effects.enter('taskListCheckValueUnchecked')\n effects.consume(code)\n effects.exit('taskListCheckValueUnchecked')\n return close\n }\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked')\n effects.consume(code)\n effects.exit('taskListCheckValueChecked')\n return close\n }\n return nok(code)\n }\n\n /**\n * At close of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function close(code) {\n if (code === 93) {\n effects.enter('taskListCheckMarker')\n effects.consume(code)\n effects.exit('taskListCheckMarker')\n effects.exit('taskListCheck')\n return after\n }\n return nok(code)\n }\n\n /**\n * @type {State}\n */\n function after(code) {\n // EOL in paragraph means there must be something else after it.\n if (markdownLineEnding(code)) {\n return ok(code)\n }\n\n // Space or tab?\n // Check what comes after.\n if (markdownSpace(code)) {\n return effects.check(\n {\n tokenize: spaceThenNonSpace\n },\n ok,\n nok\n )(code)\n }\n\n // EOF, or non-whitespace, both wrong.\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n return factorySpace(effects, after, 'whitespace')\n\n /**\n * After whitespace, after task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // EOF means there was nothing, so bad.\n // EOL means there’s content after it, so good.\n // Impossible to have more spaces.\n // Anything else is good.\n return code === null ? nok(code) : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n combineExtensions,\n combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n gfmAutolinkLiteral,\n gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n gfmStrikethrough,\n gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n gfmTaskListItem,\n gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * syntax.\n */\nexport function gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral,\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable,\n gfmTaskListItem\n ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n * Configuration.\n *\n * Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n return combineHtmlExtensions([\n gfmAutolinkLiteralHtml,\n gfmFootnoteHtml(options),\n gfmStrikethroughHtml,\n gfmTableHtml,\n gfmTagfilterHtml,\n gfmTaskListItemHtml\n ])\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @typedef {Record<string, unknown>} Props\n * @typedef {null | undefined | string | Props | TestFunctionAnything | Array<string | Props | TestFunctionAnything>} Test\n * Check for an arbitrary node, unaware of TypeScript inferral.\n *\n * @callback TestFunctionAnything\n * Check if a node passes a test, unaware of TypeScript inferral.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | void}\n * Whether this node passes the test.\n */\n\n/**\n * @template {Node} Kind\n * Node type.\n * @typedef {Kind['type'] | Partial<Kind> | TestFunctionPredicate<Kind> | Array<Kind['type'] | Partial<Kind> | TestFunctionPredicate<Kind>>} PredicateTest\n * Check for a node that can be inferred by TypeScript.\n */\n\n/**\n * Check if a node passes a certain test.\n *\n * @template {Node} Kind\n * Node type.\n * @callback TestFunctionPredicate\n * Complex test function for a node that can be inferred by TypeScript.\n * @param {Node} node\n * A node.\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {node is Kind}\n * Whether this node passes the test.\n */\n\n/**\n * @callback AssertAnything\n * Check that an arbitrary value is a node, unaware of TypeScript inferral.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n */\n\n/**\n * Check if a node is a node and passes a certain node test.\n *\n * @template {Node} Kind\n * Node type.\n * @callback AssertPredicate\n * Check that an arbitrary value is a specific node, aware of TypeScript.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {node is Kind}\n * Whether this is a node and passes a test.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @param test\n * A check for a specific node.\n * @param index\n * The node’s position in its parent.\n * @param parent\n * The node’s parent.\n * @returns\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n /**\n * @type {(\n * (() => false) &\n * (<Kind extends Node = Node>(node: unknown, test: PredicateTest<Kind>, index: number, parent: Parent, context?: unknown) => node is Kind) &\n * (<Kind extends Node = Node>(node: unknown, test: PredicateTest<Kind>, index?: null | undefined, parent?: null | undefined, context?: unknown) => node is Kind) &\n * ((node: unknown, test: Test, index: number, parent: Parent, context?: unknown) => boolean) &\n * ((node: unknown, test?: Test, index?: null | undefined, parent?: null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function is(node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n // @ts-expect-error Looks like a node.\n return node && node.type && typeof node.type === 'string'\n ? Boolean(check.call(context, node, index, parent))\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns\n * An assertion.\n */\nexport const convert =\n /**\n * @type {(\n * (<Kind extends Node>(test: PredicateTest<Kind>) => AssertPredicate<Kind>) &\n * ((test?: Test) => AssertAnything)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {AssertAnything}\n */\n function (test) {\n if (test === undefined || test === null) {\n return ok\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<string | Props | TestFunctionAnything>} tests\n * @returns {AssertAnything}\n */\nfunction anyFactory(tests) {\n /** @type {Array<AssertAnything>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @param {Array<unknown>} parameters\n * @returns {boolean}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].call(this, ...parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {AssertAnything}\n */\nfunction propsFactory(check) {\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n /** @type {string} */\n let key\n\n for (key in check) {\n // @ts-expect-error: hush, it sure works as an index.\n if (node[key] !== check[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {AssertAnything}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunctionAnything} check\n * @returns {AssertAnything}\n */\nfunction castFactory(check) {\n return assertion\n\n /**\n * @this {unknown}\n * @param {unknown} node\n * @param {Array<unknown>} parameters\n * @returns {boolean}\n */\n function assertion(node, ...parameters) {\n return Boolean(\n node &&\n typeof node === 'object' &&\n 'type' in node &&\n // @ts-expect-error: fine.\n Boolean(check.call(this, node, ...parameters))\n )\n }\n}\n\nfunction ok() {\n return true\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n return '\\u001B[33m' + d + '\\u001B[39m'\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('unist-util-is').Test} Test\n */\n\n/**\n * @typedef {boolean | 'skip'} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @template {Node} [Visited=Node]\n * Visited node type.\n * @template {Parent} [Ancestor=Parent]\n * Ancestor type.\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array<Ancestor>} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * Tree type.\n * @template {Test} [Check=string]\n * Test type.\n * @typedef {Visitor<import('./complex-types.js').Matches<import('./complex-types.js').InclusiveDescendant<Tree>, Check>, Extract<import('./complex-types.js').InclusiveDescendant<Tree>, Parent>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from './color.js'\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @param tree\n * Tree to traverse.\n * @param test\n * `unist-util-is`-compatible test\n * @param visitor\n * Handle each node.\n * @param reverse\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns\n * Nothing.\n */\nexport const visitParents =\n /**\n * @type {(\n * (<Tree extends Node, Check extends Test>(tree: Tree, test: Check, visitor: BuildVisitor<Tree, Check>, reverse?: boolean | null | undefined) => void) &\n * (<Tree extends Node>(tree: Tree, visitor: BuildVisitor<Tree>, reverse?: boolean | null | undefined) => void)\n * )}\n */\n (\n /**\n * @param {Node} tree\n * @param {Test} test\n * @param {Visitor<Node>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {void}\n */\n function (tree, test, visitor, reverse) {\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n test = null\n }\n\n const is = convert(test)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {Node} node\n * @param {number | undefined} index\n * @param {Array<Parent>} parents\n */\n function factory(node, index, parents) {\n /** @type {Record<string, unknown>} */\n // @ts-expect-error: hush\n const value = node && typeof node === 'object' ? node : {}\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {ActionTuple} */\n let result = []\n /** @type {ActionTuple} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<Parent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || null)) {\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n // @ts-expect-error looks like a parent.\n if (node.children && result[0] !== SKIP) {\n // @ts-expect-error looks like a parent.\n offset = (reverse ? node.children.length : -1) + step\n // @ts-expect-error looks like a parent.\n grandparents = parents.concat(node)\n\n // @ts-expect-error looks like a parent.\n while (offset > -1 && offset < node.children.length) {\n // @ts-expect-error looks like a parent.\n subresult = factory(node.children[offset], offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n\n return result\n }\n }\n }\n )\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {ActionTuple}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return [value]\n}\n","/**\n * @typedef {import('mdast').Parent} MdastParent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').Text} Text\n * @typedef {import('unist-util-visit-parents').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Content | Root} Node\n * @typedef {Extract<Node, MdastParent>} Parent\n * @typedef {Exclude<Parent, Root>} ContentParent\n *\n * @typedef RegExpMatchObject\n * Info on the match.\n * @property {number} index\n * The index of the search at which the result was found.\n * @property {string} input\n * A copy of the search string in the text node.\n * @property {[Root, ...Array<ContentParent>, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @callback ReplaceFunction\n * Callback called when a search matches.\n * @param {...any} parameters\n * The parameters are the result of corresponding search expression:\n *\n * * `value` (`string`) — whole match\n * * `...capture` (`Array<string>`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | undefined | null}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {string | RegExp} Find\n * Pattern to find.\n *\n * Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n * Several find and replaces, in array form.\n * @typedef {Record<string, Replace>} FindAndReplaceSchema\n * Several find and replaces, in object form.\n * @typedef {[Find, Replace]} FindAndReplaceTuple\n * Find and replace in tuple form.\n * @typedef {string | ReplaceFunction} Replace\n * Thing to replace with.\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n * @typedef {Array<Pair>} Pairs\n * All find and replaced.\n *\n * @typedef Options\n * Configuration.\n * @property {Test | null | undefined} [ignore]\n * Test for which nodes to ignore.\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param tree\n * Tree to change.\n * @param find\n * Patterns to find.\n * @param replace\n * Things to replace with (when `find` is `Find`) or configuration.\n * @param options\n * Configuration (when `find` is not `Find`).\n * @returns\n * Given, modified, tree.\n */\n// To do: next major: remove `find` & `replace` combo, remove schema.\nexport const findAndReplace =\n /**\n * @type {(\n * (<Tree extends Node>(tree: Tree, find: Find, replace?: Replace | null | undefined, options?: Options | null | undefined) => Tree) &\n * (<Tree extends Node>(tree: Tree, schema: FindAndReplaceSchema | FindAndReplaceList, options?: Options | null | undefined) => Tree)\n * )}\n **/\n (\n /**\n * @template {Node} Tree\n * @param {Tree} tree\n * @param {Find | FindAndReplaceSchema | FindAndReplaceList} find\n * @param {Replace | Options | null | undefined} [replace]\n * @param {Options | null | undefined} [options]\n * @returns {Tree}\n */\n function (tree, find, replace, options) {\n /** @type {Options | null | undefined} */\n let settings\n /** @type {FindAndReplaceSchema|FindAndReplaceList} */\n let schema\n\n if (typeof find === 'string' || find instanceof RegExp) {\n // @ts-expect-error don’t expect options twice.\n schema = [[find, replace]]\n settings = options\n } else {\n schema = find\n // @ts-expect-error don’t expect replace twice.\n settings = replace\n }\n\n if (!settings) {\n settings = {}\n }\n\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(schema)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n // To do next major: don’t return the given tree.\n return tree\n\n /** @type {import('unist-util-visit-parents/complex-types.js').BuildVisitor<Root, 'text'>} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parent | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n\n if (\n ignored(\n parent,\n // @ts-expect-error: TS doesn’t understand but it’s perfect.\n grandparent ? grandparent.children.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n if (grandparent) {\n return handler(node, parents)\n }\n }\n\n /**\n * Handle a text node which is not in an ignored parent.\n *\n * @param {Text} node\n * Text node.\n * @param {Array<Parent>} parents\n * Parents.\n * @returns {VisitorResult}\n * Result.\n */\n function handler(node, parents) {\n const parent = parents[parents.length - 1]\n const find = pairs[pairIndex][0]\n const replace = pairs[pairIndex][1]\n let start = 0\n // @ts-expect-error: TS is wrong, some of these children can be text.\n const index = parent.children.indexOf(node)\n let change = false\n /** @type {Array<PhrasingContent>} */\n let nodes = []\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n /** @type {RegExpMatchObject} */\n const matchObject = {\n index: match.index,\n input: match.input,\n // @ts-expect-error: stack is fine.\n stack: [...parents, node]\n }\n let value = replace(...match, matchObject)\n\n if (typeof value === 'string') {\n value = value.length > 0 ? {type: 'text', value} : undefined\n }\n\n // It wasn’t a match after all.\n if (value !== false) {\n if (start !== position) {\n nodes.push({\n type: 'text',\n value: node.value.slice(start, position)\n })\n }\n\n if (Array.isArray(value)) {\n nodes.push(...value)\n } else if (value) {\n nodes.push(value)\n }\n\n start = position + match[0].length\n change = true\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (change) {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n parent.children.splice(index, 1, ...nodes)\n } else {\n nodes = [node]\n }\n\n return index + nodes.length\n }\n }\n )\n\n/**\n * Turn a schema into pairs.\n *\n * @param {FindAndReplaceSchema | FindAndReplaceList} schema\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(schema) {\n /** @type {Pairs} */\n const result = []\n\n if (typeof schema !== 'object') {\n throw new TypeError('Expected array or object as schema')\n }\n\n if (Array.isArray(schema)) {\n let index = -1\n\n while (++index < schema.length) {\n result.push([\n toExpression(schema[index][0]),\n toFunction(schema[index][1])\n ])\n }\n } else {\n /** @type {string} */\n let key\n\n for (key in schema) {\n if (own.call(schema, key)) {\n result.push([toExpression(key), toFunction(schema[key])])\n }\n }\n }\n\n return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n * Find.\n * @returns {RegExp}\n * Expression.\n */\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n * Replace.\n * @returns {ReplaceFunction}\n * Function.\n */\nfunction toFunction(replace) {\n return typeof replace === 'function' ? replace : () => replace\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-from-markdown').Transform} FromMarkdownTransform\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n *\n * @typedef {import('mdast-util-find-and-replace').ReplaceFunction} ReplaceFunction\n * @typedef {import('mdast-util-find-and-replace').RegExpMatchObject} RegExpMatchObject\n */\n\nimport {ccount} from 'ccount'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n// To do: next major: expose functions instead of extensions.\n\n/**\n * Extension for `mdast-util-from-markdown` to enable GFM autolink literals.\n *\n * @type {FromMarkdownExtension}\n */\nexport const gfmAutolinkLiteralFromMarkdown = {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n}\n\n/**\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n *\n * @type {ToMarkdownExtension}\n */\nexport const gfmAutolinkLiteralToMarkdown = {\n unsafe: [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {character: ':', before: '[ps]', after: '\\\\/', inConstruct, notInConstruct}\n ]\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n const node = /** @type {Link} */ (this.stack[this.stack.length - 1])\n node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Link | Array<PhrasingContent> | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n let prefix = ''\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n const parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n /** @type {Link} */\n const result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n return [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) ||\n // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n const parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n if (!trailExec) {\n return [url, undefined]\n }\n\n url = url.slice(0, trailExec.index)\n\n let trail = trailExec[0]\n let closingParenIndex = trail.indexOf(')')\n const openingParens = ccount(url, '(')\n let closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n\n return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n const code = match.input.charCodeAt(match.index - 1)\n\n return (\n (match.index === 0 ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)) &&\n (!email || code !== 47)\n )\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base)\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < 9 ||\n code === 11 ||\n (code > 13 && code < 32) ||\n // Control character (DEL) of C0, and C1 controls.\n (code > 126 && code < 160) ||\n // Lone high surrogates and low surrogates.\n (code > 55295 && code < 57344) ||\n // Noncharacters.\n (code > 64975 && code < 65008) /* eslint-disable no-bitwise */ ||\n (code & 65535) === 65535 ||\n (code & 65535) === 65534 /* eslint-enable no-bitwise */ ||\n // Out of range\n code > 1114111\n ) {\n return '\\uFFFD'\n }\n return String.fromCharCode(code)\n}\n","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1\n }\n\n // Reference.\n const head = $2.charCodeAt(0)\n if (head === 35) {\n const head = $2.charCodeAt(1)\n const hex = head === 120 || head === 88\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n }\n return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * @typedef {import('../types.js').AssociationId} AssociationId\n */\n\nimport {decodeString} from 'micromark-util-decode-string'\n\n/**\n * Get an identifier from an association to match it to others.\n *\n * Associations are nodes that match to something else through an ID:\n * <https://github.com/syntax-tree/mdast#association>.\n *\n * The `label` of an association is the string value: character escapes and\n * references work, and casing is intact.\n * The `identifier` is used to match one association to another:\n * controversially, character escapes and references don’t work in this\n * matching: `©` does not match `©`, and `\\+` does not match `+`.\n *\n * But casing is ignored (and whitespace) is trimmed and collapsed: ` A\\nb`\n * matches `a b`.\n * So, we do prefer the label when figuring out how we’re going to serialize:\n * it has whitespace, casing, and we can ignore most useless character\n * escapes and all character references.\n *\n * @type {AssociationId}\n */\nexport function association(node) {\n if (node.label || !node.identifier) {\n return node.label || ''\n }\n\n return decodeString(node.identifier)\n}\n","/**\n * @typedef {import('../types.js').FlowContent} FlowContent\n * @typedef {import('../types.js').Node} Node\n * @typedef {import('../types.js').Parent} Parent\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').TrackFields} TrackFields\n */\n\n/**\n * @param {Parent & {children: Array<FlowContent>}} parent\n * Parent of flow nodes.\n * @param {State} state\n * Info passed around about the current state.\n * @param {TrackFields} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined by (blank) lines.\n */\nexport function containerFlow(parent, state, info) {\n const indexStack = state.indexStack\n const children = parent.children || []\n const tracker = state.createTracker(info)\n /** @type {Array<string>} */\n const results = []\n let index = -1\n\n indexStack.push(-1)\n\n while (++index < children.length) {\n const child = children[index]\n\n indexStack[indexStack.length - 1] = index\n\n results.push(\n tracker.move(\n state.handle(child, parent, state, {\n before: '\\n',\n after: '\\n',\n ...tracker.current()\n })\n )\n )\n\n if (child.type !== 'list') {\n state.bulletLastUsed = undefined\n }\n\n if (index < children.length - 1) {\n results.push(\n tracker.move(between(child, children[index + 1], parent, state))\n )\n }\n }\n\n indexStack.pop()\n\n return results.join('')\n}\n\n/**\n * @param {Node} left\n * @param {Node} right\n * @param {Parent} parent\n * @param {State} state\n * @returns {string}\n */\nfunction between(left, right, parent, state) {\n let index = state.join.length\n\n while (index--) {\n const result = state.join[index](left, right, parent, state)\n\n if (result === true || result === 1) {\n break\n }\n\n if (typeof result === 'number') {\n return '\\n'.repeat(1 + result)\n }\n\n if (result === false) {\n return '\\n\\n<!---->\\n\\n'\n }\n }\n\n return '\\n\\n'\n}\n","/**\n * @typedef {import('../types.js').IndentLines} IndentLines\n */\n\nconst eol = /\\r?\\n|\\r/g\n\n/**\n * @type {IndentLines}\n */\nexport function indentLines(value, map) {\n /** @type {Array<string>} */\n const result = []\n let start = 0\n let line = 0\n /** @type {RegExpExecArray | null} */\n let match\n\n while ((match = eol.exec(value))) {\n one(value.slice(start, match.index))\n result.push(match[0])\n start = match.index + match[0].length\n line++\n }\n\n one(value.slice(start))\n\n return result.join('')\n\n /**\n * @param {string} value\n */\n function one(value) {\n result.push(map(value, line, !value))\n }\n}\n","/**\n * @typedef {import('../types.js').Unsafe} Unsafe\n */\n\n/**\n * @param {Unsafe} pattern\n * @returns {RegExp}\n */\nexport function patternCompile(pattern) {\n if (!pattern._compiled) {\n const before =\n (pattern.atBreak ? '[\\\\r\\\\n][\\\\t ]*' : '') +\n (pattern.before ? '(?:' + pattern.before + ')' : '')\n\n pattern._compiled = new RegExp(\n (before ? '(' + before + ')' : '') +\n (/[|\\\\{}()[\\]^$+*?.-]/.test(pattern.character) ? '\\\\' : '') +\n pattern.character +\n (pattern.after ? '(?:' + pattern.after + ')' : ''),\n 'g'\n )\n }\n\n return pattern._compiled\n}\n","/**\n * @typedef {import('../types.js').Unsafe} Unsafe\n * @typedef {import('../types.js').ConstructName} ConstructName\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').SafeConfig} SafeConfig\n */\n\nimport {patternCompile} from './pattern-compile.js'\nimport {patternInScope} from './pattern-in-scope.js'\n\n/**\n * Make a string safe for embedding in markdown constructs.\n *\n * In markdown, almost all punctuation characters can, in certain cases,\n * result in something.\n * Whether they do is highly subjective to where they happen and in what\n * they happen.\n *\n * To solve this, `mdast-util-to-markdown` tracks:\n *\n * * Characters before and after something;\n * * What “constructs” we are in.\n *\n * This information is then used by this function to escape or encode\n * special characters.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {string | null | undefined} input\n * Raw value to make safe.\n * @param {SafeConfig} config\n * Configuration.\n * @returns {string}\n * Serialized markdown safe for embedding.\n */\nexport function safe(state, input, config) {\n const value = (config.before || '') + (input || '') + (config.after || '')\n /** @type {Array<number>} */\n const positions = []\n /** @type {Array<string>} */\n const result = []\n /** @type {Record<number, {before: boolean, after: boolean}>} */\n const infos = {}\n let index = -1\n\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n\n if (!patternInScope(state.stack, pattern)) {\n continue\n }\n\n const expression = patternCompile(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n while ((match = expression.exec(value))) {\n const before = 'before' in pattern || Boolean(pattern.atBreak)\n const after = 'after' in pattern\n const position = match.index + (before ? match[1].length : 0)\n\n if (positions.includes(position)) {\n if (infos[position].before && !before) {\n infos[position].before = false\n }\n\n if (infos[position].after && !after) {\n infos[position].after = false\n }\n } else {\n positions.push(position)\n infos[position] = {before, after}\n }\n }\n }\n\n positions.sort(numerical)\n\n let start = config.before ? config.before.length : 0\n const end = value.length - (config.after ? config.after.length : 0)\n index = -1\n\n while (++index < positions.length) {\n const position = positions[index]\n\n // Character before or after matched:\n if (position < start || position >= end) {\n continue\n }\n\n // If this character is supposed to be escaped because it has a condition on\n // the next character, and the next character is definitly being escaped,\n // then skip this escape.\n if (\n (position + 1 < end &&\n positions[index + 1] === position + 1 &&\n infos[position].after &&\n !infos[position + 1].before &&\n !infos[position + 1].after) ||\n (positions[index - 1] === position - 1 &&\n infos[position].before &&\n !infos[position - 1].before &&\n !infos[position - 1].after)\n ) {\n continue\n }\n\n if (start !== position) {\n // If we have to use a character reference, an ampersand would be more\n // correct, but as backslashes only care about punctuation, either will\n // do the trick\n result.push(escapeBackslashes(value.slice(start, position), '\\\\'))\n }\n\n start = position\n\n if (\n /[!-/:-@[-`{-~]/.test(value.charAt(position)) &&\n (!config.encode || !config.encode.includes(value.charAt(position)))\n ) {\n // Character escape.\n result.push('\\\\')\n } else {\n // Character reference.\n result.push(\n '&#x' + value.charCodeAt(position).toString(16).toUpperCase() + ';'\n )\n start++\n }\n }\n\n result.push(escapeBackslashes(value.slice(start, end), config.after))\n\n return result.join('')\n}\n\n/**\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction numerical(a, b) {\n return a - b\n}\n\n/**\n * @param {string} value\n * @param {string} after\n * @returns {string}\n */\nfunction escapeBackslashes(value, after) {\n const expression = /\\\\(?=[!-/:-@[-`{-~])/g\n /** @type {Array<number>} */\n const positions = []\n /** @type {Array<string>} */\n const results = []\n const whole = value + after\n let index = -1\n let start = 0\n /** @type {RegExpExecArray | null} */\n let match\n\n while ((match = expression.exec(whole))) {\n positions.push(match.index)\n }\n\n while (++index < positions.length) {\n if (start !== positions[index]) {\n results.push(value.slice(start, positions[index]))\n }\n\n results.push('\\\\')\n start = positions[index]\n }\n\n results.push(value.slice(start))\n\n return results.join('')\n}\n","/**\n * @typedef {import('../types.js').CreateTracker} CreateTracker\n * @typedef {import('../types.js').TrackCurrent} TrackCurrent\n * @typedef {import('../types.js').TrackMove} TrackMove\n * @typedef {import('../types.js').TrackShift} TrackShift\n */\n\n/**\n * Track positional info in the output.\n *\n * @type {CreateTracker}\n */\nexport function track(config) {\n // Defaults are used to prevent crashes when older utilities somehow activate\n // this code.\n /* c8 ignore next 5 */\n const options = config || {}\n const now = options.now || {}\n let lineShift = options.lineShift || 0\n let line = now.line || 1\n let column = now.column || 1\n\n return {move, current, shift}\n\n /**\n * Get the current tracked info.\n *\n * @type {TrackCurrent}\n */\n function current() {\n return {now: {line, column}, lineShift}\n }\n\n /**\n * Define an increased line shift (the typical indent for lines).\n *\n * @type {TrackShift}\n */\n function shift(value) {\n lineShift += value\n }\n\n /**\n * Move past some generated markdown.\n *\n * @type {TrackMove}\n */\n function move(input) {\n // eslint-disable-next-line unicorn/prefer-default-parameters\n const value = input || ''\n const chunks = value.split(/\\r?\\n|\\r/g)\n const tail = chunks[chunks.length - 1]\n line += chunks.length - 1\n column =\n chunks.length === 1 ? column + tail.length : 1 + tail.length + lineShift\n return value\n }\n}\n","/**\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('mdast').FootnoteDefinition} FootnoteDefinition\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Map} Map\n */\n\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {association} from 'mdast-util-to-markdown/lib/util/association.js'\nimport {containerFlow} from 'mdast-util-to-markdown/lib/util/container-flow.js'\nimport {indentLines} from 'mdast-util-to-markdown/lib/util/indent-lines.js'\nimport {safe} from 'mdast-util-to-markdown/lib/util/safe.js'\nimport {track} from 'mdast-util-to-markdown/lib/util/track.js'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n// To do: next major: rename `context` -> `state`, `safeOptions` to `info`, use\n// utilities on `state`.\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteDefinition: enterFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteCallString: enterFootnoteCallString\n },\n exit: {\n gfmFootnoteDefinition: exitFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteCallString: exitFootnoteCallString\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown() {\n return {\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['phrasing', 'label', 'reference']}],\n handlers: {footnoteDefinition, footnoteReference}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = /** @type {FootnoteDefinition} */ (\n this.stack[this.stack.length - 1]\n )\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n const label = this.resume()\n const node = /** @type {FootnoteDefinition} */ (\n this.stack[this.stack.length - 1]\n )\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, context, safeOptions) {\n const tracker = track(safeOptions)\n let value = tracker.move('[^')\n const exit = context.enter('footnoteReference')\n const subexit = context.enter('reference')\n value += tracker.move(\n safe(context, association(node), {\n ...tracker.current(),\n before: value,\n after: ']'\n })\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\nfunction footnoteDefinition(node, _, context, safeOptions) {\n const tracker = track(safeOptions)\n let value = tracker.move('[^')\n const exit = context.enter('footnoteDefinition')\n const subexit = context.enter('label')\n value += tracker.move(\n safe(context, association(node), {\n ...tracker.current(),\n before: value,\n after: ']'\n })\n )\n subexit()\n value += tracker.move(\n ']:' + (node.children && node.children.length > 0 ? ' ' : '')\n )\n tracker.shift(4)\n value += tracker.move(\n indentLines(containerFlow(node, context, tracker.current()), map)\n )\n exit()\n\n return value\n}\n\n/** @type {Map} */\nfunction map(line, index, blank) {\n if (index === 0) {\n return line\n }\n\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('../types.js').Handle} Handle\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Parent} Parent\n * @typedef {import('../types.js').PhrasingContent} PhrasingContent\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * Serialize the children of a parent that contains phrasing children.\n *\n * These children will be joined flush together.\n *\n * @param {Parent & {children: Array<PhrasingContent>}} parent\n * Parent of flow nodes.\n * @param {State} state\n * Info passed around about the current state.\n * @param {Info} info\n * Info on where we are in the document we are generating.\n * @returns {string}\n * Serialized children, joined together.\n */\nexport function containerPhrasing(parent, state, info) {\n const indexStack = state.indexStack\n const children = parent.children || []\n /** @type {Array<string>} */\n const results = []\n let index = -1\n let before = info.before\n\n indexStack.push(-1)\n let tracker = state.createTracker(info)\n\n while (++index < children.length) {\n const child = children[index]\n /** @type {string} */\n let after\n\n indexStack[indexStack.length - 1] = index\n\n if (index + 1 < children.length) {\n /** @type {Handle} */\n // @ts-expect-error: hush, it’s actually a `zwitch`.\n let handle = state.handle.handlers[children[index + 1].type]\n /** @type {Handle} */\n // @ts-expect-error: hush, it’s actually a `zwitch`.\n if (handle && handle.peek) handle = handle.peek\n after = handle\n ? handle(children[index + 1], parent, state, {\n before: '',\n after: '',\n ...tracker.current()\n }).charAt(0)\n : ''\n } else {\n after = info.after\n }\n\n // In some cases, html (text) can be found in phrasing right after an eol.\n // When we’d serialize that, in most cases that would be seen as html\n // (flow).\n // As we can’t escape or so to prevent it from happening, we take a somewhat\n // reasonable approach: replace that eol with a space.\n // See: <https://github.com/syntax-tree/mdast-util-to-markdown/issues/15>\n if (\n results.length > 0 &&\n (before === '\\r' || before === '\\n') &&\n child.type === 'html'\n ) {\n results[results.length - 1] = results[results.length - 1].replace(\n /(\\r?\\n|\\r)$/,\n ' '\n )\n before = ' '\n\n // To do: does this work to reset tracker?\n tracker = state.createTracker(info)\n tracker.move(results.join(''))\n }\n\n results.push(\n tracker.move(\n state.handle(child, parent, state, {\n ...tracker.current(),\n before,\n after\n })\n )\n )\n\n before = results[results.length - 1].slice(-1)\n }\n\n indexStack.pop()\n\n return results.join('')\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {containerPhrasing} from 'mdast-util-to-markdown/lib/util/container-phrasing.js'\nimport {track} from 'mdast-util-to-markdown/lib/util/track.js'\n\n// To do: next major: expose functions.\n// To do: next major: use `state`, state utilities.\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n *\n * @type {FromMarkdownExtension}\n */\nexport const gfmStrikethroughFromMarkdown = {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n}\n\n/**\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n *\n * @type {ToMarkdownExtension}\n */\nexport const gfmStrikethroughToMarkdown = {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, context, safeOptions) {\n const tracker = track(safeOptions)\n const exit = context.enter('strikethrough')\n let value = tracker.move('~~')\n value += containerPhrasing(node, context, {\n ...tracker.current(),\n before: value,\n after: '~'\n })\n value += tracker.move('~~')\n exit()\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n return '~'\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../types.js').Parent} Parent\n * @typedef {import('../types.js').State} State\n */\n\nimport {patternCompile} from '../util/pattern-compile.js'\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parent | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = patternCompile(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n * Configuration.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n * Whether to align the delimiters (default: `true`);\n * they are aligned by default:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * Pass `false` to make them staggered:\n *\n * ```markdown\n * | Alpha | B |\n * | - | - |\n * | C | Delta |\n * ```\n * @property {ReadonlyArray<string | null | undefined> | string | null | undefined} [align]\n * How to align columns (default: `''`);\n * one style for all columns or styles for their respective columns;\n * each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n * other values are treated as `''`, which doesn’t place the colon in the\n * alignment row but does align left;\n * *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n * Whether to end each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are ending delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no ending delimiters:\n *\n * ```markdown\n * | Alpha | B\n * | ----- | -----\n * | C | Delta\n * ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n * Whether to begin each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are starting delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no starting delimiters:\n *\n * ```markdown\n * Alpha | B |\n * ----- | ----- |\n * C | Delta |\n * ```\n * @property {boolean | null | undefined} [padding=true]\n * Whether to add a space of padding between delimiters and cells\n * (default: `true`).\n *\n * When `true`, there is padding:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there is no padding:\n *\n * ```markdown\n * |Alpha|B |\n * |-----|-----|\n * |C |Delta|\n * ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n * Function to detect the length of table cell content (optional);\n * this is used when aligning the delimiters (`|`) between table cells;\n * full-width characters and emoji mess up delimiter alignment when viewing\n * the markdown source;\n * to fix this, you can pass this function,\n * which receives the cell content and returns its “visible” size;\n * note that what is and isn’t visible depends on where the text is displayed.\n *\n * Without such a function, the following:\n *\n * ```js\n * markdownTable([\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩❤️👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩❤️👩 | Delta |\n * ```\n *\n * With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n * ```js\n * import stringWidth from 'string-width'\n *\n * markdownTable(\n * [\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩❤️👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩❤️👩 | Delta |\n * ```\n */\n\n/**\n * @param {string} value\n * Cell value.\n * @returns {number}\n * Cell size.\n */\nfunction defaultStringLength(value) {\n return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray<ReadonlyArray<string | null | undefined>>} table\n * Table data (matrix of strings).\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Result.\n */\nexport function markdownTable(table, options) {\n const settings = options || {}\n // To do: next major: change to spread.\n const align = (settings.align || []).concat()\n const stringLength = settings.stringLength || defaultStringLength\n /** @type {Array<number>} Character codes as symbols for alignment per column. */\n const alignments = []\n /** @type {Array<Array<string>>} Cells per row. */\n const cellMatrix = []\n /** @type {Array<Array<number>>} Sizes of each cell per row. */\n const sizeMatrix = []\n /** @type {Array<number>} */\n const longestCellByColumn = []\n let mostCellsPerRow = 0\n let rowIndex = -1\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < table.length) {\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n let columnIndex = -1\n\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length\n }\n\n while (++columnIndex < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex])\n\n if (settings.alignDelimiters !== false) {\n const size = stringLength(cell)\n sizes[columnIndex] = size\n\n if (\n longestCellByColumn[columnIndex] === undefined ||\n size > longestCellByColumn[columnIndex]\n ) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n let columnIndex = -1\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n const code = toAlignment(align)\n\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n /** @type {Array<string>} */\n const row = []\n /** @type {Array<number>} */\n const sizes = []\n\n while (++columnIndex < mostCellsPerRow) {\n const code = alignments[columnIndex]\n let before = ''\n let after = ''\n\n if (code === 99 /* `c` */) {\n before = ':'\n after = ':'\n } else if (code === 108 /* `l` */) {\n before = ':'\n } else if (code === 114 /* `r` */) {\n after = ':'\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n let size =\n settings.alignDelimiters === false\n ? 1\n : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n\n const cell = before + '-'.repeat(size) + after\n\n if (settings.alignDelimiters !== false) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n /** @type {Array<string>} */\n const lines = []\n\n while (++rowIndex < cellMatrix.length) {\n const row = cellMatrix[rowIndex]\n const sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n /** @type {Array<string>} */\n const line = []\n\n while (++columnIndex < mostCellsPerRow) {\n const cell = row[columnIndex] || ''\n let before = ''\n let after = ''\n\n if (settings.alignDelimiters !== false) {\n const size =\n longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n const code = alignments[columnIndex]\n\n if (code === 114 /* `r` */) {\n before = ' '.repeat(size)\n } else if (code === 99 /* `c` */) {\n if (size % 2) {\n before = ' '.repeat(size / 2 + 0.5)\n after = ' '.repeat(size / 2 - 0.5)\n } else {\n before = ' '.repeat(size / 2)\n after = before\n }\n } else {\n after = ' '.repeat(size)\n }\n }\n\n if (settings.delimiterStart !== false && !columnIndex) {\n line.push('|')\n }\n\n if (\n settings.padding !== false &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(settings.alignDelimiters === false && cell === '') &&\n (settings.delimiterStart !== false || columnIndex)\n ) {\n line.push(' ')\n }\n\n if (settings.alignDelimiters !== false) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (settings.alignDelimiters !== false) {\n line.push(after)\n }\n\n if (settings.padding !== false) {\n line.push(' ')\n }\n\n if (\n settings.delimiterEnd !== false ||\n columnIndex !== mostCellsPerRow - 1\n ) {\n line.push('|')\n }\n }\n\n lines.push(\n settings.delimiterEnd === false\n ? line.join('').replace(/ +$/, '')\n : line.join('')\n )\n }\n\n return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n * Value to serialize.\n * @returns {string}\n * Result.\n */\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n * Value.\n * @returns {number}\n * Alignment.\n */\nfunction toAlignment(value) {\n const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n return code === 67 /* `C` */ || code === 99 /* `c` */\n ? 99 /* `c` */\n : code === 76 /* `L` */ || code === 108 /* `l` */\n ? 108 /* `l` */\n : code === 82 /* `R` */ || code === 114 /* `r` */\n ? 114 /* `r` */\n : 0\n}\n","/**\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').InlineCode} InlineCode\n *\n * @typedef {import('markdown-table').MarkdownTableOptions} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Context} ToMarkdownContext\n * @typedef {import('mdast-util-to-markdown').SafeOptions} SafeOptions\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n * Whether to add a space of padding between delimiters and cells.\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters.\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n * Function to detect the length of table cell content, used when aligning\n * the delimiters between cells\n */\n\nimport {containerPhrasing} from 'mdast-util-to-markdown/lib/util/container-phrasing.js'\nimport {inlineCode} from 'mdast-util-to-markdown/lib/handle/inline-code.js'\nimport {markdownTable} from 'markdown-table'\n\n// To do: next major: use `state` and `state` utilities from `mdast-util-to-markdown`.\n// To do: next major: use `defaultHandlers.inlineCode`.\n// To do: next major: expose functions.\n\n/**\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n *\n * @type {FromMarkdownExtension}\n */\nexport const gfmTableFromMarkdown = {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n /** @type {Array<'left' | 'right' | 'center' | 'none'>} */\n // @ts-expect-error: `align` is custom.\n const align = token._align\n this.enter(\n {\n type: 'table',\n align: align.map((d) => (d === 'none' ? null : d)),\n children: []\n },\n token\n )\n this.setData('inTable', true)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.setData('inTable')\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n let value = this.resume()\n\n if (this.getData('inTable')) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = /** @type {InlineCode} */ (this.stack[this.stack.length - 1])\n node.value = value\n this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n const settings = options || {}\n const padding = settings.tableCellPadding\n const alignDelimiters = settings.tablePipeAlign\n const stringLength = settings.stringLength\n const around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n table: handleTable,\n tableRow: handleTableRow,\n tableCell: handleTableCell,\n inlineCode: inlineCodeWithTable\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, context, safeOptions) {\n return serializeData(\n handleTableAsData(node, context, safeOptions),\n node.align\n )\n }\n\n /**\n * This function isn’t really used normally, because we handle rows at the\n * table level.\n * But, if someone passes in a table row, this ensures we make somewhat sense.\n *\n * @type {ToMarkdownHandle}\n * @param {TableRow} node\n */\n function handleTableRow(node, _, context, safeOptions) {\n const row = handleTableRowAsData(node, context, safeOptions)\n const value = serializeData([row])\n // `markdown-table` will always add an align row\n return value.slice(0, value.indexOf('\\n'))\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {TableCell} node\n */\n function handleTableCell(node, _, context, safeOptions) {\n const exit = context.enter('tableCell')\n const subexit = context.enter('phrasing')\n const value = containerPhrasing(node, context, {\n ...safeOptions,\n before: around,\n after: around\n })\n subexit()\n exit()\n return value\n }\n\n /**\n * @param {Array<Array<string>>} matrix\n * @param {Array<string | null | undefined> | null | undefined} [align]\n */\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n })\n }\n\n /**\n * @param {Table} node\n * @param {ToMarkdownContext} context\n * @param {SafeOptions} safeOptions\n */\n function handleTableAsData(node, context, safeOptions) {\n const children = node.children\n let index = -1\n /** @type {Array<Array<string>>} */\n const result = []\n const subexit = context.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(\n children[index],\n context,\n safeOptions\n )\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {ToMarkdownContext} context\n * @param {SafeOptions} safeOptions\n */\n function handleTableRowAsData(node, context, safeOptions) {\n const children = node.children\n let index = -1\n /** @type {Array<string>} */\n const result = []\n const subexit = context.enter('tableRow')\n\n while (++index < children.length) {\n // Note: the positional info as used here is incorrect.\n // Making it correct would be impossible due to aligning cells?\n // And it would need copy/pasting `markdown-table` into this project.\n result[index] = handleTableCell(\n children[index],\n node,\n context,\n safeOptions\n )\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, context) {\n let value = inlineCode(node, parent, context)\n\n if (context.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').Options} Options\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').Options} Options\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'tab'\n\n // To do: remove in a major.\n // @ts-expect-error: deprecated.\n if (style === 1 || style === '1') {\n return 'one'\n }\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').Parent} Parent\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').Info} Info\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parent | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\n/**\n * @typedef {Extract<Root | Content, Parent>} Parents\n */\n\nimport {listItem} from 'mdast-util-to-markdown/lib/handle/list-item.js'\nimport {track} from 'mdast-util-to-markdown/lib/util/track.js'\n\n// To do: next major: rename `context` -> `state`, `safeOptions` -> `info`, use\n// `track` from `state`.\n// To do: next major: replace exports with functions.\n// To do: next major: use `defaulthandlers.listItem`.\n\n/**\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n *\n * @type {FromMarkdownExtension}\n */\nexport const gfmTaskListItemFromMarkdown = {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n}\n\n/**\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n *\n * @type {ToMarkdownExtension}\n */\nexport const gfmTaskListItemToMarkdown = {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n const node = /** @type {ListItem} */ (this.stack[this.stack.length - 2])\n // We’re always in a paragraph, in a list item.\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = /** @type {Parents} */ (this.stack[this.stack.length - 2])\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = /** @type {Paragraph} */ (this.stack[this.stack.length - 1])\n const head = node.children[0]\n\n if (head && head.type === 'text') {\n const siblings = parent.children\n let index = -1\n /** @type {Paragraph | undefined} */\n let firstParaghraph\n\n while (++index < siblings.length) {\n const sibling = siblings[index]\n if (sibling.type === 'paragraph') {\n firstParaghraph = sibling\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else if (\n node.position &&\n head.position &&\n typeof head.position.start.offset === 'number'\n ) {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n }\n\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, context, safeOptions) {\n const head = node.children[0]\n const checkable =\n typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n const tracker = track(safeOptions)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = listItem(node, parent, context, {\n ...safeOptions,\n ...tracker.current()\n })\n\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n /**\n * @param {string} $0\n * @returns {string}\n */\n function check($0) {\n return $0 + checkbox\n }\n}\n","/**\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * @typedef {import('mdast-util-gfm-table').Options} Options\n * Configuration.\n */\n\nimport {\n gfmAutolinkLiteralFromMarkdown,\n gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n gfmFootnoteFromMarkdown,\n gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n gfmStrikethroughFromMarkdown,\n gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n gfmTaskListItemFromMarkdown,\n gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n * Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown,\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown,\n gfmTableFromMarkdown,\n gfmTaskListItemFromMarkdown\n ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown,\n gfmFootnoteToMarkdown(),\n gfmStrikethroughToMarkdown,\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown\n ]\n }\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('micromark-extension-gfm').Options & import('mdast-util-gfm').Options} Options\n */\n\nimport {gfm} from 'micromark-extension-gfm'\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\n\n/**\n * Plugin to support GFM (autolink literals, footnotes, strikethrough, tables, tasklists).\n *\n * @type {import('unified').Plugin<[Options?]|void[], Root>}\n */\nexport default function remarkGfm(options = {}) {\n const data = this.data()\n\n add('micromarkExtensions', gfm(options))\n add('fromMarkdownExtensions', gfmFromMarkdown())\n add('toMarkdownExtensions', gfmToMarkdown(options))\n\n /**\n * @param {string} field\n * @param {unknown} value\n */\n function add(field, value) {\n const list = /** @type {unknown[]} */ (\n // Other extensions\n /* c8 ignore next 2 */\n data[field] ? data[field] : (data[field] = [])\n )\n\n list.push(value)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const mathFlow = {\n tokenize: tokenizeMathFenced,\n concrete: true\n}\n\n/** @type {Construct} */\nconst nonLazyContinuation = {\n tokenize: tokenizeNonLazyContinuation,\n partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeMathFenced(effects, ok, nok) {\n const self = this\n const tail = self.events[self.events.length - 1]\n const initialSize =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n let sizeOpen = 0\n return start\n\n /**\n * Start of math.\n *\n * ```markdown\n * > | $$\n * ^\n * | \\frac{1}{2}\n * | $$\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('mathFlow')\n effects.enter('mathFlowFence')\n effects.enter('mathFlowFenceSequence')\n return sequenceOpen(code)\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | $$\n * ^\n * | \\frac{1}{2}\n * | $$\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 36) {\n effects.consume(code)\n sizeOpen++\n return sequenceOpen\n }\n if (sizeOpen < 2) {\n return nok(code)\n }\n effects.exit('mathFlowFenceSequence')\n return factorySpace(effects, metaBefore, 'whitespace')(code)\n }\n\n /**\n * In opening fence, before meta.\n *\n * ```markdown\n * > | $$asciimath\n * ^\n * | x < y\n * | $$\n * ```\n *\n * @type {State}\n */\n\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return metaAfter(code)\n }\n effects.enter('mathFlowFenceMeta')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return meta(code)\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | $$asciimath\n * ^\n * | x < y\n * | $$\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n effects.exit('mathFlowFenceMeta')\n return metaAfter(code)\n }\n if (code === 36) {\n return nok(code)\n }\n effects.consume(code)\n return meta\n }\n\n /**\n * After meta.\n *\n * ```markdown\n * > | $$\n * ^\n * | \\frac{1}{2}\n * | $$\n * ```\n *\n * @type {State}\n */\n function metaAfter(code) {\n // Guaranteed to be eol/eof.\n effects.exit('mathFlowFence')\n if (self.interrupt) {\n return ok(code)\n }\n return effects.attempt(\n nonLazyContinuation,\n beforeNonLazyContinuation,\n after\n )(code)\n }\n\n /**\n * After eol/eof in math, at a non-lazy closing fence or content.\n *\n * ```markdown\n * | $$\n * > | \\frac{1}{2}\n * ^\n * > | $$\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeNonLazyContinuation(code) {\n return effects.attempt(\n {\n tokenize: tokenizeClosingFence,\n partial: true\n },\n after,\n contentStart\n )(code)\n }\n\n /**\n * Before math content, definitely not before a closing fence.\n *\n * ```markdown\n * | $$\n * > | \\frac{1}{2}\n * ^\n * | $$\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return (\n initialSize\n ? factorySpace(\n effects,\n beforeContentChunk,\n 'linePrefix',\n initialSize + 1\n )\n : beforeContentChunk\n )(code)\n }\n\n /**\n * Before math content, after optional prefix.\n *\n * ```markdown\n * | $$\n * > | \\frac{1}{2}\n * ^\n * | $$\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null) {\n return after(code)\n }\n if (markdownLineEnding(code)) {\n return effects.attempt(\n nonLazyContinuation,\n beforeNonLazyContinuation,\n after\n )(code)\n }\n effects.enter('mathFlowValue')\n return contentChunk(code)\n }\n\n /**\n * In math content.\n *\n * ```markdown\n * | $$\n * > | \\frac{1}{2}\n * ^\n * | $$\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('mathFlowValue')\n return beforeContentChunk(code)\n }\n effects.consume(code)\n return contentChunk\n }\n\n /**\n * After math (ha!).\n *\n * ```markdown\n * | $$\n * | \\frac{1}{2}\n * > | $$\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit('mathFlow')\n return ok(code)\n }\n\n /** @type {Tokenizer} */\n function tokenizeClosingFence(effects, ok, nok) {\n let size = 0\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | $$\n * | \\frac{1}{2}\n * > | $$\n * ^\n * ```\n */\n return factorySpace(\n effects,\n beforeSequenceClose,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | $$\n * | \\frac{1}{2}\n * > | $$\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n effects.enter('mathFlowFence')\n effects.enter('mathFlowFenceSequence')\n return sequenceClose(code)\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | $$\n * | \\frac{1}{2}\n * > | $$\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === 36) {\n size++\n effects.consume(code)\n return sequenceClose\n }\n if (size < sizeOpen) {\n return nok(code)\n }\n effects.exit('mathFlowFenceSequence')\n return factorySpace(effects, afterSequenceClose, 'whitespace')(code)\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | $$\n * | \\frac{1}{2}\n * > | $$\n * ^\n * ```\n *\n * @type {State}\n */\n function afterSequenceClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('mathFlowFence')\n return ok(code)\n }\n return nok(code)\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this\n return start\n\n /** @type {State} */\n function start(code) {\n if (code === null) {\n return ok(code)\n }\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineStart\n }\n\n /** @type {State} */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n *\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [singleDollarTextMath=true]\n * Whether to support math (text) with a single dollar.\n * Single dollars work in Pandoc and many other places, but often interfere\n * with “normal” dollars in text.\n * If you turn this off, you can use two or more dollars for text math.\n\n */\n\n// To do: next major: clean spaces in HTML compiler.\n// This has to be coordinated together with `mdast-util-math`.\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/**\n * @param {Options | null | undefined} [options]\n * @returns {Construct}\n */\nexport function mathText(options) {\n const options_ = options || {}\n let single = options_.singleDollarTextMath\n if (single === null || single === undefined) {\n single = true\n }\n return {\n tokenize: tokenizeMathText,\n resolve: resolveMathText,\n previous\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeMathText(effects, ok, nok) {\n const self = this\n let sizeOpen = 0\n /** @type {number} */\n let size\n /** @type {Token} */\n let token\n return start\n\n /**\n * Start of math (text).\n *\n * ```markdown\n * > | $a$\n * ^\n * > | \\$a$\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('mathText')\n effects.enter('mathTextSequence')\n return sequenceOpen(code)\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | $a$\n * ^\n * ```\n *\n * @type {State}\n */\n\n function sequenceOpen(code) {\n if (code === 36) {\n effects.consume(code)\n sizeOpen++\n return sequenceOpen\n }\n\n // Not enough markers in the sequence.\n if (sizeOpen < 2 && !single) {\n return nok(code)\n }\n effects.exit('mathTextSequence')\n return between(code)\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | $a$\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n if (code === null) {\n return nok(code)\n }\n if (code === 36) {\n token = effects.enter('mathTextSequence')\n size = 0\n return sequenceClose(code)\n }\n\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space')\n effects.consume(code)\n effects.exit('space')\n return between\n }\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return between\n }\n\n // Data.\n effects.enter('mathTextData')\n return data(code)\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | $a$\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (\n code === null ||\n code === 32 ||\n code === 36 ||\n markdownLineEnding(code)\n ) {\n effects.exit('mathTextData')\n return between(code)\n }\n effects.consume(code)\n return data\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n\n function sequenceClose(code) {\n // More.\n if (code === 36) {\n effects.consume(code)\n size++\n return sequenceClose\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit('mathTextSequence')\n effects.exit('mathText')\n return ok(code)\n }\n\n // More or less accents: mark as data.\n token.type = 'mathTextData'\n return data(code)\n }\n }\n}\n\n/** @type {Resolver} */\nfunction resolveMathText(events) {\n let tailExitIndex = events.length - 4\n let headEnterIndex = 3\n /** @type {number} */\n let index\n /** @type {number | undefined} */\n let enter\n\n // If we start and end with an EOL or a space.\n if (\n (events[headEnterIndex][1].type === 'lineEnding' ||\n events[headEnterIndex][1].type === 'space') &&\n (events[tailExitIndex][1].type === 'lineEnding' ||\n events[tailExitIndex][1].type === 'space')\n ) {\n index = headEnterIndex\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === 'mathTextData') {\n // Then we have padding.\n events[tailExitIndex][1].type = 'mathTextPadding'\n events[headEnterIndex][1].type = 'mathTextPadding'\n headEnterIndex += 2\n tailExitIndex -= 2\n break\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1\n tailExitIndex++\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n enter = index\n }\n } else if (\n index === tailExitIndex ||\n events[index][1].type === 'lineEnding'\n ) {\n events[enter][1].type = 'mathTextData'\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end\n events.splice(enter + 2, index - enter - 2)\n tailExitIndex -= index - enter - 2\n index = enter + 2\n }\n enter = undefined\n }\n }\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return (\n code !== 36 ||\n this.events[this.events.length - 1][1].type === 'characterEscape'\n )\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('./math-text.js').Options} Options\n */\n\nimport {mathFlow} from './math-flow.js'\nimport {mathText} from './math-text.js'\n\n/**\n * Create an extension for `micromark` to enable math syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable math syntax.\n */\nexport function math(options) {\n return {\n flow: {\n [36]: mathFlow\n },\n text: {\n [36]: mathText(options)\n }\n }\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('../index.js').Math} Math\n * @typedef {import('../index.js').InlineMath} InlineMath\n *\n * @typedef ToOptions\n * Configuration.\n * @property {boolean | null | undefined} [singleDollarTextMath=true]\n * Whether to support math (text) with a single dollar.\n *\n * Single dollars work in Pandoc and many other places, but often interfere\n * with “normal” dollars in text.\n * If you turn this off, you can still use two or more dollars for text math.\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {safe} from 'mdast-util-to-markdown/lib/util/safe.js'\nimport {track} from 'mdast-util-to-markdown/lib/util/track.js'\nimport {patternCompile} from 'mdast-util-to-markdown/lib/util/pattern-compile.js'\n\n/**\n * Create an extension for `mdast-util-from-markdown`.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function mathFromMarkdown() {\n return {\n enter: {\n mathFlow: enterMathFlow,\n mathFlowFenceMeta: enterMathFlowMeta,\n mathText: enterMathText\n },\n exit: {\n mathFlow: exitMathFlow,\n mathFlowFence: exitMathFlowFence,\n mathFlowFenceMeta: exitMathFlowMeta,\n mathFlowValue: exitMathData,\n mathText: exitMathText,\n mathTextData: exitMathData\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\n function enterMathFlow(token) {\n this.enter(\n {\n type: 'math',\n meta: null,\n value: '',\n data: {\n hName: 'div',\n hProperties: {className: ['math', 'math-display']},\n hChildren: [{type: 'text', value: ''}]\n }\n },\n token\n )\n }\n\n /**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\n function enterMathFlowMeta() {\n this.buffer()\n }\n\n /**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\n function exitMathFlowMeta() {\n const data = this.resume()\n const node = /** @type {Math} */ (this.stack[this.stack.length - 1])\n node.meta = data\n }\n\n /**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\n function exitMathFlowFence() {\n // Exit if this is the closing fence.\n if (this.getData('mathFlowInside')) return\n this.buffer()\n this.setData('mathFlowInside', true)\n }\n\n /**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\n function exitMathFlow(token) {\n const data = this.resume().replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n const node = /** @type {Math} */ (this.exit(token))\n node.value = data\n // @ts-expect-error: we defined it.\n node.data.hChildren[0].value = data\n this.setData('mathFlowInside')\n }\n\n /**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\n function enterMathText(token) {\n this.enter(\n {\n type: 'inlineMath',\n value: '',\n data: {\n hName: 'span',\n hProperties: {className: ['math', 'math-inline']},\n hChildren: [{type: 'text', value: ''}]\n }\n },\n token\n )\n this.buffer()\n }\n\n /**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\n function exitMathText(token) {\n const data = this.resume()\n const node = /** @type {Math} */ (this.exit(token))\n node.value = data\n // @ts-expect-error: we defined it.\n node.data.hChildren[0].value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\n function exitMathData(token) {\n this.config.enter.data.call(this, token)\n this.config.exit.data.call(this, token)\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown`.\n *\n * @param {ToOptions | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function mathToMarkdown(options) {\n let single = (options || {}).singleDollarTextMath\n\n if (single === null || single === undefined) {\n single = true\n }\n\n inlineMath.peek = inlineMathPeek\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'mathFlowMeta'},\n {character: '\\n', inConstruct: 'mathFlowMeta'},\n {\n character: '$',\n after: single ? undefined : '\\\\$',\n inConstruct: 'phrasing'\n },\n {character: '$', inConstruct: 'mathFlowMeta'},\n {atBreak: true, character: '$', after: '\\\\$'}\n ],\n handlers: {math, inlineMath}\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Math} node\n */\n // To do: next major: rename `context` to state, `safeOptions` to info.\n // Note: fixing this code? Please also fix the similar code for code:\n // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/main/lib/handle/code.js>\n function math(node, _, context, safeOptions) {\n const raw = node.value || ''\n const tracker = track(safeOptions)\n const sequence = '$'.repeat(Math.max(longestStreak(raw, '$') + 1, 2))\n const exit = context.enter('mathFlow')\n let value = tracker.move(sequence)\n\n if (node.meta) {\n const subexit = context.enter('mathFlowMeta')\n value += tracker.move(\n safe(context, node.meta, {\n before: value,\n after: '\\n',\n encode: ['$'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineMath} node\n */\n // Note: fixing this code? Please also fix the similar code for inline code:\n // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/main/lib/handle/inline-code.js>\n //\n // To do: next major: rename `context` to state.\n // To do: next major: use `state` (`safe`, `track`, `patternCompile`).\n function inlineMath(node, _, context) {\n let value = node.value || ''\n let size = 1\n\n if (!single) size++\n\n // If there is a single dollar sign on its own in the math, use a fence of\n // two.\n // If there are two in a row, use one.\n while (\n new RegExp('(^|[^$])' + '\\\\$'.repeat(size) + '([^$]|$)').test(value)\n ) {\n size++\n }\n\n const sequence = '$'.repeat(size)\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first and last character are a space or eol, or the first or last\n // character are dollar signs, then pad with spaces.\n if (\n // Contains non-space.\n /[^ \\r\\n]/.test(value) &&\n // Starts with space and ends with space.\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) ||\n // Starts or ends with dollar.\n /^\\$|\\$$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n let index = -1\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineMath`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < context.unsafe.length) {\n const pattern = context.unsafe[index]\n const expression = patternCompile(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.codePointAt(position) === 10 /* `\\n` */ &&\n value.codePointAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n }\n\n /**\n * @returns {string}\n */\n function inlineMathPeek() {\n return '$'\n }\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-math').ToOptions} Options\n *\n * @typedef {import('mdast-util-math')} DoNotTouchAsThisImportIncludesMathInTree\n */\n\nimport {math} from 'micromark-extension-math'\nimport {mathFromMarkdown, mathToMarkdown} from 'mdast-util-math'\n\n/**\n * Plugin to support math.\n *\n * @type {import('unified').Plugin<[Options?] | void[], Root, Root>}\n */\nexport default function remarkMath(options = {}) {\n const data = this.data()\n\n add('micromarkExtensions', math(options))\n add('fromMarkdownExtensions', mathFromMarkdown())\n add('toMarkdownExtensions', mathToMarkdown(options))\n\n /**\n * @param {string} field\n * @param {unknown} value\n */\n function add(field, value) {\n const list = /** @type {unknown[]} */ (\n // Other extensions\n /* c8 ignore next 2 */\n data[field] ? data[field] : (data[field] = [])\n )\n\n list.push(value)\n }\n}\n","import { useChatContext } from '@copilotkit/react-ui'\nimport { useCopilotChat } from '@copilotkit/react-core'\n\nconst ResponseButton = ({ messagesId }: { messagesId: string }) => {\n const context = useChatContext()\n\n const { isLoading, reloadMessages, stopGeneration } = useCopilotChat()\n\n return (\n !isLoading && (\n <button onClick={() => (isLoading ? stopGeneration() : reloadMessages())} className=\"copilotKitResponseButton\">\n {isLoading ? context.labels.stopGenerating : context.labels.regenerateResponse}\n <span>{isLoading ? context.icons.stopIcon : context.icons.regenerateIcon}</span>\n </button>\n )\n )\n}\n\nexport default ResponseButton\n","import { useCopilotChat } from '@copilotkit/react-core'\nimport { Role, TextMessage } from '@copilotkit/runtime-client-gql'\n\nimport type { SuggestionsProps, ChatSuggestions } from './props'\n\nconst Suggestions = ({ currentSuggestions }: ChatSuggestions) => {\n const { appendMessage } = useCopilotChat()\n\n return (\n currentSuggestions?.length > 0 && (\n <div className=\"suggestions\">\n {currentSuggestions.map(({ title, message, partial, className }: SuggestionsProps, index: number) => (\n <button\n key={message + index}\n disabled={partial}\n onClick={e => {\n e.preventDefault()\n const m = new TextMessage({\n content: message,\n role: Role.User,\n })\n appendMessage(m)\n }}\n className={className || 'suggestion'}\n >\n <span>{title}</span>\n </button>\n ))}\n </div>\n )\n )\n}\n\nexport default Suggestions\n","import React from 'react'\nimport { useEffect } from 'react'\nimport { useCopilotChat, useCopilotAction, useCopilotReadable } from '@copilotkit/react-core'\nimport { Role, ActionExecutionMessage, TextMessage } from '@copilotkit/runtime-client-gql'\n\ninterface Message {\n content: string\n role: string\n name?: string\n scope?: any\n arguments?: any\n}\n\nexport interface ActionProps {\n start?: string\n history: Message[]\n addtocartHandler?: (_args: any) => Promise<any>\n commonRender?: string | ((_props: any) => React.ReactElement)\n pointsExchangeCouponRender?: string | ((_props: any) => React.ReactElement)\n gotocheckoutRender?: string | ((_props: any) => React.ReactElement)\n gotocartRender?: string | ((_props: any) => React.ReactElement)\n addtocartRender?: string | ((_props: any) => React.ReactElement)\n signupRender?: string | ((_props: any) => React.ReactElement)\n shulexRender?: string | ((_props: any) => React.ReactElement)\n productRender?: string | ((_props: any) => React.ReactElement)\n productRenderTipMessage?: string\n children?: React.ReactNode\n}\n\nexport const CopilotAction = ({\n start,\n history,\n addtocartHandler,\n commonRender,\n pointsExchangeCouponRender,\n gotocheckoutRender,\n gotocartRender,\n addtocartRender,\n productRender,\n signupRender,\n shulexRender,\n children,\n}: ActionProps) => {\n const { setMessages, appendMessage, isLoading } = useCopilotChat()\n\n useEffect(() => {\n const originhistory = history?.filter(value => value?.content || value?.arguments)\n if (originhistory?.length > 0) {\n const content = originhistory?.map(value => {\n if (value?.name && value?.arguments) {\n const args = value?.arguments?.map((item: any) => (item ? { ...item, ishistory: true } : {}))\n return new ActionExecutionMessage({\n name: value?.name,\n arguments: args,\n scope: value?.scope,\n })\n }\n return new TextMessage({\n ...value,\n role: value?.role === 'user' ? Role.User : Role.Assistant,\n })\n })\n setMessages(content)\n }\n }, [history])\n\n useCopilotAction({\n name: 'go_to_checkout',\n description: 'go to cart',\n parameters: [{ sku: '', handle: '' }] as any,\n render: gotocheckoutRender || (props => <div className=\"hidden\">{JSON.stringify(props)}</div>),\n handler: function () {\n // console.log('buynow-props', props)\n },\n })\n\n useCopilotAction({\n name: 'common_action',\n description: 'common action',\n parameters: [{ act: '' }] as any,\n render: commonRender || (props => <div className=\"hidden\">{JSON.stringify(props)}</div>),\n handler: function () {\n // console.log('common_action', props)\n },\n })\n\n useCopilotAction({\n name: 'points_exchange_coupon',\n description: 'points exchange coupon',\n parameters: [{ act: '' }] as any,\n render: pointsExchangeCouponRender || (props => <div className=\"hidden\">{JSON.stringify(props)}</div>),\n handler: function () {\n // console.log('points_exchange_coupon', props)\n },\n })\n\n useCopilotAction({\n name: 'go_to_cart',\n description: 'go to cart',\n parameters: [{ sku: '', handle: '' }] as any,\n render: gotocartRender || (props => <div className=\"hidden\">{JSON.stringify(props)}</div>),\n handler: function () {\n // console.log('buynow-props', props)\n },\n })\n\n useCopilotAction({\n name: 'add_to_cart',\n description: 'add to cart',\n parameters: [{ sku: '', handle: '' }] as any,\n render: addtocartRender || (props => <div className=\"hidden\">{JSON.stringify(props)}</div>),\n handler: function (props) {\n addtocartHandler && addtocartHandler(props)\n },\n })\n\n useCopilotAction({\n name: 'show_product_card',\n description: 'product card',\n parameters: [{ sku: '', handle: '' }] as any,\n render: productRender || (props => <div className=\"hidden\">{JSON.stringify(props)}</div>),\n handler: function (props) {\n // console.log('show_product_card-props', props)\n // const ishistory = props?.find((item: { ishistory: any }) => item?.ishistory)\n // if (!ishistory) {\n // const content = new TextMessage({\n // content: 'show product card',\n // role: Role.Assistant,\n // })\n // appendMessage(content)\n // }\n },\n })\n\n useCopilotAction({\n name: 'signup',\n description: 'signup',\n parameters: [\n {\n name: 'signup',\n },\n ] as any,\n render: signupRender || (props => <div className=\"hidden\">{JSON.stringify(props)}</div>),\n handler: function () {\n // console.log('signup-props', props)\n },\n })\n\n useCopilotAction({\n name: 'shulex',\n description: 'shulex',\n parameters: [\n {\n name: 'shulex',\n },\n ] as any,\n render: shulexRender || (props => <div className=\"hidden\">{JSON.stringify(props)}</div>),\n handler: function () {\n // console.log('shulex-props', props)\n },\n })\n\n useCopilotReadable({\n description: \"Today's date\",\n value: new Date().toLocaleDateString(),\n })\n\n return <div>{children}</div>\n}\n","import { useCopilotChat, useCopilotAction, useCopilotReadable } from '@copilotkit/react-core'\nimport { Role, ActionExecutionMessage, TextMessage } from '@copilotkit/runtime-client-gql'\n\nexport { useCopilotChat, useCopilotAction, useCopilotReadable, Role, ActionExecutionMessage, TextMessage }\n","import { createContext, PropsWithChildren, useContext } from 'react'\nimport type { DTC_TASK_TYPE } from './const'\nimport type { CreditInfoResponse } from './response'\nimport { CreditsPageCommon } from '../type'\nimport { FunctionMemberPriceConfig } from './memberPriceTypes'\n\ntype Context = {\n profile: any\n isLoadingProfile: boolean\n removeProfile: () => void\n taskIdToTypeMapping: Record<string, DTC_TASK_TYPE>\n openSignInPopup: () => void\n openSignUpPopup: () => void\n creditInfo?: CreditInfoResponse\n customer?: any\n customerLoading: boolean\n fetchCreditInfo: (user_id: string) => void\n gtm: {\n pageGroup: string\n pageHandle?: string\n }\n pageCommon: CreditsPageCommon\n memberPriceDiscount?: FunctionMemberPriceConfig[]\n alpcBrand?: string\n cartConfig?: {\n addToCart: (params: {\n variantList: Array<{\n variant: any\n quantity: number\n attributes?: Array<{ key: string; value: string }>\n }>\n cartAttributes?: Record<string, string>\n discountCodes?: string[]\n }) => void | Promise<any>\n }\n}\n\nexport const CreditsContext = createContext<Context>({\n profile: null,\n isLoadingProfile: false,\n taskIdToTypeMapping: {},\n removeProfile: () => {},\n openSignInPopup: () => {},\n openSignUpPopup: () => {},\n creditInfo: undefined,\n customerLoading: false,\n fetchCreditInfo: (user_id: string) => {},\n gtm: {\n pageGroup: '',\n pageHandle: '',\n },\n pageCommon: {},\n memberPriceDiscount: undefined,\n alpcBrand: undefined,\n cartConfig: undefined,\n})\n\nexport function CreditsProvider({\n children,\n profile,\n removeProfile,\n isLoadingProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n customer,\n customerLoading,\n fetchCreditInfo,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n cartConfig,\n}: PropsWithChildren<Context>) {\n return (\n <CreditsContext.Provider\n value={{\n profile,\n isLoadingProfile,\n removeProfile,\n openSignInPopup,\n openSignUpPopup,\n taskIdToTypeMapping,\n creditInfo,\n fetchCreditInfo,\n customer,\n customerLoading,\n gtm,\n pageCommon,\n memberPriceDiscount,\n alpcBrand,\n cartConfig,\n }}\n >\n {children}\n </CreditsContext.Provider>\n )\n}\n\nexport function useCreditsContext() {\n const context = useContext(CreditsContext)\n if (!context) {\n throw new Error('useCreditsContext must be used within a CreditsProvider')\n }\n return context\n}\n","import React, { useState, useRef, useCallback } from 'react';\nimport useSWR, { useSWRConfig } from '../index/index.mjs';\nimport { IS_REACT_LEGACY, useIsomorphicLayoutEffect, withMiddleware, serialize, mergeObjects, getTimestamp, UNDEFINED } from '../_internal/index.mjs';\n\nconst startTransition = IS_REACT_LEGACY ? (cb)=>{\n cb();\n} : React.startTransition;\n/**\n * An implementation of state with dependency-tracking.\n * @param initialState - The initial state object.\n */ const useStateWithDeps = (initialState)=>{\n const [, rerender] = useState({});\n const unmountedRef = useRef(false);\n const stateRef = useRef(initialState);\n // If a state property (data, error, or isValidating) is accessed by the render\n // function, we mark the property as a dependency so if it is updated again\n // in the future, we trigger a rerender.\n // This is also known as dependency-tracking.\n const stateDependenciesRef = useRef({\n data: false,\n error: false,\n isValidating: false\n });\n /**\n * Updates state and triggers re-render if necessary.\n * @param payload To change stateRef, pass the values explicitly to setState:\n * @example\n * ```js\n * setState({\n * isValidating: false\n * data: newData // set data to newData\n * error: undefined // set error to undefined\n * })\n *\n * setState({\n * isValidating: false\n * data: undefined // set data to undefined\n * error: err // set error to err\n * })\n * ```\n */ const setState = useCallback((payload)=>{\n let shouldRerender = false;\n const currentState = stateRef.current;\n for(const key in payload){\n if (Object.prototype.hasOwnProperty.call(payload, key)) {\n const k = key;\n // If the property has changed, update the state and mark rerender as\n // needed.\n if (currentState[k] !== payload[k]) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n currentState[k] = payload[k];\n // If the property is accessed by the component, a rerender should be\n // triggered.\n if (stateDependenciesRef.current[k]) {\n shouldRerender = true;\n }\n }\n }\n }\n if (shouldRerender && !unmountedRef.current) {\n rerender({});\n }\n }, []);\n useIsomorphicLayoutEffect(()=>{\n unmountedRef.current = false;\n return ()=>{\n unmountedRef.current = true;\n };\n });\n return [\n stateRef,\n stateDependenciesRef.current,\n setState\n ];\n};\n\nconst mutation = ()=>(key, fetcher, config = {})=>{\n const { mutate } = useSWRConfig();\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n // Ditch all mutation results that happened earlier than this timestamp.\n const ditchMutationsUntilRef = useRef(0);\n const [stateRef, stateDependencies, setState] = useStateWithDeps({\n data: UNDEFINED,\n error: UNDEFINED,\n isMutating: false\n });\n const currentState = stateRef.current;\n const trigger = useCallback(async (arg, opts)=>{\n const [serializedKey, resolvedKey] = serialize(keyRef.current);\n if (!fetcherRef.current) {\n throw new Error('Can’t trigger the mutation: missing fetcher.');\n }\n if (!serializedKey) {\n throw new Error('Can’t trigger the mutation: missing key.');\n }\n // Disable cache population by default.\n const options = mergeObjects(mergeObjects({\n populateCache: false,\n throwOnError: true\n }, configRef.current), opts);\n // Trigger a mutation, and also track the timestamp. Any mutation that happened\n // earlier this timestamp should be ignored.\n const mutationStartedAt = getTimestamp();\n ditchMutationsUntilRef.current = mutationStartedAt;\n setState({\n isMutating: true\n });\n try {\n const data = await mutate(serializedKey, fetcherRef.current(resolvedKey, {\n arg\n }), // We must throw the error here so we can catch and update the states.\n mergeObjects(options, {\n throwOnError: true\n }));\n // If it's reset after the mutation, we don't broadcast any state change.\n if (ditchMutationsUntilRef.current <= mutationStartedAt) {\n startTransition(()=>setState({\n data,\n isMutating: false,\n error: undefined\n }));\n options.onSuccess == null ? void 0 : options.onSuccess.call(options, data, serializedKey, options);\n }\n return data;\n } catch (error) {\n // If it's reset after the mutation, we don't broadcast any state change\n // or throw because it's discarded.\n if (ditchMutationsUntilRef.current <= mutationStartedAt) {\n startTransition(()=>setState({\n error: error,\n isMutating: false\n }));\n options.onError == null ? undefined : options.onError.call(options, error, serializedKey, options);\n if (options.throwOnError) {\n throw error;\n }\n }\n }\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n const reset = useCallback(()=>{\n ditchMutationsUntilRef.current = getTimestamp();\n setState({\n data: UNDEFINED,\n error: UNDEFINED,\n isMutating: false\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n useIsomorphicLayoutEffect(()=>{\n keyRef.current = key;\n fetcherRef.current = fetcher;\n configRef.current = config;\n });\n // We don't return `mutate` here as it can be pretty confusing (e.g. people\n // calling `mutate` but they actually mean `trigger`).\n // And also, `mutate` relies on the useSWR hook to exist too.\n return {\n trigger,\n reset,\n get data () {\n stateDependencies.data = true;\n return currentState.data;\n },\n get error () {\n stateDependencies.error = true;\n return currentState.error;\n },\n get isMutating () {\n stateDependencies.isMutating = true;\n return currentState.isMutating;\n }\n };\n };\n/**\n * A hook to define and manually trigger remote mutations like POST, PUT, DELETE and PATCH use cases.\n *\n * @link https://swr.vercel.app/docs/mutation\n * @example\n * ```jsx\n * import useSWRMutation from 'swr/mutation'\n *\n * const {\n * data,\n * error,\n * trigger,\n * reset,\n * isMutating\n * } = useSWRMutation(key, fetcher, options?)\n * ```\n */ const useSWRMutation = withMiddleware(useSWR, mutation);\n\nexport { useSWRMutation as default };\n","import React, { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';\nimport { UNDEFINED as UNDEFINED$1, OBJECT as OBJECT$1, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, serialize as serialize$1, createCacheHelper, isUndefined as isUndefined$1, isPromiseLike, getTimestamp, isFunction as isFunction$1, revalidateEvents, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, IS_SERVER, rAF, IS_REACT_LEGACY, mergeObjects } from '../_internal/index.mjs';\nexport { mutate, preload, useSWRConfig } from '../_internal/index.mjs';\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst getTypeName = (value)=>OBJECT.prototype.toString.call(value);\nconst isObjectTypeName = (typeName, type)=>typeName === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const typeName = getTypeName(arg);\n const isDate = isObjectTypeName(typeName, 'Date');\n const isRegex = isObjectTypeName(typeName, 'RegExp');\n const isPlainObject = isObjectTypeName(typeName, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\nconst unstable_serialize = (key)=>serialize(key)[0];\n\n/// <reference types=\"react/experimental\" />\nconst use = React.use || // This extra generic is to avoid TypeScript mixing up the generic and JSX sytax\n// and emitting an error.\n// We assume that this is only for the `use(thenable)` case, not `use(context)`.\n// https://github.com/facebook/react/blob/aed00dacfb79d17c53218404c52b1c7aa59c4a89/packages/react-server/src/ReactFizzThenable.js#L45\n((thenable)=>{\n switch(thenable.status){\n case 'pending':\n throw thenable;\n case 'fulfilled':\n return thenable.value;\n case 'rejected':\n throw thenable.reason;\n default:\n thenable.status = 'pending';\n thenable.then((v)=>{\n thenable.status = 'fulfilled';\n thenable.value = v;\n }, (e)=>{\n thenable.status = 'rejected';\n thenable.reason = e;\n });\n throw thenable;\n }\n});\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst resolvedUndef = Promise.resolve(UNDEFINED$1);\nconst useSWRHandler = (_key, fetcher, config)=>{\n const { cache, compare, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n // `key` is the identifier of the SWR internal state,\n // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n // All of them are derived from `_key`.\n const [key, fnArg] = serialize$1(_key);\n // If it's the initial render of this hook.\n const initialMountedRef = useRef(false);\n // If the hook is unmounted already. This will be used to prevent some effects\n // to be called after unmounting.\n const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n // Resolve the fallback data from either the inline option, or the global provider.\n // If it's a promise, we simply let React suspend and resolve it for us.\n const fallback = isUndefined$1(fallbackData) ? isUndefined$1(config.fallback) ? UNDEFINED$1 : config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(prev[t], current[t])) {\n if (!isUndefined$1(prev[t])) {\n return false;\n }\n if (!compare(returnedData, current[t])) {\n return false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n return false;\n }\n }\n }\n return true;\n };\n const getSnapshot = useMemo(()=>{\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (!isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n if (suspense) return false;\n return revalidateIfStale !== false;\n })();\n // Get the cache and merge it with expected states.\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n const cachedData = getCache();\n const initialData = getInitialCache();\n const clientSnapshot = getSelectedCache(cachedData);\n const serverSnapshot = cachedData === initialData ? clientSnapshot : getSelectedCache(initialData);\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = clientSnapshot;\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n const compareResult = isEqual(newSnapshot, memorizedSnapshot);\n if (compareResult) {\n // Mentally, we should always return the `memorizedSnapshot` here\n // as there's no change between the new and old snapshots.\n // However, since the `isEqual` function only compares selected fields,\n // the values of the unselected fields might be changed. That's\n // simply because we didn't track them.\n // To support the case in https://github.com/vercel/swr/pull/2576,\n // we need to update these fields in the `memorizedSnapshot` too\n // with direct mutations to ensure the snapshot is always up-to-date\n // even for the unselected fields, but only trigger re-renders when\n // the selected fields are changed.\n memorizedSnapshot.data = newSnapshot.data;\n memorizedSnapshot.isLoading = newSnapshot.isLoading;\n memorizedSnapshot.isValidating = newSnapshot.isValidating;\n memorizedSnapshot.error = newSnapshot.error;\n return memorizedSnapshot;\n } else {\n memorizedSnapshot = newSnapshot;\n return newSnapshot;\n }\n },\n ()=>serverSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const isInitialMount = !initialMountedRef.current;\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined$1(cachedData) ? fallback && isPromiseLike(fallback) ? use(fallback) : fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined$1(cachedData) ? isUndefined$1(laggyDataRef.current) ? data : laggyDataRef.current : cachedData : data;\n // - Suspense mode and there's stale data for the initial render.\n // - Not suspense mode and there is no fallback data and `revalidateIfStale` is enabled.\n // - `revalidateIfStale` is enabled but `data` is not defined.\n const shouldDoInitialRevalidation = (()=>{\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined$1(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n // Under suspense mode, it will always fetch on render if there is no\n // stale data so no need to revalidate immediately mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined$1(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined$1(data) || revalidateIfStale;\n })();\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n const defaultValidatingState = !!(key && fetcher && isInitialMount && shouldDoInitialRevalidation);\n const isValidating = isUndefined$1(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined$1(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined$1(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined$1(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n // Wait until the ongoing request is done. Deduplication is also\n // considered here.\n ;\n [newData, startAt] = FETCH[key];\n newData = await newData;\n if (shouldStartNewRequest) {\n // If the request isn't interrupted, clean it up after the\n // deduplication interval.\n setTimeout(cleanupState, config.dedupingInterval);\n }\n // If there're other ongoing request(s), started after the current one,\n // we need to ignore the current one to avoid possible race conditions:\n // req1------------------>res1 (current one)\n // req2---------------->res2\n // the request that fired later will always be kept.\n // The timestamp maybe be `undefined` or a number\n if (!FETCH[key] || FETCH[key][1] !== startAt) {\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED$1;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined$1(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction$1(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (!getConfig().revalidateOnFocus || !getConfig().revalidateOnReconnect || isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, (_opts)=>{\n const revalidators = EVENT_REVALIDATORS[key];\n if (revalidators && revalidators[0]) {\n revalidators[0](revalidateEvents.ERROR_REVALIDATE_EVENT, _opts);\n }\n }, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `keyValidating` are depending on `key`, so we can exclude them from\n // the deps array.\n //\n // FIXME:\n // `fn` and `config` might be changed during the lifecycle,\n // but they might be changed every render like this.\n // `useSWR('key', () => fetch('/api/'), { suspense: true })`\n // So we omit the values from the deps array\n // even though it might cause unexpected behaviors.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n key,\n cache\n ]);\n // Similar to the global mutate but bound to the current cache and key.\n // `cache` isn't allowed to change during the lifecycle.\n const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined$1(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED$1, WITH_DEDUPE);\n let nextFocusRevalidatedAt = 0;\n if (getConfig().revalidateOnFocus) {\n const initNow = Date.now();\n nextFocusRevalidatedAt = initNow + getConfig().focusThrottleInterval;\n }\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n const onRevalidate = (type, opts = {})=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n } else if (type == revalidateEvents.ERROR_REVALIDATE_EVENT) {\n return revalidate(opts);\n }\n return;\n };\n const unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);\n // Mark the component as mounted and update corresponding refs.\n unmountedRef.current = false;\n keyRef.current = key;\n initialMountedRef.current = true;\n // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation\n if (shouldDoInitialRevalidation) {\n // Performance optimization: if a request is already in progress for this key,\n // skip the revalidation to avoid redundant work\n if (!FETCH[key]) {\n if (isUndefined$1(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\n } else {\n // Delay the revalidate if we have data to return so we won't block\n // rendering.\n rAF(softRevalidate);\n }\n }\n }\n return ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction$1(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;\n // We only start the next interval if `refreshInterval` is not 0, and:\n // - `force` is true, which is the start of polling\n // - or `timer` is not 0, which means the effect wasn't canceled\n if (interval && timer !== -1) {\n timer = setTimeout(execute, interval);\n }\n }\n function execute() {\n // Check if it's OK to execute:\n // Only revalidate when the page is visible, online, and not errored.\n if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `error`, the `error` needs to be thrown to the error boundary.\n // If there is no `error`, the `revalidation` promise needs to be thrown to\n // the suspense boundary.\n if (suspense) {\n const hasKeyButNoData = key && isUndefined$1(data);\n // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any fallback data. This causes hydration errors. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER && hasKeyButNoData) {\n throw new Error('Fallback data is required when using Suspense in SSR.');\n }\n // Always update fetcher and config refs even with the Suspense mode.\n if (hasKeyButNoData) {\n fetcherRef.current = fetcher;\n configRef.current = config;\n unmountedRef.current = false;\n }\n const req = PRELOAD[key];\n const mutateReq = !isUndefined$1(req) && hasKeyButNoData ? boundMutate(req) : resolvedUndef;\n use(mutateReq);\n if (!isUndefined$1(error) && hasKeyButNoData) {\n throw error;\n }\n const revalidation = hasKeyButNoData ? revalidate(WITH_DEDUPE) : resolvedUndef;\n if (!isUndefined$1(returnedData) && hasKeyButNoData) {\n // @ts-ignore modify react promise status\n revalidation.status = 'fulfilled';\n // @ts-ignore modify react promise value\n revalidation.value = true;\n }\n use(revalidation);\n }\n const swrResponse = {\n mutate: boundMutate,\n get data () {\n stateDependencies.data = true;\n return returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n return swrResponse;\n};\nconst SWRConfig = OBJECT$1.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\n/**\n * A hook to fetch data.\n *\n * @link https://swr.vercel.app\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error, isLoading } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (isLoading) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ const useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n","'use client';\nimport React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useRef, createElement } from 'react';\nimport * as revalidateEvents from './events.mjs';\nimport { dequal } from 'dequal/lite';\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst isPromiseLike = (x)=>isFunction(x.then);\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst isLegacyDeno = isWindowDefined && 'Deno' in window;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>!isUndefined(key) && cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return !isUndefined(key) && cache.get(key) || EMPTY_CACHE;\n }\n ];\n} // export { UNDEFINED, OBJECT, isUndefined, isFunction, mergeObjects, isPromiseLike }\n;\n\n/**\n * Due to the bug https://bugs.chromium.org/p/chromium/issues/detail?id=678075,\n * it's not reliable to detect if the browser is currently online or offline\n * based on `navigator.onLine`.\n * As a workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || isLegacyDeno;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst getTypeName = (value)=>OBJECT.prototype.toString.call(value);\nconst isObjectTypeName = (typeName, type)=>typeName === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const typeName = getTypeName(arg);\n const isDate = isObjectTypeName(typeName, 'Date');\n const isRegex = isObjectTypeName(typeName, 'RegExp');\n const isPlainObject = isObjectTypeName(typeName, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for (const key of it){\n if (// Skip the special useSWRInfinite and useSWRSubscription keys.\n !/^\\$(inf|sub)\\$/.test(key) && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n const startRevalidate = ()=>{\n const revalidators = EVENT_REVALIDATORS[key];\n const revalidate = isFunction(options.revalidate) ? options.revalidate(get().data, _k) : options.revalidate !== false;\n if (revalidate) {\n // Invalidate the key by deleting the concurrent request markers so new\n // requests will not be deduped.\n delete FETCH[key];\n delete PRELOAD[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](revalidateEvents.MUTATE_EVENT).then(()=>get().data);\n }\n }\n return get().data;\n };\n // If there is no new data provided, revalidate the key with current state.\n if (args.length < 3) {\n // Revalidate and broadcast state.\n return startRevalidate();\n }\n let data = _data;\n let error;\n let isError = false;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n isError = true;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isPromiseLike(data)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((err)=>{\n error = err;\n isError = true;\n });\n // Check if other mutations have occurred since we've started this mutation.\n // If there's a race we don't update cache or broadcast the change,\n // just return the data.\n if (beforeMutationTs !== MUTATION[key][0]) {\n if (isError) throw error;\n return data;\n } else if (isError && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data: committedData,\n _c: UNDEFINED\n });\n }\n }\n // If we should write back the cache after request.\n if (populateCache) {\n if (!isError) {\n // Transform the result into data.\n if (isFunction(populateCache)) {\n const populateCachedData = populateCache(data, committedData);\n set({\n data: populateCachedData,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n } else {\n // Only update cached data and reset the error if there's no error. Data can be `undefined` here.\n set({\n data,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n }\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n Promise.resolve(startRevalidate()).then(()=>{\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n });\n // Throw error or return data\n if (isError) {\n if (throwOnError) throw error;\n return;\n }\n return data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (provider, options)=>{\n // The global state for a specific provider will be used to deduplicate\n // requests and store listeners. As well as a mutate function that is bound to\n // the cache.\n // The provider's global state might be already initialized. Let's try to get the\n // global state associated with the provider first.\n if (!SWRGlobalState.has(provider)) {\n const opts = mergeObjects(defaultConfigOptions, options);\n // If there's no global state bound to the provider, create a new one with the\n // new mutate function.\n const EVENT_REVALIDATORS = Object.create(null);\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = Object.create(null);\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for (const fn of subs){\n fn(value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n Object.create(null),\n Object.create(null),\n Object.create(null),\n mutate,\n setter,\n subscribe\n ]);\n if (!IS_SERVER) {\n // When listening to the native events for auto revalidations,\n // we intentionally put a delay (setTimeout) here to make sure they are\n // fired after immediate JavaScript executions, which can be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.RECONNECT_EVENT)));\n unmount = ()=>{\n releaseFocus && releaseFocus();\n releaseReconnect && releaseReconnect();\n // When un-mounting, we need to remove the cache provider from the state\n // storage too because it's a side-effect. Otherwise, when re-mounting we\n // will not re-register those event listeners.\n SWRGlobalState.delete(provider);\n };\n }\n }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\n // We might want to inject an extra layer on top of `provider` in the future,\n // such as key serialization, auto GC, etc.\n // For now, it's just a `Map` interface without any modifications.\n return [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = dequal;\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n onErrorRetry,\n onDiscarded: noop,\n // switches\n revalidateOnFocus: true,\n revalidateOnReconnect: true,\n revalidateIfStale: true,\n shouldRetryOnError: true,\n // timeouts\n errorRetryInterval: slowConnection ? 10000 : 5000,\n focusThrottleInterval: 5 * 1000,\n dedupingInterval: 2 * 1000,\n loadingTimeout: slowConnection ? 5000 : 3000,\n // providers\n compare,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1, fallback: f1 } = a;\n const { use: u2, fallback: f2 } = b;\n if (u1 && u2) {\n v.use = u1.concat(u2);\n }\n if (f1 && f2) {\n v.fallback = mergeObjects(f1, f2);\n }\n }\n return v;\n};\n\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // initialize the cache only on first access.\n const cacheContextRef = useRef(UNDEFINED);\n if (provider && !cacheContextRef.current) {\n cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);\n }\n const cacheContext = cacheContextRef.current;\n // Override the cache if a new provider is given.\n if (cacheContext) {\n extendedConfig.cache = cacheContext[0];\n extendedConfig.mutate = cacheContext[1];\n }\n // Unsubscribe events.\n useIsomorphicLayoutEffect(()=>{\n if (cacheContext) {\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\nexport { noop as A, isPromiseLike as B, IS_REACT_LEGACY as I, OBJECT as O, SWRConfigContext as S, UNDEFINED as U, isFunction as a, SWRGlobalState as b, cache as c, defaultConfig as d, isUndefined as e, mergeConfigs as f, SWRConfig as g, initCache as h, isWindowDefined as i, mutate as j, compare as k, stableHash as l, mergeObjects as m, internalMutate as n, getTimestamp as o, preset as p, defaultConfigOptions as q, IS_SERVER as r, serialize as s, rAF as t, useIsomorphicLayoutEffect as u, slowConnection as v, isDocumentDefined as w, isLegacyDeno as x, hasRequestAnimationFrame as y, createCacheHelper as z };\n","const FOCUS_EVENT = 0;\nconst RECONNECT_EVENT = 1;\nconst MUTATE_EVENT = 2;\nconst ERROR_REVALIDATE_EVENT = 3;\n\nexport { ERROR_REVALIDATE_EVENT, FOCUS_EVENT, MUTATE_EVENT, RECONNECT_EVENT };\n","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","const INFINITE_PREFIX = '$inf$';\n\nexport { INFINITE_PREFIX };\n","import { i as isWindowDefined, a as isFunction, S as SWRConfigContext, m as mergeObjects, d as defaultConfig, s as serialize, b as SWRGlobalState, c as cache, e as isUndefined, f as mergeConfigs } from './config-context-client-BoS53ST9.mjs';\nexport { I as IS_REACT_LEGACY, r as IS_SERVER, O as OBJECT, g as SWRConfig, U as UNDEFINED, k as compare, z as createCacheHelper, q as defaultConfigOptions, o as getTimestamp, y as hasRequestAnimationFrame, h as initCache, n as internalMutate, w as isDocumentDefined, x as isLegacyDeno, B as isPromiseLike, j as mutate, A as noop, p as preset, t as rAF, v as slowConnection, l as stableHash, u as useIsomorphicLayoutEffect } from './config-context-client-BoS53ST9.mjs';\nimport * as revalidateEvents from './events.mjs';\nexport { revalidateEvents };\nimport { INFINITE_PREFIX } from './constants.mjs';\nexport { INFINITE_PREFIX } from './constants.mjs';\nimport React, { useContext, useMemo } from 'react';\nexport * from './types.mjs';\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n const parentConfig = useContext(SWRConfigContext);\n const mergedConfig = useMemo(()=>mergeObjects(defaultConfig, parentConfig), [\n parentConfig\n ]);\n return mergedConfig;\n};\n\nconst preload = (key_, fetcher)=>{\n const [key, fnArg] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(fnArg);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const [key] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n if (key.startsWith(INFINITE_PREFIX)) {\n // we want the infinite fetcher to be called.\n // handling of the PRELOAD cache happens there.\n return fetcher_(...args);\n }\n const req = PRELOAD[key];\n if (isUndefined(req)) return fetcher_(...args);\n delete PRELOAD[key];\n return req;\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const index = keyedRevalidators.indexOf(callback);\n if (index >= 0) {\n // O(1): faster than splice\n keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];\n keyedRevalidators.pop();\n }\n };\n};\n\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { SWRGlobalState, cache, defaultConfig, isFunction, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, normalize, preload, serialize, subscribeCallback, useSWRConfig, withArgs, withMiddleware };\n","import useSWRMutation from 'swr/mutation'\n\nexport const uploadReceipt = async (\n _: any,\n { arg: { orderName } }: { arg: { orderName: string } }\n): Promise<{\n ok: boolean\n code: number\n}> => {\n const response = await fetch(`/api/multipass/mktsrv/v1/credit/upload_third_party_order`, {\n credentials: 'include',\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n order_name: orderName,\n }),\n })\n const { data } = await response.json()\n return {\n ok: data?.code === 0,\n code: data?.code,\n }\n}\n\nexport const useUploadReceipt = () => {\n return useSWRMutation('/api/multipass/mktsrv/v1/credit/upload_third_party_order', uploadReceipt)\n}\n","import { Button, Heading, Text } from '@anker-in/headless-ui'\nimport { useCallback, useState } from 'react'\nimport { CreditsModalContainer } from './modalContainer'\nimport { useUploadReceipt } from '../context/hooks/useUploadReceipt'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport classNames from 'classnames'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport type ReceiptCopy = {\n title: string\n description: string\n placeholder: string\n note: string\n submit: string\n successTitle: string\n successDescription: string\n gotIt: string\n failedTitle: string\n successIcon: string\n failedIcon: string\n failedReasons: {\n code: string\n id: string\n description: string\n }[]\n}\n\nexport function CreditsUploadReceiptModal({\n isOpen,\n onClose,\n copy,\n onSuccess,\n}: {\n isOpen: boolean\n onClose: () => void\n copy: ReceiptCopy\n onSuccess: () => void\n}) {\n const { trigger, isMutating } = useUploadReceipt()\n const [orderName, setOrderName] = useState('')\n const [resultPopup, setResultPopup] = useState(false)\n const [resultPopupContent, setResultPopupContent] = useState({\n icon: '',\n title: '',\n description: '',\n isSuccess: false,\n })\n\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const handleSubmit = useCallback(() => {\n trigger(\n { orderName },\n {\n onSuccess: result => {\n setResultPopup(true)\n if (result?.ok) {\n onSuccess()\n setResultPopupContent({\n icon: copy.successIcon,\n title: copy.successTitle || 'Success',\n description: copy.successDescription || 'Your receipt has been uploaded successfully',\n isSuccess: true,\n })\n } else {\n const error = copy.failedReasons.find(reason => reason.code === result.code?.toString())\n setResultPopupContent({\n icon: copy.failedIcon,\n title: copy.failedTitle || 'Failed',\n description: error?.description || 'Please try again',\n isSuccess: false,\n })\n }\n },\n }\n )\n }, [\n trigger,\n orderName,\n onSuccess,\n copy.successIcon,\n copy.successTitle,\n copy.successDescription,\n copy.failedReasons,\n copy.failedIcon,\n copy.failedTitle,\n ])\n\n const handleResultClose = () => {\n setResultPopup(false)\n setOrderName('')\n // 如果上传成功,全部弹窗关闭\n if (resultPopupContent.isSuccess) {\n onClose()\n }\n }\n\n return (\n <CreditsModalContainer\n isOpen={isOpen}\n onClose={onClose}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] min-l:px-[48px] md:mb-0 md:pb-[24px] md:px-[16px]\"\n titleClassName=\"h-[56px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n >\n <Heading size=\"3\">{copy.title}</Heading>\n <Text size=\"3\" className=\"mt-[8px] md:mt-[4px]\">\n {copy.description}\n </Text>\n <input\n placeholder={copy.placeholder}\n className={classNames(\n 'mt-[24px] h-[50px] w-full rounded-[2px] border border-[#6D6D6F] pl-[14px] text-[16px] font-bold placeholder:text-[16px] placeholder:font-bold placeholder:text-[#6D6D6F] focus:outline-none focus:ring-0 md:rounded-[4px] md:placeholder:text-[14px]',\n !rounded && 'rounded-none'\n )}\n value={orderName}\n onChange={e => setOrderName(e.target.value)}\n />\n <Text size=\"1\" as=\"p\" className=\"mt-[8px] text-[#6D6D6F]\">\n {copy.note}\n </Text>\n <Button variant=\"primary\" className=\"mt-[24px] w-full\" loading={isMutating} onClick={handleSubmit}>\n {copy.submit}\n </Button>\n {resultPopup && (\n <CreditsModalContainer\n isOpen={resultPopup}\n onClose={handleResultClose}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] min-l:px-[48px] md:mb-0 md:pb-[24px] md:px-[16px] flex flex-col items-center text-center\"\n titleClassName=\"h-[56px]\"\n >\n <Text size=\"3\" className=\"size-[64px]\" as=\"div\" html={resultPopupContent.icon} />\n <Heading size=\"3\" className=\"mt-[16px]\">\n {resultPopupContent.title}\n </Heading>\n <Text size=\"3\" className=\"mt-[8px] md:mt-[4px]\">\n {resultPopupContent.description}\n </Text>\n <Button variant=\"primary\" className=\"mt-[24px]\" onClick={handleResultClose}>\n {copy.gotIt}\n </Button>\n </CreditsModalContainer>\n )}\n </CreditsModalContainer>\n )\n}\n","import { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { useEffect, useState, type UIEvent } from 'react'\nimport ReactModal from 'react-modal'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport type ModalContainerProps = {\n overlayClassName?: string\n className?: string\n scrollClassName?: string\n title?: string\n titleClassName?: string\n useAnimation?: boolean // 使用动画展示\n animationClassName?: string // 动画展示控制的classname\n isOpen: boolean\n children?: any\n onClose: () => void\n onScrollEnd?: (event: UIEvent<HTMLDivElement>) => void\n}\n\nexport const CreditsModalContainer = ({\n isOpen,\n title,\n className = '',\n overlayClassName = '',\n scrollClassName = '',\n onClose,\n onScrollEnd,\n children,\n useAnimation,\n animationClassName,\n titleClassName = '',\n ...props\n}: ModalContainerProps): React.ReactElement => {\n const [animationShow, setAnimationShow] = useState(false)\n\n useEffect(() => {\n if (!useAnimation) {\n return\n }\n requestAnimationFrame(() => {\n setAnimationShow(isOpen ?? false)\n })\n }, [isOpen, useAnimation])\n\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n return (\n <ReactModal\n isOpen={isOpen ?? false}\n overlayClassName={cn(\n 'fixed inset-0 z-[999] flex items-center justify-center bg-black/70 leading-[1.2] md:items-end',\n overlayClassName\n )}\n className={cn(\n 'min-md:max-h-[calc(100vh-96px)] relative flex min-h-[200px] flex-col overflow-hidden rounded-[16px] bg-white outline-none transition-all duration-300 md:h-[88.27vh] md:w-full md:rounded-b-none',\n !rounded && 'rounded-none',\n animationShow ? '' : animationClassName,\n className\n )}\n onRequestClose={onClose}\n {...props}\n >\n <div\n className={cn(\n 'flex w-full shrink-0 items-center justify-between',\n title ? 'min-l:px-[32px] h-[70px] border-b border-[#e2e2e2] px-[24px]' : 'h-[48px] px-[16px]',\n titleClassName\n )}\n >\n <div className=\"text-[18px] font-bold\">{title}</div>\n <div\n className=\"size-[22px] cursor-pointer\"\n onClick={onClose}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClose?.()\n }\n }}\n role=\"button\"\n tabIndex={0}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.8525 5.31015C16.4558 4.91337 15.8125 4.91338 15.4157 5.31015L11.1268 9.5991L6.83815 5.31049C6.44138 4.91372 5.79808 4.91372 5.40131 5.31049C5.00454 5.70726 5.00455 6.35055 5.40131 6.74732L9.68993 11.0359L5.40105 15.3248C5.00428 15.7216 5.00428 16.3649 5.40105 16.7616C5.79782 17.1584 6.44111 17.1584 6.83788 16.7616L11.1268 12.4728L15.416 16.762C15.8128 17.1588 16.456 17.1588 16.8528 16.762C17.2496 16.3652 17.2496 15.7219 16.8528 15.3252L12.5636 11.0359L16.8525 6.74698C17.2493 6.35021 17.2493 5.70692 16.8525 5.31015ZM16.921 6.02856C16.921 6.22992 16.8441 6.43127 16.6905 6.5849L14.465 8.8104L12.2395 11.0359L12.2395 11.0359L16.6905 6.58493C16.8441 6.43129 16.921 6.22993 16.921 6.02856ZM5.34966 6.19087C5.37992 6.3354 5.45115 6.47307 5.56336 6.58528L10.014 11.0359L10.014 11.0359L5.56336 6.58524C5.45116 6.47304 5.37992 6.33539 5.34966 6.19087ZM5.35087 16.2121C5.38193 16.3541 5.45267 16.4891 5.56309 16.5996C5.87037 16.9068 6.36856 16.9068 6.67583 16.5996L11.1268 12.1486L15.578 16.5999C15.8853 16.9072 16.3835 16.9072 16.6908 16.5999C16.8498 16.4409 16.9265 16.2307 16.9209 16.0223C16.9265 16.2307 16.8498 16.4409 16.6908 16.5999C16.3835 16.9072 15.8853 16.9072 15.578 16.5999L11.1268 12.1487L6.67583 16.5996C6.36856 16.9069 5.87037 16.9069 5.56309 16.5996C5.45267 16.4892 5.38192 16.3541 5.35087 16.2121Z\"\n fill=\"#333333\"\n />\n </svg>\n </div>\n </div>\n <div\n className={cn(\n 'my-[32px] flex-1 overflow-auto overscroll-contain px-[24px] md:mb-[48px]',\n !title && 'mt-0',\n 'min-l:px-[32px]',\n scrollClassName\n )}\n onScroll={event => {\n const targetElement = event.target as HTMLDivElement\n\n if (targetElement.scrollHeight <= targetElement.clientHeight) {\n return\n }\n\n if (targetElement.scrollTop + targetElement.clientHeight >= targetElement.scrollHeight - 50) {\n onScrollEnd && onScrollEnd(event)\n }\n }}\n >\n {children}\n </div>\n </ReactModal>\n )\n}\n","export const ROUNDED_BRANDS = ['eufy', 'soundcore']\n","import { Button, Container, Heading, Picture, Text } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport { useCreditsContext } from '../context/provider'\n\ntype Img = {\n url: string\n alt: string\n width?: number\n height?: number\n}\nexport type CreditsBannerCopy = {\n pcImg: Img\n laptopImg: Img\n mobileImg: Img\n joinNow: string\n loginIn: string\n login: {\n title: string\n description: string\n }\n unLogin: {\n title: string\n description: string\n }\n}\n\nexport function CreditsBanner({ copy, id }: { copy: CreditsBannerCopy; id?: string }) {\n const { profile, openSignInPopup, openSignUpPopup } = useCreditsContext()\n const isLogin = profile ? Object.keys(profile).length !== 0 : false\n\n const displayName = profile?.first_name\n ? profile?.first_name + ' ' + profile?.last_name\n : profile?.email?.split('@')[0]\n\n const handleButtonClick = (buttonType: 'primary' | 'secondary') => {\n buttonType === 'primary' ? openSignUpPopup() : openSignInPopup()\n }\n\n // 计算图片比例,如果没有配置则使用默认值\n const pcAspectRatio =\n copy.pcImg?.width && copy.pcImg?.height ? `${copy.pcImg.width} / ${copy.pcImg.height}` : '1920 / 804'\n const laptopAspectRatio =\n copy.laptopImg?.width && copy.laptopImg?.height ? `${copy.laptopImg.width} / ${copy.laptopImg.height}` : '768 / 660'\n const mobileAspectRatio =\n copy.mobileImg?.width && copy.mobileImg?.height ? `${copy.mobileImg.width} / ${copy.mobileImg.height}` : '390 / 660'\n\n return (\n <>\n <div id={id} className=\" relative w-full\">\n <Picture\n className=\"credits-banner-image w-full\"\n style={{\n aspectRatio: pcAspectRatio,\n }}\n imgClassName=\"object-cover w-full h-full\"\n source={`${copy.pcImg?.url}, ${copy.laptopImg?.url} 1024, ${copy.mobileImg?.url} 768`}\n alt={copy.pcImg?.alt}\n loading=\"eager\"\n ></Picture>\n <style>\n {`\n @media (max-width: 1024px) and (min-width: 768px) {\n .credits-banner-image {\n aspect-ratio: ${laptopAspectRatio} !important;\n }\n }\n @media (max-width: 767px) {\n .credits-banner-image {\n aspect-ratio: ${mobileAspectRatio} !important;\n }\n }\n `}\n </style>\n {isLogin && (\n <div\n className=\"absolute inset-0 \"\n style={{\n background: 'linear-gradient(180deg, rgba(245, 245, 247, 0) 70.31%, #F5F5F7 100%)',\n }}\n ></div>\n )}\n\n <Container className=\"l:h-auto !absolute inset-0 mx-auto grid h-full\" asChild>\n <div className=\"grid grid-cols-12\">\n <div className=\"l:col-span-12 l:justify-start l:truncate l:pt-[32px] col-span-5 flex h-full flex-col justify-center text-[#1F2021]\">\n <Heading\n as=\"h1\"\n className=\"text-[48px] font-bold xl-xxl:text-[40px] l:text-[32px]\"\n html={isLogin ? copy.login.title?.replace('$name', displayName || '') : copy.unLogin.title}\n ></Heading>\n\n <Text\n size=\"3\"\n className=\"l:mt-[4px] l-xxl:text-[14px] mt-[16px]\"\n html={isLogin ? copy.login.description : copy.unLogin.description}\n ></Text>\n\n {!isLogin && (\n <div\n className={classNames(\n 'mt-[32px] grid w-fit grid-flow-col gap-[12px] l:mt-[24px]',\n isLogin && 'hidden'\n )}\n >\n <Button\n variant=\"secondary\"\n size=\"lg\"\n onClick={() => {\n handleButtonClick('primary')\n }}\n >\n {copy.joinNow}\n </Button>\n <Button\n variant=\"primary\"\n size=\"lg\"\n onClick={() => {\n handleButtonClick('secondary')\n }}\n >\n {copy.loginIn}\n </Button>\n </div>\n )}\n </div>\n </div>\n </Container>\n </div>\n </>\n )\n}\n","import 'swiper/css'\nimport 'swiper/css/grid'\nimport 'swiper/css/pagination'\n\nimport { Container, Heading } from '@anker-in/headless-ui'\nimport { useState } from 'react'\nimport { Grid, Pagination } from 'swiper/modules'\nimport { Swiper, SwiperSlide } from 'swiper/react'\n\nimport BenefitItem, { type BenefitItemCopy } from './BenefitItem'\nimport { useCreditsContext } from '../context/provider'\nimport { gaTrack, classNames as cn } from '@anker-in/lib'\n\nexport type CreditsBenefitsCopy = {\n title: string\n benefits: BenefitItemCopy[]\n bigIcon?: boolean\n cardBgColor?: string\n cardBorderColor?: string\n}\n\nexport const CreditsBenefits = ({ copy, id }: { copy: CreditsBenefitsCopy; id?: string }) => {\n const [activeNoteIndex, setActiveNoteIndex] = useState<number | null>(null)\n const { profile, gtm } = useCreditsContext()\n const handleClick = ({ item, index }: { item: BenefitItemCopy; index: number }) => {\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n member_active_status: profile?.activated ? 'active' : 'not active',\n event_parameters: {\n page_group: gtm.pageGroup,\n position: copy.title,\n button_name: item.text,\n info: '',\n },\n })\n if (activeNoteIndex === index) {\n setActiveNoteIndex(null)\n } else {\n setActiveNoteIndex(index)\n setTimeout(() => {\n setActiveNoteIndex(null)\n }, 5000)\n }\n }\n\n return (\n <Container id={id} className=\"!z-[30] bg-[#F5F5F7]\">\n <Heading as=\"h2\" size=\"4\" html={copy?.title} />\n <div className=\"mt-[24px] grid grid-cols-4 gap-[16px] l:hidden items-stretch\">\n {copy.benefits.map((item, index) => (\n <BenefitItem\n key={index}\n item={item}\n handleClick={handleClick}\n isNoteActive={activeNoteIndex === index}\n index={index}\n bigIcon={copy.bigIcon}\n cardBgColor={copy.cardBgColor}\n cardBorderColor={copy.cardBorderColor}\n />\n ))}\n </div>\n <div className=\"mt-[24px] hidden l:block\">\n <Swiper\n spaceBetween={16}\n slidesPerView={2}\n slidesPerGroup={2}\n grid={{\n rows: 2,\n fill: 'row',\n }}\n breakpoints={{\n 768: {\n slidesPerView: 3,\n slidesPerGroup: 3,\n },\n }}\n wrapperClass=\"!items-stretch\"\n modules={[Grid, Pagination]}\n pagination={{\n clickable: true,\n el: '#benefits-pagination',\n renderBullet(index, className) {\n return `<div class='${className} !flex justify-center size-[8px] rounded-full bg-[#D9D9D9] cursor-pointer items-center'>\n </div>`\n },\n }}\n >\n {copy.benefits.map((item, index) => (\n <SwiperSlide key={index} className={cn('!h-auto !flex', activeNoteIndex === index && '!z-[100]')}>\n <BenefitItem\n item={item}\n handleClick={handleClick}\n isNoteActive={activeNoteIndex === index}\n index={index}\n bigIcon={copy.bigIcon}\n cardBgColor={copy.cardBgColor}\n cardBorderColor={copy.cardBorderColor}\n />\n </SwiperSlide>\n ))}\n </Swiper>\n <div\n id=\"benefits-pagination\"\n className=\"mx-auto mt-[12px] grid !w-fit grid-flow-col [&_.swiper-pagination-bullet-active>div]:!bg-[#151515] \n [&_.swiper-pagination-bullet]:cursor-pointer [&_.swiper-pagination-bullet]:rounded-full\"\n ></div>\n </div>\n\n {activeNoteIndex && (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"fixed inset-0 z-10\"\n onClick={() => setActiveNoteIndex(null)}\n onKeyDown={e => e.key === 'Escape' && setActiveNoteIndex(null)}\n />\n )}\n </Container>\n )\n}\n","import { Heading, Picture, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport IconInfo from './IconInfo'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport interface BenefitItemCopy {\n icon: {\n alt: string\n url: string\n }\n text: string\n note?: string\n tag?: string\n}\nconst BenefitItem = ({\n item,\n handleClick,\n isNoteActive,\n index,\n bigIcon,\n cardBgColor,\n cardBorderColor,\n}: {\n item: BenefitItemCopy\n handleClick: ({ item, index }: { item: BenefitItemCopy; index: number }) => void\n isNoteActive: boolean\n index: number\n bigIcon?: boolean\n cardBgColor?: string\n cardBorderColor?: string\n}) => {\n const { brand, locale } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n // 德语和法语需要折行\n const shouldBreakWords = ['de', 'eu-de', 'fr', 'eu-fr'].includes(locale)\n\n // 根据 bigIcon 设置不同屏幕下的图标大小\n // 尺寸:≥1921px=64px, 1441-1920px=56px, 1025-1440px=20px, ≤1024px=48px\n const iconSizeClass = bigIcon\n ? 'mb-[16px] size-[64px] xl-xxl:size-[56px] xl:size-[48px] md:absolute md:bottom-[16px] md:right-[16px] md:mb-0'\n : 'mb-[16px] size-[31px] md:absolute md:bottom-[16px] md:right-[16px] md:mb-0'\n\n console.log('cardBgColor in BenefitItem', cardBgColor)\n // 背景色和边框色处理\n const cardStyle: React.CSSProperties = {}\n if (cardBgColor) {\n cardStyle.background = cardBgColor\n } else {\n cardStyle.background = 'linear-gradient(119.61deg, #FAFAFA 38.58%, #FFFFFF 63.73%, #F9FCFF 89.37%)'\n }\n if (cardBorderColor) {\n cardStyle.borderColor = cardBorderColor\n }\n\n return (\n <div\n className={cn(\n 'relative flex-1 flex flex-col rounded-[16px] border border-white px-[24px] pb-[26px] pt-[24px] md:min-h-[180px] md:p-[16px]',\n !rounded && 'rounded-none'\n )}\n style={cardStyle}\n >\n <div className=\"flex flex-col\">\n <Picture className={iconSizeClass} alt={item.icon?.alt} source={item.icon?.url} />\n <div className=\"flex items-center\">\n <Heading\n html={item.text}\n size=\"2\"\n className={cn('md-l:line-clamp-3', shouldBreakWords && 'break-words')}\n />\n {item.note && (\n <div\n role=\"button\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n className=\"relative mb-1 ml-[4px]\"\n onClick={() => handleClick({ item, index })}\n >\n <IconInfo />\n <div\n className={cn(\n 'absolute -bottom-[12px] left-[32px] z-10 w-[356px] -translate-x-full translate-y-full md:w-[276px]',\n isNoteActive ? 'block' : 'hidden'\n )}\n >\n <div\n className={cn(\n 'relative rounded-[10px] bg-[#6D6D6F] p-[16px] text-[14px] font-medium text-white shadow',\n !rounded && 'rounded-none'\n )}\n >\n <Text as=\"p\" size=\"2\" html={item.note} className=\"desktop:text-[18px]\" />\n <div\n className={cn(\n 'absolute -top-[10px] right-[9px] mb-2 size-[16px] origin-top-left rotate-45 transform rounded-[2px] bg-[#6D6D6F]',\n !rounded && 'rounded-none'\n )}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n {item.tag && <Text as=\"div\" html={item.tag} className=\"mt-[2px] text-[16px] font-bold text-[#6D6D6F]\" />}\n </div>\n </div>\n )\n}\n\nexport default BenefitItem\n","export const IconInfo = () => {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n className='size-[20px] cursor-pointer [&_svg]:size-full'\n width='18'\n height='18'\n viewBox='0 0 18 18'\n fill='none'\n >\n <path\n d='M9 1.125C11.1744 1.125 13.1441 2.00737 14.5684 3.43164C15.9926 4.85593 16.875 6.8256 16.875 9C16.875 11.1744 15.9926 13.1441 14.5684 14.5684C13.1441 15.9926 11.1744 16.875 9 16.875C6.8256 16.875 4.85593 15.9926 3.43164 14.5684C2.00737 13.1441 1.125 11.1744 1.125 9C1.125 6.8256 2.00738 4.85593 3.43164 3.43164C4.85593 2.00738 6.8256 1.125 9 1.125ZM9 2.625C7.23941 2.625 5.64668 3.33772 4.49219 4.49219C3.33772 5.64668 2.625 7.23941 2.625 9C2.625 10.7606 3.33772 12.3533 4.49219 13.5078C5.64668 14.6623 7.23941 15.375 9 15.375C10.7606 15.375 12.3533 14.6623 13.5078 13.5078C14.6623 12.3533 15.375 10.7606 15.375 9C15.375 7.23941 14.6623 5.64668 13.5078 4.49219C12.3533 3.33772 10.7606 2.625 9 2.625Z'\n fill='#6D6D6F'\n />\n <path\n d='M9 11.583C9.51777 11.583 9.9375 12.0027 9.9375 12.5205V12.5596C9.93718 13.0771 9.51757 13.4971 9 13.4971C8.48243 13.4971 8.06282 13.0771 8.0625 12.5596V12.5205C8.0625 12.0027 8.48223 11.583 9 11.583ZM8.99902 4.5C9.51671 4.49959 9.93696 4.91886 9.9375 5.43652L9.94043 9.37109C9.94084 9.88884 9.52165 10.3091 9.00391 10.3096C8.48616 10.31 8.06587 9.89079 8.06543 9.37305L8.0625 5.43848C8.06209 4.92079 8.48136 4.50054 8.99902 4.5Z'\n fill='#6D6D6F'\n />\n </svg>\n )\n}\n\nexport default IconInfo\n","import { Button, Container, Text } from '@anker-in/headless-ui'\n\nimport { useCallback, useState } from 'react'\nimport { useCreditsContext } from '../context/provider'\nimport { numberFormat } from '../context/utils'\nimport ActivitiesModal from '../modal/activitiesModal'\nimport MyRewardsModal from '../modal/MyRewardsModal'\nimport { gaNormalClick, classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\ntype ButtonConfig = {\n text: string\n type: 'activities' | 'rewards'\n}\nexport type CreditsInfoCardCopy = {\n balanceLabel: string\n comingSoonLabel: string\n comingSoonTips: string\n buttons: ButtonConfig[]\n}\n\nexport function CreditsInfoCard({ copy, id }: { copy: CreditsInfoCardCopy; id?: string }) {\n const [openActivities, setOpenActivities] = useState(false)\n const [openRewards, setOpenRewards] = useState(false)\n const [hover, setHover] = useState<boolean>(false)\n const { creditInfo, pageCommon } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const handleButtonClick = useCallback((buttonConfig: ButtonConfig) => {\n gaNormalClick({ position: 'info_card', label: buttonConfig.text })\n\n if (buttonConfig.type) {\n switch (buttonConfig.type) {\n case 'activities':\n setOpenActivities(true)\n break\n case 'rewards':\n setOpenRewards(true)\n break\n }\n }\n }, [])\n\n return (\n <Container asChild id={id} className=\"-mb-[86px] -translate-y-[86px] x:-mb-[30px] x:-translate-y-[30px]\">\n <div\n className={cn(\n 'mx-auto flex justify-between items-center rounded-[12px] border border-white px-[24px] py-[40px]',\n 'l:flex-col l:items-start',\n 'min-l:px-[48px]',\n 'min-xl:px-[100px]',\n !rounded && 'rounded-none'\n )}\n style={{\n background:\n 'linear-gradient(119.61deg, rgba(250, 250, 250, 0.6) 38.58%, rgba(255, 255, 255, 0.6) 63.73%, rgba(249, 252, 255, 0.6) 89.37%)',\n backdropFilter: 'blur(8px)',\n }}\n >\n <div\n className={cn(\n 'grid grid-cols-2 gap-[24px] font-bold l:w-full md:grid-cols-1 md:flex-col md:gap-[16px] min-md:items-center'\n )}\n >\n <div className=\"mr-[80px] md:mr-[0] md:flex-1 md-xl:mr-[64px]\">\n <div\n className={cn(\n 'mb-[24px] text-[14px] font-bold l:mb-[6px] xl:text-[16px] min-md:text-[18px] l-xl:mb-[16px]'\n )}\n >\n {copy.balanceLabel}\n </div>\n <div className=\"flex items-baseline\">\n <div\n className={cn(\n 'mr-[8px] text-[36px] font-extrabold text-brand-color-1',\n 'min-md:text-[44px]',\n 'min-xl:text-[56px]'\n )}\n >\n {creditInfo ? numberFormat(creditInfo.available_credit) : 0}\n </div>\n <div className=\"text-[16px]\">{pageCommon?.pointUnit}</div>\n </div>\n </div>\n <div className=\"w-fit md:flex-1\">\n <div className={cn('mb-[24px] flex text-[18px] l:mb-[6px] l:text-[14px] l-xl:mb-[16px]')}>\n <Text className=\"text-[14px] font-bold xl:text-[16px] min-md:text-[18px]\" html={copy.comingSoonLabel} />\n {copy.comingSoonTips && (\n <div className=\"group relative ml-[4px] flex cursor-pointer items-start\">\n <Text\n as=\"div\"\n html={pageCommon?.infoIcon}\n className=\"size-[18px] cursor-pointer [&_svg]:size-full\"\n onClick={() => {\n if (hover) {\n setHover(false)\n } else {\n setHover(true)\n setTimeout(() => {\n setHover(false)\n }, 5000)\n }\n }}\n />\n <div\n className={cn(\n 'absolute -bottom-[12px] -left-[32px] z-10 w-[356px] translate-y-full md:w-[276px]',\n hover ? 'block' : 'hidden'\n )}\n >\n <div\n className={cn(\n 'relative rounded-[10px] bg-[#6D6D6F] p-[16px] text-[14px] font-medium text-white shadow',\n !rounded && 'rounded-none'\n )}\n >\n <Text size=\"2\" html={copy.comingSoonTips} className=\"desktop:text-[18px]\" />\n <div\n className={cn(\n 'absolute -top-[10px] left-[40px] mb-2 size-[16px] origin-top-left rotate-45 transform rounded-[2px] bg-[#6D6D6F]',\n !rounded && 'rounded-none'\n )}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n <div className=\"flex items-baseline \">\n <div className={cn('mr-[8px] text-[36px] font-extrabold', 'min-l:text-[44px]', 'min-xl:text-[56px]')}>\n {creditInfo ? numberFormat(creditInfo.pending_credit) : 0}\n </div>\n <div className=\"text-[16px]\">{pageCommon?.pointUnit}</div>\n </div>\n </div>\n </div>\n <div\n className={cn(\n 'grid w-fit md:w-full l:mt-[32px] l:gap-[12px] gap-[16px] l:pl-0 l:pl-[48px] md-l:grid-cols-2'\n )}\n >\n {copy.buttons?.map((item, index) => (\n <Button\n key={index}\n variant={index === 0 ? 'secondary' : 'primary'}\n size=\"lg\"\n className=\"min-w-[156px] laptop:min-w-[189px]\"\n onClick={() => {\n handleButtonClick(item)\n }}\n >\n {item.text}\n </Button>\n ))}\n </div>\n\n {pageCommon?.activitiesModal && (\n <ActivitiesModal\n isOpen={openActivities}\n data={pageCommon?.activitiesModal}\n onClose={() => {\n setOpenActivities(false)\n }}\n />\n )}\n {pageCommon?.rewardsModal && (\n <MyRewardsModal\n isOpen={openRewards}\n data={pageCommon?.rewardsModal}\n onClose={() => {\n setOpenRewards(false)\n }}\n ></MyRewardsModal>\n )}\n </div>\n {hover && (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"fixed inset-0 z-10\"\n onClick={() => setHover(false)}\n onKeyDown={e => e.key === 'Escape' && setHover(false)}\n />\n )}\n </Container>\n )\n}\n","import Cookies from 'js-cookie'\nimport { PRICE_SYMBOL } from './const'\n\nexport function getAlpcPath(locale = '') {\n let isEU = false\n const alpcEUCookie = Cookies.get('alpcEU')\n if (alpcEUCookie === undefined || alpcEUCookie === '') {\n if (['de', 'eu-de', 'eu', 'eu-en', 'uk', 'fr', 'fra'].includes(locale)) {\n isEU = true\n }\n } else {\n let alpcEU = Number(alpcEUCookie)\n if (alpcEU) {\n isEU = true\n }\n }\n\n if (isEU) {\n return '/api/multipass/alpc-eu'\n }\n\n return '/api/multipass/alpc'\n}\n\nexport function numberFormat(num: number = 0) {\n if (typeof Intl === 'undefined') {\n return num\n }\n\n return new Intl.NumberFormat().format(num)\n}\n\nexport const emailValidate = (email: any) => {\n return /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/.test(\n email\n )\n}\n\nexport const languageTerritory = (locale: string) =>\n // https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_territory_information.html\n ({\n us: 'en-us',\n uk: 'en-gb',\n ca: 'en-ca',\n au: 'en-au',\n nz: 'en-nz',\n eu: 'en-eu',\n pl: 'pl-pl',\n fr: 'fr-fr',\n de: 'de-de',\n vn: 'vi-vn',\n sg: 'en-sg',\n 'ae-en': 'en-ae',\n plus: 'en-us',\n cl: 'es-cl',\n es: 'es-es',\n // Nordic countries\n se: 'en-se',\n dk: 'en-dk',\n is: 'en-is',\n no: 'en-no',\n fi: 'en-fi',\n })[locale] || ''\n\nexport function formatPrice({\n amount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros = false,\n}: {\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n}) {\n const formatCurrency = new Intl.NumberFormat(languageTerritory(locale) || locale, {\n style: 'currency',\n currency: currencyCode || 'USD',\n minimumFractionDigits: maximumFractionDigits === 0 ? 0 : minimumFractionDigits,\n maximumFractionDigits,\n })\n\n let formattedValue = formatCurrency.format(amount)\n\n if (['eu-de', 'eu-en', 'de', 'eu'].includes(locale)) {\n formattedValue = formattedValue?.toString()?.replace(/[\\s]/g, '')\n }\n\n if (removeTrailingZeros) {\n // Adjust the regex to match comma as decimal separator\n formattedValue = formattedValue\n .replace(/(\\.\\d*?[1-9])0+\\b/, '$1')\n .replace(/\\.0+\\b/, '')\n .replace(/(\\,\\d*?[1-9])0+\\b/, '$1')\n .replace(/\\,0+\\b/, '')\n }\n\n return formattedValue\n}\n\nexport function formatVariantPrice({\n amount,\n baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n}: {\n baseAmount: number\n amount: number\n currencyCode: string\n locale: string\n maximumFractionDigits?: number\n minimumFractionDigits?: number\n removeTrailingZeros?: boolean\n}) {\n if (typeof Intl === 'undefined') {\n return {\n price: `${PRICE_SYMBOL[locale as keyof typeof PRICE_SYMBOL]}${amount}`,\n basePrice: `${PRICE_SYMBOL[locale as keyof typeof PRICE_SYMBOL]}${baseAmount}`,\n discount: `${PRICE_SYMBOL[locale as keyof typeof PRICE_SYMBOL]}${baseAmount - amount || 0}`,\n }\n }\n\n const hasDiscount = baseAmount > amount\n const formatDiscount = new Intl.NumberFormat(languageTerritory(locale), {\n style: 'percent',\n })\n const discount = hasDiscount ? formatDiscount.format((baseAmount - amount) / baseAmount) : null\n\n const price = formatPrice({ amount, currencyCode, locale, removeTrailingZeros })\n const basePrice = hasDiscount\n ? formatPrice({\n amount: baseAmount,\n currencyCode,\n locale,\n maximumFractionDigits,\n minimumFractionDigits,\n removeTrailingZeros,\n })\n : undefined\n\n return { price, basePrice, discount }\n}\n\n/**\n * 提取 variant id,去掉 gid://shopify/ProductVariant/ 前缀\n */\nexport function extractVariantId(id: string | number | undefined): string | null {\n if (!id) return null\n const idStr = typeof id === 'number' ? id.toString() : id\n return idStr.replace('gid://shopify/ProductVariant/', '')\n}\n","export enum CreditType {\n All = 0,\n Earned = 1,\n Deducted = 2,\n Expired = 3,\n}\n\nexport enum ConsumeType {\n Coupon = 'coupon',\n GiftCard = 'giftCard',\n GoGift = 'goGift',\n Product = 'product',\n ShippingCoupon = 'shippingCoupon',\n}\n\nexport enum AlpcConsumeType {\n Coupon = 1,\n Product = 2,\n}\n\nexport enum TaskType {\n Program = 1,\n Operation = 2,\n Redeem = 3,\n}\n\nexport enum DTC_TASK_TYPE {\n FirstPurchase = 'firstPurchase',\n UploadReceipt = 'uploadReceipt',\n Shopping = 'shopping',\n}\n\nexport enum TaskSubType {\n Activation = 1, // 激活事件\n UpdateName = 2, // 完善姓名\n UpdatePhone = 3, // 更新手机号\n UpdateBirthday = 4, // 更新生日\n Subscription = 5, // 订阅\n UpadteAppName = 7, // 完善APP姓名\n Refund = 3000, // 购物送积分任务退款\n ProductUnApproved = 5000, // 兑换商品审核不通过\n}\n\nexport enum CouponType {\n FixedMount = 'fixed_amount',\n Percent = 'percent',\n}\n\nexport enum RewardType {\n Received = 0,\n Pending = 1,\n ApproveSuccess = 2,\n ApproveFail = 3,\n Unfulfilled = 4,\n Fulfilled = 5,\n Failed = 6,\n}\n\nexport enum AlpcErrorCode {\n CodeLpcRedeemFailed = 180001,\n //user not found\n CodeLpcUserNotFound = 180002,\n //credit rule not found\n CodeLpcCreditRuleNotFound = 180003,\n //unknown error\n CodeLpcUnknownError = 180004,\n // not enough credits\n CodeLpcNotEnoughCredits = 180005,\n // user migrate\n CodeLpcUserMigrate = 180006,\n // 库存不足\n CodeLpcRuleInventoryNotEnough = 180007,\n // 兑换次数限制\n CodeLpcShopifyCouponRuleRedeemLimit = 180009,\n // 跨区兑换错误(非欧兑换欧洲的)\n CodeCrossSiteError = 180011,\n}\n\nexport const ALPC_COUNTRY_MAP = new Map<string, string>([\n ['eu-en', 'eu'],\n ['eu-de', 'de'],\n])\n\nexport enum ApprovalStatus {\n Pending = 0,\n Success = 1,\n Failed = 2,\n DoubleConfirm = 3,\n}\n\nexport const PRICE_SYMBOL = {\n us: '$',\n uk: '£',\n ca: '$',\n eu: '€',\n pl: 'zł',\n fr: '€',\n de: '€',\n vn: '₫',\n cl: '$',\n sg: '$',\n ae: 'AED',\n es: '€',\n}\n","import { useCallback, useMemo, useState } from 'react'\nimport { useCreditsContext } from '../context/provider'\nimport { CreditType, DTC_TASK_TYPE, TaskSubType, TaskType } from '../context/const'\nimport useActivities from '../context/hooks/useActivities'\nimport type { Task } from '../context/response'\nimport { CreditsModalContainer, type ModalContainerProps } from './modalContainer'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport LoadingDots from './loadingDots'\nimport { Picture, Text } from '@anker-in/headless-ui'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport dayjs from 'dayjs'\n\nexport interface MyActivitiesMetafields {\n title: string\n tips: string\n allTab: string\n earnedTab: string\n deductedTab: string\n expiredTab: string\n activationTask: string\n updateNameTask: string\n updatePhoneTask: string\n updateBirthdayTask: string\n updateAppNameTask: string\n subscriptionTask: string\n refundTask: string\n productUnApprovedTask: string\n pendingTips?: string\n pendingTips2?: string\n firstPurchaseTask: string\n uploadReceiptTask: string\n shoppingTask: string\n emptyListImage: {\n url: string\n alt?: string\n }\n emptyListLabel: string\n}\n\ninterface ActivitiesModalProps extends ModalContainerProps {\n data: MyActivitiesMetafields\n}\n\nfunction ActivitiesModal({ data, ...props }: ActivitiesModalProps) {\n const [page, setPage] = useState(1)\n const { taskIdToTypeMapping } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const myActivitiesOptions = useMemo(() => {\n return {\n page: props.isOpen ? page : 0,\n pageSize: 1000,\n }\n }, [props.isOpen, page])\n\n const [activeTab, setActiveTab] = useState(CreditType.All)\n const tabs = useMemo(() => {\n const tabs = [\n {\n title: data.allTab,\n type: CreditType.All,\n },\n {\n title: data.earnedTab,\n type: CreditType.Earned,\n },\n {\n title: data.deductedTab,\n type: CreditType.Deducted,\n },\n ]\n if (data.expiredTab) {\n tabs.push({\n title: data.expiredTab,\n type: CreditType.Expired,\n })\n }\n return tabs\n }, [data])\n\n const { activities = [], canNext, isLoading } = useActivities(myActivitiesOptions)\n\n const list = useMemo(() => {\n const taskNameMap = {\n [TaskSubType.Activation]: data.activationTask,\n [TaskSubType.UpdateName]: data.updateNameTask,\n [TaskSubType.UpdatePhone]: data.updatePhoneTask,\n [TaskSubType.UpdateBirthday]: data.updateBirthdayTask,\n [TaskSubType.Subscription]: data.subscriptionTask,\n [TaskSubType.UpadteAppName]: data.updateAppNameTask,\n [TaskSubType.Refund]: data.refundTask,\n [TaskSubType.ProductUnApproved]: data.productUnApprovedTask,\n }\n const dtcTaskTypeToNameMap = {\n [DTC_TASK_TYPE.FirstPurchase]: data.firstPurchaseTask,\n [DTC_TASK_TYPE.UploadReceipt]: data.uploadReceiptTask,\n [DTC_TASK_TYPE.Shopping]: data.shoppingTask,\n }\n\n function getTitle(item: Task) {\n if (\n item.task_type === TaskType.Redeem &&\n item.task_sub_type === TaskSubType.ProductUnApproved &&\n data.productUnApprovedTask\n ) {\n // 新增的部分任务都使用了 alpc 同一个任务类型,需要用任务 id 来区分\n return item.task_name.replace('Refund', data.productUnApprovedTask)\n } else if (taskIdToTypeMapping?.[String(item.task_rule_id)]) {\n return dtcTaskTypeToNameMap[taskIdToTypeMapping?.[String(item.task_rule_id)]]\n } else {\n return taskNameMap[item.task_sub_type] || item.task_name\n }\n }\n\n const all = activities.map(item => ({\n title: getTitle(item),\n date: new Date(item.create_time * 1000),\n value: item.credit,\n type: item.credit_type,\n pending_time: item.pending_time,\n credit_type: item.credit_type,\n status: item.status,\n }))\n\n let filtered = all || []\n if (activeTab === CreditType.Earned) {\n filtered = filtered?.filter(item => item.type === 1)\n } else if (activeTab === CreditType.Deducted) {\n filtered = filtered?.filter(item => item.type === 2 && item.status !== 3)\n } else if (activeTab === CreditType.Expired) {\n filtered = filtered?.filter(item => item.type === 2 && item.status === 3)\n }\n\n return filtered.map(item => {\n let { value, ...otherItem } = item\n if (item.type === CreditType.Deducted && value > 0) {\n value = -value\n }\n\n return {\n value,\n ...otherItem,\n }\n })\n }, [\n data.activationTask,\n data.updateNameTask,\n data.updatePhoneTask,\n data.updateBirthdayTask,\n data.subscriptionTask,\n data.updateAppNameTask,\n data.refundTask,\n data.productUnApprovedTask,\n data.firstPurchaseTask,\n data.uploadReceiptTask,\n data.shoppingTask,\n activities,\n activeTab,\n taskIdToTypeMapping,\n ])\n\n const handleScrollEnd = useCallback(() => {\n if (!canNext) {\n return\n }\n setPage(page + 1)\n }, [page, canNext])\n\n return (\n <CreditsModalContainer\n title={data.title}\n className={cn('h-[800px] w-[640px]')}\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n scrollClassName=\"\"\n {...props}\n onScrollEnd={handleScrollEnd}\n >\n <div className=\"w-full sticky top-0 bg-white z-10 pb-[24px] overflow-x-auto\">\n <Tabs\n align=\"left\"\n shape={rounded ? 'rounded' : 'square'}\n value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(Number(value))\n }}\n className=\"\"\n >\n <TabsList>\n {tabs.map(tab => (\n <TabsTrigger key={tab.type} value={tab.type.toString()}>\n {tab.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </div>\n\n <div className=\"grid gap-[18px] overflow-auto overscroll-contain md:gap-[12px]\">\n {isLoading && (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <LoadingDots />\n </div>\n )}\n\n {!isLoading && (\n <>\n {list.length > 0 ? (\n list.map((item, index) => (\n <div\n key={index}\n className={cn(\n 'flex h-fit items-center justify-between rounded-[8px] bg-[#f2f0f1] px-[16px] py-[20px] text-[16px]',\n !rounded && 'rounded-none'\n )}\n >\n <div className=\"grid gap-[6px]\">\n <div className=\"font-bold\">{item.title}</div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {dayjs(item.date).format('YYYY-MM-DD HH:mm').toString()}\n </div>\n {!data.pendingTips && (\n <div\n className={`hidden text-[14px] font-semibold text-[#777] ${item.status === 2 && item.credit_type === 1 ? '!flex' : ''}`}\n >\n <Text html={data.pendingTips} />\n <span>{dayjs.unix(item.pending_time).add(1, 'day').format('YYYY-MM-DD')}</span>\n {data.pendingTips2 && <Text html={data.pendingTips2} />}\n </div>\n )}\n </div>\n <div\n className={cn(\n 'font-bold',\n item.value >= 0 || item.credit_type === CreditType.Expired ? 'text-[#52C41A]' : 'text-[#F84D4F]'\n )}\n >\n {item.value >= 0 && '+'}\n {item.value}\n </div>\n </div>\n ))\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <Picture\n className=\"mb-[16px] h-[120px] w-[160px]\"\n source={data?.emptyListImage?.url}\n alt={data?.emptyListImage?.alt || 'empty list image'}\n ></Picture>\n <div className=\"leading-1.4 text-[16px] font-semibold\">{data?.emptyListLabel}</div>\n </div>\n )}\n </>\n )}\n </div>\n {/* 积分到账时间提醒 */}\n {list.length > 0 && <div className=\"mt-[12px] pb-[24px] text-[14px] font-semibold text-[#999]\">{data.tips}</div>}\n </CreditsModalContainer>\n )\n}\n\nexport default ActivitiesModal\n","import { useCallback, useEffect, useState } from 'react'\n\nimport { useAlpcMutation } from './useAlpcFetch'\nimport type { CreditLogResponse } from '../response'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useActivities({ page, pageSize, options = {} }: { page: number; pageSize: number; options?: any }) {\n const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()\n const { brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n const [activities, setActivities] = useState<CreditLogResponse[]>([])\n const [total, setTotal] = useState(0)\n\n const [currentPage, setCurrentPage] = useState(0)\n\n const { isMutating: isLoading, trigger } = useAlpcMutation<\n {\n data: {\n total: number\n creditLogs: CreditLogResponse[]\n }\n },\n {\n page: number\n page_size: number\n user_id: string\n }\n >({\n url: `/v1/credit/log`,\n initData: {\n brand,\n },\n })\n\n const getActivities = useCallback(async () => {\n const params = {\n page: page,\n page_size: pageSize,\n user_id: profile?.user_id,\n ...options,\n }\n\n trigger(params, {\n onSuccess(responseData) {\n setCurrentPage(page)\n setTotal(responseData?.data?.total)\n setActivities(activities.concat(responseData?.data?.creditLogs || []))\n },\n })\n }, [activities, profile, page, pageSize, options, trigger])\n\n useEffect(() => {\n if (isLoadingProfile || !profile || isLoading) {\n return\n }\n\n if (page !== currentPage && page) {\n getActivities()\n }\n }, [getActivities, isLoadingProfile, isLoading, profile, page, currentPage])\n\n return {\n activities,\n isLoading,\n total,\n canNext: total > activities.length && !isLoading,\n }\n}\n\nexport default useActivities\n","import Cookies from 'js-cookie'\nimport { useCallback, useRef, useState } from 'react'\nimport useSWR, { type SWRConfiguration } from 'swr'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nimport { getAlpcPath } from '../utils'\nimport { useCreditsContext } from '../provider'\n\ninterface UseAlpcFetchOptionsSwrOptions<TData, Error> extends SWRConfiguration<TData, Error> {\n enable?: boolean\n}\n\ninterface FetchOptions extends RequestInit {\n queryKey: [string, Record<string, any>]\n data?: Record<string, any>\n}\n\ninterface MutationOptions extends RequestInit {\n url: string\n initData: Record<string, any>\n}\n\ninterface FetcherOptions {\n url: string\n locale: string\n fetchOptions: RequestInit\n onReAuth: () => Promise<boolean>\n onUnAuth: () => void\n}\n\nlet reAuthPromise: Promise<boolean> | undefined\n\ntype Fetcher<TData, TBody> = (url: string, data: { arg: TBody }) => Promise<TData>\n\nconst fetcher = (options: FetcherOptions) => {\n return fetch(getAlpcPath(options.locale) + options.url, options.fetchOptions).then(async response => {\n if (response.status < 300) {\n const responseData = await response.json()\n return responseData.data\n }\n\n // 错误处理\n if (response.status === 401) {\n // 重新登录尝试\n if (options.onReAuth) {\n if (!reAuthPromise) {\n reAuthPromise = options.onReAuth()\n }\n\n const result = await reAuthPromise\n\n reAuthPromise = undefined\n\n if (result) {\n // 跨区重新登录后需要替换区域标志,所以不能用最开始请求的那个链接\n return fetch(getAlpcPath(options.locale) + options.url, options.fetchOptions).then(async response => {\n if (response.status < 300) {\n const responseData = await response.json()\n return responseData.data\n }\n\n if (response.status === 401) {\n if (options.onUnAuth) {\n options.onUnAuth()\n }\n return\n }\n })\n } else {\n if (options.onUnAuth) {\n options.onUnAuth()\n }\n return\n }\n }\n }\n })\n}\n\nconst reAuth = async (locale: string, retry: boolean, brand: string) => {\n let reloginResponse = await fetch(`${getAlpcPath(locale)}/cloud/login`, {\n method: 'POST',\n })\n let reloginResponseData = await reloginResponse.json()\n\n if (reloginResponse!.status < 300 && !retry) {\n if (reloginResponseData?.data?.code === 27004) {\n // 跨区登录错误\n const alpcEUCookie = Cookies.get('alpcEU')\n\n if (Number(alpcEUCookie) === 1) {\n Cookies.set('alpcEU', '0', {\n expires: 30,\n domain: `.${brand}.com`,\n })\n } else {\n Cookies.set('alpcEU', '1', {\n expires: 30,\n domain: `.${brand}.com`,\n })\n }\n\n // 重新尝试换区登录\n reloginResponse = await fetch(`${getAlpcPath(locale)}/cloud/login`, {\n method: 'POST',\n })\n reloginResponseData = await reloginResponse.json()\n\n if (reloginResponse.status > 300) {\n return false\n }\n }\n }\n if (!reloginResponseData?.data?.code) {\n // 重新登录成功\n return true\n }\n\n return false\n}\n\nexport interface UseMutationConfig<TData> {\n onSuccess?: (response: TData) => any\n onError?: (error: Error) => any\n}\n\nconst useMutation = <TData, TBody>(\n url: string,\n fetcher: Fetcher<TData, TBody>,\n mutationConfig: UseMutationConfig<TData> = {}\n) => {\n const innerMutating = useRef<boolean>(false)\n\n const [data, setData] = useState<TData>()\n const [isMutating, setIsMutating] = useState(false)\n\n const urlRef = useRef(url)\n const fetcherRef = useRef(fetcher)\n const configRef = useRef(mutationConfig)\n\n const trigger = useCallback(\n async (fetchData: TBody, opts: UseMutationConfig<TData> = {}) => {\n if (innerMutating.current) {\n return\n }\n\n innerMutating.current = true\n setIsMutating(true)\n\n const config = {\n ...configRef.current,\n ...opts,\n }\n\n const { onSuccess, onError } = config || {}\n\n try {\n const fetchResult = await fetcherRef.current(urlRef.current, {\n arg: fetchData,\n })\n setData(fetchResult)\n\n setIsMutating(false)\n innerMutating.current = false\n\n if (onSuccess) {\n onSuccess(fetchResult)\n }\n return fetchResult\n } catch (err: any) {\n setIsMutating(false)\n innerMutating.current = false\n\n if (onError) {\n onError(err)\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n )\n\n return {\n isMutating,\n trigger,\n data,\n }\n}\n\nexport const useAlpcFetch = <TData>(\n options: FetchOptions,\n swrOptions?: UseAlpcFetchOptionsSwrOptions<TData, Error>\n) => {\n const [retry, setRetry] = useState(false)\n const { removeProfile, alpcBrand } = useCreditsContext()\n\n const { enable, ...otherSwrOptions } = swrOptions || {}\n\n const { locale = '', brand: headlessBrand } = useHeadlessContext()\n // 优先使用 creditsContext 中的 alpcBrand,如果没有则使用 headlessConfig 中的 brand\n const brand = alpcBrand || headlessBrand\n\n const { queryKey = [], body: fetchBody = {}, headers, ...fetchOptions } = options\n const fetchEnable = enable ?? true\n\n const [url, requestBody] = queryKey\n\n const context = useSWR<TData>(\n [url, requestBody],\n !fetchEnable\n ? null\n : ([requestUrl, data]: [string, Record<string, any>]) =>\n fetcher({\n url: requestUrl,\n locale,\n fetchOptions: {\n method: 'POST',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n body: JSON.stringify({\n ...fetchBody,\n ...data,\n }),\n ...fetchOptions,\n },\n onReAuth: async () => {\n const result = await reAuth(locale, retry, brand)\n\n if (result) {\n setRetry(true)\n return true\n }\n\n return false\n },\n onUnAuth() {\n // 失败后退出登录\n removeProfile()\n },\n }),\n {\n revalidateOnFocus: false,\n ...otherSwrOptions,\n }\n )\n\n return context\n}\n\nexport const useAlpcMutation = <TData, TBody>(options: MutationOptions, mutationOptions?: UseMutationConfig<TData>) => {\n const [retry, setRetry] = useState(false)\n const { removeProfile, alpcBrand } = useCreditsContext()\n\n const { locale = '', brand: headlessBrand } = useHeadlessContext()\n // 优先使用 creditsContext 中的 alpcBrand,如果没有则使用 headlessConfig 中的 brand\n const brand = alpcBrand || headlessBrand\n\n const { url, initData, headers, ...fetchOptions } = options\n\n const context = useMutation<TData, TBody>(\n url,\n (requestUrl, data: { arg: TBody }) =>\n fetcher({\n url: requestUrl,\n locale,\n fetchOptions: {\n method: 'POST',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n ...fetchOptions,\n body: JSON.stringify({\n ...initData,\n ...data.arg,\n }),\n },\n onReAuth: async () => {\n const result = await reAuth(locale, retry, brand)\n\n if (result) {\n setRetry(true)\n return true\n }\n\n return false\n },\n onUnAuth() {\n // 失败后退出登录\n removeProfile()\n },\n }),\n mutationOptions\n )\n\n return context\n}\n","import classNames from 'classnames'\nimport { FC } from 'react'\n\ninterface LoadingProps {\n className?: string\n}\n\nconst LoadingDots: FC<LoadingProps> = props => {\n const { className } = props\n return (\n <span className={classNames('inline-flex min-h-[19px] items-center text-center leading-7', className)}>\n <span className=\"animate-blink mx-0.5 h-2 w-2 rounded-full bg-current\" key={`dot_1`} />\n <span className=\"animate-blink mx-0.5 h-2 w-2 rounded-full bg-current [animation-delay:0.2s]\" key={`dot_2`} />\n <span className=\"animate-blink mx-0.5 h-2 w-2 rounded-full bg-current [animation-delay:0.4s]\" key={`dot_3`} />\n </span>\n )\n}\n\nexport default LoadingDots\n","import { Tabs, TabsList, TabsTrigger, Picture } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport clipboard from 'copy-to-clipboard'\nimport dayjs from 'dayjs'\nimport { useCallback, useMemo, useState } from 'react'\n\nimport { ApprovalStatus, AlpcConsumeType, RewardType } from '../context/const'\nimport { CreditsModalContainer, type ModalContainerProps } from './modalContainer'\nimport Tip from './tip'\nimport LoadingDots from './loadingDots'\nimport useMyRewards from '../context/hooks/useMyRewards'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport interface MyRewardsMetafields {\n title: string\n orderNumberLabel: string\n valueLabel: string\n receivedLabel: string\n failedLabel: string\n approveSuccessLabel: string\n couponTab: string\n productTab: string\n pendingLabel: string\n unfulfilledLabel: string\n fulfilledLabel: string\n confirmedTip: string\n pendingTip: string\n processingTip: string\n ShippedTip: string\n emptyListLabel: string\n pointUnit: string\n code: string\n copied: string\n copy: string\n emptyListImage: {\n url: string\n alt?: string\n }\n}\ninterface MyRewardsModalProps extends ModalContainerProps {\n data: MyRewardsMetafields\n}\n\nfunction MyRewardsModal({ data, ...props }: MyRewardsModalProps) {\n const [activeTab, setActiveTab] = useState(AlpcConsumeType.Coupon)\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const [couponPage, setCouponPage] = useState(1)\n const [productPage, setProductPage] = useState(1)\n const [copied, setCopied] = useState(-1)\n\n const tabs = useMemo(() => {\n const availableTabs: { title: string; type: number }[] = []\n\n if (data.couponTab) {\n availableTabs.push({\n title: data.couponTab,\n type: AlpcConsumeType.Coupon,\n })\n }\n\n if (data.productTab) {\n availableTabs.push({\n title: data.productTab,\n type: AlpcConsumeType.Product,\n })\n }\n\n return availableTabs\n }, [data.couponTab, data.productTab])\n\n const myProductRewardsOptions = useMemo(() => {\n return {\n page: props.isOpen ? productPage : 0,\n pageSize: 1000,\n consumeType: AlpcConsumeType.Product,\n }\n }, [props.isOpen, productPage])\n const myCouponRewardsOptions = useMemo(() => {\n return {\n page: props.isOpen ? couponPage : 0,\n pageSize: 1000,\n consumeType: AlpcConsumeType.Coupon,\n }\n }, [props.isOpen, couponPage])\n\n const {\n myRewards: myCouponRewards = [],\n canNext: couponCanNext,\n isLoading: couponIsLoading,\n } = useMyRewards(myCouponRewardsOptions)\n const {\n myRewards: myProductRewards = [],\n canNext: productCanNext,\n isLoading: productIsLoading,\n } = useMyRewards(myProductRewardsOptions)\n\n const list = useMemo(() => {\n if (activeTab === AlpcConsumeType.Coupon) {\n return myCouponRewards.map(item => ({\n title: item.goods_title,\n value: item.consume_credits,\n type: RewardType.Received,\n date: new Date(item.create_time * 1000),\n couponCode: item.coupon_code,\n orderNumber: '',\n }))\n }\n\n if (activeTab === AlpcConsumeType.Product) {\n return myProductRewards.map(item => {\n let type = RewardType.Pending\n\n if (item.fulfillment_status && item.fulfillment_status !== 'null') {\n // 物流状态\n if (item.fulfillment_status === 'fulfilled') {\n type = RewardType.Fulfilled\n } else {\n type = RewardType.Unfulfilled\n }\n } else {\n if (\n item.approval_status === ApprovalStatus.Success ||\n item.approval_status === ApprovalStatus.DoubleConfirm\n ) {\n type = RewardType.ApproveSuccess\n } else if (item.approval_status === ApprovalStatus.Failed) {\n type = RewardType.Failed\n }\n }\n\n return {\n title: item.goods_title,\n value: item.consume_credits,\n type,\n date: new Date(item.create_time * 1000),\n orderNumber: item.order_number,\n couponCode: '',\n }\n })\n }\n\n return []\n }, [activeTab, myProductRewards, myCouponRewards])\n\n const canNext = useMemo(() => {\n if (activeTab === AlpcConsumeType.Coupon) {\n return couponCanNext\n }\n\n if (activeTab === AlpcConsumeType.Product) {\n return productCanNext\n }\n\n return false\n }, [activeTab, couponCanNext, productCanNext])\n\n const TypeMap = useMemo(() => {\n return {\n [RewardType.Received]: data.receivedLabel,\n [RewardType.Pending]: data.pendingLabel,\n [RewardType.ApproveFail]: data.failedLabel,\n [RewardType.ApproveSuccess]: data.approveSuccessLabel,\n [RewardType.Unfulfilled]: data.unfulfilledLabel,\n [RewardType.Fulfilled]: data.fulfilledLabel,\n [RewardType.Failed]: data.failedLabel,\n }\n }, [data])\n\n const TipMap = useMemo(() => {\n return {\n [RewardType.Received]: '',\n [RewardType.Pending]: data.pendingTip,\n [RewardType.ApproveFail]: '',\n [RewardType.ApproveSuccess]: data.confirmedTip,\n [RewardType.Unfulfilled]: data.processingTip,\n [RewardType.Fulfilled]: data.ShippedTip,\n [RewardType.Failed]: '',\n }\n }, [data])\n\n const ColorMap = useMemo(() => {\n return {\n [RewardType.Received]: '#52C41A',\n [RewardType.Pending]: '#999',\n [RewardType.ApproveFail]: '#F84D4F',\n [RewardType.ApproveSuccess]: '#999',\n [RewardType.Unfulfilled]: '#999',\n [RewardType.Fulfilled]: '#999',\n [RewardType.Failed]: '#F84D4F',\n }\n }, [])\n\n const handleScrollEnd = useCallback(() => {\n if (!canNext) {\n return\n }\n\n if (activeTab === AlpcConsumeType.Coupon) {\n setCouponPage(couponPage + 1)\n } else if (activeTab === AlpcConsumeType.Product) {\n setProductPage(productPage + 1)\n }\n }, [activeTab, productPage, couponPage, canNext])\n\n const handleCopy = useCallback((code: string, idx: number) => {\n setCopied(idx)\n clipboard(code)\n setTimeout(() => {\n setCopied(-1)\n }, 2000)\n }, [])\n\n const isLoading = activeTab === AlpcConsumeType.Coupon ? couponIsLoading : productIsLoading\n\n return (\n <CreditsModalContainer\n title={data.title}\n className={classNames('h-[800px] w-[640px]')}\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n scrollClassName=\"md:mb-0\"\n {...props}\n onScrollEnd={handleScrollEnd}\n >\n <div className=\"\">\n <Tabs\n align=\"left\"\n shape={rounded ? 'rounded' : 'square'}\n value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(Number(value))\n }}\n >\n <TabsList>\n {tabs.map(tab => (\n <TabsTrigger key={tab.type} value={tab.type.toString()}>\n {tab.title}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </div>\n\n {isLoading && (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <LoadingDots />\n </div>\n )}\n\n {!isLoading && (\n <div className=\"mt-[24px] overflow-auto overscroll-contain\">\n {list.length > 0 ? (\n <div className=\"grid gap-[18px] md:gap-[12px]\">\n {list.map((item, index) => (\n <div key={index} className=\"grid gap-[8px]\">\n {item?.orderNumber && (\n <div className=\"text-[15px] font-semibold leading-[1.4] text-[#777]\">\n {data.orderNumberLabel}: {item.orderNumber}\n </div>\n )}\n <div\n className={classNames(\n 'flex items-center justify-between rounded-[8px] bg-[#f7f8f9] px-[16px] py-[20px]',\n !rounded && 'rounded-none'\n )}\n >\n <div className=\"grid gap-[4px]\">\n <div className=\"text-[16px] font-bold leading-[1.4]\">{item.title}</div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {data.valueLabel}: {item.value} {data?.pointUnit}\n </div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {item?.couponCode ? `${data?.code || 'Code'}: ${item.couponCode} ` : ''}\n {item?.couponCode && (\n <span\n className=\"cursor-pointer text-[14px] font-semibold text-brand underline\"\n onClick={() => {\n handleCopy(item.couponCode, index)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {copied === index ? data?.copied || 'COPIED' : data?.copy || 'COPY'}\n </span>\n )}\n </div>\n </div>\n <div className=\"grid gap-[4px] text-right\">\n <div\n className={classNames(\n 'flex items-center justify-end text-[16px] font-bold leading-[1.4]',\n `text-[${ColorMap[item.type]}]`\n )}\n >\n <span>{TypeMap[item.type]}</span>\n {TipMap[item.type] && <Tip info={TipMap[item.type]} index={index} />}\n </div>\n <div className=\"text-[14px] font-semibold text-[#999]\">\n {dayjs(item.date).format('YYYY-MM-DD HH:mm').toString()}\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <Picture\n className=\"mb-[12px] w-[160px]\"\n source={data?.emptyListImage?.url}\n alt={data?.emptyListImage?.alt || 'empty list image'}\n ></Picture>\n <div className=\"text-[16px] font-semibold leading-[1.4]\">{data?.emptyListLabel}</div>\n </div>\n )}\n </div>\n )}\n </CreditsModalContainer>\n )\n}\n\nexport default MyRewardsModal\n","import { useHeadlessContext } from '@anker-in/lib'\nimport classNames from 'classnames'\nimport { useState } from 'react'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nfunction Tip({ info, index }: { info: string; index: number }) {\n const [show, setShow] = useState(false)\n\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n return (\n <div\n className=\"relative ml-[6px] cursor-pointer\"\n onClick={() => {\n setShow(!show)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n onMouseOver={() => {\n setShow(true)\n }}\n onFocus={() => {\n setShow(true)\n }}\n onMouseLeave={() => {\n setShow(false)\n }}\n onBlur={() => {\n setShow(false)\n }}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M9 18C13.9706 18 18 13.9706 18 9C18 4.02944 13.9706 0 9 0C4.02944 0 0 4.02944 0 9C0 13.9706 4.02944 18 9 18ZM9.765 10.7118H8.316C8.316 9.71658 8.95624 9.11788 9.5487 8.56386C10.0589 8.08679 10.5336 7.64285 10.5336 7.0074C10.5336 6.2766 9.9918 5.9112 9.1854 5.9112C8.3916 5.9112 7.7994 6.327 7.5474 7.0704L6.3 6.3648C6.7788 5.13 7.938 4.5 9.2232 4.5C10.6218 4.5 11.9826 5.3316 11.9826 6.9192C11.9826 7.95842 11.3297 8.58584 10.7324 9.15979C10.2289 9.64359 9.765 10.0894 9.765 10.7118ZM9.9918 12.69C9.9918 13.2066 9.5634 13.635 9.0468 13.635C8.5176 13.635 8.1018 13.2066 8.1018 12.69C8.1018 12.1608 8.5176 11.745 9.0468 11.745C9.5634 11.745 9.9918 12.1608 9.9918 12.69Z\"\n fill=\"#999999\"\n />\n </svg>\n <div\n className={classNames(\n 'absolute -right-[14px] hidden min-w-[300px] shadow-[0px_1px_12px_0px_rgba(0,0,0,0.12)]',\n index === 0 ? 'top-[33px]' : 'bottom-[33px]',\n show && '!block'\n )}\n >\n <i\n className=\"absolute right-[8px] blur-[12px]\"\n style={\n index === 0\n ? {\n top: '-9px',\n borderRight: '16px solid transparent ',\n borderLeft: '16px solid transparent ',\n borderBottom: '8px solid rgba(0,0,0,0.12)',\n }\n : {\n bottom: '-9px',\n borderRight: '16px solid transparent ',\n borderLeft: '16px solid transparent ',\n borderTop: '8px solid rgba(0,0,0,0.12)',\n }\n }\n ></i>\n <i\n className=\"absolute right-[8px]\"\n style={\n index === 0\n ? {\n top: '-7px',\n borderRight: '16px solid transparent ',\n borderLeft: '16px solid transparent ',\n borderBottom: '8px solid #fff ',\n }\n : {\n bottom: '-7px',\n borderRight: '16px solid transparent ',\n borderLeft: '16px solid transparent ',\n borderTop: '8px solid #fff ',\n }\n }\n ></i>\n <p\n className={classNames(\n 'relative block rounded-[4px] bg-white px-[14px] py-[12px]',\n !rounded && 'rounded-none'\n )}\n >\n <span className=\"block text-left text-[14px] font-semibold leading-[1.4] text-[#333]\">{info}</span>\n </p>\n </div>\n </div>\n )\n}\n\nexport default Tip\n","import { useCallback, useEffect, useState } from 'react'\n\nimport { ALPC_COUNTRY_MAP, AlpcConsumeType } from '../const'\nimport { useAlpcMutation } from './useAlpcFetch'\nimport type { RedeemLogResponse } from '../response'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useMyRewards({\n page,\n pageSize,\n consumeType,\n}: {\n page: number\n pageSize: number\n consumeType?: AlpcConsumeType\n}) {\n const { isLoadingProfile, profile, alpcBrand } = useCreditsContext()\n const { brand: headlessBrand, locale, appName } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n const isLogin = !!profile\n\n const [myRewards, setMyRewards] = useState<RedeemLogResponse[]>([])\n const [total, setTotal] = useState(0)\n\n const [currentPage, setCurrentPage] = useState(0)\n\n const { isMutating: isLoading, trigger } = useAlpcMutation<\n { data: { redeem_logs: RedeemLogResponse[]; total: number } },\n {\n page: number\n page_size: number\n consume_type: AlpcConsumeType\n user_id: string\n }\n >({\n url: `/v1/credit/log/coupon`,\n initData: {\n brand: brand,\n country: ALPC_COUNTRY_MAP.get(locale) || locale,\n app_name: appName,\n },\n })\n\n useEffect(() => {\n if (isLoadingProfile || !profile || isLoading) {\n return\n }\n\n if (page !== currentPage && page) {\n trigger(\n {\n consume_type: consumeType || AlpcConsumeType.Coupon,\n page,\n page_size: pageSize,\n user_id: profile?.user_id,\n },\n {\n onSuccess(responseData) {\n setCurrentPage(page)\n setTotal(responseData?.data?.total)\n setMyRewards(myRewards.concat(responseData?.data?.redeem_logs || []))\n },\n }\n )\n }\n }, [trigger, myRewards, consumeType, page, pageSize, currentPage, profile, isLoadingProfile, isLoading])\n\n const getMyRewards = useCallback(async () => {\n if (isLoadingProfile || !isLogin || !profile || isLoading) {\n return\n }\n await trigger(\n {\n consume_type: consumeType || AlpcConsumeType.Coupon,\n page,\n page_size: pageSize,\n user_id: profile?.user_id,\n },\n {\n // 仅支持1页的\n onSuccess(responseData) {\n setMyRewards(responseData?.data?.redeem_logs || [])\n },\n }\n )\n }, [consumeType, isLoading, isLoadingProfile, page, pageSize, profile, trigger])\n\n return {\n myRewards,\n isLoading,\n total,\n getMyRewards,\n canNext: total > myRewards.length && !isLoading,\n }\n}\n\nexport default useMyRewards\n","import { Button, Container, Heading, Picture, Text } from '@anker-in/headless-ui'\nimport { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline'\nimport { useEffect, useMemo, useRef, useState } from 'react'\n\nimport { TaskType, type CreditsWaysToGetCreditsProps } from './type'\nimport { useActions } from './useActions'\nimport { useCreditsContext } from '../context/provider'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { useRegistration } from '../../registration'\nimport { CreditsUploadReceiptModal } from '../modal/creditsUploadReceiptModal'\nimport { CreditsSubscribeModal } from '../modal/subscribeModal'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport const CreditsWaysToGetCredits = ({ copy, classNames, id }: CreditsWaysToGetCreditsProps & { id?: string }) => {\n const [showMore, setShowMore] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n const { profile } = useCreditsContext()\n const { authCodeActivate } = useRegistration()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const isLogin = !!profile\n\n const [isUploadReceiptModalOpen, setIsUploadReceiptModalOpen] = useState(false)\n const [isSubscribeModalOpen, setIsSubscribeModalOpen] = useState(false)\n const [isSubscribeSuccess, setIsSubscribeSuccess] = useState(false)\n const [isUploadReceiptSuccess, setIsUploadReceiptSuccess] = useState(false)\n\n const { actions } = useActions({\n copy,\n subscribe: {\n openSubscribePopup: () => setIsSubscribeModalOpen(true),\n isSuccess: isSubscribeSuccess,\n },\n uploadReceipt: {\n openUploadReceiptPopup: () => setIsUploadReceiptModalOpen(true),\n isSuccess: isUploadReceiptSuccess,\n },\n })\n const list = useMemo(() => {\n const list = (copy.list || [])\n .map(item => {\n if (!actions[item.id as keyof typeof actions]) {\n return undefined\n }\n const { finished, notLogin, notFinished, completed } = actions[item.id as keyof typeof actions]\n let buttonLabel = ''\n let handleClick = undefined\n let link = undefined\n if (!isLogin) {\n buttonLabel = notLogin.buttonLabel\n handleClick = notLogin.handleClick\n } else if (finished) {\n buttonLabel = completed.buttonLabel\n handleClick = undefined\n } else {\n buttonLabel = notFinished.buttonLabel\n handleClick = notFinished.handleClick\n link = (notFinished as { link: string }).link\n }\n return {\n ...item,\n buttonLabel,\n handleClick,\n finished,\n link,\n }\n })\n .filter(Boolean) as {\n title: string\n credits: string\n id: TaskType\n buttonLabel: string\n finished: boolean\n link: string\n handleClick: (() => void) | undefined\n }[]\n\n // 登录后,保留原顺序,将已完成的任务放在最后\n if (isLogin) {\n return list.sort((a, b) => {\n if (a?.finished && !b?.finished) {\n return 1 // a已完成,b未完成,a排在后面\n }\n if (!a?.finished && b?.finished) {\n return -1 // a未完成,b已完成,a排在前面\n }\n return 0 // 都已完成或都未完成,保持原顺序\n })\n } else {\n return list\n }\n }, [actions, copy.list, isLogin])\n\n useEffect(() => {\n if (!showMore && window.innerWidth < 768) {\n const section = document.getElementById('ways-to-get-credits')\n if (section) {\n const timer = setTimeout(() => {\n section.scrollIntoView({ behavior: 'smooth', block: 'end' })\n }, 300)\n return () => clearTimeout(timer)\n }\n }\n }, [showMore])\n\n return (\n <Container id={id} className=\" bg-[#F5F5F7] [&>div]:l:!px-0\">\n <div\n className={cn(\n 'rounded-[16px] bg-[#1D1D1F] py-[64px] px-[140px] text-white md:px-[16px] l:rounded-none md-l:px-[32px] l-xl:px-[77px]',\n !rounded && 'rounded-none'\n )}\n >\n <Heading as=\"h2\" size={4} html={copy?.title} className=\"text-center l:pl-[16px] l:text-left\" />\n <div className=\"mt-[64px] flex items-center justify-between md:mt-[64px] l:mt-[24px] l:flex-col-reverse l:items-start md-l:mt-[32px]\">\n <div className=\"pl-[16px] l:mt-[40px] desktop:pl-[24px] lg-desktop:pl-[32px]\">\n <Heading size={3} as=\"h3\" html={copy.subtitle} className={classNames?.subtitle} />\n <div className=\"mt-[8px] flex items-center\">\n {copy.creditsIcon?.url && (\n <Picture\n className=\"size-[48px] mr-[8px] stroke-brand xl:size-[30px] [&_path]:stroke-brand\"\n source={copy.creditsIcon.url}\n alt={copy.creditsIcon.alt || 'credits'}\n />\n )}\n <Heading\n html={copy.equalCredits}\n size={4}\n as=\"h3\"\n className={cn('mt-2 text-white md:text-[24px]', classNames?.equalCreditsText)}\n />\n </div>\n </div>\n <Picture className=\"w-full laptop:w-[50%]\" source={copy.mainImage?.url} />\n </div>\n\n <div className=\"relative\">\n <div\n ref={containerRef}\n className={cn(\n 'relative mt-[64px] grid grid-cols-3 gap-[16px] overflow-hidden transition-all duration-300 md:mt-[16px] md:grid-cols-1 l:gap-[12px] md-l:mt-[32px] md-l:grid-cols-2',\n showMore ? 'min-md:!h-auto md:h-auto' : 'md:h-[512px] min-md:!h-auto'\n )}\n >\n {list.map(item => (\n <div\n key={item.id}\n className={cn(\n 'flex min-h-[160px] flex-col justify-between rounded-[16px] bg-white p-[16px] text-[#1D1D1F] desktop:min-h-[192px] desktop:p-[24px] lg-desktop:min-h-[240px] lg-desktop:p-[32px]',\n !rounded && 'rounded-none'\n )}\n >\n <div>\n <Text\n as=\"p\"\n html={item.title}\n size={2}\n className=\"text-pretty text-[24px] font-bold xl:text-[20px]\"\n />\n <div className=\"mt-[4px] flex items-center\">\n <Picture\n className=\"size-[24px] xl:size-[18px] [&_path]:size-full\"\n source=\"https://cdn.shopify.com/s/files/1/0511/6346/3874/files/20250902-153351.png?v=1756798450\"\n />\n <Text\n as=\"p\"\n html={item.credits}\n size={2}\n className=\"ml-[4px] mt-[6px] text-[18px] l:text-[14px]\"\n />\n </div>\n </div>\n\n {item.handleClick &&\n !(item.id === TaskType.UploadReceipt && isUploadReceiptSuccess) &&\n !(item.id === TaskType.Activate && authCodeActivate.isActivateSuccess) &&\n !(item.id === TaskType.Subscribe && isSubscribeSuccess) ? (\n <Button\n as={item.link ? 'a' : 'button'}\n {...(item.link && { href: item.link })}\n {...(item.handleClick && { onClick: item.handleClick })}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[24px] w-fit\"\n >\n {item.buttonLabel}\n </Button>\n ) : (\n <Button variant=\"primary\" size=\"lg\" className=\"mt-[24px] w-fit\" disabled>\n {item.buttonLabel}\n </Button>\n )}\n </div>\n ))}\n {!showMore && (\n <div\n className=\"absolute inset-0 pointer-events-none min-md:hidden\"\n style={{ background: 'linear-gradient(180deg, rgba(29, 29, 31, 0) 66.37%, #1D1D1F 100%)' }}\n ></div>\n )}\n </div>\n {showMore ? (\n <button\n className=\"mx-auto mt-[12px] block w-fit min-md:hidden\"\n onClick={() => {\n setShowMore(false)\n }}\n >\n <ChevronUpIcon className=\"size-[40px] rounded-full bg-[#FFFFFF33] p-[8px]\"></ChevronUpIcon>\n </button>\n ) : (\n <>\n <div className=\"absolute bottom-0 flex w-full translate-y-1/2 justify-center min-md:hidden\">\n <button className=\"w-fit\" onClick={() => setShowMore(!showMore)}>\n <ChevronDownIcon className=\"size-[40px] rounded-full bg-[#FFFFFF33] p-[8px]\"></ChevronDownIcon>\n </button>\n </div>\n </>\n )}\n </div>\n </div>\n {copy.receipt && (\n <CreditsUploadReceiptModal\n isOpen={isUploadReceiptModalOpen}\n onClose={() => {\n setIsUploadReceiptModalOpen(false)\n }}\n copy={copy.receipt}\n onSuccess={() => {\n setIsUploadReceiptSuccess(true)\n }}\n />\n )}\n {copy.subscribe && (\n <CreditsSubscribeModal\n copy={copy.subscribe}\n onSuccess={() => {\n setIsSubscribeSuccess(true)\n setTimeout(() => {\n setIsSubscribeModalOpen(false)\n }, 3000)\n }}\n isOpen={isSubscribeModalOpen}\n onClose={() => {\n setIsSubscribeModalOpen(false)\n }}\n />\n )}\n </Container>\n )\n}\n","import * as React from \"react\";\nfunction ChevronDownIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m19.5 8.25-7.5 7.5-7.5-7.5\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChevronDownIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction ChevronUpIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"m4.5 15.75 7.5-7.5 7.5 7.5\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ChevronUpIcon);\nexport default ForwardRef;","import { useHeadlessContext, gaTrack } from '@anker-in/lib'\n\nimport { TaskType } from './type'\nimport { useCreditsContext } from '../context/provider'\nimport { useMemo } from 'react'\nimport useReceiptUploaded from '../context/hooks/useReceiptUploaded'\nimport { useFirstPurchaseFinished } from '../context/hooks/useFirstPurchaseFinished'\nimport { useSubscribed } from '../context/hooks/useSubscribed'\nimport type { CreditsWaysToGetCreditsCopy } from './type'\n\nimport { useRegistration } from '../../registration'\n\nexport const useActions = ({\n copy,\n subscribe,\n uploadReceipt,\n gaParameters,\n}: {\n copy: CreditsWaysToGetCreditsCopy\n subscribe: {\n openSubscribePopup: () => void\n isSuccess: boolean\n }\n uploadReceipt: {\n openUploadReceiptPopup: () => void\n isSuccess: boolean\n }\n gaParameters?: {\n position: string\n }\n}) => {\n const { openSignUpPopup, gtm, profile } = useCreditsContext()\n const { authCodeActivate } = useRegistration()\n const isSubscribed = useSubscribed()\n const firstPurchaseFinished = useFirstPurchaseFinished()\n const uploadedReceipt = useReceiptUploaded()\n const { appName, passportUrl } = useHeadlessContext()\n\n const profileCompleted = useMemo(() => {\n return (profile?.first_name || profile?.last_name) && profile?.phone_number && profile?.dob\n }, [profile])\n\n return useMemo(() => {\n const handleClickWithTrack = ({\n buttonName,\n id,\n callback,\n }: {\n buttonName: string\n id?: string\n callback: () => void\n }) => {\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n member_active_status: profile?.activated ? 'active' : 'not active',\n event_parameters: {\n page_group: gtm.pageGroup,\n position: gaParameters?.position || copy.title,\n button_name: buttonName,\n info: id,\n },\n })\n callback()\n }\n return {\n actions: {\n [TaskType.Activate]: {\n finished: profile?.activated,\n notLogin: {\n buttonLabel: copy?.joinNow,\n handleClick: () =>\n handleClickWithTrack({ buttonName: copy?.joinNow, callback: openSignUpPopup, id: TaskType.Activate }),\n },\n notFinished: {\n buttonLabel: copy?.activate,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.activate,\n callback: () => {\n authCodeActivate.setAutoSendEmail(true)\n authCodeActivate.open()\n },\n id: TaskType.Activate,\n }),\n },\n completed: {\n buttonLabel: copy?.completed,\n },\n },\n [TaskType.Subscribe]: {\n finished: isSubscribed,\n notLogin: {\n buttonLabel: copy?.joinNow,\n handleClick: () =>\n handleClickWithTrack({ buttonName: copy?.joinNow, callback: openSignUpPopup, id: TaskType.Subscribe }),\n },\n notFinished: {\n buttonLabel: copy?.subscribeLabel,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.subscribeLabel,\n callback: () => subscribe.openSubscribePopup(),\n id: TaskType.Subscribe,\n }),\n },\n completed: {\n buttonLabel: copy?.completed,\n },\n },\n [TaskType.CompleteProfile]: {\n finished: profileCompleted,\n notLogin: {\n buttonLabel: copy?.joinNow,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.joinNow,\n callback: openSignUpPopup,\n id: TaskType.CompleteProfile,\n }),\n },\n notFinished: {\n buttonLabel: copy?.completeProfile,\n link: `${passportUrl}/account/profile?app=${appName}`,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.completeProfile,\n callback: () => {},\n id: TaskType.CompleteProfile,\n }),\n },\n completed: {\n buttonLabel: copy?.completed,\n },\n },\n [TaskType.FirstPurchase]: {\n finished: firstPurchaseFinished,\n notLogin: {\n buttonLabel: copy?.makeFirstPurchase,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.makeFirstPurchase,\n callback: openSignUpPopup,\n id: TaskType.FirstPurchase,\n }),\n },\n notFinished: {\n buttonLabel: copy?.makeFirstPurchase,\n link: copy?.goShopLink,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.makeFirstPurchase,\n callback: () => {},\n id: TaskType.FirstPurchase,\n }),\n },\n completed: {\n buttonLabel: copy?.completed,\n },\n },\n [TaskType.UploadReceipt]: {\n finished: uploadedReceipt,\n notLogin: {\n buttonLabel: copy?.joinNow,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.joinNow,\n callback: openSignUpPopup,\n id: TaskType.UploadReceipt,\n }),\n },\n notFinished: {\n buttonLabel: copy?.uploadReceipt,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.uploadReceipt,\n callback: () => uploadReceipt.openUploadReceiptPopup(),\n id: TaskType.UploadReceipt,\n }),\n },\n completed: {\n buttonLabel: copy?.completed,\n },\n },\n [TaskType.Shop]: {\n finished: false,\n notLogin: {\n buttonLabel: copy?.joinNow,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.joinNow,\n callback: openSignUpPopup,\n id: TaskType.Shop,\n }),\n },\n notFinished: {\n buttonLabel: copy?.shopNow,\n link: copy?.goShopLink,\n handleClick: () =>\n handleClickWithTrack({\n buttonName: copy?.shopNow,\n callback: () => {},\n id: TaskType.Shop,\n }),\n },\n completed: {\n buttonLabel: copy?.completed,\n },\n },\n },\n }\n }, [\n profile?.activated,\n copy?.joinNow,\n copy?.activate,\n copy?.completed,\n copy?.subscribe,\n copy?.completeProfile,\n copy?.makeFirstPurchase,\n copy?.uploadReceipt,\n copy?.shopNow,\n copy.title,\n copy?.goShopLink,\n isSubscribed,\n profileCompleted,\n firstPurchaseFinished,\n uploadedReceipt,\n gaParameters?.position,\n openSignUpPopup,\n ])\n}\n","import { useMemo } from 'react'\n\nimport useActivities from './useActivities'\nimport { useCreditsContext } from '../provider'\nimport { DTC_TASK_TYPE } from '../const'\n\nexport const useReceiptUploaded = () => {\n const { taskIdToTypeMapping } = useCreditsContext()\n const activitiesOptions = useMemo(() => ({ page: 1, pageSize: 50 }), [])\n const { activities } = useActivities(activitiesOptions)\n\n const uploadedReceipt = useMemo(() => {\n return activities?.some(item => {\n const uploadReceiptTaskId = Object.keys(taskIdToTypeMapping || {}).find(\n type => taskIdToTypeMapping?.[type] === DTC_TASK_TYPE.UploadReceipt\n )\n return item.task_rule_id === Number(uploadReceiptTaskId)\n })\n }, [activities, taskIdToTypeMapping])\n\n return uploadedReceipt\n}\n\nexport default useReceiptUploaded\n","import { useMemo } from 'react'\n\nimport { DTC_TASK_TYPE } from '../const'\nimport useActivities from './useActivities'\nimport { useCreditsContext } from '../provider'\n\nexport const useFirstPurchaseFinished = () => {\n const { taskIdToTypeMapping } = useCreditsContext()\n\n const activitiesOptions = useMemo(() => ({ page: 1, pageSize: 50 }), [])\n const { activities } = useActivities(activitiesOptions)\n\n const firstPurchaseFinished = useMemo(() => {\n return activities?.some(item => {\n const firstPurchaseTaskId = Object.keys(taskIdToTypeMapping || {}).find(\n type => taskIdToTypeMapping?.[type] === DTC_TASK_TYPE.FirstPurchase\n )\n\n return item.task_rule_id === Number(firstPurchaseTaskId)\n })\n }, [activities, taskIdToTypeMapping])\n\n return firstPurchaseFinished\n}\n","import { useMemo } from 'react'\n\nimport { TaskSubType } from '../const'\nimport useActivities from './useActivities'\nimport { useCreditsContext } from '../provider'\nimport { useHeadlessContext, useSubscriptions } from '@anker-in/lib'\n\nexport const useSubscribed = () => {\n const { profile } = useCreditsContext()\n const { brand } = useHeadlessContext()\n\n const activitiesOptions = useMemo(() => ({ page: 1, pageSize: 50 }), [])\n\n const { activities } = useActivities(activitiesOptions)\n const { data: subscription } = useSubscriptions({ email: profile?.email })\n\n const isSubscribed = useMemo(() => {\n if (!subscription?.preference) {\n return false\n }\n\n const subscribeResult = subscription.preference.some(item => {\n return item.brand === brand && item.subscribe\n })\n\n if (subscribeResult) {\n return true\n }\n\n return activities?.some(item => {\n return item.task_sub_type === TaskSubType.Subscription\n })\n }, [subscription?.preference, activities])\n\n return isSubscribed\n}\n","import { Button, Text } from '@anker-in/headless-ui'\nimport {\n useSendEmailValidation,\n gaTrack,\n classNames as cn,\n useHeadlessContext,\n useEmailValidation,\n useCountDown,\n} from '@anker-in/lib'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { Message } from './Message'\nimport { AuthCodeActivateProps } from './type'\nimport { useRegistration } from '../context'\nimport { RegistrationModalContainer } from '../modalContainer'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport const AuthCodeActivate: React.FC<AuthCodeActivateProps> = ({ copy }) => {\n const { locale, brand } = useHeadlessContext()\n const { email, authCodeActivate } = useRegistration()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const { activeToken, setActiveToken, setIsSendingActivateEmail, setIsActivateSuccess, onAuthSuccess, autoSendEmail } =\n authCodeActivate\n\n const { isMutating: emailValidationLoading, trigger: triggerEmailValidation } = useEmailValidation()\n\n const {\n isMutating: isSendingEmail,\n trigger: triggerSendValidationEmail,\n data: sendEmailData,\n } = useSendEmailValidation()\n\n const [messageText, setMessageText] = useState('')\n const [messageStatus, setMessageStatus] = useState('')\n const { startCountDown: isStartCountDown, startAction: startCountDown, countDown } = useCountDown(60)\n\n const [error, setError] = useState('')\n const [focusIndex, setFocusIndex] = useState(0)\n const [codeArray, setCodeArray] = useState(new Array(6).fill(''))\n\n const inputRefs = useRef<HTMLInputElement[]>([])\n const code = codeArray.join('')\n\n useEffect(() => {\n if (inputRefs.current[focusIndex]) {\n inputRefs.current[focusIndex].focus()\n }\n }, [focusIndex])\n\n useEffect(() => {\n if (sendEmailData?.data?.data?.active_token) {\n setActiveToken(sendEmailData.data.data.active_token)\n }\n }, [sendEmailData?.data?.data?.active_token])\n\n useEffect(() => {\n setIsSendingActivateEmail(isSendingEmail)\n }, [isSendingEmail, setIsSendingActivateEmail])\n\n // 自动发送邮箱验证码\n useEffect(() => {\n if (autoSendEmail && email) {\n triggerSendValidationEmail(\n {\n email: email,\n data: {\n redirect_url: `${window?.location?.origin}${window?.location?.pathname}`,\n },\n },\n {\n onSuccess: () => {\n setMessageStatus('success')\n setMessageText(copy?.sendEmailSuccessMessage || '')\n startCountDown()\n setTimeout(() => {\n setMessageStatus('')\n setMessageText('')\n }, 5000)\n },\n }\n )\n }\n }, [autoSendEmail, email, triggerSendValidationEmail])\n\n const handleSendAgain = useCallback(async () => {\n if (!email) return\n // 发起网络请求\n await triggerSendValidationEmail(\n {\n email: email,\n data: {\n redirect_url: `${window?.location?.origin}${window?.location?.pathname}`,\n },\n },\n {\n onSuccess: () => {\n setMessageStatus('success')\n setMessageText(copy?.sendEmailSuccessMessage || '')\n startCountDown()\n setTimeout(() => {\n setMessageStatus('')\n setMessageText('')\n }, 5000)\n },\n }\n )\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n event_parameters: {\n page_group: 'reg_sub_pop',\n position: 'auth_code',\n button_name: 'sent_again',\n },\n })\n }, [email, triggerSendValidationEmail])\n\n const handleInputCodeChange = (event: React.ChangeEvent<HTMLInputElement>, index: number) => {\n const { value } = event.target\n\n setError('')\n\n if (Number.isNaN(Number(value))) {\n return\n }\n\n if (value.length > 1) {\n if (index < codeArray.length - 1) {\n if (!codeArray[index + 1]) {\n setFocusIndex(index + 1)\n setCodeArray(old => {\n const newCode = [...old]\n newCode[index] = value[0]\n if (value.length > 1) {\n newCode[index + 1] = value[1]\n }\n return newCode\n })\n }\n }\n return\n }\n const newCode = [...codeArray]\n newCode[index] = value\n setCodeArray(newCode)\n if (value) {\n if (index < codeArray.length - 1 && !codeArray[index + 1]) {\n setFocusIndex(index + 1)\n }\n } else if (index > 0) {\n setFocusIndex(index - 1)\n }\n }\n\n const handleAuthCodeSubmit = useCallback(async () => {\n if (!code?.length) {\n setError(copy?.codeEmptyError || '')\n return\n }\n\n if (code.length < 6) {\n setError(copy?.incorrectCodeError || '')\n return\n }\n\n if (activeToken) {\n await triggerEmailValidation(\n {\n token: activeToken,\n code: code,\n },\n {\n onSuccess: data => {\n if (data.status >= 200 && data.status < 300) {\n setMessageStatus('success')\n setMessageText(copy?.authSuccessMessage || '')\n setIsActivateSuccess(true)\n if (onAuthSuccess) {\n onAuthSuccess()\n } else {\n setTimeout(() => {\n authCodeActivate.close()\n window.location.reload()\n }, 3000)\n }\n } else {\n if (data?.data?.error_code === '104') {\n if (onAuthSuccess) {\n onAuthSuccess()\n } else {\n setTimeout(() => {\n authCodeActivate.close()\n window.location.reload()\n }, 3000)\n }\n } else if (data?.data?.error_code === '142') {\n setError(copy?.incorrectCodeError || 'Invalid verification code.')\n } else if (data?.data?.error_code === '154') {\n setError(copy?.expiredCodeMessage || '')\n } else {\n setError(copy?.sendEmailErrorMessage || '')\n }\n }\n },\n }\n )\n }\n\n // 设置定时器清除状态信息\n let timer = setTimeout(() => {\n setMessageStatus('')\n setMessageText('')\n clearTimeout(timer)\n }, 5000)\n\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n event_parameters: {\n page_group: 'reg_sub_pop',\n position: 'auth_code',\n button_name: 'check_and_active',\n },\n })\n }, [\n code,\n copy?.codeEmptyError,\n copy?.authSuccessMessage,\n copy?.incorrectCodeError,\n copy?.expiredCodeMessage,\n copy?.sendEmailErrorMessage,\n locale,\n activeToken,\n ])\n\n return (\n <RegistrationModalContainer isOpen={authCodeActivate.isOpen} onClose={authCodeActivate.close}>\n <div className=\"relative\">\n <div>\n <Text\n className=\"text-[22px] font-extrabold leading-[120%] text-[#333] min-l:text-[24px] [&_abbr]:text-[#005d8e]\"\n html={copy?.authCodeTitle}\n />\n <Text\n as=\"p\"\n className=\"mt-3 text-[14px] font-semibold leading-[140%] text-[rgba(51,51,51,0.75)] min-l:text-base [&_abbr]:text-[#333]\"\n html={copy?.authCodeDesc?.replace('%email%', email || '')}\n />\n </div>\n <div className=\"mt-6\">\n <Text\n className=\"mt-4 text-[14px] !font-bold font-semibold leading-[140%] text-[#333] min-l:mt-6\"\n html={copy?.enterActiveCodeText}\n />\n <div className=\"my-3 grid grid-cols-6 gap-2\">\n {codeArray.map((item, index) => (\n <div key={index} className=\"col-span-1 aspect-1 text-[#555]\">\n <input\n ref={inputRef => {\n if (inputRef) {\n inputRefs.current[index] = inputRef\n }\n }}\n key={index}\n type=\"tel\"\n className={cn(\n 'flex size-full items-center justify-center border border-[#333333]/20 bg-[#EEEEEE] text-center text-[24px] font-medium focus:border-[#333]/50 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none [&:focus-visible]:outline-none',\n rounded && 'rounded-[12px]'\n )}\n value={item}\n autoComplete=\"false\"\n autoCorrect=\"false\"\n spellCheck=\"false\"\n autoCapitalize=\"false\"\n onChange={event => handleInputCodeChange(event, index)}\n onFocus={() => {\n setFocusIndex(index)\n }}\n onPaste={event => {\n const paste = event.clipboardData.getData('text')\n if (!Number.isNaN(Number(paste))) {\n const pastedCode = paste.split('').slice(0, 6)\n setCodeArray(pastedCode.concat(Array(6 - pastedCode.length).fill('')))\n if (pastedCode.length <= codeArray.length) {\n setFocusIndex(pastedCode.length - 1)\n }\n }\n }}\n onKeyDown={event => {\n const { value } = event.target as HTMLInputElement\n if (event.key === 'Backspace' && !value && index > 0) {\n setFocusIndex(index - 1)\n }\n }}\n />\n </div>\n ))}\n </div>\n\n {error && <Text className=\"mb-3 text-[14px] font-semibold leading-[120%] text-[#f84d4f]\" html={error} />}\n {copy?.authCodeContent && (\n <ul\n className='flex flex-col gap-1 [&_li]:flex [&_li]:gap-2 [&_li]:text-[14px] [&_li]:font-semibold [&_li]:leading-[120%] [&_li]:text-[rgba(51,51,51,0.55)] [&_li]:before:content-[\"•\"]'\n dangerouslySetInnerHTML={{ __html: copy?.authCodeContent }}\n />\n )}\n </div>\n <div className=\"mt-4 min-l:mt-6\">\n <Text className=\"text-base font-semibold leading-[100%] text-[#333]\" html={copy?.authCodeReceiveText} />{' '}\n {isStartCountDown ? (\n <Text\n html={copy?.retrieveText?.replace('%countdownTime%', countDown.toString())}\n className=\"cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline\"\n />\n ) : (\n <Text\n onClick={handleSendAgain}\n className={cn(\n 'cursor-pointer text-base font-semibold leading-[100%] !text-brand text-[#005d8e] text-[#333] underline',\n {\n 'pointer-events-none': isStartCountDown || isSendingEmail,\n }\n )}\n html={copy?.sendAgainText}\n />\n )}\n <Button\n type=\"submit\"\n loading={emailValidationLoading}\n className=\"mt-6 flex h-[54px] w-full cursor-pointer items-center justify-center px-8 py-[15px] text-center text-base font-bold leading-[100%] text-white min-l:mt-8\"\n onClick={handleAuthCodeSubmit}\n >\n {copy.buttonText}\n </Button>\n </div>\n <Message status={messageStatus} message={messageText} />\n </div>\n </RegistrationModalContainer>\n )\n}\n","export const Message = ({ status, message }: { status: string; message: string }) => {\n return (\n status && (\n <div className=\"absolute left-5 right-5 top-2 flex items-center gap-2 rounded-sm bg-white px-4 py-3 shadow-lg min-md:left-12 min-md:right-12\">\n <div className=\"flex-shrink-0\">\n {status === 'success' && (\n <span className=\"inline-block h-5 w-5\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_205_16388)\">\n <circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#1677FF\" />\n <path d=\"M10 16L10 10\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <circle cx=\"10\" cy=\"6.5\" r=\"1.5\" transform=\"rotate(-180 10 6.5)\" fill=\"white\" />\n </g>\n <defs>\n <clipPath id=\"clip0_205_16388\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n )}\n {status === 'error' && (\n <span className=\"inline-block h-5 w-5\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_205_16236)\">\n <circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#F84D4F\" />\n <path d=\"M10 5L10 11\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n <circle cx=\"10\" cy=\"14.5\" r=\"1.5\" fill=\"white\" />\n </g>\n <defs>\n <clipPath id=\"clip0_205_16236\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n )}\n </div>\n <p className=\"text-sm font-semibold leading-[120%] text-[#333]\">{message}</p>\n </div>\n )\n )\n}\n","import { createContext, Dispatch, PropsWithChildren, SetStateAction, useContext, useState } from 'react'\nimport { AuthCodeActivate } from '../authCodeActivate'\n\ninterface RegistrationContextType {\n email?: string\n copy?: any\n authCodeActivate: {\n isOpen: boolean\n open: () => void\n close: () => void\n isActivateSuccess: boolean\n activeToken?: string\n onAuthSuccess: (() => void) | undefined\n isSendingActivateEmail: boolean\n setIsSendingActivateEmail: Dispatch<SetStateAction<boolean>>\n setActiveToken: Dispatch<SetStateAction<string | undefined>>\n setIsActivateSuccess: Dispatch<SetStateAction<boolean>>\n setOnAuthSuccess: Dispatch<SetStateAction<(() => void) | undefined>>\n autoSendEmail: boolean\n setAutoSendEmail: Dispatch<SetStateAction<boolean>>\n }\n}\n\nexport const RegistrationContext = createContext<RegistrationContextType>({\n email: undefined,\n copy: undefined,\n authCodeActivate: {\n activeToken: undefined,\n setActiveToken: () => {},\n isOpen: false,\n open: () => {},\n close: () => {},\n isActivateSuccess: false,\n isSendingActivateEmail: false,\n setIsSendingActivateEmail: () => {},\n setIsActivateSuccess: () => {},\n setOnAuthSuccess: () => {},\n onAuthSuccess: undefined,\n autoSendEmail: false,\n setAutoSendEmail: () => {},\n },\n})\n\nexport const useRegistration = () => {\n const context = useContext(RegistrationContext)\n if (!context) {\n throw new Error('useRegistration must be used within a RegistrationProvider')\n }\n return context\n}\n\nexport const RegistrationProvider = ({ children, email, copy }: PropsWithChildren<{ email?: string; copy?: any }>) => {\n const [popAuthCode, setPopAuthCode] = useState(false)\n const [onAuthSuccess, setOnAuthSuccess] = useState<(() => void) | undefined>(undefined)\n const [isActivateSuccess, setIsActivateSuccess] = useState(false)\n const [activeToken, setActiveToken] = useState<string>()\n const [isSendingActivateEmail, setIsSendingActivateEmail] = useState(false)\n const [autoSendEmail, setAutoSendEmail] = useState(false)\n\n return (\n <RegistrationContext.Provider\n value={{\n email,\n copy,\n authCodeActivate: {\n activeToken,\n isOpen: popAuthCode,\n open: () => setPopAuthCode(true),\n close: () => setPopAuthCode(false),\n isActivateSuccess,\n setIsActivateSuccess,\n onAuthSuccess,\n setOnAuthSuccess,\n isSendingActivateEmail,\n setIsSendingActivateEmail,\n setActiveToken,\n autoSendEmail,\n setAutoSendEmail,\n },\n }}\n >\n {children}\n {copy?.authCodeActivate && <AuthCodeActivate copy={copy.authCodeActivate} />}\n </RegistrationContext.Provider>\n )\n}\n","import { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { useEffect, useState, type UIEvent } from 'react'\nimport ReactModal from 'react-modal'\nimport { ROUNDED_BRANDS } from '../../constants'\n\nexport type ModalContainerProps = {\n overlayClassName?: string\n className?: string\n scrollClassName?: string\n title?: string\n titleClassName?: string\n useAnimation?: boolean // 使用动画展示\n isOpen: boolean\n children?: any\n onClose: () => void\n onScrollEnd?: (event: UIEvent<HTMLDivElement>) => void\n}\n\nexport const RegistrationModalContainer = ({\n isOpen,\n title,\n className = '',\n overlayClassName = '',\n scrollClassName = '',\n onClose,\n onScrollEnd,\n children,\n useAnimation = true,\n titleClassName = '',\n ...props\n}: ModalContainerProps): React.ReactElement => {\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const [animationShow, setAnimationShow] = useState(false)\n\n useEffect(() => {\n if (!useAnimation) {\n return\n }\n requestAnimationFrame(() => {\n setAnimationShow(isOpen ?? false)\n })\n }, [isOpen, useAnimation])\n\n return (\n <ReactModal\n isOpen={isOpen ?? false}\n overlayClassName={cn(\n 'fixed inset-0 z-[999] flex items-center justify-center bg-black/70 leading-[1.2] md:items-end',\n overlayClassName\n )}\n className={cn(\n 'min-md:max-h-[calc(100vh-96px)] w-[540px] relative flex min-h-[200px] flex-col overflow-hidden bg-white outline-none transition-all duration-300 md:h-auto md:w-full',\n rounded && 'rounded-[16px] md:rounded-b-none',\n useAnimation && 'md:translate-y-[100vh]',\n animationShow && 'md:translate-y-0',\n className\n )}\n onRequestClose={onClose}\n {...props}\n >\n <div\n className={cn(\n 'flex w-full shrink-0 items-center justify-between',\n title ? 'min-l:px-[32px] h-[70px] border-b border-[#e2e2e2] px-[24px]' : 'h-[48px] px-[16px]',\n titleClassName\n )}\n >\n <div className=\"text-[18px] font-bold\">{title}</div>\n <div\n className=\"size-[22px] cursor-pointer\"\n onClick={onClose}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClose?.()\n }\n }}\n role=\"button\"\n tabIndex={0}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.8525 5.31015C16.4558 4.91337 15.8125 4.91338 15.4157 5.31015L11.1268 9.5991L6.83815 5.31049C6.44138 4.91372 5.79808 4.91372 5.40131 5.31049C5.00454 5.70726 5.00455 6.35055 5.40131 6.74732L9.68993 11.0359L5.40105 15.3248C5.00428 15.7216 5.00428 16.3649 5.40105 16.7616C5.79782 17.1584 6.44111 17.1584 6.83788 16.7616L11.1268 12.4728L15.416 16.762C15.8128 17.1588 16.456 17.1588 16.8528 16.762C17.2496 16.3652 17.2496 15.7219 16.8528 15.3252L12.5636 11.0359L16.8525 6.74698C17.2493 6.35021 17.2493 5.70692 16.8525 5.31015ZM16.921 6.02856C16.921 6.22992 16.8441 6.43127 16.6905 6.5849L14.465 8.8104L12.2395 11.0359L12.2395 11.0359L16.6905 6.58493C16.8441 6.43129 16.921 6.22993 16.921 6.02856ZM5.34966 6.19087C5.37992 6.3354 5.45115 6.47307 5.56336 6.58528L10.014 11.0359L10.014 11.0359L5.56336 6.58524C5.45116 6.47304 5.37992 6.33539 5.34966 6.19087ZM5.35087 16.2121C5.38193 16.3541 5.45267 16.4891 5.56309 16.5996C5.87037 16.9068 6.36856 16.9068 6.67583 16.5996L11.1268 12.1486L15.578 16.5999C15.8853 16.9072 16.3835 16.9072 16.6908 16.5999C16.8498 16.4409 16.9265 16.2307 16.9209 16.0223C16.9265 16.2307 16.8498 16.4409 16.6908 16.5999C16.3835 16.9072 15.8853 16.9072 15.578 16.5999L11.1268 12.1487L6.67583 16.5996C6.36856 16.9069 5.87037 16.9069 5.56309 16.5996C5.45267 16.4892 5.38192 16.3541 5.35087 16.2121Z\"\n fill=\"#333333\"\n />\n </svg>\n </div>\n </div>\n <div\n className={cn(\n 'my-[32px] flex-1 overflow-auto overscroll-contain px-[24px] md:mb-[48px]',\n !title && 'mt-0',\n 'min-l:px-[32px]',\n scrollClassName\n )}\n onScroll={event => {\n const targetElement = event.target as HTMLDivElement\n\n if (targetElement.scrollHeight <= targetElement.clientHeight) {\n return\n }\n\n if (targetElement.scrollTop + targetElement.clientHeight >= targetElement.scrollHeight - 50) {\n onScrollEnd && onScrollEnd(event)\n }\n }}\n >\n {children}\n </div>\n </ReactModal>\n )\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { useRouter } from 'next/router'\nimport { Button, Checkbox, Picture, Text } from '@anker-in/headless-ui'\nimport { classNames, fetcher, gaTrack, useHeadlessContext } from '@anker-in/lib'\nimport Cookies from 'js-cookie'\nimport { parse } from 'query-string'\nimport sha256 from 'crypto-js/sha256'\nimport { useCreditsContext } from '../context/provider'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport { emailValidate } from '../context/utils'\nimport { CreditsModalContainer, type ModalContainerProps } from './modalContainer'\n\nexport type CreditsSubscribeModalCopy = {\n title: string\n desc?: string\n placeholder: string\n policy?: string\n successTips?: string\n dealsType?: string\n}\n\ninterface CreditsSubscribeModalProps extends ModalContainerProps {\n copy: CreditsSubscribeModalCopy\n onSuccess?: () => void\n}\n\nconst getAdCookie = () => {\n if (typeof window === 'undefined') {\n return { register_source: '' }\n }\n const { search, href } = window.location || {}\n const query = parse(search)\n\n return {\n fbuy_ref_code: Cookies.get('fbuy_ref_code'),\n affiliate: Cookies.get('affiliate'),\n ref: Cookies.get('ref_ads'),\n inviter_code: query.ic || query.inviter_code || Cookies.get('inviter_code'),\n register_source: query.redirect || Cookies.get('reg_source') || href,\n deals_type: Cookies.get('deal'),\n transfer_id: Cookies.get('transfer_id'),\n }\n}\n\nexport function CreditsSubscribeModal({ copy, onSuccess, ...props }: CreditsSubscribeModalProps) {\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const { locale } = useRouter()\n const [policy, setPolicy] = useState(false)\n const [email, setEmail] = useState('')\n const [errorMessage, setErrorMessage] = useState('')\n const [successMessage, setSuccessMessage] = useState('')\n const [loading, setLoading] = useState(false)\n const { profile } = useCreditsContext()\n\n const handleEmailChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setErrorMessage('')\n setEmail(event.target?.value?.trim())\n }, [])\n\n const handleSubmit = useCallback(async () => {\n setErrorMessage('')\n if (!email) {\n return setErrorMessage('Please fill in your email')\n }\n\n if (!emailValidate(email)) {\n return setErrorMessage('Invalid email address')\n }\n\n if (!policy) {\n return setErrorMessage('Please agree to the policy')\n }\n\n setLoading(true)\n const { register_source } = getAdCookie()\n\n const result = await fetcher({\n locale,\n action: 'subscribe',\n url: '/api/multipass/subscribe/subscribe_emails',\n method: 'POST',\n body: {\n email,\n register_source,\n brand,\n deals_type: copy.dealsType || 'vip_subscribe',\n },\n headers: {},\n type: '',\n })\n setLoading(false)\n\n if (!result.errors) {\n setSuccessMessage(copy.successTips || 'Subscribed successfully!')\n if (onSuccess) {\n onSuccess()\n }\n setTimeout(() => {\n setSuccessMessage('')\n }, 3000)\n gaTrack({\n subscribe_hashed_email: email ? sha256(email) : '',\n })\n gaTrack({\n event: 'ga4Event',\n event_name: 'subscribe',\n event_parameters: {\n page_group: copy.dealsType || 'vip_subscribe',\n position: 'pop_up',\n },\n })\n gaTrack({\n event: 'uaEvent',\n eventCategory: 'subscribe',\n eventAction: copy.dealsType || 'vip_subscribe',\n eventLabel: 'pop_up',\n nonInteraction: false,\n })\n } else {\n setErrorMessage(result.errors || result.statusText)\n }\n }, [email, policy, locale, brand, copy.dealsType, copy.successTips, onSuccess])\n\n useEffect(() => {\n if (profile && profile?.email) {\n setEmail(profile?.email)\n }\n }, [profile])\n\n return (\n <CreditsModalContainer\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] min-l:px-[48px] md:mb-[24px]\"\n titleClassName=\"h-[56px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n {...props}\n >\n <div className=\"flex flex-col gap-[16px] text-center min-l:px-[16px]\">\n <div>\n <Text className={classNames('mb-[24px] text-[22px] font-bold')} html={copy.title}></Text>\n </div>\n {copy.desc && (\n <Text\n className=\"mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]\"\n html={copy.desc}\n ></Text>\n )}\n <div\n className={classNames(\n 'relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]',\n !rounded && 'rounded-none'\n )}\n >\n <input\n className={classNames(\n 'h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]',\n !rounded && 'rounded-none'\n )}\n placeholder={copy.placeholder}\n value={email}\n onChange={handleEmailChange}\n />\n <Button\n variant=\"primary\"\n onClick={handleSubmit}\n loading={loading}\n className={classNames(\n 'legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]',\n !rounded && 'rounded-none'\n )}\n >\n <Picture\n source=\"https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383\"\n className=\"h-[24px] w-[24px]\"\n alt=\"email\"\n />\n </Button>\n </div>\n <div className=\"flex w-full\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(!policy)} required className=\"border-[#1d1d1f]\" />\n <label\n className=\"text-left ml-2 text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{\n __html: copy?.policy || '',\n }}\n />\n </div>\n <div\n className={classNames(\n 'w-full text-left text-[16px] font-semibold',\n errorMessage && 'text-[#F84D4F]',\n successMessage && 'text-[#52C41A]'\n )}\n >\n <Text html={successMessage || errorMessage || ''} />\n </div>\n </div>\n </CreditsModalContainer>\n )\n}\n","import { Container, Heading, Tabs, TabsList, TabsTrigger, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { useMemo, useState } from 'react'\n\nimport { FaqItem } from './faqItem/FaqItem'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport type CreditsFaqCopy = {\n title: string\n subTitle: string\n learnMore: {\n link: string\n label: string\n }\n items: {\n category_name: string\n question: string\n answer: string\n }[]\n}\nexport const CreditsFaq = ({ copy, id }: { copy: CreditsFaqCopy; id?: string }) => {\n const { title, items: faqList, subTitle = '' } = copy || {}\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const categoryList = useMemo(() => {\n return Array.from(new Set(faqList?.map?.(faq => faq.category_name).filter(item => !!item)))\n }, [faqList])\n const [activeTab, setActiveTab] = useState<string>(categoryList[0]?.toString() || '')\n\n const currentList = useMemo(() => {\n if (!faqList) return []\n if (categoryList.length) {\n return faqList.filter(item => item?.category_name === activeTab)\n }\n return faqList\n }, [faqList, categoryList.length, activeTab])\n\n return (\n <Container id={id} className=\"bg-[#F5F5F7]\">\n {title && <Heading as=\"h2\" size=\"4\" html={copy?.title} />}\n {subTitle && (\n <div className=\"mt-[8px] flex flex-row\">\n <Text size=\"4\" as=\"p\" html={subTitle} className=\"flex-1\" />\n </div>\n )}\n {/* faq-nav */}\n <Tabs\n align=\"left\"\n shape={rounded ? 'rounded' : 'square'}\n className=\"mt-[24px]\"\n value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(value)\n }}\n >\n <TabsList>\n {categoryList.map((item, index) => (\n <TabsTrigger key={index} value={item?.toString() || ''}>\n {item}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n <div className={cn('mt-[24px] flex flex-col overflow-auto pt-0')}>\n {currentList?.map((item, index) => {\n return (\n <FaqItem\n key={index}\n index={index}\n defaultExpended={faqList.length === 1}\n question={item.question}\n answer={item.answer}\n showDots={false}\n ></FaqItem>\n )\n })}\n </div>\n {copy.learnMore?.link && copy.learnMore?.label && (\n <a\n href={copy.learnMore?.link}\n target=\"_blank\"\n className=\"mt-[24px] block w-full text-center text-[18px] font-bold text-brand hover:underline l:text-[16px]\"\n >\n {copy.learnMore?.label}\n </a>\n )}\n </Container>\n )\n}\n","import { Heading, Text } from '@anker-in/headless-ui'\nimport { ChevronDownIcon } from '@heroicons/react/24/outline'\nimport { classNames as cn } from '@anker-in/lib'\nimport { type ReactNode, useEffect, useState } from 'react'\n\ntype FaqItemProps = {\n index: number\n question?: string\n answer?: string | number\n showDots: boolean\n itemRightIconRender?: ({ expanded }: { expanded: boolean }) => ReactNode\n defaultExpended?: boolean\n}\n\nexport const FaqItem = ({\n index,\n question,\n answer,\n showDots,\n itemRightIconRender,\n defaultExpended = false,\n}: FaqItemProps) => {\n const [expanded, setExpanded] = useState(defaultExpended)\n useEffect(() => {\n if (index == 0) {\n setExpanded(true)\n }\n if (!question) {\n setExpanded(true)\n }\n }, [index, question])\n\n return (\n <div key={index} className={cn('relative mx-0 border-b-[1px] border-[#e4e5e6] py-[24px] l:py-[16px]')}>\n <div\n className=\"relative flex items-center\"\n onClick={() => {\n setExpanded(!expanded)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n <Heading\n html={question}\n as=\"h3\"\n className={cn(\n showDots\n ? 'before:absolute before:left-[-15px] before:top-[8px] before:h-[6px] before:w-[6px] before:rounded-[50%] before:bg-[#000] before:content-[\"\"]'\n : '',\n 'relative block flex-1 cursor-pointer pr-[10px] text-[18px] font-bold text-[#1D1D1F] l:text-[16px]'\n )}\n ></Heading>\n {itemRightIconRender ? (\n itemRightIconRender({ expanded })\n ) : (\n <ChevronDownIcon\n className={cn(\n 'size-[16px] shrink-0 cursor-pointer stroke-[2.5px] transition-all',\n expanded ? 'rotate-180' : ''\n )}\n />\n )}\n </div>\n <div\n className={cn(\n 'grid transition-all duration-300 ease-in-out [&_td]:border [&_td]:border-[#333] [&_td]:px-[8px] [&_td]:py-[4px]',\n expanded ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\n )}\n >\n <div className=\"overflow-hidden\">\n {answer?.toString()?.includes('https://www.youtube.com') ? (\n <Text\n as=\"div\"\n className={cn('mt-[8px]')}\n data-ratio=\"16:9\"\n data-content={answer}\n html={answer?.toString()}\n ></Text>\n ) : (\n <Text\n as=\"div\"\n html={answer?.toString()}\n className={cn(\n 'mt-[8px] text-[16px] font-bold leading-[1.5] text-[#3D3D3F] l:text-[14px] [&_a]:text-brand [&_a]:underline'\n )}\n ></Text>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import { Container, Heading, Text } from '@anker-in/headless-ui'\nimport { useMemo, useState } from 'react'\n\nimport RedeemableItem from './RedeemableItem'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport RulesModal from '../modal/rulesModal'\nimport { useProductsByHandles, useHeadlessContext } from '@anker-in/lib'\nimport { CreditsCashCopy, RedeemItem } from './type'\nimport { Product, classNames as cn } from '@anker-in/lib'\nimport { useCreditsContext } from '../context/provider'\nimport { numberFormat } from '../context/utils'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport const CreditsCash = ({ copy, id }: { copy: CreditsCashCopy; id?: string }) => {\n const [rules, setRules] = useState<string | string[]>()\n const { redeemableList } = useRedeemableList()\n const { pageCommon } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const variantMetafieldIdentifiers: any[] = []\n\n const { data: productByHandles } = useProductsByHandles({\n handles: copy?.list?.map(item => item.products?.[0]?.handle) || [],\n metafieldIdentifiers: {\n variant: variantMetafieldIdentifiers,\n },\n })\n\n const list = useMemo(() => {\n return productByHandles\n ?.map((product: Product) => {\n const config = (copy.list || []).find(item => item.products?.[0]?.handle === product.handle)\n const alpcData = redeemableList.find(item => item.id?.toString() === config?.redeemId?.toString())\n const productVariant =\n product.variants?.find((variant: any) => variant.sku === config?.products?.[0]?.sku) || product.variants?.[0]\n if (!alpcData || !productVariant) return null\n return {\n product,\n productVariant,\n alpcData: {\n id: alpcData?.id,\n consumeCredits: alpcData?.consume_credits,\n remainingInventory: alpcData?.remaining_inventory,\n isLimited: alpcData?.is_limited,\n consumeType: alpcData?.consume_type,\n title: alpcData?.name,\n desc: alpcData?.note,\n },\n config,\n }\n })\n .filter(Boolean) as unknown as RedeemItem[]\n }, [productByHandles, copy.list, redeemableList])\n\n return (\n <Container id={id} className={cn('bg-[#F5F5F5]')}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} />\n\n <div className=\"relative mt-[24px] grid grid-cols-4 gap-[16px] l:gap-[12px] md:grid-cols-2 md-xl:grid-cols-3\">\n {list?.map((item, index: number) => (\n <RedeemableItem\n key={index}\n copy={copy}\n itemData={item}\n setRules={setRules}\n currencyCode={productByHandles?.[0]?.price.currencyCode || 'USD'}\n />\n ))}\n </div>\n\n {rules && (\n <RulesModal\n overlayClassName=\"md:px-[16px] md:items-center\"\n className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}\n isOpen={rules.length > 0}\n onClose={() => setRules([])}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] md:mb-[24px] md:pt-0\"\n title={pageCommon?.ruleLabel}\n ruleClassName=\"text-[#1d1d1f] font-bold\"\n />\n )}\n </Container>\n )\n}\n","import { Button, Text, Picture, Badge } from '@anker-in/headless-ui'\nimport { useMemo, useState } from 'react'\n\nimport { CreditsCashCopy, RedeemItem } from './type'\nimport { useCreditsContext } from '../context/provider'\nimport { useRedeemAndBuy } from '../context/hooks/useRedeemAndBuy'\nimport { formatPrice, numberFormat, extractVariantId } from '../context/utils'\nimport { gaTrack, classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { useRegistration } from '../../../components/registration'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nfunction RedeemableItem({\n copy,\n itemData,\n setRules,\n className,\n}: {\n copy: CreditsCashCopy\n itemData: RedeemItem\n className?: string\n setRules: (rules: string[]) => void\n currencyCode: string\n}) {\n const {\n creditInfo,\n profile,\n openSignUpPopup,\n pageCommon,\n gtm: { pageGroup, pageHandle },\n } = useCreditsContext()\n const { authCodeActivate } = useRegistration()\n const { brand, locale } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const [error, setError] = useState<string | null>(null)\n const { trigger, isMutating } = useRedeemAndBuy(\n {},\n {\n onError: error => {\n setError(error.message)\n },\n }\n )\n\n const isLogin = useMemo(() => {\n return !!profile\n }, [profile?.activated])\n\n const inSufficientCredit = useMemo(() => {\n return (\n isLogin && profile?.activated && itemData.alpcData?.consumeCredits > Number(creditInfo?.available_credit || 0)\n )\n }, [isLogin, profile?.activated, itemData.alpcData?.consumeCredits, creditInfo?.available_credit])\n\n const isDisabled = useMemo(() => {\n // 兑换限制\n if (itemData.alpcData?.remainingInventory <= 0 && itemData.alpcData?.isLimited) {\n return true\n }\n\n // 商品库存限制\n if (!itemData.productVariant?.availableForSale) {\n return true\n }\n\n // 积分不足\n if (inSufficientCredit) {\n return true\n }\n return false\n }, [\n itemData.alpcData?.remainingInventory,\n itemData.alpcData?.isLimited,\n itemData.productVariant?.availableForSale,\n inSufficientCredit,\n ])\n\n const handleRedeem = () => {\n setError(null)\n if (!isLogin) {\n openSignUpPopup()\n } else if (!profile?.activated && !authCodeActivate.isActivateSuccess) {\n authCodeActivate.open()\n } else {\n trigger({\n productVariant: itemData?.productVariant,\n redeemId: itemData?.config?.redeemId,\n })\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n member_active_status: profile?.activated ? 'active' : 'not active',\n event_parameters: {\n page_group: pageGroup,\n position: copy.title,\n button_name: redeemButtonText,\n info: itemData?.alpcData?.id?.toString(),\n },\n })\n }\n }\n\n const redeemButtonText = useMemo(() => {\n // 缺货文案\n if (!itemData.productVariant?.availableForSale) {\n return copy?.soldOut || 'Sold Out'\n } else if (!isLogin) {\n return copy.unlockRewards\n } else {\n return copy.btnRedeem\n }\n }, [isLogin, itemData.productVariant?.availableForSale, copy.btnRedeem, copy.unlockRewards, copy?.soldOut])\n\n return (\n <div\n className={cn(\n 'relative flex flex-col items-center rounded-[16px] bg-[#EAEAEC] md:rounded-[12px] px-[24px] pb-[24px] l:px-[8px] l:pb-[8px] md-xl:px-[16px] md-xl:pb-[16px]',\n !rounded && 'rounded-none md:rounded-none',\n copy.badgeLabel ? 'pt-[48px] l:pt-[44px]' : 'pt-[24px] md-xl:pt-[16px] l:pt-[8px]',\n className\n )}\n >\n {/* Redeem 标签 Badge */}\n {copy.badgeLabel && (\n <Badge\n className=\"absolute left-[24px] l:left-[16px] !bg-gradient-brand top-[16px] z-10\"\n size=\"lg\"\n variant=\"promotional\"\n promotionalType=\"regular-member\"\n >\n {copy.badgeLabel}\n </Badge>\n )}\n\n <a\n href={\n extractVariantId(itemData.productVariant?.id)\n ? `/products/${itemData.product.handle}?variant=${extractVariantId(itemData.productVariant?.id)}${pageHandle ? `&ref=${pageHandle}` : ''}`\n : `/products/${itemData.product.handle}${pageHandle ? `?ref=${pageHandle}` : ''}`\n }\n className={cn('relative mx-auto h-[196px] w-fit md:h-[120px] md-xxl:h-[138px]')}\n >\n <Picture\n className=\"mx-auto h-full w-auto\"\n imgClassName=\"h-full object-contain\"\n source={\n itemData?.config?.image?.url ||\n itemData?.productVariant?.metafields?.global?.transparentImg ||\n itemData?.productVariant?.image?.url\n }\n ></Picture>\n </a>\n <div className={cn('mt-[10px] w-full xl:mt-[8px]')}>\n <Text\n html={itemData?.product?.title}\n title={itemData.config?.title || itemData.alpcData?.title || itemData.product?.title}\n size={2}\n className=\"line-clamp-2 h-[58px] text-[24px] l-xxl:text-[20px] l:text-[16px] leading-[1.2] l:h-[38px] l-xxl:h-[48px]\"\n />\n {itemData?.config?.rules?.split('<br>')?.length > 0 && (\n <button\n type=\"button\"\n onClick={() => {\n setRules(itemData?.config?.rules?.split('<br>'))\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n member_active_status: profile?.activated ? 'active' : 'not active',\n event_parameters: {\n page_group: pageGroup,\n position: copy.title,\n button_name: pageCommon?.ruleLabel,\n info: itemData?.alpcData?.id?.toString(),\n },\n })\n }}\n className=\"mt-[8px] text-[16px] font-bold underline xxl:text-[14px]\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {pageCommon?.ruleLabel}\n </button>\n )}\n\n <div className=\"flex flex-wrap items-center l:mt-[12px] md:min-h-[46px] laptop:text-[16px] lg-desktop:text-[18px]\">\n <Picture\n className=\"size-[24px] l-xxl:size-[22px] md-l:size-[18px] md:size-[16px]\"\n source=\"https://cdn.shopify.com/s/files/1/0511/6346/3874/files/icon_hire_purchase.png?v=1757496783\"\n />\n <Text\n html={`${numberFormat(itemData?.alpcData?.consumeCredits)} + ${formatPrice({\n amount: Number(itemData?.config?.price),\n currencyCode: itemData?.productVariant?.price.currencyCode || 'USD',\n locale: locale,\n })}`}\n size={2}\n as=\"p\"\n className=\"ml-[4px] mt-[4px] font-bold leading-none text-[24px] l-xxl:text-[20px] l:text-[16px]\"\n />\n <Text\n html={formatPrice({\n amount: itemData?.productVariant?.price.amount,\n currencyCode: itemData?.productVariant?.price.currencyCode || 'USD',\n locale: locale,\n })}\n className=\"l-xxl:text-[20px] mt-[4px] l:text-[16px] ml-[4px] font-bold leading-[1.2] tracking-[-0.8px] text-[#4A4C56] line-through\"\n as=\"p\"\n />\n </div>\n\n <div className=\"group relative w-full mt-[8px]\">\n <Button\n disabled={isDisabled}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[8px] md:px-[10px] l:w-full\"\n loading={isMutating}\n onClick={() => {\n handleRedeem()\n }}\n title={inSufficientCredit ? pageCommon.insufficientCredits : redeemButtonText}\n >\n {redeemButtonText}\n </Button>\n <div\n className={cn(\n 'absolute -bottom-[20px] left-0 z-10 w-[300px] translate-y-full opacity-0 transition-opacity group-hover:opacity-100 md:-bottom-[14px] md:w-[160px]',\n inSufficientCredit ? 'block' : 'hidden'\n )}\n >\n <div\n className={cn(\n 'relative rounded-[10px] bg-[#6D6D6F] p-[16px] text-[14px] font-medium text-white shadow md:px-[10px] md:py-[8px]',\n !rounded && 'rounded-none'\n )}\n >\n <Text as=\"p\" size=\"2\" html={pageCommon?.insufficientCredits} className=\"text-[14px]\" />\n <div className=\"absolute -top-[10px] left-[48px] mb-2 size-[16px] origin-top-left rotate-45 transform rounded-[2px] bg-[#6D6D6F]\" />\n </div>\n </div>\n </div>\n </div>\n {error && <div className=\"mt-[8px] text-[14px] text-[#FF0000]\">{error}</div>}\n </div>\n )\n}\n\nexport default RedeemableItem\n","import { ALPC_COUNTRY_MAP } from '../const'\nimport { useAlpcMutation, type UseMutationConfig } from './useAlpcFetch'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { useCreditsContext } from '../provider'\n\ntype RedeemCouponResponse = {\n data: {\n success: boolean\n coupon_code: string\n }\n msg: string // 报错信息\n code: number // 报错码\n}\n\nexport const useRedeemCoupon = (mutationOptions: UseMutationConfig<RedeemCouponResponse> = {}) => {\n const { alpcBrand } = useCreditsContext()\n const { locale, appName, brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n return useAlpcMutation<\n RedeemCouponResponse,\n {\n user_id?: string\n rule_id: number\n }\n >(\n {\n url: `/v1/credit/redeem/coupon`,\n initData: {\n brand,\n country: ALPC_COUNTRY_MAP.get(locale) || locale,\n app_name: appName,\n },\n },\n mutationOptions\n )\n}\n","import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'\nimport { useRedeemCoupon } from './useRedeemCoupon'\nimport type { ProductVariant } from '@anker-in/lib'\nimport { useCreditsContext } from '../provider'\nimport { useBuyNow } from '@anker-in/lib'\n\nexport const useRedeemAndBuy = (\n _: any,\n swrOptions?: SWRMutationConfiguration<undefined, Error, string, any> & {\n throwOnError?: boolean\n }\n) => {\n const { trigger } = useRedeemCoupon()\n const { profile } = useCreditsContext()\n\n const { trigger: buyNow } = useBuyNow(\n {},\n {\n throwOnError: true,\n }\n )\n\n return useSWRMutation(\n 'redeemAndBuy',\n async (\n _,\n {\n arg,\n }: {\n arg: {\n productVariant: ProductVariant\n quantity?: number\n redeemId: number\n }\n }\n ) => {\n const res = await trigger({\n user_id: profile?.user_id,\n rule_id: arg.redeemId,\n })\n if (res && res?.data?.coupon_code) {\n buyNow({\n discountCodes: [res.data.coupon_code],\n lineItems: [\n {\n variant: arg.productVariant,\n quantity: arg.quantity || 1,\n },\n ],\n })\n } else {\n throw new Error(`Redeem failed: ${res?.msg}`)\n }\n },\n swrOptions\n )\n}\n","import { useCallback, useEffect, useState } from 'react'\n\nimport { useAlpcMutation } from './useAlpcFetch'\nimport { ALPC_COUNTRY_MAP } from '../const'\nimport { useCreditsContext } from '../provider'\nimport type { ConsumeCreditRuleResponse } from '../response'\nimport { useHeadlessContext } from '@anker-in/lib'\n\nfunction useRedeemableList() {\n let locale = '' as string\n const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()\n const { locale: contextLocale, brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n if (contextLocale === 'pl') {\n locale = 'eu'\n } else {\n locale = contextLocale\n }\n\n const [redeemableList, setRedeemableList] = useState<ConsumeCreditRuleResponse[]>([])\n const { isMutating: listLoading, trigger } = useAlpcMutation<\n {\n data: { consume_credit_rules: ConsumeCreditRuleResponse[] }\n },\n { user_id?: string }\n >({\n url: `/v1/credit/consume_credit_rules`,\n initData: {\n brand,\n page: 1,\n page_size: 999,\n country: (ALPC_COUNTRY_MAP.get(locale) || locale)?.toUpperCase(),\n },\n })\n\n const getRedeemableList = useCallback(() => {\n trigger(\n {\n user_id: profile?.user_id,\n },\n {\n onSuccess(responseData) {\n let list = responseData.data.consume_credit_rules || []\n let cList = list.filter(i => i.consume_type == 1) || []\n let pList = list.filter(i => i.consume_type == 2) || []\n cList = cList.sort((prev, next) => prev.consume_credits - next.consume_credits)\n pList = pList.sort((prev, next) => prev.consume_credits - next.consume_credits)\n const resultList = cList.concat(pList)\n setRedeemableList(resultList)\n\n localStorage?.setItem(\n `consume_credit_rules-${locale}`,\n JSON.stringify({\n expire: Date.now() + 10 * 60 * 1000,\n consume_credit_rules: resultList,\n })\n )\n },\n }\n )\n }, [profile, trigger, locale])\n\n useEffect(() => {\n if (!isLoadingProfile) {\n getRedeemableList()\n }\n }, [getRedeemableList, isLoadingProfile])\n\n return {\n listLoading,\n redeemableList,\n getRedeemableList,\n }\n}\n\nexport default useRedeemableList\n","import { Text } from '@anker-in/headless-ui'\nimport { useMemo } from 'react'\n\nimport { CreditsModalContainer, type ModalContainerProps } from './modalContainer'\nimport { classNames as cn } from '@anker-in/lib'\n\nfunction RulesModal({\n rules,\n className,\n ruleClassName,\n ...props\n}: {\n rules: string | string[]\n ruleClassName?: string\n className?: string\n} & ModalContainerProps) {\n const rulesComponent = useMemo(() => {\n if (typeof rules === 'string') {\n return <Text className={cn('text-[16px] font-semibold', ruleClassName)} html={rules}></Text>\n } else {\n return (\n <ul className=\"ml-4 text-[16px]\">\n {rules?.map((rule, index) => (\n <li key={index} className={cn('mb-[10px] list-disc')}>\n <Text\n as=\"div\"\n className={cn('text-[16px] font-semibold leading-[1.4] text-[#777777]', ruleClassName)}\n html={rule}\n ></Text>\n </li>\n ))}\n </ul>\n )\n }\n }, [ruleClassName, rules])\n\n return (\n <CreditsModalContainer className={cn('max-h-[90vh] w-[640px]', className)} {...props}>\n {rulesComponent}\n </CreditsModalContainer>\n )\n}\n\nexport default RulesModal\n","import { Container, Heading, Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport { useCallback, useMemo, useState } from 'react'\n\nimport RedeemCouponModal from './RedeemCouponModal'\nimport RedeemProductModal from './RedeemProductModal'\nimport { useCreditsContext } from '../context/provider'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport { AlpcConsumeType, AlpcErrorCode } from '../context/const'\nimport { useHeadlessContext, useProductsByHandles, gaTrack, classNames as cn } from '@anker-in/lib'\nimport type { RedeemableItem as RedeemableItemType } from '../type'\nimport { RedeemableItem } from './RedeemableItem'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport RulesModal from '../modal/rulesModal'\nimport { CreditsRedeemListCopy } from './type'\nimport { useRegistration } from '../../../components/registration'\nimport { numberFormat } from '../context/utils'\n\nexport const CreditsRedeemList = ({ copy, id }: { copy: CreditsRedeemListCopy; id?: string }) => {\n const {\n profile,\n openSignUpPopup,\n gtm: { pageGroup },\n pageCommon,\n creditInfo,\n } = useCreditsContext()\n const { authCodeActivate } = useRegistration()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isLogin = Object.keys(profile || {}).length > 0\n\n const [activeTab, setActiveTab] = useState<string>(copy.list?.[0]?.label || '')\n\n const [popRedeemData, setPopRedeemData] = useState<RedeemableItemType | undefined>(undefined)\n\n const [rules, setRules] = useState<string | string[]>()\n\n const { listLoading, redeemableList, getRedeemableList } = useRedeemableList()\n\n const alpcList = useMemo(() => {\n return redeemableList.map(item => {\n return {\n id: item.id.toString(),\n title: item.name,\n consumeCredits: item.consume_credits,\n remainingInventory: item.remaining_inventory,\n isLimited: !!item.is_limited,\n consumeType: item.consume_type,\n handle: item.sku_handle,\n sku: item.goods_sku,\n image: item.goods_url,\n }\n })\n }, [copy.list, activeTab, redeemableList])\n\n const handles = alpcList.map(item => item.handle)\n const { data: products } = useProductsByHandles({ handles })\n\n const list = useMemo(() => {\n const currentList = copy.list?.find(item => item.label === activeTab)\n return (currentList?.list || [])\n .filter(item => alpcList.some(alpcItem => String(alpcItem.id) === String(item.id)))\n .map(item => {\n const alpcItem = alpcList.find(alpcItem => String(alpcItem.id) === String(item.id))\n const product = products?.find(product => product.handle === alpcItem?.handle)\n const variant = product?.variants.find(variant => variant.sku === alpcItem?.sku)\n // 过滤掉库存不足的商品\n if (alpcItem?.isLimited && (!alpcItem?.remainingInventory || alpcItem.remainingInventory <= 0)) return null\n if (alpcItem?.consumeType === AlpcConsumeType.Product && (!product || !variant)) return null\n return {\n alpc: alpcList.find(alpcItem => String(alpcItem.id) === String(item.id)),\n config: item,\n product,\n variant,\n }\n })\n .filter(item => item !== null) as unknown as RedeemableItemType[]\n }, [alpcList, products])\n\n const handleRedeemError = useCallback(\n (errorCode: AlpcErrorCode) => {\n if (errorCode === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n getRedeemableList()\n }\n },\n [getRedeemableList]\n )\n\n return (\n <Container id={id} className={classNames('relative bg-[#F5F5F7]')}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} />\n\n {/* 可用积分展示 */}\n {isLogin && copy.availableCredits && (\n <p className=\"mt-[12px] text-[20px] l-xxl:text-[18px] l:text-[16px] font-bold text-[#4A4C56]\">\n {copy.availableCredits.includes('$credits') ? (\n <>\n {copy.availableCredits.split('$credits')[0]}\n <span\n className={cn(\n 'text-brand-color-0',\n brand === 'ankersolix' &&\n 'bg-gradient-to-r from-[#2c7ed0] via-[#00a9e1] via-[43%] to-[#00db84] bg-clip-text text-transparent'\n )}\n >\n {numberFormat(creditInfo?.available_credit || 0).toString()}\n </span>\n {copy.availableCredits.split('$credits')[1] || ''}\n </>\n ) : (\n copy.availableCredits\n )}\n </p>\n )}\n\n <Tabs\n shape={rounded ? 'rounded' : 'square'}\n align=\"left\"\n className={classNames('py-[24px] md:justify-center')}\n value={activeTab.toString()}\n onValueChange={value => {\n setActiveTab(value)\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_navigation',\n event_parameters: {\n navigation: value,\n page_group: pageGroup,\n },\n })\n }}\n >\n <TabsList>\n {(copy.list || []).map(item => (\n <TabsTrigger key={item.label} value={item.label}>\n {item.label}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n {/* PC端 */}\n {!!alpcList?.length && !listLoading && (\n <div\n className={classNames('relative grid grid-cols-4 gap-[16px] md:grid-cols-2 md:gap-[12px] md-xl:grid-cols-3')}\n >\n {list?.map(item => (\n <RedeemableItem\n key={item?.alpc?.id}\n copy={copy}\n item={item}\n onRedeem={(item: RedeemableItemType) => {\n if (!isLogin) {\n openSignUpPopup()\n } else if (!profile?.activated && !authCodeActivate.isActivateSuccess) {\n authCodeActivate.open()\n } else {\n setPopRedeemData(item)\n }\n }}\n onRulesOpen={setRules}\n />\n ))}\n </div>\n )}\n\n {popRedeemData?.alpc?.consumeType === AlpcConsumeType.Coupon && copy?.redeemModal?.coupon && popRedeemData && (\n <RedeemCouponModal\n isOpen={!!popRedeemData}\n item={popRedeemData}\n copy={copy}\n onError={handleRedeemError}\n onClose={() => {\n setPopRedeemData(undefined)\n }}\n />\n )}\n {popRedeemData?.alpc?.consumeType === AlpcConsumeType.Product && copy?.redeemModal && popRedeemData && (\n <RedeemProductModal\n isOpen={!!popRedeemData}\n item={popRedeemData}\n copy={copy}\n onError={handleRedeemError}\n onClose={() => {\n setPopRedeemData(undefined)\n }}\n />\n )}\n {rules && (\n <RulesModal\n overlayClassName=\"md:px-[16px] md:items-center\"\n className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}\n isOpen={rules.length > 0}\n onClose={() => setRules([])}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] md:mb-[24px] md:pt-0\"\n title={pageCommon?.ruleLabel}\n ruleClassName=\"text-[#1d1d1f] font-bold\"\n />\n )}\n </Container>\n )\n}\n","import { Button, Picture, Text } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport { useCallback, useEffect, useState } from 'react'\nimport type { ModalContainerProps } from '../modal/modalContainer'\nimport useCopy from '../context/hooks/useCopy'\nimport { useCreditsContext } from '../context/provider'\nimport { useRedeemCoupon } from '../context/hooks/useRedeemCoupon'\nimport { AlpcErrorCode } from '../context/const'\nimport { CreditsModalContainer } from '../modal/modalContainer'\nimport { numberFormat } from '../context/utils'\nimport type { RedeemableItem as RedeemableItemType } from '../type'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { CreditsRedeemListCopy } from './type'\nimport { NoneProductValue } from './RedeemProductModal/NonProductValue'\n\nfunction RedeemCouponModal({\n item,\n copy,\n onError,\n ...props\n}: ModalContainerProps & {\n item: RedeemableItemType\n copy: CreditsRedeemListCopy\n onError: (code: number) => void\n}) {\n const { locale } = useHeadlessContext()\n const [couponCode, setCouponCode] = useState<string>()\n const [errorInfo, setErrorInfo] = useState<string>()\n\n const [disabled, setDisabled] = useState(false)\n const { copy: copyText, copied: copiedStatus } = useCopy()\n\n const { profile, fetchCreditInfo, pageCommon } = useCreditsContext()\n\n const { isMutating: loading, trigger } = useRedeemCoupon({\n onSuccess(responseData) {\n if (!responseData) {\n setErrorInfo(copy.redeemModal.commonError)\n return\n }\n\n if (responseData?.data?.success) {\n setCouponCode(responseData.data.coupon_code)\n fetchCreditInfo(profile?.user_id)\n } else {\n let errorMsg\n if (responseData.code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n errorMsg = copy.redeemModal.redeemLimitError\n setDisabled(true)\n } else if (responseData.code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n errorMsg = copy.redeemModal.inventoryNotEnough\n setDisabled(true)\n } else if (responseData.code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n errorMsg = copy.redeemModal.creditsNotEnough\n setDisabled(true)\n fetchCreditInfo(profile?.user_id)\n } else if (responseData.code === AlpcErrorCode.CodeCrossSiteError) {\n errorMsg = copy.redeemModal.crossSiteError\n setDisabled(true)\n }\n\n setErrorInfo(errorMsg || copy.redeemModal.commonError || '')\n onError && onError(responseData.code)\n }\n },\n onError(error) {\n setErrorInfo(error.message || copy.redeemModal.commonError)\n },\n })\n\n const handleConfirm = useCallback(async () => {\n setErrorInfo('')\n trigger({\n user_id: profile?.user_id,\n rule_id: Number(item.alpc?.id),\n })\n }, [item, profile, trigger])\n\n useEffect(() => {\n if (!props.isOpen) {\n setDisabled(false)\n setErrorInfo('')\n }\n }, [props.isOpen])\n\n return (\n <CreditsModalContainer\n {...props}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] min-l:px-0 md:mb-[24px] px-0\"\n titleClassName=\"h-[56px] bg-[#F5F5F7]\"\n >\n <div\n className={classNames(\n 'max-h-[500px] overflow-y-auto bg-[#F5F5F7] px-[48px] pb-[24px] md:max-h-[400px] md:px-[16px]'\n )}\n >\n <div className=\"relative mx-auto h-[164px] w-[324px]\">\n {pageCommon?.imageMapping?.[item.config?.type]?.url && (\n <Picture source={pageCommon.imageMapping[item.config.type].url} className=\"h-full [&_img]:h-full\" />\n )}\n <div className=\"absolute bottom-[8px] left-[16px] font-extrabold text-white\">\n {item.config.value ? (\n <NoneProductValue item={item} copy={copy} />\n ) : (\n <Text size={3} html={item.alpc?.title} />\n )}\n </div>\n </div>\n {couponCode ? (\n <div className=\"mt-[30px] flex items-center justify-center md:mt-[18px]\">\n <div className=\"mr-[10px] text-[24px] font-bold leading-[1.4] md:leading-[1.2]\">{couponCode}</div>\n <div\n className={classNames(\n 'cursor-pointer text-[16px] font-bold leading-[1.2] underline md:text-[14px]',\n copiedStatus ? 'pointer-events-none' : 'pointer-events-auto'\n )}\n onClick={() => {\n copyText(couponCode)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {copiedStatus ? pageCommon?.copied : pageCommon?.copy}\n </div>\n </div>\n ) : (\n <Text\n as=\"p\"\n className={classNames(\n 'mt-[30px] text-center text-[24px] font-bold leading-[1.2] md:mt-[18px] md:text-[20px] md:leading-[1.2]'\n )}\n >\n {numberFormat(item.alpc?.consumeCredits)} {pageCommon?.pointUnit}\n </Text>\n )}\n {!couponCode && item.config?.rules?.length > 0 && (\n <div className=\"mt-[18px] w-full text-[16px] font-bold leading-[1.4] text-[#6D6D6F] md:mt-[12px] md:text-[14px]\">\n <div className=\"mb-[4px]\">{pageCommon?.ruleLabel}:</div>\n <ul className=\"ml-4 grid grid-flow-row gap-[4px]\">\n {item.config?.rules?.map((text, index) => (\n <li className=\"list-disc\" key={index}>\n <Text html={text} />\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n <div className=\"bg-white px-[48px] pt-[24px] text-center md:px-[16px]\">\n {couponCode && !loading ? (\n <>\n <div className=\"flex flex-col\">\n <Text\n className=\"mb-[4px] text-[24px] font-bold leading-[1.2] md:text-[20px]\"\n html={copy.redeemModal.coupon.successTitle}\n ></Text>\n <Text\n className=\"text-[16px] font-bold leading-[1.4] text-[#6D6D6F] md:text-[14px]\"\n html={copy.redeemModal.coupon.successDesc}\n ></Text>\n </div>\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[16px] w-full\"\n onClick={() => {\n window.location.href = copy.redeemModal.coupon.successButtonUrl || `/${locale}`\n if (props.onClose) {\n props.onClose()\n }\n }}\n disabled={disabled}\n >\n {copy.redeemModal.coupon.successButton}\n </Button>\n </>\n ) : (\n <>\n <Text\n className=\"block text-[24px] font-bold leading-[1.2] md:text-[20px] md:leading-[1.2]\"\n html={copy.redeemModal.confirmTitle}\n ></Text>\n <Button\n loading={loading}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[16px] w-full\"\n onClick={handleConfirm}\n disabled={disabled}\n >\n {copy.redeemModal.confirmButton}\n </Button>\n </>\n )}\n {errorInfo && (\n <div className=\"mx-auto max-w-full py-[12px] text-center text-[#FF0000]\">\n <Text className=\"text-[14px] font-semibold text-[#1F2021]\" html={errorInfo} />\n </div>\n )}\n </div>\n </CreditsModalContainer>\n )\n}\n\nexport default RedeemCouponModal\n","import clipboard from 'copy-to-clipboard'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nconst useCopy = () => {\n const copyTimer = useRef<any>()\n const [copied, setCopied] = useState(false)\n\n const copy = useCallback((val: string) => {\n clipboard(val)\n\n if (copyTimer.current) {\n clearTimeout(copyTimer.current)\n }\n\n setCopied(true)\n copyTimer.current = setTimeout(() => {\n setCopied(false)\n }, 2000)\n }, [])\n\n useEffect(() => {\n return () => {\n if (copyTimer.current) {\n clearTimeout(copyTimer.current)\n }\n }\n }, [])\n\n return {\n copy,\n copied,\n }\n}\n\nexport default useCopy\n","import { Text } from '@anker-in/headless-ui'\nimport { RedeemableItem } from '../../type'\nimport { CreditsRedeemListCopy } from '../type'\nimport { ConsumeType } from '../../context/const'\nimport { useCreditsContext } from '../../context/provider'\n\nexport const NoneProductValue = ({ item, copy }: { item: RedeemableItem; copy: CreditsRedeemListCopy }) => {\n const { pageCommon } = useCreditsContext()\n // shipping coupon 仅展示文案\n if (item.config?.type === ConsumeType.ShippingCoupon) {\n return <Text className=\"text-[24px] w-[70%] font-bold leading-none\" html={item.config?.value} as=\"p\" />\n } else {\n return item.config?.value ? (\n <div className=\"flex items-end gap-[4px]\">\n <Text className=\"text-[64px] font-extrabold leading-none\" html={item.config.value.toString()} />\n <Text\n className=\"text-[24px] font-bold leading-[2]\"\n html={item.config.type === ConsumeType.Coupon ? pageCommon?.off : pageCommon?.giftCardLabel}\n />\n </div>\n ) : (\n <Text className=\"text-[24px] w-[70%] font-bold leading-none\" html={item.config?.title} as=\"p\" />\n )\n }\n}\n","import classNames from 'classnames'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useCreditsContext } from '../../context/provider'\nimport useCountries from '../../context/hooks/useCountries'\nimport { AlpcErrorCode } from '../../context/const'\nimport { useAddressValidate } from '../../context/hooks/useAddressValidate'\nimport { useRedeemProduct } from '../../context/hooks/useRedeemProduct'\nimport type { ModalContainerProps } from '../../modal/modalContainer'\nimport { CreditsModalContainer } from '../../modal/modalContainer'\nimport type { RedeemableItem as RedeemableItemType } from '../../type'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { CreditsRedeemListCopy } from '../type'\nimport { Error } from './Error'\nimport { Success } from './Success'\nimport { Address } from './Address'\nimport { Init } from './Init'\n\ntype RedeemProductModalProps = ModalContainerProps & {\n item: RedeemableItemType\n copy: CreditsRedeemListCopy\n onError: (code: AlpcErrorCode) => void\n}\n\nfunction RedeemProductModal({ item, copy, onError, ...props }: RedeemProductModalProps) {\n const { fetchCreditInfo, profile } = useCreditsContext()\n const { storeDomain, locale } = useHeadlessContext()\n\n const { pageCommon } = useCreditsContext()\n const { shippingAddress, shippingProduct } = copy.redeemModal.product\n\n const [status, setStatus] = useState<'init' | 'address' | 'success' | 'error'>('init')\n const [address, setAddress] = useState<any>()\n const [errorInfo, setErrorInfo] = useState({\n code: 0,\n message: '',\n imageUrl: '',\n })\n const [disabled, setDisabled] = useState(false)\n\n const { countries = [], isLoading: countriesLoading } = useCountries({ shopifyStoreDomain: storeDomain })\n\n const { isMutating: loading, trigger } = useRedeemProduct({\n onSuccess(responseData) {\n if (!responseData) {\n setStatus('error')\n setErrorInfo({\n code: 0,\n imageUrl: copy.redeemModal.errorImageUrl || '',\n message: copy.redeemModal.commonError || '',\n })\n return\n }\n\n if (responseData?.code === 0) {\n fetchCreditInfo(profile?.user_id)\n setStatus('success')\n } else {\n let errorMsg\n let errorImage\n if (responseData.code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n errorMsg = copy.redeemModal.redeemLimitError\n setDisabled(true)\n } else if (responseData.code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n errorMsg = copy.redeemModal.inventoryNotEnough\n setDisabled(true)\n errorImage = copy.redeemModal.inventoryNotEnough\n } else if (responseData.code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n errorMsg = copy.redeemModal.creditsNotEnough\n setDisabled(true)\n fetchCreditInfo(profile?.user_id)\n } else if (responseData.code === AlpcErrorCode.CodeCrossSiteError) {\n errorMsg = copy.redeemModal.crossSiteError\n setDisabled(true)\n }\n\n setStatus('error')\n setErrorInfo({\n code: responseData.code,\n imageUrl: errorImage || copy.redeemModal.errorImageUrl || '',\n message: errorMsg || copy.redeemModal.commonError || '',\n })\n onError && onError(responseData.code)\n }\n },\n onError(error) {\n setStatus('error')\n setErrorInfo({\n code: 0,\n imageUrl: copy.redeemModal.errorImageUrl || '',\n message: copy.redeemModal.commonError || '',\n })\n },\n })\n\n const stateInputKey = useMemo(() => {\n const stateInput = copy?.redeemModal.product.form?.flat().find(item => item.type === 'state')\n return stateInput?.key\n }, [copy?.redeemModal.product.form])\n\n const { validate: validateAddress, errors: validateErrors } = useAddressValidate({\n address: address,\n validatorInfo: pageCommon?.validatorInfo,\n formData: copy?.redeemModal.product.form?.flat() || [],\n errorLabel: {\n require: copy.redeemModal.product.required,\n email: copy.redeemModal.product.invalidEmail,\n },\n })\n\n const handlePayment = useCallback(async () => {\n const ignoreKeys: string[] = []\n\n if (stateInputKey) {\n const provinces = countries.find(item => item.code === address.country)?.provinces || []\n\n if (!provinces.length) {\n ignoreKeys.push(stateInputKey as never)\n }\n }\n\n if (\n validateAddress({\n force: true,\n ignoreKeys,\n })\n ) {\n // 地址校验错误\n return\n }\n let requestAddress = { ...address }\n if (requestAddress.name) {\n delete requestAddress.name\n }\n if (requestAddress.country === 'UK') {\n requestAddress.country = 'GB'\n }\n trigger({\n address: btoa(JSON.stringify(requestAddress)),\n rule_id: Number(item.alpc?.id),\n })\n }, [item, trigger, stateInputKey, validateAddress, address, countries])\n\n useEffect(() => {\n if (!props.isOpen) {\n setDisabled(false)\n setErrorInfo({ code: 0, message: '', imageUrl: '' })\n }\n }, [props.isOpen, locale])\n\n return (\n <CreditsModalContainer\n {...props}\n className={classNames(\n 'w-[540px] md:h-auto min-md:max-h-[calc(100vh-40px)]',\n status !== 'init' && 'w-[740px] md:w-full'\n )}\n scrollClassName=\"mb-0 min-l:px-0 md:mb-0 px-0\"\n titleClassName={classNames('h-[56px]', status === 'init' && 'bg-[#F5F5F7]')}\n title={status === 'address' ? 'Order Confirmation' : ''}\n >\n {status === 'error' && <Error errorInfo={errorInfo} />}\n {status === 'success' && (\n <Success\n copy={copy}\n shippingProduct={shippingProduct}\n loading={loading}\n address={address}\n disabled={disabled}\n onClose={props.onClose}\n item={item}\n />\n )}\n {status === 'address' && (\n <Address\n copy={copy}\n shippingAddress={shippingAddress}\n setAddress={setAddress}\n validateAddress={validateAddress}\n validateErrors={validateErrors}\n shippingProduct={shippingProduct}\n loading={loading}\n address={address}\n disabled={disabled}\n handlePayment={handlePayment}\n item={item}\n />\n )}\n {status === 'init' && (\n <Init item={item} copy={copy} loading={loading} disabled={disabled} setStatus={setStatus} />\n )}\n </CreditsModalContainer>\n )\n}\n\nexport default RedeemProductModal\n","import { useEffect, useState } from 'react'\n\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { type ShippingCountry, type ShippingZone } from '../../type'\n\nfunction useCountries({ shopifyStoreDomain }: { shopifyStoreDomain: string }) {\n const { locale = '' } = useHeadlessContext()\n\n const [isLoading, setLoading] = useState(false)\n const [countries, setCountries] = useState<ShippingCountry[]>([])\n\n useEffect(() => {\n const fetchCountries = async () => {\n setLoading(true)\n try {\n const response = await fetch(`/api/multipass/rainbowbridge/uc/shop/shipping_zones?shop=${shopifyStoreDomain}`)\n const res: any = await response.json()\n\n // 国家过滤\n let shipsToCountries: ShippingCountry[] = []\n const countrySet = new Set()\n res.data.data.forEach((shippingZoneItem: ShippingZone) => {\n shippingZoneItem.countries.forEach(shippingZoneCountryItem => {\n if (!countrySet.has(shippingZoneCountryItem.code)) {\n countrySet.add(shippingZoneCountryItem.code)\n shipsToCountries.push(shippingZoneCountryItem)\n }\n })\n })\n\n // 字母顺序排序\n shipsToCountries = shipsToCountries.sort((a, b) => {\n return a.code.localeCompare(b.code)\n })\n\n console.log('fetch shipsToCountries', shipsToCountries)\n setCountries(shipsToCountries)\n } catch (e) {\n setCountries([])\n console.error(e)\n } finally {\n setLoading(false)\n }\n }\n\n fetchCountries()\n }, [locale])\n\n return {\n isLoading,\n countries,\n }\n}\n\nexport default useCountries\n","import { useCallback, useMemo, useState } from 'react'\nimport { emailValidate } from '../utils'\nimport { useHeadlessContext } from '@anker-in/lib'\n\ntype ValidatorCallback = (value: string, params?: Record<string, any>) => boolean\n\nconst US_SPECIAL_CHARACTERS = /[&%*<>^#;-]/\nconst EU_SPECIAL_CHARACTERS = /[&^*%<>;,?]/\nconst SC_CHARACTERS = /[^a-zA-Z0-9\\s]/\nconst PURE_DIGITAL = /^\\d+(\\s+\\d+)*$/\nconst PACKSTATION = /(Packstation|Postfiliale)/gi\nconst POBOX = /(P(\\.)?\\s*?O(\\.)?\\s*?box|Post(al)?(\\s*)?(Office(\\s*))?Box)/gi\n\nconst ruleValidators: Record<string, ValidatorCallback> = {\n minLength: (value, params) => value?.length > 0 && value?.length < params?.length,\n maxLength: (value, params) => value?.length > params?.length,\n isUSSpecialCharacters: value => US_SPECIAL_CHARACTERS.test(value),\n isEUSpecialCharacters: value => EU_SPECIAL_CHARACTERS.test(value),\n isSC: value => SC_CHARACTERS.test(value),\n isPureDigital: value => PURE_DIGITAL.test(value),\n isPackstation: value => PACKSTATION.test(value),\n isPobox: value => POBOX.test(value),\n}\n\nexport interface Rule {\n key: string\n error: string\n rule?: string\n params?: Record<string, any>\n required?: boolean\n validator?: (value: string, key: string, address: Record<string, any>) => boolean | string\n}\n\nexport type FormData = {\n key: string\n label: string\n tips: string\n required: boolean\n placeholder: string\n type?: string\n}[]\n\n// 国家/地区配置映射\nconst LOCALE_CONFIGS = {\n us: {\n nameRules: ['isUSSpecialCharacters'],\n addressRules: {\n address1: ['isPobox', 'isUSSpecialCharacters', 'minLength', 'maxLength', 'isPureDigital'],\n address2: ['isPobox', 'isUSSpecialCharacters', 'maxLength', 'isPureDigital'],\n },\n addressLengths: { min: 4, max: 32 },\n },\n 'eu-en': {\n nameRules: ['isEUSpecialCharacters'],\n addressRules: {\n address1: ['isPobox', 'isEUSpecialCharacters', 'minLength', 'maxLength', 'isPureDigital', 'isPackstation'],\n address2: ['isPobox', 'isEUSpecialCharacters', 'maxLength', 'isPackstation'],\n },\n addressLengths: { min: 3, max: 70 },\n },\n uk: {\n nameRules: ['isEUSpecialCharacters'],\n addressRules: {\n address1: ['isPobox', 'isEUSpecialCharacters', 'minLength', 'maxLength', 'isPureDigital'],\n address2: ['isPobox', 'isEUSpecialCharacters', 'maxLength'],\n },\n addressLengths: { min: 3, max: 35 },\n },\n 'eu-de': {\n nameRules: ['isEUSpecialCharacters'],\n addressRules: {\n address1: ['isPobox', 'isEUSpecialCharacters', 'minLength', 'maxLength', 'isPureDigital', 'isPackstation'],\n address2: ['isPobox', 'isPackstation', 'isEUSpecialCharacters', 'maxLength'],\n },\n addressLengths: { min: 3, max: 35 },\n },\n ca: {\n nameRules: ['isUSSpecialCharacters'],\n addressRules: {\n address1: ['isPobox', 'maxLength'],\n address2: ['isPobox', 'maxLength'],\n },\n addressLengths: { max: 35 },\n },\n}\n\n// 城市规则配置\nconst CITY_CONFIGS = {\n uk: { rules: ['isEUSpecialCharacters', 'minLength', 'maxLength'], lengths: { min: 2, max: 35 } },\n 'eu-en': { rules: ['isEUSpecialCharacters', 'minLength', 'maxLength'], lengths: { min: 2, max: 35 } },\n 'eu-de': { rules: ['isEUSpecialCharacters', 'minLength', 'maxLength'], lengths: { min: 2, max: 35 } },\n ca: { rules: ['minLength', 'maxLength'], lengths: { min: 2, max: 15 } },\n}\n\nexport const useAddressValidate = ({\n address,\n validatorInfo,\n formData,\n errorLabel,\n}: {\n address: Record<string, any>\n validatorInfo: any\n formData: any\n errorLabel: {\n require: string\n email: string\n }\n}) => {\n const { locale } = useHeadlessContext()\n const [errors, setErrors] = useState<{ key: string; message: string }[]>([])\n\n const addressRules: Rule[] = useMemo(() => {\n const {\n city_rules = {},\n name_rules = {},\n address1_rules,\n address2_rules,\n POboxErr,\n packstationErr,\n } = validatorInfo || {}\n\n const localeConfig = LOCALE_CONFIGS[locale as keyof typeof LOCALE_CONFIGS]\n const cityConfig = CITY_CONFIGS[locale as keyof typeof CITY_CONFIGS]\n\n // 基础规则\n const baseRules: Rule[] = [\n // 表单字段规则\n ...formData.map((item: any) => ({\n key: item.key,\n required: item.required,\n error: errorLabel.require || 'This field is required',\n })),\n\n // 邮箱校验\n {\n key: 'email',\n error: errorLabel.email || 'Invalid email format',\n validator(value) {\n return !emailValidate(value)\n },\n },\n\n // 姓名规则\n {\n key: 'first_name',\n required: true,\n error: errorLabel.require || 'First name is required',\n },\n {\n key: 'last_name',\n required: true,\n error: errorLabel.require || 'Last name is required',\n },\n {\n key: 'name',\n error: name_rules.maxLengthErr || errorLabel.require || 'Name is too long',\n validator: value => value?.length >= 31,\n },\n ]\n\n // 城市规则\n const cityRules: Rule[] = cityConfig\n ? cityConfig.rules.map(rule => {\n const ruleConfig: Rule = { key: 'city', rule, error: '' }\n\n if (rule === 'minLength') {\n ruleConfig.params = { length: cityConfig.lengths.min }\n ruleConfig.error = city_rules.minLengthErr || errorLabel.require || 'City is too short'\n } else if (rule === 'maxLength') {\n ruleConfig.params = { length: cityConfig.lengths.max }\n ruleConfig.error = city_rules.maxLengthErr || errorLabel.require || 'City is too long'\n } else if (rule === 'isEUSpecialCharacters') {\n ruleConfig.error = city_rules.characterErr || errorLabel.require || 'Invalid characters in city'\n }\n\n return ruleConfig\n })\n : []\n\n // 姓名特殊字符规则\n const nameRules: Rule[] =\n localeConfig?.nameRules\n .map(rule => ({\n key: 'first_name',\n rule,\n error: name_rules.characterErr,\n }))\n .concat(\n localeConfig?.nameRules.map(rule => ({\n key: 'last_name',\n rule,\n error: name_rules.characterErr,\n })) || []\n ) || []\n\n // 地址规则\n const addressRules: Rule[] = localeConfig\n ? Object.entries(localeConfig.addressRules).flatMap(([addressKey, rules]) =>\n rules.map(rule => {\n const ruleConfig: Rule = { key: addressKey, rule, error: '' }\n const rulesConfig = addressKey === 'address1' ? address1_rules : address2_rules\n\n if (rule === 'isPobox') {\n ruleConfig.error = POboxErr || errorLabel.require || 'PO Box not allowed'\n } else if (rule === 'isPackstation') {\n ruleConfig.error = packstationErr || errorLabel.require || 'Packstation not allowed'\n } else if (rule === 'isUSSpecialCharacters' || rule === 'isEUSpecialCharacters') {\n ruleConfig.error = rulesConfig?.characterErr || errorLabel.require || 'Invalid characters'\n } else if (rule === 'minLength') {\n ruleConfig.params = { length: 'min' in localeConfig.addressLengths ? localeConfig.addressLengths.min : 0 }\n ruleConfig.error = rulesConfig?.minLengthErr || errorLabel.require || 'Address is too short'\n } else if (rule === 'maxLength') {\n ruleConfig.params = { length: localeConfig.addressLengths.max }\n ruleConfig.error = rulesConfig?.maxLengthErr || errorLabel.require || 'Address is too long'\n } else if (rule === 'isPureDigital') {\n ruleConfig.error = rulesConfig?.pureDigitalErr || errorLabel.require || 'Address cannot be only numbers'\n }\n\n return ruleConfig\n })\n )\n : []\n\n return [...baseRules, ...cityRules, ...nameRules, ...addressRules]\n }, [locale, validatorInfo, formData, errorLabel])\n\n const validate = useCallback(\n ({ force, ignoreKeys }: { force?: boolean; ignoreKeys?: string[] }) => {\n let newErrors: { key: string; message: string }[] = []\n\n addressRules.forEach(({ key, rule, params, required, error, validator }) => {\n const defaultValidator = rule ? ruleValidators[rule] : undefined\n\n let result\n\n const value = address[key]\n\n if (ignoreKeys?.includes(key)) {\n return\n }\n\n if (value === undefined && !force) {\n return\n }\n\n if (newErrors.find(item => item.key == key)) {\n return\n }\n\n if (required && !value) {\n result = error\n } else if (validator) {\n result = validator(value, key, address)\n } else if (defaultValidator) {\n result = defaultValidator(value, params)\n }\n\n if (result) {\n newErrors.push({\n key,\n message: typeof result === 'string' ? result : error,\n })\n }\n })\n\n setErrors(newErrors)\n\n if (newErrors.length) {\n return true\n }\n\n return false\n },\n [address, addressRules]\n )\n\n return {\n validate,\n errors,\n }\n}\n","import { ALPC_COUNTRY_MAP } from '../const'\nimport { useAlpcMutation, type UseMutationConfig } from './useAlpcFetch'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { useCreditsContext } from '../provider'\n\ntype RedeemProductResponse = {\n code: number\n data: {\n success: boolean\n }\n}\n\nexport const useRedeemProduct = (mutationOptions: UseMutationConfig<RedeemProductResponse> = {}) => {\n const { alpcBrand } = useCreditsContext()\n const { storeDomain, locale, appName, brand: headlessBrand } = useHeadlessContext()\n const brand = alpcBrand || headlessBrand\n\n return useAlpcMutation<\n RedeemProductResponse,\n {\n rule_id: number\n address: string\n }\n >(\n {\n url: `/v1/credit/exchange/goods`,\n initData: {\n quantity: 1,\n brand,\n country: (ALPC_COUNTRY_MAP.get(locale || '') || locale)?.toUpperCase(),\n domain: storeDomain,\n app_name: appName,\n },\n },\n mutationOptions\n )\n}\n","import { Picture, Text } from '@anker-in/headless-ui'\n\ntype ErrorProps = {\n errorInfo: { imageUrl: string; message: string }\n}\n\nexport const Error = ({ errorInfo }: ErrorProps) => {\n return (\n <div className=\"mx-auto max-w-[404px] text-[16px] text-black/40 py-[56px]\">\n <Picture className=\"mx-auto mb-[12px] h-[140px] w-[220px]\" source={errorInfo.imageUrl} />\n <Text as=\"div\" className=\"mt-[16px] text-center\" html={errorInfo.message} />\n </div>\n )\n}\n","import { Button, Text } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport type { RedeemableItem as RedeemableItemType } from '../../type'\nimport { CreditsRedeemListCopy } from '../type'\nimport { ProductInfo } from './ProductInfo'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype SuccessProps = {\n copy: CreditsRedeemListCopy\n shippingProduct: string\n loading: boolean\n address: Record<string, any> | undefined\n disabled: boolean\n onClose: () => void\n item: RedeemableItemType\n}\n\nexport const Success = ({ copy, shippingProduct, loading, address, disabled, onClose, item }: SuccessProps) => {\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n return (\n <div className={classNames('max-h-[500px] overflow-y-auto px-[48px] pb-[24px] md:max-h-[400px] md:px-[16px]')}>\n <div className=\"flex flex-col items-center\">\n <div className=\"mb-[16px] grid grid-flow-row gap-y-[4px] md:mb-[12px]\">\n {copy.redeemModal.product.successDesc.map((description: string, index: number) => (\n <Text key={index} className=\"text-[18px] font-bold leading-[1.4] md:text-[14px]\" html={description}></Text>\n ))}\n </div>\n\n {shippingProduct && <Text className=\"mb-5 text-[16px] font-bold\" html={shippingProduct}></Text>}\n\n <div className={classNames('flex w-full items-center bg-[#F5F5F7] p-[16px]', !rounded && 'rounded-none')}>\n <ProductInfo item={item} copy={copy} />\n </div>\n\n <Button\n loading={loading || !address}\n variant=\"primary\"\n className=\"mx-auto mt-[16px] w-[444px] md:mt-[12px] md:w-full\"\n onClick={onClose}\n disabled={disabled}\n >\n {copy.redeemModal.product.paymentButton}\n </Button>\n </div>\n </div>\n )\n}\n","import { Picture, Text } from '@anker-in/headless-ui'\nimport { formatPrice } from '../../context/utils'\nimport type { RedeemableItem as RedeemableItemType } from '../../type'\nimport { CreditsRedeemListCopy } from '../type'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { useCreditsContext } from '../../context/provider'\n\ntype ProductInfoProps = {\n item: RedeemableItemType\n copy: CreditsRedeemListCopy\n}\n\nexport const ProductInfo = ({ item, copy }: ProductInfoProps) => {\n const { locale } = useHeadlessContext()\n const { pageCommon } = useCreditsContext()\n\n return (\n <div className=\"flex w-full items-center justify-center md:items-start md:justify-start\">\n <Picture\n className=\"mr-[16px] size-[100px] shrink-0 md:mr-[12px] md:hidden md:size-[44px] [&_img]:h-full [&_img]:w-auto [&_img]:object-contain\"\n source={item.variant.image?.url || item.product?.images[0]?.url}\n alt={item.product.title}\n ></Picture>\n <div className=\"md:flex md:flex-col\">\n <div className=\"md:flex md:items-center\">\n <Picture\n className=\"mr-[16px] size-[100px] shrink-0 md:mr-[12px] md:size-[44px] min-md:hidden [&_img]:h-full [&_img]:w-auto [&_img]:object-contain\"\n source={item.variant.image?.url || item.product?.images[0]?.url}\n alt={item.product.title}\n ></Picture>\n <div className=\"flex-1 text-[16px] font-bold leading-[1.4] min-l:!hidden\" title={item.product.title}>\n {item.product.title}\n </div>\n </div>\n\n <div className=\"mt-[16px] md:mt-[12px]\">\n <Text\n className=\"mb-[12px] line-clamp-1 text-[16px] font-bold l:!hidden\"\n html={item.product.title}\n title={item.product.title}\n ></Text>\n <div className=\"flex font-semibold leading-[1.4] md:flex-col\">\n <div className=\"mr-[40px] text-[15px] font-bold text-[#777] md:mr-0 md:text-[12px]\">\n {item.variant.title && item.variant.title.toLowerCase() !== 'default title' && (\n <div className=\"mb-[8px] flex items-center md:mb-[4px]\">\n <span>{copy.redeemModal.product.variantLabel}: </span>\n <span className=\"ml-1\">{item.variant.title}</span>\n </div>\n )}\n <div className=\"mb-[8px] flex items-center md:mb-[4px]\">\n <span>{copy.redeemModal.product.shippingFeeLabel}: </span>\n <span className=\"ml-1\">\n {formatPrice({\n amount: 0,\n currencyCode: item.product.price?.currencyCode!,\n locale: locale || 'us',\n })}\n </span>\n </div>\n </div>\n <div className=\"text-[15px] font-bold text-[#777] md:text-[12px]\">\n <div className=\"mb-[8px] flex items-center md:mb-[4px]\">\n <span>{copy.redeemModal.product.quantityLabel}: </span>\n <span className=\"ml-1\">1</span>\n </div>\n <div className=\"l:flex l:items-center l:justify-between\">\n <span>{copy.redeemModal.product.totalPriceLabel}: </span>\n <span className=\"ml-1\">\n {item.alpc?.consumeCredits} {pageCommon?.pointUnit}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import { Button, Text } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport { AddressForm } from '../AddressForm'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport type { RedeemableItem as RedeemableItemType } from '../../type'\nimport { CreditsRedeemListCopy } from '../type'\nimport { ProductInfo } from './ProductInfo'\nimport useCountries from '../../context/hooks/useCountries'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype AddressProps = {\n copy: CreditsRedeemListCopy\n shippingAddress: string\n setAddress: (address: Record<string, any>) => void\n validateAddress: (address: Record<string, any>) => boolean\n validateErrors: { key: string; message: string }[]\n item: RedeemableItemType\n loading: boolean\n address: Record<string, any> | undefined\n disabled: boolean\n handlePayment: () => void\n shippingProduct: string\n}\n\nexport const Address = ({\n copy,\n shippingAddress,\n setAddress,\n validateAddress,\n validateErrors,\n shippingProduct,\n loading,\n address,\n disabled,\n handlePayment,\n item,\n}: AddressProps) => {\n const { storeDomain, brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const { countries = [], isLoading: countriesLoading } = useCountries({ shopifyStoreDomain: storeDomain })\n\n return (\n <div className=\"relative\">\n <div className={classNames('max-h-[500px] overflow-y-auto px-[48px] pb-[24px] md:max-h-[400px] md:px-[16px]')}>\n <div>\n {shippingAddress && <Text className=\"mb-5 text-[16px] font-bold\" html={shippingAddress}></Text>}\n {copy.redeemModal?.product?.addressForm && (\n <AddressForm\n onChange={setAddress}\n validate={validateAddress}\n errors={validateErrors}\n form={copy.redeemModal.product.addressForm}\n countries={countries}\n countriesLoading={countriesLoading}\n ></AddressForm>\n )}\n </div>\n </div>\n <div className=\"sticky bottom-0 flex flex-col items-center justify-center bg-white px-[48px] py-[24px] l:px-[16px]\">\n <div className={classNames('flex w-full items-center bg-[#F5F5F7] p-[16px]', !rounded && 'rounded-none')}>\n {shippingProduct && <Text className=\"mb-5 text-[16px] font-bold\" html={shippingProduct}></Text>}\n <ProductInfo item={item} copy={copy} />\n </div>\n <Button\n loading={loading || !address}\n variant=\"primary\"\n className=\"mx-auto mt-[16px] w-[444px] md:mt-[12px] md:w-full\"\n onClick={handlePayment}\n disabled={disabled}\n >\n {copy.redeemModal.product.paymentButton}\n </Button>\n </div>\n </div>\n )\n}\n","import classNames from 'classnames'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { CountrySelect } from './CountrySelect'\nimport { FormItem } from './FormItem'\nimport { Input } from './Input'\nimport { StateSelect } from './StateSelect'\nimport { ALPC_COUNTRY_MAP } from '../../context/const'\nimport { useCreditsContext } from '../../context/provider'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { AddressFormProps } from './type'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\nexport const AddressForm = ({ countries, countriesLoading, form, validate, errors, onChange }: AddressFormProps) => {\n const { profile, customer } = useCreditsContext()\n const { locale, brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const [address, setAddress] = useState<Record<string, any>>()\n\n const states = useMemo(() => {\n const currentCountry = countries.find(item => item.code === address?.country)\n\n return currentCountry?.provinces || []\n }, [address, countries])\n\n const stateInputKey = useMemo(() => {\n const stateInput = form?.flat().find(item => item.type === 'state')\n return stateInput?.key\n }, [form])\n\n const getDefaultAddress = useCallback(() => {\n if (customer?.defaultAddress) {\n return {\n name: (customer?.defaultAddress.firstName || '') + ' ' + (customer?.defaultAddress.lastName || ''),\n first_name: customer?.defaultAddress.firstName,\n last_name: customer?.defaultAddress.lastName,\n address1: customer?.defaultAddress.address1,\n address2: customer?.defaultAddress.address2,\n city: customer?.defaultAddress.city,\n phone: customer?.defaultAddress.phone,\n country: customer?.defaultAddress.countryCodeV2,\n province: customer?.defaultAddress.province,\n province_code: customer?.defaultAddress.provinceCode,\n email: customer?.email || profile?.email,\n zip: customer?.defaultAddress.zip,\n }\n } else {\n let defaultCountry = ALPC_COUNTRY_MAP.get(locale) || locale\n if (defaultCountry === 'UK') {\n defaultCountry = 'GB'\n }\n if (defaultCountry === 'EU') {\n defaultCountry = 'NL'\n }\n return {\n email: profile?.email,\n country: defaultCountry,\n }\n }\n }, [customer, profile?.email, locale])\n\n useEffect(() => {\n if (customer) {\n const defaultAddress = getDefaultAddress()\n setAddress(defaultAddress)\n onChange(defaultAddress)\n }\n }, [customer, getDefaultAddress])\n\n if (!address) {\n return null\n }\n\n return (\n <div className=\"grid gap-[20px]\">\n {form &&\n form.map((row, rowIndex: number) => (\n <div key={rowIndex} className=\"item-center -mx-[6px] flex\">\n {row.map((input, inputIndex: number) => {\n const error = errors.find(item => item.key === input.key)?.message\n const inputClassName = classNames(\n 'h-full w-full appearance-none rounded-[2px] border bg-white px-[14px] py-[17px] leading-[1] outline-none placeholder:text-[#999] autofill:shadow-white focus:border-brand disabled:pointer-events-none disabled:text-[#999] disabled:bg-[#F7F8F9] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none',\n error ? '!border-[#F84D4F]' : 'border-[#d8d8d8]',\n !rounded && 'rounded-none'\n )\n\n if (input.type === 'state') {\n if (!states.length) {\n return null\n }\n }\n\n return (\n <div key={inputIndex} className={classNames('mx-[6px] flex-1')}>\n <FormItem error={error} required={input.required} label={input.label}>\n {input.type === 'country' && (\n <CountrySelect\n className={inputClassName}\n countries={countries}\n loading={countriesLoading}\n value={address.country}\n onChange={selectedCountryCode => {\n if (address.country !== selectedCountryCode) {\n address.province = ''\n address.province_code = ''\n }\n address.country = selectedCountryCode\n setAddress({ ...address })\n onChange(address)\n }}\n ></CountrySelect>\n )}\n {input.type === 'state' && (\n <StateSelect\n className={inputClassName}\n states={states}\n stateCode={address.province_code}\n stateName={address.province}\n onChange={(provinceCode, provinceName) => {\n address.province_code = provinceCode\n address.province = provinceName\n setAddress({ ...address })\n onChange(address)\n }}\n ></StateSelect>\n )}\n\n {input.type !== 'state' && input.type !== 'country' && (\n <Input\n placeholder={input.label}\n className={inputClassName}\n error={error}\n value={address[input.key]}\n required={input.required}\n disabled={input.type === 'email'}\n onChange={event => {\n const value = event.target.value\n address[input.key] = value\n setAddress({ ...address })\n onChange(address)\n }}\n onBlur={() => {\n validate({\n ignoreKeys: states.length && stateInputKey ? [stateInputKey] : [],\n })\n }}\n />\n )}\n </FormItem>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )\n}\n","import { Picture } from '@anker-in/headless-ui'\nimport useClickOutside from '../../context/hooks/useClickOutside'\nimport classNames from 'classnames'\nimport { useEffect, useState } from 'react'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ninterface Country {\n id: string\n code: string\n name: string\n}\n\ninterface CountrySelectProps {\n countries: Country[]\n loading?: boolean\n className?: string\n value?: string\n onChange: (code: string) => void\n}\n\nexport function CountrySelect({ countries, loading, className, value, onChange }: CountrySelectProps) {\n const [show, setShow] = useState(false)\n const [display, setDisplay] = useState<any>('')\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const dorpdown = useClickOutside<HTMLDivElement>(() => {\n setShow(false)\n })\n\n useEffect(() => {\n const target = countries.filter(item => item.code === value)\n if (target.length) setDisplay(target[0].name)\n }, [setDisplay, countries, value])\n\n return (\n <div className=\"relative\">\n <select\n className={classNames('!h-[50px] pr-[45px] min-l:hidden', className)}\n style={{\n WebkitTextFillColor: 'black',\n }}\n disabled={loading}\n value={value}\n onChange={event => {\n onChange(event.target.value)\n }}\n >\n {countries.map((item: { id: string; name: string; code: string }) => (\n <option key={item.code} value={item.code}>\n {item.name}\n </option>\n ))}\n </select>\n\n <div\n className={classNames(\n 'absolute left-0 top-0 hidden !h-[50px] rounded-[2px] pr-[45px] text-[16px] font-bold focus:!border-[#6D6D6F] min-l:!block',\n !rounded && 'rounded-none',\n className\n )}\n onClick={() => {\n setShow(true)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {display}\n </div>\n\n <Picture\n source=\"https://cdn.shopify.com/s/files/1/0517/6767/3016/files/country-select.png?v=1692202500\"\n className=\"absolute pointer-events-none right-0 top-0 bottom-0 size-[50px] object-cover\"\n alt=\"arrow\"\n />\n\n <div\n ref={dorpdown}\n className={classNames(\n 'absolute left-0 top-[58px] z-30 max-h-[334px] w-full cursor-pointer overflow-auto bg-white shadow-[0px_1px_12px_0px_rgba(0,0,0,0.12)]',\n !rounded && 'rounded-none',\n { '!hidden': !show }\n )}\n >\n <ul className=\"py-[6px]\">\n {countries.map((item: { id: string; name: string; code: string }) => (\n <li\n key={item.code}\n value={item.code}\n className={classNames(\n 'relative px-[14px] py-[17px] text-[16px] font-bold leading-[1] transition hover:bg-[#EAEAEC]',\n { '!bg-[#EAEAEC]': item.code === value }\n )}\n >\n <button\n className=\"absolute left-0 top-0 z-1 size-full opacity-0\"\n value={item.code}\n onClick={() => {\n setDisplay(item.name)\n setShow(false)\n onChange(item.code)\n }}\n />\n {item.name}\n </li>\n ))}\n </ul>\n </div>\n </div>\n )\n}\n","import React, { useEffect, useRef } from 'react'\n\nfunction useClickOutside<T extends HTMLElement = HTMLElement>(\n onClickOutside: (event: MouseEvent | TouchEvent) => void,\n): React.RefObject<T> {\n const ref = useRef<T>(null)\n\n useEffect(() => {\n const listener = (event: MouseEvent | TouchEvent) => {\n const el = ref?.current\n\n // Do nothing if clicking ref's element or descendent elements\n if (!el || el.contains(event.target as Node)) {\n return\n }\n\n onClickOutside(event)\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n\n // Reload only if onClickOutside changes\n }, [onClickOutside, ref])\n\n return ref\n}\n\nexport default useClickOutside\n","import { Text } from '@anker-in/headless-ui'\nimport { type PropsWithChildren } from 'react'\n\nexport const FormItem = ({\n error,\n children,\n label,\n required,\n}: PropsWithChildren<{\n label?: string\n required: boolean\n error?: string\n}>) => {\n return (\n <div>\n {label && <Text html={required ? `${label} *` : label} className=\"text-[16px] font-bold\"></Text>}\n <div className=\"mt-[8px] h-[50px] w-full text-[14px] font-semibold\">{children}</div>\n {error && typeof error === 'string' && (\n <Text as=\"div\" html={error} className=\"mt-[8px] text-[16px] font-bold text-[#FF4D4D]\" />\n )}\n </div>\n )\n}\n","import classNames from 'classnames'\nimport React, { useCallback, useEffect, useState } from 'react'\n\ninterface InputProps {\n className?: string\n value: string\n error?: string | boolean\n placeholder: string\n required?: boolean\n disabled?: boolean\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void\n onBlur?: () => void\n}\n\nexport function Input({ className, error, value, placeholder, disabled, onChange, onBlur }: InputProps) {\n const [focus, setFocus] = useState(false)\n\n useEffect(() => {\n if (value) setFocus(true)\n }, [value])\n\n const handleOnChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const val = event.currentTarget.value\n if (val) setFocus(!!val)\n onChange(event)\n },\n [onChange],\n )\n\n const handleOnBlur = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setFocus(!!event.currentTarget.value)\n onBlur && onBlur()\n },\n [onBlur],\n )\n\n const handleOnFocus = useCallback(() => {\n setFocus(true)\n }, [])\n\n return (\n <input\n className={classNames(\n 'w-full rounded-[2px] border border-[#6D6D6F] p-[14px] text-[16px] font-bold placeholder:text-[16px] placeholder:font-bold placeholder:text-[#6D6D6F] focus:outline-none focus:ring-0',\n className,\n error && 'border-[#FF4D4D]',\n )}\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n onChange={handleOnChange}\n onBlur={handleOnBlur}\n onFocus={handleOnFocus}\n ></input>\n )\n}\n","import classNames from 'classnames'\nimport { Picture } from '@anker-in/headless-ui'\nimport { useEffect, useMemo, useState } from 'react'\nimport useClickOutside from '../../context/hooks/useClickOutside'\nimport { useHeadlessContext } from '@anker-in/lib'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ninterface StateSelectProps {\n states: { code: string; id: string; name: string }[]\n className?: string\n countryId?: string\n defaultCode?: string\n stateName?: string\n stateCode?: string\n onChange: (code: string, name: string) => void\n}\n\nexport function StateSelect({ states, stateName = '', stateCode = '', className = '', onChange }: StateSelectProps) {\n const [show, setShow] = useState(false)\n const [display, setDisplay] = useState<any>('')\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const dropdown = useClickOutside<HTMLDivElement>(() => {\n setShow(false)\n })\n\n const value = useMemo(() => {\n const currentState = states.find(item => (stateCode ? item.code === stateCode : item.name === stateName))\n\n return currentState ? [currentState?.id, currentState?.name, currentState?.code].join(',') : ''\n }, [states, stateCode, stateName])\n\n useEffect(() => {\n const target = states.filter(item => [item.id, item.name, item.code].join(',') === value)\n if (target.length) setDisplay(target[0].name)\n }, [setDisplay, states, value])\n\n return (\n <div className=\"relative h-full\">\n {states.length ? (\n <>\n <select\n className={classNames('h-[52px] pr-[45px] min-l:hidden', className)}\n value={value}\n style={{\n WebkitTextFillColor: value ? 'black' : '#666',\n }}\n onChange={event => {\n const [, name, code] = event.target.value.split(',')\n onChange(code, name)\n }}\n >\n {states.map((item: { id: string; name: string; code: string }) => (\n <option key={item.id} value={[item.id, item.name, item.code].join(',')}>\n {item.name}\n </option>\n ))}\n </select>\n <div\n className={classNames('absolute left-0 top-0 hidden h-[52px] pr-[45px] min-l:!block', className)}\n onClick={() => {\n setShow(true)\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {display}\n </div>\n\n <Picture\n source=\"https://cdn.shopify.com/s/files/1/0517/6767/3016/files/country-select.png?v=1692202500\"\n className=\"pointer-events-none absolute right-0 top-1/2 h-[45px] !w-[45px] -translate-y-1/2 object-cover\"\n alt=\"arrow\"\n />\n\n <div\n ref={dropdown}\n className={classNames(\n 'absolute left-0 top-[58px] z-30 max-h-[334px] w-full cursor-pointer overflow-auto bg-white shadow-[0px_1px_12px_0px_rgba(0,0,0,0.12)]',\n !rounded && 'rounded-none',\n { '!hidden': !show }\n )}\n >\n <ul className=\"py-[6px]\">\n {states.map((item: { id: string; name: string; code: string }) => (\n <li\n key={item.id}\n value={[item.id, item.name, item.code].join(',')}\n className={classNames(\n 'relative px-[14px] py-[17px] text-[16px] font-semibold leading-[1] transition hover:bg-[#F7F8F9]',\n {\n '!bg-[#e8e8e8]': [item.id, item.name, item.code].join(',') === value,\n }\n )}\n >\n <button\n className=\"absolute left-0 top-0 z-1 size-full opacity-0\"\n value={[item.id, item.name, item.code].join(',')}\n onClick={() => {\n setDisplay(item.name)\n setShow(false)\n onChange(item.code, item.name)\n }}\n />\n {item.name}\n </li>\n ))}\n </ul>\n </div>\n </>\n ) : (\n <input\n className={className}\n value={stateName}\n style={{\n WebkitTextFillColor: 'black',\n }}\n onChange={event => {\n onChange('', event.target.value)\n }}\n ></input>\n )}\n </div>\n )\n}\n","import { Button, Picture, Text } from '@anker-in/headless-ui'\nimport classNames from 'classnames'\nimport { Fragment, useMemo } from 'react'\nimport { numberFormat } from '../../context/utils'\nimport type { RedeemableItem as RedeemableItemType } from '../../type'\nimport { CreditsRedeemListCopy } from '../type'\nimport { ConsumeType } from '../../context/const'\nimport { NoneProductValue } from './NonProductValue'\nimport { useCreditsContext } from '../../context/provider'\n\ntype InitProps = {\n copy: CreditsRedeemListCopy\n item: RedeemableItemType\n loading: boolean\n disabled: boolean\n setStatus: (status: 'address' | 'init' | 'success' | 'error') => void\n}\n\nexport const Init = ({ copy, item, loading, disabled, setStatus }: InitProps) => {\n const { pageCommon } = useCreditsContext()\n const rules = useMemo(() => {\n if (item.config.rules?.length) {\n return item.config.rules\n }\n const descriptions = item.config.desc?.split('<br>') || []\n return [...descriptions, ...(copy.redeemModal.product.rules || [])]\n }, [item.config.rules, item.config.desc, copy.redeemModal.product.rules])\n\n return (\n <div className=\"flex flex-col\">\n <div\n className={classNames(\n 'max-h-[500px] overflow-y-auto bg-[#F5F5F7] px-[48px] pb-[24px] md:max-h-[400px] md:px-[16px]'\n )}\n >\n <>\n <div className=\"relative mx-auto h-[164px] w-fit\">\n <Picture\n source={\n item.config?.type === ConsumeType.Product\n ? item.product.images[0]?.url\n : pageCommon?.imageMapping?.[item.config.type]?.url || item.config.image?.url\n }\n className=\"h-full w-auto [&_img]:h-full [&_img]:w-auto [&_img]:object-contain\"\n ></Picture>\n {/* 礼品卡展示 */}\n <div className=\"absolute bottom-[8px] left-[16px] font-extrabold text-white\">\n {item.config.value && <NoneProductValue item={item} copy={copy} />}\n </div>\n </div>\n <div className=\"mt-[30px] md:mt-[18px]\">\n {item.config.type === 'product' && (\n <div\n className={classNames(\n 'mb-[4px] text-center text-[24px] font-bold leading-[1.2] md:text-[20px] md:leading-[1.2]'\n )}\n >\n {item.config.title}\n </div>\n )}\n <Text\n as=\"p\"\n className={classNames(' text-center text-[24px] font-bold leading-[1.2] md:text-[20px] md:leading-[1.2]')}\n >\n {numberFormat(item.alpc?.consumeCredits)} {pageCommon?.pointUnit}\n </Text>\n </div>\n <div className=\"mt-[16px] w-full text-[14px] font-semibold text-[#777] md:mt-[12px]\">\n <div className=\"text-[16px] font-bold leading-[1.4]\">{copy.redeemModal.product.stepTitle}</div>\n <div className=\"mt-[4px] flex items-center justify-center\">\n {copy.redeemModal.product.steps?.map((item, index) => (\n <Fragment key={index}>\n <div className=\"flex w-[76px] flex-col items-center text-center md:h-[94px] min-l:w-[130px]\">\n <Picture source={item.imageUrl} className=\"mb-[4px] h-[58px] w-[58px]\"></Picture>\n <div className=\"min-h-[34px] text-[14px] font-bold text-[#777] md:min-h-[28px] md:text-[12px]\">\n {item.title}\n </div>\n </div>\n {index !== copy.redeemModal.product.steps.length - 1 && (\n <Picture\n source=\"https://cdn.shopify.com/s/files/1/0517/6767/3016/files/step-arrow.png?v=1690458150\"\n className=\"mb-[20px] h-[10px] w-[20px] md:mb-[30px] md:h-[5px] md:w-[12px]\"\n ></Picture>\n )}\n </Fragment>\n ))}\n </div>\n <div className=\"overflow-auto\">\n {rules?.length && (\n <ul className=\"ml-[18px] mt-[16px] grid grid-flow-row gap-[4px] text-[16px] font-bold leading-[1.4] text-[#6D6D6F] md:mt-[12px]\">\n {rules.map((text, index) => (\n <li className=\"list-disc\" key={index}>\n <Text as=\"div\" html={text} className=\"font-bold\" />\n </li>\n ))}\n </ul>\n )}\n </div>\n </div>\n </>\n </div>\n <div className=\"flex-1 bg-white px-[48px] py-[24px] text-center md:px-[16px]\">\n <Text\n as=\"p\"\n className=\"block text-[24px] font-bold leading-[1.2] md:text-[20px] md:leading-[1.2]\"\n html={copy.redeemModal.confirmTitle}\n ></Text>\n <Button\n loading={loading}\n disabled={disabled}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[16px] w-full md:mt-[12px]\"\n onClick={() => {\n setStatus('address')\n }}\n >\n {copy.redeemModal.confirmButton}\n </Button>\n </div>\n </div>\n )\n}\n","import { Button, Text, Picture } from '@anker-in/headless-ui'\n\nimport { useMemo } from 'react'\n\nimport classNames from 'classnames'\nimport { useCreditsContext } from '../context/provider'\nimport type { RedeemableItem as RedeemableItemType } from '../type'\nimport { AlpcConsumeType, ConsumeType } from '../context/const'\nimport { numberFormat, extractVariantId } from '../context/utils'\nimport type { CreditsRedeemListCopy } from './type'\nimport { gaTrack, useHeadlessContext } from '@anker-in/lib'\nimport { NoneProductValue } from './NonProductValue'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport function RedeemableItem({\n copy,\n className,\n item,\n onRulesOpen,\n onRedeem,\n}: {\n copy: CreditsRedeemListCopy\n className?: string\n item: RedeemableItemType\n onRulesOpen: (rules: string[]) => void\n onRedeem: (item: RedeemableItemType) => void\n}) {\n const {\n creditInfo,\n profile,\n gtm: { pageGroup, pageHandle },\n pageCommon,\n } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const isLogin = Object.keys(profile || {}).length > 0\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const isDisabled = useMemo(() => {\n if (item.alpc?.remainingInventory <= 0 && item.alpc?.isLimited) {\n // 有库存限制\n return true\n }\n\n if (item.alpc?.consumeType === AlpcConsumeType.Product) {\n if (!item.variant?.availableForSale) {\n return true\n }\n }\n if (isLogin && profile?.activated && item.alpc?.consumeCredits > Number(creditInfo?.available_credit || 0)) {\n return true\n }\n return false\n }, [\n item.alpc?.remainingInventory,\n item.alpc?.isLimited,\n item.alpc?.consumeType,\n item.alpc?.consumeCredits,\n isLogin,\n profile?.activated,\n creditInfo?.available_credit,\n item.variant?.availableForSale,\n ])\n\n const redeemButtonText = useMemo(() => {\n if (!isLogin) {\n return copy.unlockRewards\n }\n\n // 缺货文案\n if (item.alpc?.consumeType === AlpcConsumeType.Product) {\n return item.variant?.availableForSale ? copy.btnRedeem : pageCommon?.soldOut || 'Sold Out'\n }\n return copy.btnRedeem\n }, [\n isLogin,\n item.alpc?.consumeType,\n item.variant?.availableForSale,\n copy.btnRedeem,\n copy.unlockRewards,\n pageCommon?.soldOut,\n ])\n\n // 生成产品 listing 页面链接\n const productUrl = useMemo(() => {\n if (item.config?.type !== ConsumeType.Product || !item.product?.handle) {\n return undefined\n }\n return extractVariantId(item.variant?.id)\n ? `/products/${item.product.handle}?variant=${extractVariantId(item.variant?.id)}${pageHandle ? `&ref=${pageHandle}` : ''}`\n : `/products/${item.product.handle}${pageHandle ? `?ref=${pageHandle}` : ''}`\n }, [item.config?.type, item.product?.handle, item.variant?.id, pageHandle])\n\n return (\n <div\n className={classNames(\n 'flex flex-col items-center rounded-[16px] bg-[#EAEAEC] p-[24px] md:rounded-[12px] md:px-[8px] xl:py-[16px] md-xl:px-[16px]',\n !rounded && 'rounded-none md:rounded-none',\n className\n )}\n >\n {item.config?.type === ConsumeType.Product ? (\n <a\n href={productUrl}\n className={classNames('relative mx-auto h-[224px] w-fit md:my-[10px] l:h-[120px] l-xxl:h-[138px]')}\n >\n <Picture\n className=\"h-full w-auto [&_img]:h-full [&_img]:object-contain\"\n source={item.config?.image?.url || item.product.images?.[0]?.url}\n ></Picture>\n </a>\n ) : (\n <div className=\"relative mx-auto my-[30px] h-[164px] md:my-0 md:h-[66px] l-xxl:h-[138px] md-l:h-[80px]\">\n <Picture\n source={pageCommon?.imageMapping?.[item.config?.type]?.url}\n className=\"h-full [&_img]:h-full [&_img]:w-auto [&_img]:object-contain\"\n ></Picture>\n\n <NoneProductValue item={item} />\n </div>\n )}\n <div className={classNames('mt-[10px] xl:mt-[8px] flex w-full flex-1 flex-col justify-between')}>\n <Text\n html={item.config?.title || item.alpc?.title}\n title={item.config?.title || item.alpc?.title}\n size={2}\n className=\"line-clamp-2 h-[58px] text-[24px] leading-[1.2] l:h-[40px] l:text-[16px] l-xxl:h-[48px] l-xxl:text-[20px]\"\n />\n {item.config?.rules?.length > 0 && (\n <button\n type=\"button\"\n onClick={() => {\n onRulesOpen(item.config?.rules || [])\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n member_active_status: profile?.activated ? 'active' : 'not active',\n event_parameters: {\n page_group: pageGroup,\n position: copy.title,\n button_name: pageCommon?.ruleLabel,\n info: item.alpc?.id?.toString(),\n },\n })\n }}\n className=\"mt-[8px] w-fit text-[16px] font-bold underline md:text-[14px] l:mt-0\"\n tabIndex={0}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }}\n >\n {pageCommon?.ruleLabel}\n </button>\n )}\n <div>\n <div className=\"mt-[26px] flex items-center l:mt-[12px] l-xl:mt-[16px]\">\n <Picture\n className=\"size-[24px] l-xxl:size-[22px] md-l:size-[18px] md:size-[16px]\"\n source=\"https://cdn.shopify.com/s/files/1/0511/6346/3874/files/icon_hire_purchase.png?v=1757496783\"\n />\n <Text\n html={`${numberFormat(item.alpc?.consumeCredits)}`}\n size={2}\n as=\"p\"\n className=\"ml-[4px] text-[24px] font-bold mt-[4px] leading-none l-xxl:text-[20px] l:text-[16px] \"\n />\n </div>\n\n <Button\n disabled={isDisabled}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[8px] md:px-[8px] l:w-full\"\n onClick={() => {\n onRedeem(item)\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n member_active_status: profile?.activated ? 'active' : 'not active',\n event_parameters: {\n page_group: pageGroup,\n position: copy.title,\n button_name: redeemButtonText,\n info: item.alpc?.id?.toString(),\n },\n })\n }}\n >\n {redeemButtonText}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import { Text } from '@anker-in/headless-ui'\nimport { RedeemableItem } from '../type'\nimport { ConsumeType } from '../context/const'\nimport { useCreditsContext } from '../context/provider'\n\nexport const NoneProductValue = ({ item }: { item: RedeemableItem }) => {\n const { pageCommon } = useCreditsContext()\n // shipping coupon 仅展示文案\n if (item.config?.type === ConsumeType.ShippingCoupon) {\n return (\n <div className=\"absolute left-[16px] l-xxl:left-[12px] bottom-[8px] l:left-[8px] font-extrabold text-white md:bottom-[4px] md:left-[5px]\">\n <Text\n className=\"text-[32px] font-bold leading-none md:text-[12px] l-xxl:text-[20px] w-[70%] md:w-full md-l:text-[14px]\"\n html={item.config?.value}\n as=\"p\"\n />\n </div>\n )\n } else {\n return (\n <div className=\"absolute left-[16px] l-xxl:left-[12px] l:left-[8px] bottom-[8px] font-extrabold text-white md:bottom-[4px] md:left-[5px]\">\n {item.config?.value ? (\n <div className=\"flex items-end\">\n <Text\n className=\"text-[64px] font-extrabold leading-none md:text-[20px] l-xxl:text-[40px] md-l:text-[22px]\"\n html={item.config?.value.toString()}\n />\n <Text\n className=\"ml-[4px] text-[24px] font-bold leading-[2] md:ml-[2px] l:text-[12px] xxl:leading-[1.4] l-xxl:text-[20px]\"\n html={item.config?.type === ConsumeType.GiftCard ? pageCommon?.giftCardLabel : pageCommon?.off}\n />\n </div>\n ) : (\n <Text className=\"text-[24px] w-[70%] font-bold leading-none\" html={item.config?.title} as=\"p\" />\n )}\n </div>\n )\n }\n}\n","/**\n * LiveChat 主组件\n * 集成所有子组件,提供完整的聊天功能\n * 基于 specs/livechat-widget/plan.md 的三层架构设计\n */\n\nimport React, { useEffect, useCallback } from 'react'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport type {\n LiveChatWidgetProps,\n QuickReply,\n Message,\n MessageContent,\n ChatStreamRequest,\n BackendCartData,\n CommonText,\n} from './types'\nimport { DEFAULT_COMMON_TEXT } from './constants'\nimport { ChatBubble } from './components/ChatBubble'\nimport { ChatWindow } from './components/ChatWindow'\nimport { useChatState } from './hooks/useChatState'\nimport { useChatAPI } from './hooks/useChatAPI'\nimport { MessageRendererRegistry } from './utils/messageRenderers'\nimport { sanitizeInput } from './utils/validation'\nimport { transformProducts } from './utils/productTransformers.js'\nimport { transformCartData } from './utils/cartTransformers.js'\nimport {\n TextBlock,\n ProductCard,\n ProductList,\n ProductComparisonRenderer,\n PolicyBlock,\n createQuickRepliesRenderer,\n ThinkingBlock,\n ErrorBlock,\n FAQListRenderer,\n PromotionListRenderer,\n CartCard,\n} from './components/MessageContent/index.js'\n\n/**\n * LiveChat 聊天组件\n *\n * 功能:\n * - 气泡弹窗聊天界面\n * - SSE 流式消息接收\n * - 会话管理(userId, sessionId)\n * - 历史消息加载\n * - 多种消息类型渲染\n * - 自定义扩展机制\n * - reCAPTCHA v3 安全防护\n *\n * 架构:\n * - UI Layer: ChatBubble, ChatWindow, MessageList, etc.\n * - Logic Layer: useChatState, useChatAPI, useSession\n * - Core Layer: MessageRendererRegistry, 自定义渲染器\n *\n * @example\n * ```tsx\n * // 基础使用(使用默认位置)\n * <LiveChatWidget\n * apiBaseUrl=\"https://beta-api-livechat.anker.com\"\n * site=\"www.eufy.com\"\n * welcomeMessage=\"你好!我是 AI 助手\"\n * onMessageSend={(msg) => console.log('Sent:', msg)}\n * />\n *\n * // 使用自定义位置\n * <LiveChatWidget\n * apiBaseUrl=\"https://beta-api-livechat.anker.com\"\n * site=\"www.eufy.com\"\n * position={{ bottom: \"20px\", right: \"30px\" }}\n * onMessageSend={(msg) => console.log('Sent:', msg)}\n * />\n *\n * // 启用 reCAPTCHA v3 安全防护\n * <LiveChatWidget\n * apiBaseUrl=\"https://beta-api-livechat.anker.com\"\n * site=\"www.eufy.com\"\n * needRecaptcha={true}\n * recaptchaSitekey=\"6LfS4J4pAAAAACX1e_WrxutmxxzCK7FU4WzVqL14\"\n * recaptchaAction=\"livechat\"\n * />\n *\n * // 使用自定义 headers 和 reCAPTCHA\n * <LiveChatWidget\n * apiBaseUrl=\"https://beta-api-livechat.anker.com\"\n * site=\"www.eufy.com\"\n * headers={{\n * \"Authorization\": \"Bearer your-token\",\n * \"X-Custom-Header\": \"value\"\n * }}\n * needRecaptcha={true}\n * recaptchaSitekey=\"your-site-key\"\n * />\n * ```\n */\nexport const LiveChatWidget: React.FC<LiveChatWidgetProps> = ({\n apiBaseUrl,\n headers,\n needRecaptcha,\n recaptchaSitekey,\n recaptchaAction,\n site,\n loginUserId,\n cartId,\n accessToken,\n position,\n welcomeMessage,\n quickReplies,\n customRenderers,\n logoUrl,\n title,\n chatBubbleIcon,\n onOpen,\n onClose,\n onMessageSend,\n onError,\n onTextMessage,\n onProductList,\n onPromotionList,\n onAddToCart,\n onCart,\n showNewSessionButton,\n commonText,\n}) => {\n // 合并默认文案和自定义文案\n const mergedText: Required<CommonText> = React.useMemo(\n () => ({\n ...DEFAULT_COMMON_TEXT,\n ...commonText,\n }),\n [commonText]\n )\n\n // 状态管理\n const chatState = useChatState({\n welcomeMessage,\n site,\n onOpen,\n onClose,\n onMessageSend,\n onError,\n onTextMessage,\n onProductList,\n onPromotionList,\n onAddToCart,\n onCart,\n })\n\n const {\n messages,\n isOpen,\n userId,\n sessionId,\n inputValue,\n isStreaming,\n openChat,\n closeChat,\n setInputValue,\n addMessage,\n setMessages,\n clearMessages,\n handleSSEEvent,\n saveSession,\n clearSession,\n } = chatState\n\n // API 调用\n const { sendMessageStream, createSession } = useChatAPI({\n apiBaseUrl,\n headers,\n recaptchaConfig: {\n needRecaptcha,\n recaptchaSitekey,\n recaptchaAction,\n },\n onError,\n })\n\n // 使用 ref 存储最新的 handleSendMessage,避免循环依赖\n const handleSendMessageRef = React.useRef<(_message?: string) => Promise<void>>(async (_message?: string) => {})\n\n // 消息渲染器注册表\n const rendererRegistry = React.useMemo(() => {\n const registry = new MessageRendererRegistry()\n\n // 注册默认渲染器\n registry.register('text', TextBlock)\n registry.register('product_card', ProductCard)\n registry.register('product_list', ProductList)\n registry.register('product_comparison', ProductComparisonRenderer)\n registry.register('policy', PolicyBlock)\n registry.register('thinking', ThinkingBlock)\n registry.register('error', ErrorBlock)\n registry.register('faq_list', FAQListRenderer)\n registry.register('promotion_list', PromotionListRenderer)\n registry.register('cart', CartCard)\n\n // 注册快捷回复渲染器(带回调)\n const quickRepliesRenderer = createQuickRepliesRenderer((reply: QuickReply) => {\n // 使用 ref 调用最新的 handleSendMessage\n handleSendMessageRef.current(reply.value)\n })\n registry.register('quick_replies', quickRepliesRenderer)\n\n // 注册自定义渲染器\n if (customRenderers) {\n registry.registerMany(customRenderers)\n }\n\n return registry\n }, [customRenderers])\n\n /**\n * T043: 打开聊天窗口时初始化会话\n * 使用 API v2.0.0 的统一接口:\n * - 如果没有 sessionId,创建新会话\n * - 如果有 sessionId,恢复会话并加载历史消息\n */\n useEffect(() => {\n if (!isOpen || !userId) return\n\n const currentSessionId = sessionId\n\n if (!currentSessionId) {\n // 没有会话,创建新会话\n handleCreateNewSession()\n } else {\n // 有会话,尝试恢复会话和历史消息\n handleResumeSession(currentSessionId)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, userId])\n\n /**\n * 规范化消息格式(确保 content 是数组)\n * 后端返回格式:\n * - content: 字符串(文本内容)\n * - structuredContent: 数组(结构化内容,如产品列表、政策等)\n * 需要合并为统一的 content 数组格式\n */\n const normalizeMessage = useCallback(\n (message: any): Message => {\n // 如果 content 已经是数组,直接返回\n if (Array.isArray(message.content)) {\n return message as Message\n }\n\n const contentBlocks: MessageContent[] = []\n\n // 处理文本内容\n if (typeof message.content === 'string' && message.content.trim()) {\n contentBlocks.push({\n type: 'text',\n text: message.content,\n })\n }\n\n // 处理结构化内容\n // 历史消息格式: structured_content: [{type, data}]\n const structuredData = message.structuredContent || message.structured_content\n\n if (Array.isArray(structuredData)) {\n structuredData.forEach((block: any) => {\n if (block.type === 'product_list' && Array.isArray(block.data)) {\n // 转换产品列表数据结构 - data 直接是产品数组\n contentBlocks.push({\n type: 'product_list',\n data: {\n products: transformProducts(block.data, site),\n title: undefined, // 历史消息不包含 title\n commonText: mergedText,\n },\n })\n } else if (block.type === 'quick_replies' && block.data?.replies) {\n contentBlocks.push({\n type: 'quick_replies',\n data: {\n replies: block.data.replies,\n },\n })\n } else if (block.type === 'policy' && block.data?.title && block.data?.content) {\n contentBlocks.push({\n type: 'policy',\n data: {\n title: block.data.title,\n content: block.data.content,\n },\n })\n } else if (block.type === 'product_comparison' && block.data?.products && block.data?.dimensions) {\n // 转换产品对比数据结构并注入 onAddToCart 回调\n contentBlocks.push({\n type: 'product_comparison',\n data: {\n products: transformProducts(block.data.products, site),\n dimensions: block.data.dimensions,\n onAddToCart: onAddToCart,\n commonText: mergedText,\n },\n })\n } else if (block.type === 'faq_list' && block.data?.found !== undefined) {\n // FAQ 列表卡片 - 直接使用后端数据\n contentBlocks.push({\n type: 'faq_list',\n data: block.data,\n })\n } else if (block.type === 'promotion_list' && block.data?.found !== undefined) {\n // 促销活动列表卡片 - 直接使用后端数据\n contentBlocks.push({\n type: 'promotion_list',\n data: {\n ...block.data,\n commonText: mergedText,\n },\n })\n } else if (block.type === 'cart' && block.data?.id !== undefined) {\n // 购物车卡片 - 转换后端数据格式并注入 onCart 回调\n const transformedData = transformCartData(block.data as BackendCartData)\n contentBlocks.push({\n type: 'cart',\n data: {\n ...transformedData,\n onCart: onCart,\n commonText: mergedText,\n },\n })\n } else {\n // 其他类型直接添加\n contentBlocks.push(block)\n }\n })\n }\n\n // 如果没有任何内容块,返回空文本块\n if (contentBlocks.length === 0) {\n contentBlocks.push({\n type: 'text',\n text: '',\n })\n }\n\n return {\n ...message,\n content: contentBlocks,\n } as Message\n },\n [site, onCart, onAddToCart, mergedText]\n )\n\n /**\n * 创建新会话\n */\n const handleCreateNewSession = useCallback(async () => {\n if (!userId) return\n\n try {\n const response = await createSession({\n user_id: userId,\n site: site,\n real_user_id: loginUserId,\n })\n\n if (response.success) {\n // 保存新会话 ID\n saveSession(response.sessionId)\n\n // 清空消息列表\n clearMessages()\n\n // 使用后端返回的欢迎消息,如果没有则使用 props 中的默认值\n const messageText = response.welcomeMessage || welcomeMessage\n\n if (messageText) {\n const welcomeContent: MessageContent[] = [{ type: 'text', text: messageText }]\n\n // 使用后端返回的快捷问题,如果没有则使用 props 中的快捷回复\n const questions = response.quickQuestions\n if (questions && questions.length > 0) {\n // 将后端的 quickQuestions (字符串数组) 转换为 QuickReply 格式\n const quickRepliesFromBackend = questions.map((question, index) => ({\n id: `quick-${index}`,\n label: question,\n value: question,\n }))\n\n welcomeContent.push({\n type: 'quick_replies',\n data: {\n replies: quickRepliesFromBackend,\n },\n })\n } else if (quickReplies && quickReplies.length > 0) {\n // 如果后端没有返回,使用 props 中的快捷回复\n welcomeContent.push({\n type: 'quick_replies',\n data: {\n replies: quickReplies,\n },\n })\n }\n\n addMessage({\n id: `welcome-${Date.now()}`,\n role: 'assistant',\n content: welcomeContent,\n timestamp: Date.now(),\n })\n }\n }\n } catch (error) {\n console.error('[LiveChatWidget] Failed to create new session:', error)\n onError?.(error as Error)\n }\n }, [\n userId,\n site,\n loginUserId,\n createSession,\n saveSession,\n clearMessages,\n welcomeMessage,\n quickReplies,\n addMessage,\n onError,\n ])\n\n /**\n * 恢复会话和历史消息(使用新的 API v2.0.0)\n */\n const handleResumeSession = useCallback(\n async (existingSessionId: string) => {\n try {\n const response = await createSession({\n user_id: userId,\n session_id: existingSessionId,\n site: site,\n real_user_id: loginUserId,\n })\n\n if (response.success && response.resumed) {\n // 会话恢复成功\n if (response.messages && response.messages.length > 0) {\n // 有历史消息,规范化并加载(过滤掉 null/undefined 值)\n const normalizedMessages = response.messages.filter((msg: any) => msg != null).map(normalizeMessage)\n setMessages(normalizedMessages)\n } else {\n // 没有历史消息,显示欢迎消息\n clearMessages()\n\n // 使用后端返回的欢迎消息,如果没有则使用 props 中的默认值\n const messageText = response.welcomeMessage || welcomeMessage\n\n if (messageText) {\n const welcomeContent: MessageContent[] = [{ type: 'text', text: messageText }]\n\n // 使用后端返回的快捷问题\n const questions = response.quickQuestions\n if (questions && questions.length > 0) {\n const quickRepliesFromBackend = questions.map((question, index) => ({\n id: `quick-${index}`,\n label: question,\n value: question,\n }))\n\n welcomeContent.push({\n type: 'quick_replies',\n data: {\n replies: quickRepliesFromBackend,\n },\n })\n } else if (quickReplies && quickReplies.length > 0) {\n welcomeContent.push({\n type: 'quick_replies',\n data: {\n replies: quickReplies,\n },\n })\n }\n\n addMessage({\n id: `welcome-${Date.now()}`,\n role: 'assistant',\n content: welcomeContent,\n timestamp: Date.now(),\n })\n }\n }\n } else if (!response.resumed) {\n // 会话无效或过期,创建新会话\n clearSession()\n handleCreateNewSession()\n }\n } catch (error) {\n console.error('[LiveChatWidget] Failed to resume session:', error)\n // 恢复失败,清空会话并创建新的\n clearSession()\n handleCreateNewSession()\n }\n },\n [\n userId,\n site,\n loginUserId,\n createSession,\n setMessages,\n clearSession,\n clearMessages,\n normalizeMessage,\n handleCreateNewSession,\n welcomeMessage,\n quickReplies,\n addMessage,\n ]\n )\n\n /**\n * 发送消息\n */\n const handleSendMessage = useCallback(\n async (message?: string) => {\n const textToSend = message || inputValue.trim()\n\n if (!textToSend) return\n\n // 清空输入框\n if (!message) {\n setInputValue('')\n }\n\n // 输入验证\n const sanitized = sanitizeInput(textToSend)\n if (!sanitized) {\n onError?.(new Error('Invalid message'))\n return\n }\n\n // 添加用户消息到界面\n const userMessage = {\n id: `user-${Date.now()}`,\n role: 'user' as const,\n content: [{ type: 'text' as const, text: sanitized }],\n timestamp: Date.now(),\n }\n addMessage(userMessage)\n\n // 触发消息发送回调\n onMessageSend?.(sanitized)\n\n try {\n // 确保有 sessionId,如果没有则先创建会话\n let currentSessionId = sessionId\n if (!currentSessionId) {\n // 没有会话,创建新会话\n const response = await createSession({\n user_id: userId,\n site: site,\n real_user_id: loginUserId,\n })\n if (response.success) {\n currentSessionId = response.sessionId\n saveSession(currentSessionId)\n } else {\n throw new Error('Failed to create session')\n }\n }\n\n // 构建请求参数(session_id 现在是必填的)\n const requestPayload: ChatStreamRequest = {\n message: sanitized,\n user_id: userId,\n session_id: currentSessionId,\n context: {\n cartId: cartId,\n accessToken: accessToken,\n real_user_id: loginUserId,\n },\n }\n\n // 发送消息到后端\n await sendMessageStream(requestPayload, event => {\n // 处理 SSE 事件\n handleSSEEvent(event)\n\n // 特殊处理:会话过期\n if (event.event === 'status' && event.data.type === 'session_expired') {\n clearSession()\n }\n })\n } catch (error) {\n console.error('[LiveChatWidget] Failed to send message:', error)\n onError?.(error as Error)\n }\n },\n [\n inputValue,\n userId,\n sessionId,\n site,\n loginUserId,\n cartId,\n accessToken,\n setInputValue,\n addMessage,\n createSession,\n sendMessageStream,\n handleSSEEvent,\n saveSession,\n clearSession,\n onMessageSend,\n onError,\n ]\n )\n\n // 更新 ref 以保持最新的 handleSendMessage\n React.useEffect(() => {\n handleSendMessageRef.current = handleSendMessage\n }, [handleSendMessage])\n\n return (\n <>\n {/* 气泡按钮 */}\n <ChatBubble position={position} onClick={openChat} visible={!isOpen} iconImageUrl={chatBubbleIcon} />\n\n {/* 聊天窗口(使用 Radix UI Dialog) */}\n <Dialog.Root open={isOpen} onOpenChange={open => (open ? openChat() : closeChat())}>\n <Dialog.Portal>\n <Dialog.Content\n className=\"livechat-window-enter\"\n style={{\n position: 'fixed',\n zIndex: 9998,\n }}\n >\n <ChatWindow\n messages={messages}\n inputValue={inputValue}\n onInputChange={setInputValue}\n onSend={() => handleSendMessage()}\n onClose={closeChat}\n onNewSession={handleCreateNewSession}\n title={title}\n logoUrl={logoUrl}\n isSending={isStreaming}\n rendererRegistry={rendererRegistry}\n inputPlaceholder=\"\"\n onAddToCart={onAddToCart}\n showNewSessionButton={showNewSessionButton}\n />\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n </>\n )\n}\n","/**\n * LiveChat 组件常量定义\n */\n\nimport type { CommonText } from './types'\n\n/**\n * 货币符号映射表\n * 用于将货币代码转换为对应的符号\n */\nexport const CURRENCY_SYMBOLS: Record<string, string> = {\n USD: '$',\n EUR: '€',\n GBP: '£',\n JPY: '¥',\n CNY: '¥',\n}\n\n/**\n * 默认文案配置\n */\nexport const DEFAULT_COMMON_TEXT: Required<CommonText> = {\n learnMore: 'Learn More',\n showLess: 'Show Less',\n addToCart: 'Add to Cart',\n viewMore: 'View More',\n off: 'OFF',\n}\n","/**\n * 聊天悬浮按钮组件\n * 显示在页面角落的气泡按钮,点击后打开聊天窗口\n * 基于 specs/livechat-widget/plan.md 的气泡按钮设计\n */\n\nimport React from 'react'\nimport type { BubblePosition } from '../types'\n\nexport interface ChatBubbleProps {\n /**\n * 气泡按钮位置\n * @default { bottom: \"1.5rem\", right: \"1.5rem\" }\n */\n position?: BubblePosition\n\n /**\n * 点击按钮的回调\n */\n onClick?: () => void\n\n /**\n * 自定义图标\n */\n icon?: React.ReactNode\n\n /**\n * 自定义图标图片 URL\n * 如果提供,将使用图片替代默认的 SVG 图标\n */\n iconImageUrl?: string\n\n /**\n * 是否显示气泡\n * @default true\n */\n visible?: boolean\n\n /**\n * 自定义样式类名\n */\n className?: string\n}\n\n/**\n * 获取气泡按钮的位置样式\n * 如果没有传入 position,使用默认位置(右下角)\n */\nfunction getPositionStyles(position?: BubblePosition): React.CSSProperties {\n // 默认位置:右下角\n const defaultPosition: React.CSSProperties = {\n bottom: '1.5rem',\n right: '1.5rem',\n }\n\n // 如果传入了自定义位置,使用自定义位置\n return position ? (position as React.CSSProperties) : defaultPosition\n}\n\n/**\n * 默认聊天图标 (简单的消息气泡 SVG)\n */\nconst DefaultChatIcon: React.FC = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n)\n\n/**\n * 聊天悬浮按钮组件\n *\n * 功能:\n * - 可配置位置(预设或自定义)\n * - 支持自定义图标(React 节点或图片 URL)\n * - 悬停和点击动画效果\n *\n * 样式:\n * - 使用 livechat.css 中定义的 CSS 变量\n * - 悬停时放大 1.05 倍\n * - 点击时缩小 0.95 倍\n *\n * @example\n * ```tsx\n * // 使用默认图标\n * <ChatBubble onClick={() => setIsOpen(true)} />\n *\n * // 使用自定义位置\n * <ChatBubble\n * position={{ bottom: \"20px\", right: \"30px\" }}\n * onClick={() => setIsOpen(true)}\n * />\n *\n * // 使用图片作为图标\n * <ChatBubble\n * iconImageUrl=\"https://example.com/icon.png\"\n * onClick={() => setIsOpen(true)}\n * />\n * ```\n */\nexport const ChatBubble: React.FC<ChatBubbleProps> = ({\n position,\n onClick,\n icon,\n iconImageUrl,\n visible = true,\n className = '',\n}) => {\n if (!visible) return null\n\n const positionStyles = getPositionStyles(position)\n\n // 渲染图标内容\n const renderIcon = () => {\n // 优先使用图片 URL\n if (iconImageUrl) {\n return (\n <img src={iconImageUrl} alt=\"Chat\" className=\"size-full object-cover\" style={{ borderRadius: 'inherit' }} />\n )\n }\n // 其次使用自定义图标\n if (icon) {\n return icon\n }\n // 最后使用默认图标\n return <DefaultChatIcon />\n }\n\n return (\n <button\n type=\"button\"\n className={`livechat-bubble ${className}`}\n style={{\n ...positionStyles,\n // 如果传入了图片,移除默认背景色\n ...(iconImageUrl && { background: 'transparent' }),\n }}\n onClick={onClick}\n aria-label=\"打开聊天窗口\"\n >\n <div className=\"flex size-full items-center justify-center\">{renderIcon()}</div>\n </button>\n )\n}\n","/**\n * 聊天窗口容器组件\n * 包含头部、消息列表、输入框的完整聊天界面\n * 基于 specs/livechat-widget/plan.md 的窗口设计\n */\n\nimport React, { useState, useRef, useEffect } from 'react'\nimport type { Message, MessageRenderer } from '../types'\nimport { ChatHeader } from './ChatHeader'\nimport { MessageList } from './MessageList'\nimport { ChatInput } from './ChatInput'\nimport { MessageRendererRegistry } from '../utils/messageRenderers'\n\nexport interface ChatWindowProps {\n /**\n * 消息列表\n */\n messages: Message[]\n\n /**\n * 输入框当前值\n */\n inputValue: string\n\n /**\n * 输入框值变化回调\n */\n onInputChange: (value: string) => void\n\n /**\n * 发送消息回调\n */\n onSend: () => void\n\n /**\n * 关闭窗口回调\n */\n onClose?: () => void\n\n /**\n * 新会话回调\n */\n onNewSession?: () => void\n\n /**\n * 头部标题\n */\n title?: string\n\n /**\n * Logo URL\n */\n logoUrl?: string\n\n /**\n * 是否正在发送消息\n * @default false\n */\n isSending?: boolean\n\n /**\n * 是否正在加载历史消息\n * @default false\n */\n isLoadingHistory?: boolean\n\n /**\n * 是否显示时间戳\n * @default true\n */\n showTimestamp?: boolean\n\n /**\n * 是否自动滚动\n * @default true\n */\n autoScroll?: boolean\n\n /**\n * 自定义渲染器注册表\n */\n rendererRegistry?: MessageRendererRegistry\n\n /**\n * 默认渲染器\n */\n defaultRenderer?: MessageRenderer\n\n /**\n * 输入框占位符\n */\n inputPlaceholder?: string\n\n /**\n * 自定义样式类名\n */\n className?: string\n\n /**\n * 商品添加到购物车回调\n */\n onAddToCart?: (product: any) => void\n\n /**\n * 是否显示新会话按钮\n * @default true\n */\n showNewSessionButton?: boolean\n}\n\n/**\n * 聊天窗口容器组件\n *\n * 功能:\n * - 组合头部、消息列表、输入框\n * - 响应式布局(移动端全屏,桌面端固定尺寸)\n * - 动画进入/退出效果\n *\n * 布局结构:\n * ```\n * ┌─────────────────────┐\n * │ ChatHeader │ (固定顶部)\n * ├─────────────────────┤\n * │ MessageList │ (可滚动区域)\n * │ (flex-1) │\n * ├─────────────────────┤\n * │ ChatInput │ (固定底部)\n * └─────────────────────┘\n * ```\n *\n * 响应式设计:\n * - 移动端 (< 768px): 全屏显示\n * - 平板及以上 (>= 768px): 固定尺寸弹窗\n *\n * @example\n * ```tsx\n * <ChatWindow\n * messages={messages}\n * inputValue={inputValue}\n * onInputChange={setInputValue}\n * onSend={handleSend}\n * onClose={() => setIsOpen(false)}\n * onNewSession={handleNewSession}\n * isSending={isStreaming}\n * title=\"AI 助手\"\n * logoUrl=\"/logo.png\"\n * />\n * ```\n */\nexport const ChatWindow: React.FC<ChatWindowProps> = ({\n messages,\n inputValue,\n onInputChange,\n onSend,\n onClose,\n onNewSession,\n title,\n logoUrl,\n isSending = false,\n isLoadingHistory = false,\n showTimestamp = true,\n autoScroll = true,\n rendererRegistry,\n defaultRenderer,\n inputPlaceholder,\n className = '',\n onAddToCart,\n showNewSessionButton = true,\n}) => {\n // 移动端高度调节状态(默认375px)\n const [mobileHeight, setMobileHeight] = useState(375)\n const [isDragging, setIsDragging] = useState(false)\n const dragStartY = useRef(0)\n const dragStartHeight = useRef(375)\n const windowRef = useRef<HTMLDivElement>(null)\n\n // 检测是否为移动端(初始化时立即检测)\n const [isMobile, setIsMobile] = useState(() => {\n if (typeof window !== 'undefined') {\n return window.innerWidth < 768\n }\n return false\n })\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < 768)\n }\n window.addEventListener('resize', checkMobile)\n return () => window.removeEventListener('resize', checkMobile)\n }, [])\n\n // 拖拽开始\n const handleDragStart = (e: React.MouseEvent | React.TouchEvent) => {\n if (!isMobile) return\n\n setIsDragging(true)\n const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY\n dragStartY.current = clientY\n dragStartHeight.current = mobileHeight\n\n // 阻止默认行为\n e.preventDefault()\n }\n\n // 拖拽中\n useEffect(() => {\n if (!isDragging) return\n\n const handleDragMove = (e: MouseEvent | TouchEvent) => {\n const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY\n const deltaY = dragStartY.current - clientY // 向上拖动为正值\n const newHeight = Math.max(375, Math.min(window.innerHeight * 0.9, dragStartHeight.current + deltaY))\n\n setMobileHeight(newHeight)\n\n // 更新CSS变量\n if (windowRef.current) {\n windowRef.current.style.setProperty('--livechat-mobile-height', `${newHeight}px`)\n }\n }\n\n const handleDragEnd = () => {\n setIsDragging(false)\n }\n\n document.addEventListener('mousemove', handleDragMove)\n document.addEventListener('mouseup', handleDragEnd)\n document.addEventListener('touchmove', handleDragMove, { passive: false })\n document.addEventListener('touchend', handleDragEnd)\n\n return () => {\n document.removeEventListener('mousemove', handleDragMove)\n document.removeEventListener('mouseup', handleDragEnd)\n document.removeEventListener('touchmove', handleDragMove)\n document.removeEventListener('touchend', handleDragEnd)\n }\n }, [isDragging])\n\n return (\n <div\n ref={windowRef}\n className={`livechat-window flex flex-col overflow-hidden bg-white ${className}`}\n style={\n {\n borderRadius: '16px',\n '--livechat-mobile-height': `${mobileHeight}px`,\n } as React.CSSProperties\n }\n >\n {/* 移动端拖拽手柄 */}\n {isMobile && (\n <div\n className=\"flex cursor-ns-resize items-center justify-center\"\n style={{\n touchAction: 'none',\n backgroundColor: '#ffffff',\n paddingTop: '8px',\n }}\n onMouseDown={handleDragStart}\n onTouchStart={handleDragStart}\n >\n <div\n style={{\n width: '64px',\n height: '6px',\n borderRadius: '999px',\n backgroundColor: '#DADCE0',\n }}\n />\n </div>\n )}\n\n {/* 头部 */}\n <ChatHeader\n title={title}\n logoUrl={logoUrl}\n onClose={onClose}\n onNewSession={onNewSession}\n showNewSessionButton={showNewSessionButton}\n />\n\n {/* 消息列表(可滚动区域) */}\n <MessageList\n messages={messages}\n rendererRegistry={rendererRegistry}\n defaultRenderer={defaultRenderer}\n showTimestamp={showTimestamp}\n autoScroll={autoScroll}\n isLoadingHistory={isLoadingHistory}\n onAddToCart={onAddToCart}\n />\n\n {/* 输入框 */}\n <ChatInput\n value={inputValue}\n onChange={onInputChange}\n onSend={onSend}\n placeholder={inputPlaceholder}\n disabled={isSending}\n />\n </div>\n )\n}\n","/**\n * 聊天窗口头部组件\n * 显示标题、Logo、关闭按钮和新会话按钮\n * 基于 specs/livechat-widget/plan.md 的头部设计\n */\n\nimport React from 'react'\n\nexport interface ChatHeaderProps {\n /**\n * 头部标题\n */\n title?: string\n\n /**\n * Logo URL\n */\n logoUrl?: string\n\n /**\n * 关闭按钮点击回调\n */\n onClose?: () => void\n\n /**\n * 新会话按钮点击回调\n */\n onNewSession?: () => void\n\n /**\n * 是否显示新会话按钮\n * @default true\n */\n showNewSessionButton?: boolean\n\n /**\n * 自定义样式类名\n */\n className?: string\n}\n\n/**\n * 默认关闭图标 (X)\n */\nconst CloseIcon: React.FC = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n)\n\n/**\n * 新会话图标 (加号)\n */\nconst NewSessionIcon: React.FC = () => (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n)\n\n/**\n * 聊天窗口头部组件\n *\n * 功能:\n * - 显示标题和 Logo\n * - 关闭按钮(移动端隐藏,桌面端显示)\n * - 新会话按钮(清空当前对话)\n *\n * 布局:\n * - Logo (可选) + 标题 | 新会话按钮 + 关闭按钮\n * - 固定高度 64px\n * - 边框分隔下方内容\n *\n * @example\n * ```tsx\n * <ChatHeader\n * title=\"AI 助手\"\n * logoUrl=\"/logo.png\"\n * onClose={() => setIsOpen(false)}\n * onNewSession={() => createNewSession()}\n * />\n * ```\n */\nexport const ChatHeader: React.FC<ChatHeaderProps> = ({\n title = 'AI 助手',\n logoUrl,\n onClose,\n onNewSession,\n showNewSessionButton = true,\n className = '',\n}) => {\n return (\n <div\n className={`flex items-center justify-between border-b border-[#DADCE0] bg-white px-4 py-3 ${className}`}\n style={{ minHeight: '48px' }}\n >\n {/* 左侧:Logo + 标题 */}\n <div className=\"flex items-center gap-3\">\n {logoUrl && <img src={logoUrl} alt=\"Logo\" className=\"size-8 rounded-full object-cover\" />}\n <h2 className=\"text-lg font-semibold text-gray-900\">{title}</h2>\n </div>\n\n {/* 右侧:新会话按钮 + 关闭按钮 */}\n <div className=\"flex items-center gap-2\">\n {/* 新会话按钮 */}\n {showNewSessionButton && onNewSession && (\n <button\n type=\"button\"\n onClick={onNewSession}\n className=\"rounded-lg p-2 text-gray-600\"\n aria-label=\"开始新会话\"\n title=\"开始新会话\"\n >\n <NewSessionIcon />\n </button>\n )}\n\n {/* 关闭按钮 */}\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"tablet:block rounded-lg text-gray-600\"\n aria-label=\"Close chat\"\n >\n <CloseIcon />\n </button>\n )}\n </div>\n </div>\n )\n}\n","/**\n * 消息列表组件\n * 显示所有聊天消息,支持滚动\n * 基于 specs/livechat-widget/plan.md 的消息列表设计\n */\n\nimport React, { useRef, useEffect, useState, useCallback } from 'react'\nimport type { Message, MessageRenderer } from '../types'\nimport { ChatMessage } from './ChatMessage'\nimport { ScrollAnchor } from './ScrollAnchor'\nimport { MessageRendererRegistry } from '../utils/messageRenderers'\n\nexport interface MessageListProps {\n /**\n * 消息列表\n */\n messages: Message[]\n\n /**\n * 自定义渲染器注册表\n */\n rendererRegistry?: MessageRendererRegistry\n\n /**\n * 默认渲染器\n */\n defaultRenderer?: MessageRenderer\n\n /**\n * 是否显示时间戳\n * @default true\n */\n showTimestamp?: boolean\n\n /**\n * 是否自动滚动到底部\n * @default true\n */\n autoScroll?: boolean\n\n /**\n * 是否正在加载历史消息\n * @default false\n */\n isLoadingHistory?: boolean\n\n /**\n * 空状态占位内容\n */\n emptyPlaceholder?: React.ReactNode\n\n /**\n * 自定义样式类名\n */\n className?: string\n\n /**\n * 商品添加到购物车回调\n */\n onAddToCart?: (product: any) => void\n}\n\n/**\n * 默认空状态占位\n */\nconst DefaultEmptyPlaceholder: React.FC = () => (\n <div className=\"flex h-full items-center justify-center text-gray-400\">\n <p className=\"text-sm\">No messages yet</p>\n </div>\n)\n\n/**\n * 加载指示器\n */\nconst LoadingIndicator: React.FC = () => (\n <div className=\"flex justify-center py-4\">\n <div className=\"flex gap-1\">\n <div className=\"size-2 animate-bounce rounded-full bg-gray-400\" />\n <div className=\"size-2 animate-bounce rounded-full bg-gray-400\" style={{ animationDelay: '0.1s' }} />\n <div className=\"size-2 animate-bounce rounded-full bg-gray-400\" style={{ animationDelay: '0.2s' }} />\n </div>\n </div>\n)\n\n/**\n * 消息列表组件\n *\n * 功能:\n * - 显示所有消息(用户、助手、系统)\n * - 自动滚动到最新消息\n * - 加载历史消息时显示指示器\n * - 空状态占位\n *\n * 样式:\n * - 使用自定义滚动条样式(livechat.css)\n * - 内容间距合理\n * - 支持响应式布局\n *\n * @example\n * ```tsx\n * <MessageList\n * messages={messages}\n * rendererRegistry={customRegistry}\n * autoScroll={true}\n * isLoadingHistory={isLoading}\n * />\n * ```\n */\nexport const MessageList: React.FC<MessageListProps> = ({\n messages,\n rendererRegistry,\n defaultRenderer,\n showTimestamp = true,\n autoScroll = true,\n isLoadingHistory = false,\n emptyPlaceholder,\n className = '',\n onAddToCart,\n}) => {\n const listRef = useRef<HTMLDivElement>(null)\n const [showScrollButton, setShowScrollButton] = useState(false)\n\n // 检查是否接近底部\n const isNearBottom = useCallback((threshold = 100) => {\n const container = listRef.current\n if (!container) return true\n\n const { scrollTop, scrollHeight, clientHeight } = container\n return scrollHeight - scrollTop - clientHeight < threshold\n }, [])\n\n // 平滑滚动到底部\n const scrollToBottom = useCallback(() => {\n const container = listRef.current\n if (!container) return\n\n container.scrollTo({\n top: container.scrollHeight,\n behavior: 'smooth',\n })\n }, [])\n\n // 监听滚动事件,控制按钮显示\n useEffect(() => {\n const container = listRef.current\n if (!container) return\n\n const handleScroll = () => {\n setShowScrollButton(!isNearBottom())\n }\n\n // 初始检查\n handleScroll()\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n return () => container.removeEventListener('scroll', handleScroll)\n }, [isNearBottom])\n\n // 当消息列表变化时,重新检查按钮状态(但不在自动滚动时)\n useEffect(() => {\n if (autoScroll) return // 自动滚动会在另一个 effect 中处理\n\n const timeoutId = setTimeout(() => {\n setShowScrollButton(!isNearBottom())\n }, 150)\n\n return () => clearTimeout(timeoutId)\n }, [messages, autoScroll, isNearBottom])\n\n // 监听消息列表变化,自动滚动\n useEffect(() => {\n if (!autoScroll || !listRef.current) return\n\n // 延迟滚动以确保 DOM 已更新\n const timeoutId = setTimeout(() => {\n if (listRef.current) {\n listRef.current.scrollTop = listRef.current.scrollHeight\n // 自动滚动到底部后,隐藏按钮\n setShowScrollButton(false)\n }\n }, 100)\n\n return () => clearTimeout(timeoutId)\n }, [messages, autoScroll])\n\n // 空状态\n if (messages.length === 0 && !isLoadingHistory) {\n return (\n <div className={`flex-1 overflow-hidden ${className}`}>{emptyPlaceholder || <DefaultEmptyPlaceholder />}</div>\n )\n }\n\n return (\n <div className=\"relative flex-1 overflow-hidden\">\n <div\n ref={listRef}\n className={`\n livechat-message-list absolute inset-0 overflow-y-auto p-4\n ${className}\n `}\n >\n {/* 加载历史消息指示器 */}\n {isLoadingHistory && <LoadingIndicator />}\n\n {/* 消息列表 */}\n <div className=\"flex flex-col gap-1\">\n {messages.map(message => (\n <ChatMessage\n key={message.id}\n message={message}\n rendererRegistry={rendererRegistry}\n defaultRenderer={defaultRenderer}\n showTimestamp={showTimestamp}\n onAddToCart={onAddToCart}\n />\n ))}\n </div>\n\n {/* 滚动锚点 */}\n {autoScroll && <ScrollAnchor dependencies={[messages]} />}\n </div>\n\n {/* 回到底部按钮 */}\n <button\n onClick={scrollToBottom}\n className={`flex -translate-x-1/2 items-center justify-center ${showScrollButton ? '' : 'pointer-events-none'}`}\n style={{\n position: 'absolute',\n bottom: '24px',\n left: '50%',\n zIndex: 10,\n width: '40px',\n height: '40px',\n borderRadius: '50%',\n backgroundColor: 'rgba(255, 255, 255, 0.95)',\n boxShadow: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n transition: 'all 300ms ease-in-out',\n opacity: showScrollButton ? 1 : 0,\n cursor: 'pointer',\n border: 'none',\n }}\n aria-label=\"Scroll to bottom\"\n aria-hidden={!showScrollButton}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-gray-700\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n </div>\n )\n}\n","/**\n * 消息内容容器组件\n * 根据消息内容类型分发到对应的渲染器\n * 基于 specs/livechat-widget/plan.md 的消息内容渲染设计\n */\n\nimport React from 'react'\nimport type { MessageContent as MessageContentType, MessageRenderer } from '../types'\nimport { MessageRendererRegistry } from '../utils/messageRenderers'\n\nexport interface MessageContentProps {\n /**\n * 消息内容\n */\n content: MessageContentType\n\n /**\n * 是否为用户消息\n */\n isUser: boolean\n\n /**\n * 是否为系统消息\n */\n isSystem: boolean\n\n /**\n * 自定义渲染器注册表\n */\n rendererRegistry?: MessageRendererRegistry\n\n /**\n * 默认渲染器(当找不到对应渲染器时使用)\n */\n defaultRenderer?: MessageRenderer\n\n /**\n * 自定义样式类名\n */\n className?: string\n\n /**\n * 商品添加到购物车回调\n */\n onAddToCart?: (product: any) => void\n}\n\n/**\n * 默认渲染器 - 显示未知类型提示\n */\nconst defaultFallbackRenderer: MessageRenderer = {\n render: content => <div className=\"text-sm italic text-gray-500\">未知消息类型: {content.type}</div>,\n}\n\n/**\n * 消息内容容器组件\n *\n * 功能:\n * - 根据 content.type 分发到对应的渲染器\n * - 支持自定义渲染器注册表\n * - 提供默认兜底渲染器\n *\n * 渲染流程:\n * 1. 检查自定义渲染器注册表是否有对应类型\n * 2. 如果有,使用自定义渲染器\n * 3. 如果没有,使用默认渲染器\n * 4. 如果默认渲染器也没有,显示未知类型提示\n *\n * @example\n * ```tsx\n * <MessageContent\n * content={content}\n * isUser={message.role === 'user'}\n * isSystem={message.role === 'system'}\n * rendererRegistry={customRegistry}\n * />\n * ```\n */\nexport const MessageContent: React.FC<MessageContentProps> = ({\n content,\n isUser,\n isSystem,\n rendererRegistry,\n defaultRenderer,\n className = '',\n onAddToCart,\n}) => {\n // 动态注入 onAddToCart 到 product_list 和 product_comparison 类型的内容中\n let processedContent = content\n if ((content.type === 'product_list' || content.type === 'product_comparison') && onAddToCart) {\n processedContent = {\n ...content,\n data: {\n ...(content as any).data,\n onAddToCart,\n },\n }\n }\n\n // 尝试从注册表获取渲染器\n const customRenderer = rendererRegistry?.get(processedContent.type)\n\n // 确定最终使用的渲染器\n const renderer = customRenderer || defaultRenderer || defaultFallbackRenderer\n\n // 渲染内容\n const rendered = renderer.render(processedContent, isUser, isSystem)\n\n return <div className={className}>{rendered}</div>\n}\n","/**\n * 单条聊天消息组件\n * 显示消息气泡、发送者、时间戳\n * 基于 specs/livechat-widget/plan.md 的消息展示设计\n */\n\nimport React from 'react'\nimport type { Message, MessageRenderer } from '../types'\nimport { MessageContent } from './MessageContent'\nimport { MessageRendererRegistry } from '../utils/messageRenderers'\n\nexport interface ChatMessageProps {\n /**\n * 消息数据\n */\n message: Message\n\n /**\n * 自定义渲染器注册表\n */\n rendererRegistry?: MessageRendererRegistry\n\n /**\n * 默认渲染器\n */\n defaultRenderer?: MessageRenderer\n\n /**\n * 是否显示时间戳\n * @default true\n */\n showTimestamp?: boolean\n\n /**\n * 自定义样式类名\n */\n className?: string\n\n /**\n * 商品添加到购物车回调\n */\n onAddToCart?: (product: any) => void\n}\n\n/**\n * 格式化时间戳为可读格式\n * @param timestamp Unix 时间戳(毫秒)\n * @returns 格式化后的时间字符串 (如 \"14:30\")\n */\nfunction formatTimestamp(timestamp: number): string {\n const date = new Date(timestamp)\n const hours = date.getHours().toString().padStart(2, '0')\n const minutes = date.getMinutes().toString().padStart(2, '0')\n return `${hours}:${minutes}`\n}\n\n/**\n * 单条聊天消息组件\n *\n * 功能:\n * - 显示消息气泡(用户 vs AI 助手不同样式)\n * - 支持多个 content 块(一条消息可包含多种内容类型)\n * - 显示时间戳\n * - 系统消息居中显示\n *\n * 样式规则:\n * - 用户消息:右对齐,灰色背景\n * - AI 助手消息:左对齐,白色背景\n * - 系统消息:居中,黄色背景\n *\n * @example\n * ```tsx\n * <ChatMessage\n * message={message}\n * rendererRegistry={customRegistry}\n * showTimestamp={true}\n * />\n * ```\n */\nexport const ChatMessage: React.FC<ChatMessageProps> = ({\n message,\n rendererRegistry,\n defaultRenderer,\n showTimestamp = true,\n className = '',\n onAddToCart,\n}) => {\n const isUser = message.role === 'user'\n const isAssistant = message.role === 'assistant'\n const isSystem = message.role === 'system'\n const isTool = message.role === 'tool'\n\n // 系统消息特殊处理(居中显示)\n if (isSystem) {\n return (\n <div className={`flex justify-center py-2 ${className}`}>\n <div className=\"max-w-xs rounded-lg border border-yellow-200 bg-yellow-50 px-4 py-2\">\n {message.content.map((content, index) => (\n <MessageContent\n key={index}\n content={content}\n isUser={false}\n isSystem={true}\n rendererRegistry={rendererRegistry}\n defaultRenderer={defaultRenderer}\n />\n ))}\n </div>\n </div>\n )\n }\n\n // 工具消息(通常不显示,或显示为系统消息)\n if (isTool) {\n return null\n }\n\n // 分离内容类型:需要独立渲染的结构化内容\n const structuredContentTypes = ['product_list', 'product_comparison', 'faq_list', 'promotion_list', 'cart']\n\n // 将内容分为两组:气泡内容 和 独立内容\n const bubbleContent = message.content.filter(c => !structuredContentTypes.includes(c.type))\n const standaloneContent = message.content.filter(c => structuredContentTypes.includes(c.type))\n\n // 用户/助手消息\n return (\n <div className={`flex ${isUser ? 'justify-end' : 'justify-start'} py-2 ${className}`}>\n <div className=\"flex w-fit max-w-full flex-col gap-2\">\n {/* 消息气泡(仅包含文本和快捷回复等) */}\n {bubbleContent.length > 0 && (\n <div\n className={`w-full min-w-0 overflow-hidden rounded-2xl px-4 py-2 ${isUser ? 'text-white' : 'text-[#1D1D1F]'}`}\n style={{\n backgroundColor: isUser ? '#005D8E' : '#F5F6F7',\n }}\n >\n {/* 渲染气泡内的内容块 */}\n <div className=\"flex w-full min-w-0 flex-col gap-2\">\n {bubbleContent.map((content, index) => (\n <MessageContent\n key={index}\n content={content}\n isUser={isUser}\n isSystem={false}\n rendererRegistry={rendererRegistry}\n defaultRenderer={defaultRenderer}\n onAddToCart={onAddToCart}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* 独立渲染的结构化内容(不在气泡内) */}\n {standaloneContent.map((content, index) => (\n <div key={`standalone-${index}`} className=\"w-full\">\n <MessageContent\n content={content}\n isUser={isUser}\n isSystem={false}\n rendererRegistry={rendererRegistry}\n defaultRenderer={defaultRenderer}\n onAddToCart={onAddToCart}\n />\n </div>\n ))}\n\n {/* 时间戳 */}\n {showTimestamp && (\n <span\n className={`\n px-2 text-xs text-gray-400\n ${isUser ? 'text-right' : 'text-left'}\n `}\n >\n {formatTimestamp(message.timestamp)}\n </span>\n )}\n </div>\n </div>\n )\n}\n","/**\n * 滚动锚点组件\n * 用于自动滚动到消息列表底部\n * 基于 specs/livechat-widget/plan.md 的滚动行为设计\n */\n\nimport React, { useEffect, useRef } from 'react'\n\nexport interface ScrollAnchorProps {\n /**\n * 是否自动滚动\n * @default true\n */\n autoScroll?: boolean\n\n /**\n * 滚动行为\n * @default \"smooth\"\n */\n behavior?: ScrollBehavior\n\n /**\n * 依赖项(当依赖项变化时触发滚动)\n */\n dependencies?: any[]\n}\n\n/**\n * 滚动锚点组件\n *\n * 功能:\n * - 放置在消息列表底部\n * - 当新消息到达时自动滚动到此位置\n * - 支持平滑滚动动画\n *\n * 使用场景:\n * - 接收新消息时自动滚动\n * - 发送消息后自动滚动\n * - 加载历史消息后保持位置\n *\n * @example\n * ```tsx\n * <MessageList>\n * {messages.map(msg => <ChatMessage key={msg.id} message={msg} />)}\n * <ScrollAnchor dependencies={[messages]} />\n * </MessageList>\n * ```\n */\nexport const ScrollAnchor: React.FC<ScrollAnchorProps> = ({\n autoScroll = true,\n behavior = 'smooth',\n dependencies = [],\n}) => {\n const anchorRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!autoScroll) return\n\n const anchor = anchorRef.current\n if (!anchor) return\n\n // 使用 setTimeout 确保 DOM 已更新\n const timeoutId = setTimeout(() => {\n anchor.scrollIntoView({\n behavior,\n block: 'end',\n inline: 'nearest',\n })\n }, 100)\n\n return () => clearTimeout(timeoutId)\n }, [autoScroll, behavior, ...dependencies])\n\n return <div ref={anchorRef} style={{ height: 0 }} />\n}\n","/**\n * 聊天输入框组件\n * 提供文本输入和发送按钮\n * 基于 specs/livechat-widget/plan.md 的输入框设计\n */\n\nimport React, { useRef, useEffect } from 'react'\n\nexport interface ChatInputProps {\n /**\n * 输入框当前值\n */\n value: string\n\n /**\n * 值变化回调\n */\n onChange: (value: string) => void\n\n /**\n * 发送消息回调\n */\n onSend: () => void\n\n /**\n * 占位符文本\n * @default \"输入消息...\"\n */\n placeholder?: string\n\n /**\n * 是否禁用输入\n * @default false\n */\n disabled?: boolean\n\n /**\n * 是否自动聚焦\n * @default false\n */\n autoFocus?: boolean\n\n /**\n * 最大字符数\n * @default 5000\n */\n maxLength?: number\n\n /**\n * 自定义样式类名\n */\n className?: string\n}\n\n/**\n * 发送图标 (向上箭头)\n */\nconst SendIcon: React.FC = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.2069 15.6997V4.69971\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" />\n <path\n d=\"M15.3995 8.50341L10.9506 4.05446C10.534 3.6379 9.85866 3.63791 9.4421 4.05446L5.00005 8.49651\"\n stroke=\"white\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n)\n\n/**\n * 聊天输入框组件\n *\n * 功能:\n * - 多行文本输入(自动增长)\n * - Enter 发送,Shift+Enter 换行\n * - 字符数限制(5000)\n * - 禁用状态(发送中)\n * - 发送按钮(空内容时禁用)\n *\n * 样式:\n * - 固定底部\n * - 边框分隔上方内容\n * - 自适应高度(1-5 行)\n *\n * @example\n * ```tsx\n * <ChatInput\n * value={inputValue}\n * onChange={setInputValue}\n * onSend={handleSend}\n * disabled={isStreaming}\n * />\n * ```\n */\nexport const ChatInput: React.FC<ChatInputProps> = ({\n value,\n onChange,\n onSend,\n placeholder = '',\n disabled = false,\n autoFocus = false,\n maxLength = 5000,\n className = '',\n}) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n /**\n * 自动调整 textarea 高度\n */\n useEffect(() => {\n const textarea = textareaRef.current\n if (!textarea) return\n\n // 重置高度以获取正确的 scrollHeight\n textarea.style.height = 'auto'\n\n // 设置高度,最大 5 行(约 120px)\n const maxHeight = 120\n const newHeight = Math.min(textarea.scrollHeight, maxHeight)\n textarea.style.height = `${newHeight}px`\n }, [value])\n\n /**\n * 处理键盘事件\n * Enter 发送,Shift+Enter 换行\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n if (value.trim() && !disabled) {\n onSend()\n }\n }\n }\n\n /**\n * 处理输入变化\n */\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = event.target.value\n\n // 字符数限制\n if (newValue.length <= maxLength) {\n onChange(newValue)\n }\n }\n\n /**\n * 处理发送按钮点击\n */\n const handleSendClick = () => {\n if (value.trim() && !disabled) {\n onSend()\n }\n }\n\n const canSend = value.trim().length > 0 && !disabled\n\n return (\n <div className={`flex items-end gap-2 bg-white px-4 py-3 ${className}`}>\n {/* 输入框容器 - 带渐变边框 */}\n <div\n className=\"flex flex-1 items-center gap-2 rounded-2xl\"\n style={{\n background: 'linear-gradient(to right, #7687F3, #7687F3, #4DA8F5, #A3DFCE)',\n padding: '2px',\n }}\n >\n {/* 内部白色背景 */}\n <div className=\"flex flex-1 items-center gap-2 bg-white px-3 py-2\" style={{ borderRadius: '14px' }}>\n {/* 文本输入框 */}\n <textarea\n ref={textareaRef}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n autoFocus={autoFocus}\n rows={1}\n className=\"flex-1 resize-none bg-transparent text-sm text-gray-900 outline-none placeholder:text-gray-400 disabled:cursor-not-allowed disabled:opacity-50\"\n style={{\n resize: 'none',\n }}\n />\n\n {/* 字符数提示 (接近上限时显示) */}\n {value.length > maxLength * 0.8 && (\n <span className=\"text-xs text-gray-400\">\n {value.length}/{maxLength}\n </span>\n )}\n\n {/* 发送按钮 */}\n <button\n type=\"button\"\n onClick={handleSendClick}\n disabled={!canSend}\n className={`shrink-0 rounded-full p-2 transition-all ${canSend ? ' active:scale-95' : 'cursor-not-allowed '}`}\n style={\n canSend\n ? {\n background: 'linear-gradient(to bottom, #A3DFCE, #4DA8F5, #7687F3)',\n }\n : { background: '#BEBEBE' }\n }\n aria-label=\"Send message\"\n >\n <SendIcon />\n </button>\n </div>\n </div>\n </div>\n )\n}\n","/**\n * 聊天状态管理 Hook\n * 管理消息列表、窗口状态、输入框状态、流式消息累积\n * 基于 specs/livechat-widget/plan.md 的状态管理策略\n */\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\nimport type { Message, MessageContent, SSEEvent, StatusData, ErrorData, MessageStartData, BackendCartData } from '../types'\nimport { getUserId } from '../utils/userId'\nimport { useSession } from './useSession'\nimport { transformProducts } from '../utils/productTransformers'\nimport { transformCartData } from '../utils/cartTransformers'\n\nexport interface UseChatStateOptions {\n /**\n * 初始欢迎消息\n */\n welcomeMessage?: string\n\n /**\n * Shopify 店铺域名\n */\n site?: string\n\n /**\n * 窗口打开回调\n */\n onOpen?: () => void\n\n /**\n * 窗口关闭回调\n */\n onClose?: () => void\n\n /**\n * 消息发送回调\n */\n onMessageSend?: (message: string) => void\n\n /**\n * 错误处理回调\n */\n onError?: (error: Error) => void\n\n /**\n * AI 消息回调\n */\n /**\n * AI 回复文本消息时触发\n */\n onTextMessage?: () => void\n\n /**\n * AI 回复商品列表卡片时触发\n */\n onProductList?: () => void\n\n /**\n * AI 回复促销卡片时触发\n */\n onPromotionList?: () => void\n\n /**\n * 商品添加到购物车回调\n */\n onAddToCart?: (product: any) => void\n\n /**\n * 购物车按钮点击回调\n */\n onCart?: (cartId: string, checkoutUrl?: string) => void\n}\n\nexport interface UseChatStateReturn {\n /**\n * 消息列表\n */\n messages: Message[]\n\n /**\n * 聊天窗口是否打开\n */\n isOpen: boolean\n\n /**\n * 用户 ID\n */\n userId: string\n\n /**\n * 会话 ID\n */\n sessionId: string | null\n\n /**\n * 输入框内容\n */\n inputValue: string\n\n /**\n * 是否正在接收流式消息\n */\n isStreaming: boolean\n\n /**\n * 打开聊天窗口\n */\n openChat: () => void\n\n /**\n * 关闭聊天窗口\n */\n closeChat: () => void\n\n /**\n * 切换聊天窗口状态\n */\n toggleChat: () => void\n\n /**\n * 设置输入框内容\n */\n setInputValue: (value: string) => void\n\n /**\n * 添加消息到列表\n */\n addMessage: (message: Message) => void\n\n /**\n * 批量设置消息列表(用于加载历史)\n */\n setMessages: (messages: Message[]) => void\n\n /**\n * 清空消息列表\n */\n clearMessages: () => void\n\n /**\n * 处理 SSE 事件\n */\n handleSSEEvent: (event: SSEEvent) => void\n\n /**\n * 保存会话 ID\n */\n saveSession: (id: string) => void\n\n /**\n * 清空会话\n */\n clearSession: () => void\n}\n\n/**\n * 聊天状态管理 Hook\n *\n * 功能:\n * 1. 管理消息列表(添加、清空、批量设置)\n * 2. 管理窗口状态(打开、关闭、切换)\n * 3. 管理输入框状态\n * 4. 处理 SSE 流式消息事件\n * 5. 累积流式文本内容\n *\n * @param options Hook 配置选项\n * @returns 状态管理工具对象\n */\nexport function useChatState(options: UseChatStateOptions = {}): UseChatStateReturn {\n const {\n welcomeMessage,\n site,\n onOpen,\n onClose,\n onMessageSend,\n onError,\n onTextMessage,\n onProductList,\n onPromotionList,\n onAddToCart,\n onCart,\n } = options\n\n // 会话管理\n const { sessionId, saveSession, clearSession } = useSession()\n\n // 用户 ID (初始化时异步生成)\n const [userId, setUserId] = useState<string>('')\n\n // 初始化 userId\n useEffect(() => {\n getUserId().then(id => setUserId(id))\n }, [])\n\n // 消息列表\n const [messages, setMessagesState] = useState<Message[]>(() => {\n // 如果有欢迎消息,初始化时添加\n if (welcomeMessage) {\n return [\n {\n id: `welcome-${Date.now()}`,\n role: 'assistant',\n content: [{ type: 'text', text: welcomeMessage }],\n timestamp: Date.now(),\n },\n ]\n }\n return []\n })\n\n // 聊天窗口是否打开\n const [isOpen, setIsOpen] = useState(false)\n\n // 输入框内容\n const [inputValue, setInputValue] = useState('')\n\n // 是否正在接收流式消息\n const [isStreaming, setIsStreaming] = useState(false)\n\n // 当前正在累积的流式消息 (临时存储)\n const currentMessageRef = useRef<Message | null>(null)\n\n // 标记当前消息是否已触发 onTextMessage 回调(避免重复触发)\n const textMessageCallbackTriggeredRef = useRef<boolean>(false)\n\n /**\n * 打开聊天窗口\n */\n const openChat = useCallback(() => {\n setIsOpen(true)\n onOpen?.()\n }, [onOpen])\n\n /**\n * 关闭聊天窗口\n */\n const closeChat = useCallback(() => {\n setIsOpen(false)\n onClose?.()\n }, [onClose])\n\n /**\n * 切换聊天窗口状态\n */\n const toggleChat = useCallback(() => {\n setIsOpen(prev => {\n const newState = !prev\n if (newState) {\n onOpen?.()\n } else {\n onClose?.()\n }\n return newState\n })\n }, [onOpen, onClose])\n\n /**\n * 添加消息到列表\n */\n const addMessage = useCallback((message: Message) => {\n // 防护:如果消息为 null 或 undefined,不添加\n if (!message) {\n console.warn('[useChatState] Attempted to add null/undefined message')\n return\n }\n setMessagesState(prev => [...prev, message])\n }, [])\n\n /**\n * 批量设置消息列表(用于加载历史)\n */\n const setMessages = useCallback((newMessages: Message[]) => {\n // 防护:过滤掉 null/undefined 消息\n const validMessages = newMessages.filter(msg => msg != null)\n if (validMessages.length !== newMessages.length) {\n console.warn('[useChatState] Filtered out null/undefined messages from batch set')\n }\n setMessagesState(validMessages)\n }, [])\n\n /**\n * 清空消息列表\n */\n const clearMessages = useCallback(() => {\n setMessagesState([])\n }, [])\n\n /**\n * 处理 SSE 事件\n * 根据事件类型进行不同的处理\n */\n const handleSSEEvent = useCallback(\n (event: SSEEvent) => {\n const { event: eventType, data } = event\n\n switch (eventType) {\n case 'message_start': {\n // 开始接收新消息,显示思考气泡\n setIsStreaming(true)\n\n // 重置文本消息回调标记\n textMessageCallbackTriggeredRef.current = false\n\n // T039: 保存 sessionId(如果后端返回)\n const messageStartData = data as MessageStartData\n if (messageStartData.sessionId && messageStartData.sessionId !== sessionId) {\n saveSession(messageStartData.sessionId)\n }\n\n const messageId = `msg-${Date.now()}`\n currentMessageRef.current = {\n id: messageId,\n role: 'assistant',\n content: [{ type: 'thinking', data: { status: 'thinking' } }], // 添加思考状态\n timestamp: Date.now(),\n }\n\n // 立即添加到消息列表以显示思考动画\n setMessagesState(prev => [...prev, currentMessageRef.current!])\n break\n }\n\n case 'content_delta': {\n // 累积流式文本内容\n // 实际 API 返回的是 {index: 0, delta: \"文本\"} 而不是 {text: \"文本\"}\n const deltaData = data as any\n const deltaText = deltaData.delta || deltaData.text || ''\n\n if (currentMessageRef.current && deltaText) {\n // 触发文本消息回调(仅触发一次)\n if (!textMessageCallbackTriggeredRef.current) {\n textMessageCallbackTriggeredRef.current = true\n onTextMessage?.()\n }\n\n // 移除思考气泡(如果存在)\n const hasThinking = currentMessageRef.current.content.some(c => c.type === 'thinking')\n if (hasThinking) {\n currentMessageRef.current.content = currentMessageRef.current.content.filter(c => c.type !== 'thinking')\n }\n\n const lastContent = currentMessageRef.current.content[currentMessageRef.current.content.length - 1] as\n | MessageContent\n | undefined\n\n if (lastContent && lastContent.type === 'text') {\n // 追加到现有文本块\n lastContent.text += deltaText\n } else {\n // 创建新文本块\n currentMessageRef.current.content.push({\n type: 'text',\n text: deltaText,\n })\n }\n\n // 更新消息列表以触发渲染\n setMessagesState(prev => {\n if (!currentMessageRef.current) return prev\n\n const updated = [...prev]\n const existingIndex = updated.findIndex(m => m && m.id === currentMessageRef.current!.id)\n\n if (existingIndex >= 0) {\n updated[existingIndex] = { ...currentMessageRef.current! }\n } else {\n updated.push({ ...currentMessageRef.current! })\n }\n\n return updated\n })\n }\n break\n }\n\n case 'content_block': {\n // 接收结构化内容块(商品、政策等)\n // API 返回格式变更:\n // 新格式: {index: number, type: string, data: {...}} <- type 在外层\n // 旧格式: {index: number, data: {type: string, ...}} <- type 在 data 内\n const blockData = data as any\n if (currentMessageRef.current) {\n // 获取 type 和 data\n // 优先从外层获取 type,兼容旧格式从 data 内获取\n const contentType = blockData.type || blockData.data?.type\n const contentData = blockData.data\n\n if (!contentType || !contentData) {\n console.warn('[useChatState] Invalid content_block:', blockData)\n break\n }\n\n // ============================================================\n // 转换数据结构以匹配类型定义\n // 根据后端数据结构规范(飞书文档)进行转换\n // ============================================================\n let messageContent: MessageContent\n\n // ========== 1. 产品列表卡片 (Product List) ==========\n // 后端格式: {type: \"product_list\", data: [product1, product2, ...]}\n // data 直接是产品数组,不是 {products: [...]}\n if (contentType === 'product_list' && Array.isArray(contentData)) {\n // 触发商品列表回调\n onProductList?.()\n\n // 使用统一的产品转换工具函数\n const transformedProducts = transformProducts(contentData, site)\n\n messageContent = {\n type: 'product_list',\n data: {\n products: transformedProducts,\n title: undefined, // 后端新规范不返回 title\n onAddToCart: onAddToCart, // 注入购物车回调\n },\n } as MessageContent\n }\n // ========== 2. 产品对比卡片 (Product Comparison) ==========\n // 后端格式: {type: \"product_comparison\", data: {products: [...], dimensions: {...}}}\n else if (contentType === 'product_comparison' && contentData.products) {\n // 使用统一的产品转换工具函数\n const transformedProducts = transformProducts(contentData.products, site)\n\n messageContent = {\n type: 'product_comparison',\n data: {\n products: transformedProducts,\n dimensions: contentData.dimensions || {},\n },\n } as MessageContent\n }\n // ========== 3. FAQ 列表卡片 (FAQ List) ==========\n // 后端格式: {type: \"faq_list\", data: {found, count, total, results: [...]}}\n else if (contentType === 'faq_list' && contentData.found !== undefined) {\n messageContent = {\n type: 'faq_list',\n data: contentData, // 直接使用,结构已匹配\n } as MessageContent\n }\n // ========== 4. 快捷回复 (Quick Replies) ==========\n else if (contentType === 'quick_replies' && contentData.replies) {\n messageContent = {\n type: 'quick_replies',\n data: {\n replies: contentData.replies,\n },\n } as MessageContent\n }\n // ========== 5. 政策内容 (Policy) ==========\n else if (contentType === 'policy' && contentData.title && contentData.content) {\n messageContent = {\n type: 'policy',\n data: {\n title: contentData.title,\n content: contentData.content,\n },\n } as MessageContent\n }\n // ========== 6. 促销活动列表 (Promotion List) ==========\n // 后端格式: {type: \"promotion_list\", data: {found, count, total, results: [...]}}\n else if (contentType === 'promotion_list' && contentData.found !== undefined) {\n // 触发促销卡片回调\n onPromotionList?.()\n\n messageContent = {\n type: 'promotion_list',\n data: contentData, // 直接使用,结构已匹配\n } as MessageContent\n }\n // ========== 7. 购物车 (Cart) ==========\n // 后端格式: {type: \"cart\", data: {id, lines: {edges: [...]}, cost, ...}} (Shopify GraphQL)\n // 需要转换为前端格式: {cartId, lines: [...], cost, ...}\n else if (contentType === 'cart' && contentData.id !== undefined) {\n // 转换后端 Shopify GraphQL 格式为前端标准格式\n const transformedData = transformCartData(contentData as BackendCartData)\n messageContent = {\n type: 'cart',\n data: {\n ...transformedData,\n onCart: onCart, // 注入购物车按钮回调\n },\n } as MessageContent\n }\n // ========== 8. 其他类型(通用处理) ==========\n else {\n messageContent = {\n type: contentType,\n data: contentData,\n } as MessageContent\n }\n\n currentMessageRef.current.content.push(messageContent)\n\n setMessagesState(prev => {\n if (!currentMessageRef.current) return prev\n\n const updated = [...prev]\n const existingIndex = updated.findIndex(m => m && m.id === currentMessageRef.current!.id)\n\n if (existingIndex >= 0) {\n updated[existingIndex] = { ...currentMessageRef.current! }\n } else {\n updated.push({ ...currentMessageRef.current! })\n }\n\n return updated\n })\n }\n break\n }\n\n case 'tool_start':\n case 'tool_end': {\n // 工具调用事件,暂时忽略\n // 可以在未来用于显示工具调用状态\n break\n }\n\n case 'message_end': {\n // 消息接收完成\n setIsStreaming(false)\n currentMessageRef.current = null\n break\n }\n\n case 'status': {\n // T040: 状态更新(如会话过期)\n const statusData = data as StatusData\n if (statusData.type === 'session_expired') {\n // 会话过期,清空消息列表和会话\n clearMessages()\n clearSession()\n if (welcomeMessage) {\n addMessage({\n id: `welcome-${Date.now()}`,\n role: 'assistant',\n content: [{ type: 'text', text: welcomeMessage }],\n timestamp: Date.now(),\n })\n }\n }\n break\n }\n\n case 'error': {\n // 错误处理\n const errorData = data as ErrorData\n setIsStreaming(false)\n currentMessageRef.current = null\n\n // 添加错误消息到界面\n addMessage({\n id: `error-${Date.now()}`,\n role: 'system',\n content: [\n {\n type: 'error',\n data: {\n message: errorData.message,\n code: errorData.code,\n },\n },\n ],\n timestamp: Date.now(),\n })\n\n onError?.(new Error(errorData.message))\n break\n }\n\n case 'done': {\n // 流结束\n setIsStreaming(false)\n currentMessageRef.current = null\n break\n }\n\n default:\n // 其他事件类型(tool_start, tool_end 等)\n break\n }\n },\n [\n welcomeMessage,\n site,\n addMessage,\n clearMessages,\n clearSession,\n saveSession,\n sessionId,\n onError,\n onTextMessage,\n onProductList,\n onPromotionList,\n onAddToCart,\n onCart,\n ]\n )\n\n return {\n messages,\n isOpen,\n userId,\n sessionId,\n inputValue,\n isStreaming,\n openChat,\n closeChat,\n toggleChat,\n setInputValue,\n addMessage,\n setMessages,\n clearMessages,\n handleSSEEvent,\n saveSession,\n clearSession,\n }\n}\n","/**\n * userId 生成和管理工具\n * 基于 specs/livechat-widget/research.md 的决策\n *\n * 策略:\n * 1. 优先从 localStorage 读取\n * 2. 尝试获取 Google Analytics ID (GAID)\n * 3. 兜底:时间戳 + 随机数哈希\n */\n\nconst STORAGE_KEY = 'livechat_user_id'\n\n/**\n * 获取用户唯一标识符(异步版本)\n * @returns userId (GAID 或哈希值)\n */\nexport async function getUserId(): Promise<string> {\n // 1. 尝试从 localStorage 读取\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (stored) return stored\n }\n\n // 2. 尝试获取 GAID\n const gaid = getGAID()\n if (gaid) {\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, gaid)\n }\n return gaid\n }\n\n // 3. 兜底:使用 SHA-256 生成哈希\n try {\n const fallback = await generateHashedUserId()\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, fallback)\n }\n return fallback\n } catch (error) {\n // 如果 SHA-256 失败,使用同步兜底方案\n console.warn('[LiveChat userId] SHA-256 failed, using sync fallback:', error)\n const fallback = generateHashedUserIdSync()\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, fallback)\n }\n return fallback\n }\n}\n\n/**\n * 从 Google Analytics 获取 Client ID (GAID)\n * @returns GAID 或 null\n */\nfunction getGAID(): string | null {\n if (typeof window === 'undefined') return null\n\n // 检查 gtag 是否可用\n if (typeof (window as any).gtag !== 'function') {\n console.warn('[LiveChat userId] Google Analytics gtag is not available')\n return null\n }\n\n try {\n // Google Analytics 4 方法\n // 注意:gtag 的 'get' 命令是异步的,这里使用同步 fallback\n // 在实际项目中,如果 GA 已初始化,可以从 dataLayer 读取\n const dataLayer = (window as any).dataLayer || []\n\n // 尝试从 dataLayer 中查找已存在的 client_id\n for (const item of dataLayer) {\n if (item && item[1] && typeof item[1] === 'object') {\n const clientId = item[1].client_id || item[1].clientId\n if (clientId && typeof clientId === 'string') {\n return `G-${clientId}`\n }\n }\n }\n\n // 如果没有找到,返回 null,使用兜底方案\n return null\n } catch (error) {\n console.error('[LiveChat userId] Failed to get GAID:', error)\n return null\n }\n}\n\n/**\n * 生成哈希用户 ID(兜底方案)\n * @returns 格式为 user-{hash} 的用户 ID,hash 由 timestamp + random 通过 SHA-256 生成\n */\nasync function generateHashedUserId(): Promise<string> {\n const timestamp = Date.now()\n const random = Math.random().toString(36).substring(2, 15) // 生成随机字符串\n\n // 将 timestamp 和 random 组合成字符串\n const rawString = `${timestamp}${random}`\n\n // 使用 Web Crypto API 生成 SHA-256 哈希\n const encoder = new TextEncoder()\n const data = encoder.encode(rawString)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n\n // 将 ArrayBuffer 转换为 16 进制字符串\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n\n // 取前 16 位作为用户 ID(保持简洁)\n return `user-${hashHex.substring(0, 16)}`\n}\n\n/**\n * 同步版本的哈希用户 ID 生成(兜底的兜底)\n * 当 Web Crypto API 不可用时使用\n */\nfunction generateHashedUserIdSync(): string {\n const timestamp = Date.now()\n const random = Math.random().toString(36).substring(2, 15)\n const rawString = `${timestamp}${random}`\n\n // 使用简单的哈希算法作为兜底\n let hash = 0\n for (let i = 0; i < rawString.length; i++) {\n const char = rawString.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash\n }\n\n const hashString = Math.abs(hash).toString(16).padStart(8, '0')\n return `user-${hashString}`\n}\n\n/**\n * 清除保存的 userId(用于测试或重置)\n */\nexport function clearUserId(): void {\n if (typeof window !== 'undefined') {\n localStorage.removeItem(STORAGE_KEY)\n }\n}\n","/**\n * 会话管理 Hook\n * 负责 sessionId 的持久化和生命周期管理\n * 基于 specs/livechat-widget/plan.md 的会话管理策略\n */\n\nimport { useState, useCallback, useEffect } from 'react'\n\nconst SESSION_KEY = 'livechat_session_id'\n\nexport interface UseSessionReturn {\n /**\n * 当前会话 ID\n */\n sessionId: string | null\n\n /**\n * 保存会话 ID 到 localStorage 和状态\n * @param id 会话 ID (UUID 格式)\n */\n saveSession: (id: string) => void\n\n /**\n * 清空会话 ID (会话过期或新会话)\n */\n clearSession: () => void\n\n /**\n * 检查是否有活动会话\n */\n hasSession: boolean\n}\n\n/**\n * 会话管理 Hook\n *\n * 会话管理策略:\n * 1. 首次对话: 不传 session_id,后端从 message_start 事件返回\n * 2. 存储位置: localStorage.livechat_session_id\n * 3. 会话恢复: 打开聊天窗口时自动加载历史消息\n * 4. 会话过期: 监听 status 事件 (type: \"session_expired\"),清空消息列表和 sessionId\n * 5. 新会话按钮: 调用 POST /api/chat/new-session,更新 sessionId\n *\n * @returns 会话管理工具对象\n */\nexport function useSession(): UseSessionReturn {\n // 从 localStorage 初始化会话 ID\n const [sessionId, setSessionId] = useState<string | null>(() => {\n if (typeof window === 'undefined') return null\n\n try {\n return localStorage.getItem(SESSION_KEY)\n } catch (error) {\n console.error('[useSession] Failed to read from localStorage:', error)\n return null\n }\n })\n\n /**\n * 保存会话 ID\n * 同时更新状态和 localStorage\n */\n const saveSession = useCallback((id: string) => {\n if (!id || typeof id !== 'string') {\n console.warn('[useSession] Invalid session ID:', id)\n return\n }\n\n setSessionId(id)\n\n if (typeof window !== 'undefined') {\n try {\n localStorage.setItem(SESSION_KEY, id)\n } catch (error) {\n console.error('[useSession] Failed to save to localStorage:', error)\n }\n }\n }, [])\n\n /**\n * 清空会话 ID\n * 用于会话过期或开始新会话\n */\n const clearSession = useCallback(() => {\n setSessionId(null)\n\n if (typeof window !== 'undefined') {\n try {\n localStorage.removeItem(SESSION_KEY)\n } catch (error) {\n console.error('[useSession] Failed to remove from localStorage:', error)\n }\n }\n }, [])\n\n /**\n * 监听 localStorage 变化(跨标签页同步)\n * 注意:根据计划文档,多标签页不支持实时同步\n * 这里仅监听是为了防止同一浏览器多标签页导致的状态不一致\n */\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key === SESSION_KEY) {\n setSessionId(event.newValue)\n }\n }\n\n window.addEventListener('storage', handleStorageChange)\n\n return () => {\n window.removeEventListener('storage', handleStorageChange)\n }\n }, [])\n\n return {\n sessionId,\n saveSession,\n clearSession,\n hasSession: sessionId !== null,\n }\n}\n","/**\n * 产品数据转换工具函数\n * 将后端返回的产品数据转换为前端使用的格式\n */\n\nimport type { Product, Variant } from '../types'\n\n/**\n * 转换单个变体数据\n */\nfunction transformVariant(variant: any): Variant {\n return {\n id: variant.shopify_variant_id || variant.id,\n title: variant.title || variant.option1,\n sku: variant.sku,\n price: variant.price\n ? {\n amount: variant.price,\n currency: variant.currency || 'USD',\n }\n : undefined,\n availableForSale: variant.available,\n discount: variant.discount\n ? {\n has_discount: variant.discount.has_discount,\n discount_price: variant.discount.discount_price,\n discount_code: variant.discount.discount_code,\n discount_percentage: variant.discount.discount_percentage,\n discount_type: variant.discount.discount_type,\n discount_value: variant.discount.discount_value,\n }\n : undefined,\n memberPrice: variant.member_price\n ? {\n has_member_price: variant.member_price.has_member_price,\n price: variant.member_price.price,\n }\n : undefined,\n inventoryQuantity: variant.inventory_quantity,\n option1: variant.option1,\n option2: variant.option2,\n option3: variant.option3,\n }\n}\n\n/**\n * 转换产品数据\n * 将后端返回的产品对象转换为前端使用的 Product 类型\n *\n * @param product - 后端返回的产品数据\n * @param site - 站点域名,用于构建产品 URL(可选,默认为空字符串)\n * @returns 转换后的 Product 对象\n *\n * @example\n * ```ts\n * const backendProduct = {\n * shopify_product_id: \"gid://shopify/Product/123\",\n * handle: \"product-handle\",\n * title: \"Product Title\",\n * price_range: { min: 99.99, max: 149.99, currency: \"USD\" },\n * // ... 其他字段\n * }\n *\n * const product = transformProduct(backendProduct, \"www.example.com\")\n * // product.shopifyId === \"gid://shopify/Product/123\"\n * // product.productUrl === \"https://www.example.com/products/product-handle\"\n * ```\n */\nexport function transformProduct(product: any, site: string = ''): Product {\n return {\n // 基本信息\n shopifyId: product.shopify_product_id || product.id,\n sku: product.variants?.[0]?.sku || '',\n handle: product.handle,\n title: product.title,\n description: product.description,\n vendor: product.vendor,\n\n // 价格信息\n price: {\n amount: product.price_range?.min || product.variants?.[0]?.price || 0,\n currency: product.price_range?.currency || product.variants?.[0]?.currency || 'USD',\n },\n priceRange: product.price_range\n ? {\n min: product.price_range.min,\n max: product.price_range.max,\n currency: product.price_range.currency,\n }\n : undefined,\n memberPriceRange: product.member_price_range\n ? {\n min: product.member_price_range.min,\n max: product.member_price_range.max,\n currency: product.member_price_range.currency,\n }\n : undefined,\n\n // 媒体和链接\n imageUrl: product.featured_image || '',\n productUrl: site ? `https://${site}/products/${product.handle}` : `/products/${product.handle}`,\n\n // 库存和状态\n stockStatus: product.variants?.[0]?.available ? 'in_stock' : 'out_of_stock',\n\n // 评分和热度\n hotScore: product.popularity_score,\n averageRating: product.average_rating,\n reviewCount: product.review_count,\n\n // 变体信息\n variantCount: product.variant_count,\n availableCount: product.available_count,\n variants: product.variants?.map(transformVariant),\n\n // 特性和标签\n features: product.features\n ? {\n is_new: product.features.is_new,\n has_rental: product.features.has_rental,\n has_presale: product.features.has_presale,\n has_member_price: product.features.has_member_price,\n has_discount: product.features.has_discount,\n }\n : undefined,\n tags: product.tags,\n }\n}\n\n/**\n * 批量转换产品列表\n *\n * @param products - 后端返回的产品数组\n * @param site - 站点域名(可选)\n * @returns 转换后的 Product 数组\n *\n * @example\n * ```ts\n * const backendProducts = [product1, product2, product3]\n * const products = transformProducts(backendProducts, \"www.example.com\")\n * ```\n */\nexport function transformProducts(products: any[], site?: string): Product[] {\n if (!Array.isArray(products)) {\n return []\n }\n\n return products.map(product => transformProduct(product, site))\n}\n","/**\n * 购物车数据转换工具\n * 将后端返回的 Shopify GraphQL 格式转换为前端标准格式\n */\n\nimport type { BackendCartData, CartData, CartLine } from '../types'\n\n/**\n * 转换后端购物车数据为前端格式\n *\n * @param backendData 后端返回的 Shopify GraphQL 格式数据\n * @returns 前端标准化的购物车数据\n *\n * @example\n * ```typescript\n * const backendData = {\n * id: \"gid://shopify/Cart/xxx\",\n * lines: { edges: [{ node: {...} }] },\n * cost: { totalAmount: {...}, subtotalAmount: {...} },\n * ...\n * }\n *\n * const cartData = transformCartData(backendData)\n * // => { cartId: \"gid://shopify/Cart/xxx\", lines: [...], ... }\n * ```\n */\nexport function transformCartData(backendData: BackendCartData): CartData {\n // 转换商品行数据:从 edges[].node 结构转为扁平数组\n const lines: CartLine[] = backendData.lines.edges.map(edge => ({\n id: edge.node.id,\n quantity: edge.node.quantity,\n cost: {\n totalAmount: edge.node.cost.totalAmount,\n amountPerQuantity: edge.node.cost.amountPerQuantity,\n subtotalAmount: edge.node.cost.subtotalAmount,\n },\n merchandise: {\n id: edge.node.merchandise.id,\n title: edge.node.merchandise.title,\n price: edge.node.merchandise.price,\n image: edge.node.merchandise.image\n ? {\n url: edge.node.merchandise.image.url,\n altText: edge.node.merchandise.image.altText || undefined,\n }\n : undefined,\n product: {\n id: edge.node.merchandise.product.id,\n title: edge.node.merchandise.product.title,\n handle: edge.node.merchandise.product.handle,\n },\n },\n attributes: edge.node.attributes,\n }))\n\n // 返回标准化的购物车数据\n return {\n isEmpty: backendData.totalQuantity === 0 || lines.length === 0,\n cartId: backendData.id,\n totalQuantity: backendData.totalQuantity,\n lines,\n cost: {\n totalAmount: backendData.cost.totalAmount,\n subtotalAmount: backendData.cost.subtotalAmount,\n },\n discountCodes: backendData.discountCodes?.map((code: any) => ({\n code: code.code || code,\n applicable: code.applicable !== false,\n })),\n checkoutUrl: backendData.checkoutUrl,\n }\n}\n","/**\n * 聊天 API 调用 Hook\n * 封装 SSE 流式消息接收、历史消息加载、新会话创建\n * 基于 specs/livechat-widget/plan.md 的 API 调用策略\n */\n\nimport { useCallback, useRef } from 'react'\nimport type { ChatStreamRequest, SSEEvent, NewSessionRequest, NewSessionResponse } from '../types'\nimport { sendMessage, createNewSession, type RecaptchaConfig } from '../api/chat'\n\nexport interface UseChatAPIOptions {\n /**\n * API 基础 URL\n */\n apiBaseUrl: string\n\n /**\n * 自定义请求头\n */\n headers?: Record<string, string>\n\n /**\n * reCAPTCHA 配置\n */\n recaptchaConfig?: RecaptchaConfig\n\n /**\n * 错误处理回调\n */\n onError?: (error: Error) => void\n}\n\nexport interface UseChatAPIReturn {\n /**\n * 发送消息并接收 SSE 流式响应\n * @param request 请求参数\n * @param onEvent SSE 事件回调\n * @returns Promise<void>\n */\n sendMessageStream: (request: ChatStreamRequest, onEvent: (event: SSEEvent) => void) => Promise<void>\n\n /**\n * 创建新会话或恢复现有会话\n * @param request 请求参数\n * @returns 新会话信息,可能包含历史消息\n */\n createSession: (request: NewSessionRequest) => Promise<NewSessionResponse>\n\n /**\n * 中断当前的 SSE 流\n */\n abortStream: () => void\n\n /**\n * 是否正在发送消息\n */\n isSending: boolean\n}\n\n/**\n * 聊天 API 调用 Hook\n *\n * 功能:\n * 1. sendMessageStream: 发送消息并接收 SSE 流式响应\n * 2. createSession: 创建新会话或恢复现有会话\n * 3. abortStream: 中断当前流\n *\n * @param options Hook 配置选项\n * @returns API 调用工具对象\n */\nexport function useChatAPI(options: UseChatAPIOptions): UseChatAPIReturn {\n const { apiBaseUrl, headers, recaptchaConfig, onError } = options\n\n // 用于中断当前请求的 AbortController\n const abortControllerRef = useRef<AbortController | null>(null)\n\n // 发送状态标记\n const isSendingRef = useRef(false)\n\n /**\n * 发送消息并接收 SSE 流式响应\n */\n const sendMessageStream = useCallback(\n async (request: ChatStreamRequest, onEvent: (event: SSEEvent) => void) => {\n // 如果正在发送,先中断之前的请求\n if (abortControllerRef.current) {\n abortControllerRef.current.abort()\n }\n\n // 创建新的 AbortController\n abortControllerRef.current = new AbortController()\n isSendingRef.current = true\n\n try {\n await sendMessage(apiBaseUrl, request, onEvent, headers, recaptchaConfig)\n } catch (error) {\n // 忽略手动中断的错误\n if (error instanceof Error && error.name === 'AbortError') {\n return\n }\n\n console.error('[useChatAPI] Stream error:', error)\n onError?.(error as Error)\n throw error\n } finally {\n isSendingRef.current = false\n abortControllerRef.current = null\n }\n },\n [apiBaseUrl, headers, recaptchaConfig, onError]\n )\n\n /**\n * 创建新会话或恢复现有会话\n */\n const createSession = useCallback(\n async (request: NewSessionRequest): Promise<NewSessionResponse> => {\n try {\n return await createNewSession(apiBaseUrl, request, headers, recaptchaConfig)\n } catch (error) {\n console.error('[useChatAPI] Create session error:', error)\n onError?.(error as Error)\n throw error\n }\n },\n [apiBaseUrl, headers, recaptchaConfig, onError]\n )\n\n /**\n * 中断当前的 SSE 流\n */\n const abortStream = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort()\n abortControllerRef.current = null\n isSendingRef.current = false\n }\n }, [])\n\n return {\n sendMessageStream,\n createSession,\n abortStream,\n isSending: isSendingRef.current,\n }\n}\n","/**\n * LiveChat Fetcher\n * 参照 storefront 的实现,支持 reCAPTCHA\n */\n\n/**\n * 执行 Google reCAPTCHA 验证\n */\nconst executeRecaptcha = async (action: string, sitekey: string): Promise<string | false> => {\n if (typeof window === 'undefined' || !window.grecaptcha?.execute) {\n console.warn('[LiveChat Fetcher] reCAPTCHA not loaded')\n return false\n }\n\n try {\n const token = await window.grecaptcha.execute(sitekey, { action })\n return token\n } catch (error) {\n console.error('[LiveChat Fetcher] reCAPTCHA execution failed:', error)\n return false\n }\n}\n\n/**\n * 获取 reCAPTCHA headers\n */\nasync function getRecaptchaHeaders(\n action: string,\n sitekey: string,\n headerKey = ''\n): Promise<Record<string, string>> {\n const recaptchaToken = await executeRecaptcha(action, sitekey)\n if (!recaptchaToken) {\n return {}\n }\n return {\n [headerKey]: recaptchaToken,\n }\n}\n\n/**\n * Fetcher 参数\n */\nexport interface FetcherOptions {\n url: string\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'\n headers?: Record<string, string>\n body?: any\n timeout?: number\n needRecaptcha?: boolean\n recaptchaSitekey?: string\n recaptchaAction?: string\n recaptchaHeaderKey?: string\n}\n\n/**\n * Fetcher 函数\n * 支持 reCAPTCHA 和自定义 headers\n */\nexport const fetcher = async ({\n url,\n method = 'POST',\n headers = {},\n body,\n timeout = 90000,\n needRecaptcha = false,\n recaptchaSitekey,\n recaptchaAction = 'activity',\n recaptchaHeaderKey = 'recaptcha',\n}: FetcherOptions): Promise<Response> => {\n // 获取 reCAPTCHA headers(如果需要)\n let recaptchaHeaders: Record<string, string> = {}\n if (needRecaptcha) {\n if (!recaptchaSitekey) {\n console.warn('[LiveChat Fetcher] needRecaptcha=true but recaptchaSitekey is missing')\n } else {\n recaptchaHeaders = await getRecaptchaHeaders(recaptchaAction, recaptchaSitekey, recaptchaHeaderKey)\n }\n }\n\n // 准备请求体\n const bodyData = body ? JSON.stringify(body) : undefined\n\n const controller = new AbortController()\n let timeoutTimer: NodeJS.Timeout | undefined\n if (timeout) {\n timeoutTimer = setTimeout(() => controller.abort(), timeout)\n }\n\n try {\n const response = await fetch(url, {\n method,\n mode: 'cors',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n ...recaptchaHeaders,\n },\n signal: controller.signal,\n ...(method !== 'GET' && bodyData && { body: bodyData }),\n })\n\n if (timeoutTimer) {\n clearTimeout(timeoutTimer)\n }\n\n return response\n } catch (error) {\n if (timeoutTimer) {\n clearTimeout(timeoutTimer)\n }\n throw error\n }\n}\n\n/**\n * 扩展 Window 接口以支持 grecaptcha\n */\ndeclare global {\n interface Window {\n grecaptcha?: {\n execute: (sitekey: string, options: { action: string }) => Promise<string>\n ready: (callback: () => void) => void\n }\n }\n}\n","/**\n * LiveChat API 层\n * 处理 SSE 流式通信和 HTTP 请求\n * 基于 specs/livechat-widget/contracts/*.yaml\n */\n\nimport type { ChatStreamRequest, SSEEvent, NewSessionRequest, NewSessionResponse, ErrorResponse } from '../types'\nimport { fetcher } from '../utils/fetcher'\n\n/**\n * Recaptcha 配置\n */\nexport interface RecaptchaConfig {\n /**\n * 是否启用 reCAPTCHA\n */\n needRecaptcha?: boolean\n /**\n * reCAPTCHA site key\n */\n recaptchaSitekey?: string\n /**\n * reCAPTCHA action 名称\n */\n recaptchaAction?: string\n}\n\n// ============================================================================\n// SSE 流式消息处理 (T006)\n// ============================================================================\n\n/**\n * 发送消息并接收 SSE 流式响应\n * @param apiBaseUrl API 基础 URL\n * @param request 请求参数\n * @param onEvent SSE 事件回调\n * @param customHeaders 自定义请求头\n * @param recaptchaConfig reCAPTCHA 配置\n */\nexport async function sendMessage(\n apiBaseUrl: string,\n request: ChatStreamRequest,\n onEvent: (event: SSEEvent) => void,\n customHeaders?: Record<string, string>,\n recaptchaConfig?: RecaptchaConfig\n): Promise<void> {\n // 使用 fetcher 处理 reCAPTCHA 和自定义 headers\n const response = await fetcher({\n url: `${apiBaseUrl}/api/chat/stream`,\n method: 'POST',\n headers: {\n Accept: 'text/event-stream',\n ...customHeaders,\n },\n body: request,\n needRecaptcha: recaptchaConfig?.needRecaptcha,\n recaptchaSitekey: recaptchaConfig?.recaptchaSitekey,\n recaptchaAction: recaptchaConfig?.recaptchaAction || 'chat_stream',\n })\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n\n const reader = response.body?.getReader()\n if (!reader) {\n throw new Error('Response body is not readable')\n }\n\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent: string | null = null\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n // 解码并追加到缓冲区\n buffer += decoder.decode(value, { stream: true })\n\n // 按行分割\n const lines = buffer.split('\\n')\n\n // 保留最后一个不完整的行\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n const trimmed = line.trim()\n\n if (trimmed === '') {\n // 空行表示事件边界,重置当前事件类型\n currentEvent = null\n continue\n }\n\n if (trimmed.startsWith('event:')) {\n // 提取事件类型\n currentEvent = trimmed.substring(6).trim()\n } else if (trimmed.startsWith('data:')) {\n // 提取数据并解析 JSON\n const dataStr = trimmed.substring(5).trim()\n try {\n const data = JSON.parse(dataStr)\n onEvent({\n event: (currentEvent as any) || 'message',\n data,\n })\n } catch (err) {\n console.error('[LiveChat API] Failed to parse SSE data:', dataStr, err)\n onEvent({\n event: 'error',\n data: {\n message: 'Failed to parse SSE data',\n code: 'PARSE_ERROR',\n },\n })\n }\n }\n }\n }\n } catch (error) {\n console.error('[LiveChat API] SSE stream error:', error)\n throw error\n } finally {\n reader.releaseLock()\n }\n}\n\n// ============================================================================\n// 创建/恢复会话 (T009)\n// ============================================================================\n\n/**\n * 创建新会话或恢复现有会话\n *\n * 使用场景:\n * 1. 创建新会话:不传 session_id,返回新的 sessionId\n * 2. 恢复会话:传入 session_id,验证会话有效性并返回历史消息(resumed: true, messages: [...])\n *\n * @param apiBaseUrl API 基础 URL\n * @param request 请求参数\n * @param customHeaders 自定义请求头\n * @param recaptchaConfig reCAPTCHA 配置\n * @returns 会话信息,可能包含历史消息\n */\nexport async function createNewSession(\n apiBaseUrl: string,\n request: NewSessionRequest,\n customHeaders?: Record<string, string>,\n recaptchaConfig?: RecaptchaConfig\n): Promise<NewSessionResponse> {\n // 使用 fetcher 处理 reCAPTCHA 和自定义 headers\n const response = await fetcher({\n url: `${apiBaseUrl}/api/chat/new-session`,\n method: 'POST',\n headers: customHeaders,\n body: request,\n needRecaptcha: recaptchaConfig?.needRecaptcha,\n recaptchaSitekey: recaptchaConfig?.recaptchaSitekey,\n recaptchaAction: recaptchaConfig?.recaptchaAction || 'new_session',\n })\n\n if (!response.ok) {\n const errorData: ErrorResponse = await response.json().catch(() => ({\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`,\n code: 'HTTP_ERROR',\n }))\n throw new Error(errorData.error || 'Failed to create session')\n }\n\n return response.json()\n}\n","/**\n * 消息渲染器注册表\n * 支持自定义消息类型的扩展机制\n * 基于 specs/livechat-widget/plan.md 的扩展机制设计\n */\n\nimport type { MessageContent, MessageRenderer } from '../types'\n\n/**\n * 消息渲染器注册表\n * 允许注册自定义的消息类型渲染器\n */\nexport class MessageRendererRegistry {\n private renderers = new Map<string, MessageRenderer>()\n\n /**\n * 注册自定义渲染器\n * @param type 消息内容类型\n * @param renderer 渲染器实现\n */\n register(type: string, renderer: MessageRenderer): void {\n if (!type || typeof type !== 'string') {\n throw new Error('Message type must be a non-empty string')\n }\n\n if (!renderer) {\n throw new Error('Renderer is required')\n }\n\n // 检查 renderer 是否有 render 属性\n if (!('render' in renderer) || typeof renderer.render !== 'function') {\n throw new Error('Renderer must have a render function')\n }\n\n this.renderers.set(type, renderer)\n }\n\n /**\n * 批量注册渲染器\n * @param renderers 渲染器映射表\n */\n registerMany(renderers: Record<string, MessageRenderer>): void {\n Object.entries(renderers).forEach(([type, renderer]) => {\n this.register(type, renderer)\n })\n }\n\n /**\n * 获取指定类型的渲染器\n * @param type 消息内容类型\n * @returns 渲染器实现,如果未注册则返回 undefined\n */\n get(type: string): MessageRenderer | undefined {\n return this.renderers.get(type)\n }\n\n /**\n * 检查是否已注册指定类型的渲染器\n * @param type 消息内容类型\n * @returns 是否已注册\n */\n has(type: string): boolean {\n return this.renderers.has(type)\n }\n\n /**\n * 移除指定类型的渲染器\n * @param type 消息内容类型\n * @returns 是否成功移除\n */\n unregister(type: string): boolean {\n return this.renderers.delete(type)\n }\n\n /**\n * 清空所有已注册的渲染器\n */\n clear(): void {\n this.renderers.clear()\n }\n\n /**\n * 渲染消息内容\n * @param content 消息内容\n * @param isUser 是否为用户消息\n * @param isSystem 是否为系统消息\n * @returns 渲染结果,如果未找到对应渲染器则返回 null\n */\n render(content: MessageContent, isUser: boolean, isSystem: boolean): React.ReactNode {\n const renderer = this.renderers.get(content.type)\n\n if (!renderer) {\n console.warn(`[MessageRendererRegistry] No renderer found for type: ${content.type}`)\n return null\n }\n\n try {\n return renderer.render(content, isUser, isSystem)\n } catch (error) {\n console.error(`[MessageRendererRegistry] Error rendering ${content.type}:`, error)\n return null\n }\n }\n\n /**\n * 获取所有已注册的消息类型\n * @returns 消息类型数组\n */\n getRegisteredTypes(): string[] {\n return Array.from(this.renderers.keys())\n }\n}\n\n/**\n * 创建默认的渲染器注册表实例\n * @returns 新的注册表实例\n */\nexport function createRendererRegistry(): MessageRendererRegistry {\n return new MessageRendererRegistry()\n}\n","/**\n * 输入验证工具\n * 基于 specs/livechat-widget/research.md 的 XSS 防护策略\n */\n\n/**\n * 清理用户输入\n * - 移除控制字符\n * - 限制长度\n * @param input 用户输入的字符串\n * @param maxLength 最大长度\n * @returns 清理后的字符串\n */\nexport function sanitizeInput(input: string, maxLength: number = 5000): string {\n if (!input || typeof input !== 'string') {\n return ''\n }\n\n // 移除控制字符(ASCII 0-31 和 127)\n let sanitized = input.replace(/[\\x00-\\x1F\\x7F]/g, '')\n\n // 限制长度\n if (sanitized.length > maxLength) {\n sanitized = sanitized.substring(0, maxLength)\n }\n\n // 去除首尾空白\n return sanitized.trim()\n}\n\n/**\n * 验证 URL 是否安全\n * @param url URL 字符串\n * @returns 是否为安全的 URL\n */\nexport function isValidUrl(url: string): boolean {\n if (!url || typeof url !== 'string') {\n return false\n }\n\n try {\n const parsed = new URL(url)\n // 只允许 http 和 https 协议\n return parsed.protocol === 'http:' || parsed.protocol === 'https:'\n } catch {\n return false\n }\n}\n\n/**\n * 验证 sessionId 是否为有效的 UUID\n * @param sessionId 会话 ID\n * @returns 是否为有效的 UUID\n */\nexport function isValidUUID(sessionId: string): boolean {\n if (!sessionId || typeof sessionId !== 'string') {\n return false\n }\n\n // UUID v4 格式:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n return uuidRegex.test(sessionId)\n}\n\n/**\n * 验证消息内容是否有效\n * @param content 消息内容\n * @returns 是否有效\n */\nexport function isValidMessageContent(content: string): boolean {\n if (!content || typeof content !== 'string') {\n return false\n }\n\n // 去除空白后不能为空\n const trimmed = content.trim()\n return trimmed.length > 0 && trimmed.length <= 5000\n}\n\n/**\n * 转义 HTML 特殊字符\n * @param text 原始文本\n * @returns 转义后的文本\n */\nexport function escapeHtml(text: string): string {\n if (!text || typeof text !== 'string') {\n return ''\n }\n\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n }\n\n return text.replace(/[&<>\"']/g, char => map[char] || char)\n}\n","/**\n * 文本消息内容渲染器\n * 支持 Markdown 格式\n * 基于 specs/livechat-widget/plan.md 的文本消息设计\n */\n\nimport React from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport type { MessageRenderer, TextContent } from '../../types'\n\n/**\n * 文本消息渲染器\n *\n * 功能:\n * - 支持 Markdown 语法(粗体、斜体、链接、列表等)\n * - 安全渲染(React Markdown 自动防护 XSS)\n * - 响应式文本样式\n *\n * Markdown 支持:\n * - 粗体:**text** 或 __text__\n * - 斜体:*text* 或 _text_\n * - 链接:[text](url)\n * - 列表:- item 或 1. item\n * - 代码:`code` 或 ```code block```\n *\n * @example\n * ```tsx\n * const content: TextContent = {\n * type: 'text',\n * text: '您好!**这是粗体**,*这是斜体*。'\n * }\n * <TextBlock.render(content, false, false) />\n * ```\n */\nexport const TextBlock: MessageRenderer = {\n render: (content, isUser, isSystem) => {\n const textContent = content as TextContent\n\n if (!textContent.text) {\n return null\n }\n\n return (\n <div className=\"livechat-markdown text-sm leading-relaxed\">\n <ReactMarkdown\n components={{\n // 自定义链接样式\n a: ({ node, ...props }) => (\n <a\n {...props}\n className={`underline ${isUser ? 'text-blue-200 hover:text-blue-100' : 'text-blue-600 hover:text-blue-700'}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n />\n ),\n // 自定义代码块样式\n code: ({ node, ...props }: any) =>\n props.inline ? (\n <code\n {...props}\n className={`rounded px-1.5 py-0.5 font-mono text-xs ${isUser ? 'bg-[#004A6E] text-white' : 'bg-gray-200 text-gray-800'}`}\n />\n ) : (\n <code\n {...props}\n className={`block overflow-x-auto rounded px-3 py-2 font-mono text-xs ${isUser ? 'bg-[#004A6E] text-white' : 'bg-gray-200 text-gray-800'}`}\n />\n ),\n // 自定义段落样式\n p: ({ node, ...props }) => <p {...props} className=\"last:mb-0\" />,\n // 自定义列表样式\n ul: ({ node, ...props }) => <ul {...props} className=\"mb-2 ml-4 list-disc\" />,\n ol: ({ node, ...props }) => <ol {...props} className=\"mb-2 ml-4 list-decimal\" />,\n li: ({ node, ...props }) => <li {...props} className=\"mb-1\" />,\n // 自定义标题样式\n h1: ({ node, ...props }) => <h1 {...props} className=\"mb-2 text-lg font-bold\" />,\n h2: ({ node, ...props }) => <h2 {...props} className=\"mb-2 text-base font-bold\" />,\n h3: ({ node, ...props }) => <h3 {...props} className=\"mb-1 text-sm font-bold\" />,\n // 自定义强调样式\n strong: ({ node, ...props }) => <strong {...props} className=\"font-semibold\" />,\n em: ({ node, ...props }) => <em {...props} className=\"italic\" />,\n }}\n >\n {textContent.text}\n </ReactMarkdown>\n </div>\n )\n },\n}\n","/**\n * 商品卡片渲染器\n * 显示单个商品的详细信息\n * 基于 specs/livechat-widget/data-model.md 的商品数据模型\n */\n\nimport React from 'react'\nimport type { MessageRenderer, ProductCardContent, Product } from '../../types'\nimport { CURRENCY_SYMBOLS } from '../../constants.js'\n\n/**\n * 格式化价格\n * @param price 价格对象\n * @returns 格式化后的价格字符串 (如 \"$29.99\")\n */\nfunction formatPrice(price: Product['price']): string {\n const { amount, currency } = price\n\n const symbol = CURRENCY_SYMBOLS[currency] || currency\n const formattedAmount = amount.toFixed(2)\n\n return `${symbol}${formattedAmount}`\n}\n\n/**\n * 库存状态徽章\n */\nconst StockBadge: React.FC<{ status: Product['stockStatus'] }> = ({ status }) => {\n const statusConfig = {\n in_stock: { text: '有货', className: 'bg-green-100 text-green-800' },\n low_stock: { text: '库存紧张', className: 'bg-yellow-100 text-yellow-800' },\n out_of_stock: { text: '缺货', className: 'bg-red-100 text-red-800' },\n }\n\n const config = statusConfig[status]\n\n return (\n <span\n className={`\n inline-flex items-center rounded px-2 py-0.5 text-xs font-medium\n ${config.className}\n `}\n >\n {config.text}\n </span>\n )\n}\n\n/**\n * 商品卡片渲染器\n *\n * 功能:\n * - 显示商品图片、标题、价格\n * - 显示库存状态\n * - 可选:评分、评论数、热度\n * - 点击跳转到商品页面\n *\n * 布局:\n * ```\n * ┌─────────────────────────┐\n * │ [图片] │\n * ├─────────────────────────┤\n * │ 商品标题 │\n * │ $29.99 [有货] │\n * │ ⭐ 4.5 (120 评论) │\n * └─────────────────────────┘\n * ```\n *\n * @example\n * ```tsx\n * const content: ProductCardContent = {\n * type: 'product_card',\n * data: {\n * product: {\n * shopifyId: '123',\n * handle: 'product-name',\n * title: 'Example Product',\n * price: { amount: 29.99, currency: 'USD' },\n * imageUrl: 'https://...',\n * productUrl: 'https://...',\n * stockStatus: 'in_stock',\n * averageRating: 4.5,\n * reviewCount: 120\n * }\n * }\n * }\n * <ProductCard.render(content, false, false) />\n * ```\n */\nexport const ProductCard: MessageRenderer = {\n render: (content, isUser, isSystem) => {\n const productContent = content as ProductCardContent\n const { product } = productContent.data\n\n if (!product) {\n return null\n }\n\n const { title, price, imageUrl, productUrl, stockStatus, averageRating, reviewCount, description } = product\n\n return (\n <a\n href={productUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"livechat-product-card block max-w-sm overflow-hidden\"\n >\n {/* 商品图片 */}\n <div className=\"relative aspect-square w-full bg-gray-100\">\n <img src={imageUrl} alt={title} className=\"size-full object-cover\" loading=\"lazy\" />\n </div>\n\n {/* 商品信息 */}\n <div className=\"flex flex-col gap-2 p-3\">\n {/* 标题 */}\n <h3 className=\"line-clamp-2 text-sm font-medium text-gray-900\">{title}</h3>\n\n {/* 描述(可选) */}\n {description && <p className=\"line-clamp-2 text-xs text-gray-600\">{description}</p>}\n\n {/* 价格 + 库存 */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-lg font-bold text-gray-900\">{formatPrice(price)}</span>\n <StockBadge status={stockStatus} />\n </div>\n\n {/* 评分 + 评论数(可选) */}\n {averageRating !== undefined && reviewCount !== undefined && (\n <div className=\"flex items-center gap-1 text-xs text-gray-600\">\n <span className=\"text-yellow-500\">⭐</span>\n <span className=\"font-medium\">{averageRating.toFixed(1)}</span>\n <span>({reviewCount} 评论)</span>\n </div>\n )}\n </div>\n </a>\n )\n },\n}\n","/**\n * 商品列表渲染器\n * 显示多个商品的纵向列表,支持展开/收起\n * 基于 specs/livechat-widget/data-model.md 的商品数据模型\n */\n\nimport React, { useState } from 'react'\nimport type { MessageRenderer, ProductListContent, Product, CommonText } from '../../types'\nimport { CURRENCY_SYMBOLS, DEFAULT_COMMON_TEXT } from '../../constants.js'\n\n/**\n * 格式化价格\n */\nfunction formatPrice(price: Product['price']): string {\n const { amount, currency } = price\n\n const symbol = CURRENCY_SYMBOLS[currency] || currency\n return `${symbol}${amount.toFixed(2)}`\n}\n\n/**\n * 格式化折扣标签文本\n * @param discount 折扣对象\n * @param currency 货币代码\n * @param offText \"OFF\" 文案\n * @returns 格式化后的折扣文本(如 \"$10 OFF\" 或 \"20% OFF\")\n */\nfunction formatDiscountLabel(\n discount: { discount_type?: string; discount_value?: string | number },\n currency: string,\n offText: string = DEFAULT_COMMON_TEXT.off\n): string {\n if (!discount.discount_type || discount.discount_value === undefined) {\n return ''\n }\n\n // 将 discount_value 转换为数字\n const value =\n typeof discount.discount_value === 'string' ? parseFloat(discount.discount_value) : discount.discount_value\n\n if (isNaN(value)) {\n return ''\n }\n\n if (discount.discount_type === 'percentage') {\n return `${Math.round(value)}% ${offText}`\n }\n\n if (discount.discount_type === 'fixed_amount') {\n const symbol = CURRENCY_SYMBOLS[currency] || currency\n return `${symbol}${Math.round(value)} ${offText}`\n }\n\n return ''\n}\n\n/**\n * 紧凑型商品卡片(用于纵向列表)\n */\nconst CompactProductCard: React.FC<{\n product: Product\n onAddToCart?: (product: Product) => void\n addToCartText?: string\n offText?: string\n}> = ({ product, onAddToCart, addToCartText = DEFAULT_COMMON_TEXT.addToCart, offText = DEFAULT_COMMON_TEXT.off }) => {\n const { title, description, price, imageUrl, stockStatus, averageRating, variants } = product\n\n const isOutOfStock = stockStatus === 'out_of_stock'\n\n // 获取第一个变体的折扣信息\n const firstVariant = variants?.[0]\n const hasDiscount = firstVariant?.discount?.has_discount\n const discountPrice = hasDiscount ? firstVariant?.discount?.discount_price : null\n const discount = firstVariant?.discount\n\n // 当前显示价格:有折扣时显示折扣价,否则显示原价\n const currentPrice = discountPrice ? { amount: discountPrice, currency: price.currency } : price\n\n // 格式化折扣标签\n const discountLabel = discount && hasDiscount ? formatDiscountLabel(discount, price.currency, offText) : ''\n\n const handleAddToCart = (e: React.MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (onAddToCart) {\n onAddToCart(product)\n }\n }\n\n return (\n <div className=\"block w-full overflow-hidden rounded-2xl bg-[#F5F6F7] transition-shadow\">\n <div className=\"block\">\n <div className=\"flex gap-2 p-4\">\n {/* 商品图片 */}\n <div className=\" flex shrink-0 items-center overflow-hidden rounded-md \" style={{ width: '40%' }}>\n <img\n src={imageUrl}\n alt={title}\n className={`h-auto w-full object-cover ${isOutOfStock ? 'opacity-50' : ''}`}\n loading=\"lazy\"\n />\n </div>\n\n {/* 商品信息 */}\n <div className=\"flex flex-1 flex-col justify-center gap-0.5\">\n {/* 折扣标签 */}\n {discountLabel && (\n <div\n className=\"mb-1 w-fit rounded-full px-2 text-sm font-bold leading-none tracking-[-0.04em] text-white\"\n style={{ backgroundColor: '#005D8E', paddingTop: '6px', paddingBottom: '4px' }}\n >\n {discountLabel}\n </div>\n )}\n\n {/* 标题 */}\n <h4 className=\"line-clamp-2 text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#080A0F]\">\n {title}\n </h4>\n\n {/* 描述(可选) */}\n {description && (\n <p className=\"line-clamp-2 text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">\n {description}\n </p>\n )}\n\n {/* 价格和评分 */}\n <div className=\"mt-4 flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n {/* 当前价格(有折扣时显示折扣价,否则显示原价) */}\n <span className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">\n {formatPrice(currentPrice)}\n </span>\n {/* 原价(划线价)- 仅在有折扣时显示 */}\n {hasDiscount && (\n <span className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#6D6D6F] line-through\">\n {formatPrice(price)}\n </span>\n )}\n </div>\n {/* 评分(可选) */}\n {averageRating !== undefined && (\n <div className=\"flex items-center gap-0.5 text-xs text-gray-600\">\n <span className=\"text-yellow-500\">⭐</span>\n <span>{averageRating.toFixed(1)}</span>\n </div>\n )}\n </div>\n\n {/* Add to Cart 按钮 - 在价格下方 */}\n <button\n type=\"button\"\n onClick={handleAddToCart}\n className=\"mt-2 w-fit rounded-full px-[20px] py-[10px] text-center text-sm font-bold leading-[1.2] tracking-[-0.04em] text-white\"\n style={{ backgroundColor: '#1D1D1F' }}\n >\n {addToCartText}\n </button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * 商品列表内部组件(支持展开/收起)\n */\nconst ProductListComponent: React.FC<{\n products: Product[]\n title?: string\n onAddToCart?: (product: Product) => void\n commonText?: CommonText\n}> = ({ products, title, onAddToCart, commonText }) => {\n const [isExpanded, setIsExpanded] = useState(false)\n\n // 合并默认文案和自定义文案\n const mergedText = { ...DEFAULT_COMMON_TEXT, ...commonText }\n\n // 过滤掉 null 或无效的产品\n const validProducts = products.filter(p => p && p.shopifyId)\n\n // 默认显示前3个产品\n const INITIAL_DISPLAY_COUNT = 3\n const hasMore = validProducts.length > INITIAL_DISPLAY_COUNT\n const displayedProducts = isExpanded ? validProducts : validProducts.slice(0, INITIAL_DISPLAY_COUNT)\n\n return (\n <div className=\"flex w-full flex-col gap-2\">\n {/* 列表标题(可选) */}\n {title && <h3 className=\"text-sm font-semibold text-gray-900\">{title}</h3>}\n\n {/* 纵向排列的商品列表 */}\n <div className=\"flex flex-col gap-1.5\">\n {displayedProducts.map(product => {\n if (!product || !product.shopifyId) return null\n return (\n <CompactProductCard\n key={product.shopifyId}\n product={product}\n onAddToCart={onAddToCart}\n addToCartText={mergedText.addToCart}\n offText={mergedText.off}\n />\n )\n })}\n </div>\n\n {/* Learn More 按钮 */}\n {hasMore && (\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-center gap-1.5 px-3 py-2 text-[14px] font-bold leading-[1.2] tracking-tighter text-[#080A0F]\"\n >\n <span>{isExpanded ? mergedText.showLess : mergedText.learnMore}</span>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n )}\n </div>\n )\n}\n\n/**\n * 商品列表渲染器\n *\n * 功能:\n * - 纵向展示多个商品\n * - 默认显示前3个产品\n * - 支持展开/收起查看全部\n * - 紧凑型卡片设计\n * - 可选标题\n *\n * 布局:\n * ```\n * 标题(可选)\n * ┌─────────────────┐\n * │ [图] 商品标题 │\n * │ $29.99 │\n * └─────────────────┘\n * ┌─────────────────┐\n * │ [图] 商品标题 │\n * │ $39.99 │\n * └─────────────────┘\n * ┌─────────────────┐\n * │ [图] 商品标题 │\n * │ $49.99 │\n * └─────────────────┘\n * [ Learn More ↓ ]\n * ```\n *\n * @example\n * ```tsx\n * const content: ProductListContent = {\n * type: 'product_list',\n * data: {\n * title: '相关商品推荐',\n * products: [product1, product2, product3, product4, product5]\n * }\n * }\n * <ProductList.render(content, false, false) />\n * ```\n */\nexport const ProductList: MessageRenderer = {\n render: content => {\n const productListContent = content as ProductListContent\n const { products, title, onAddToCart, commonText } = productListContent.data\n\n // 过滤掉 null 或无效的产品\n const validProducts = products?.filter(p => p && p.shopifyId) || []\n\n if (validProducts.length === 0) {\n return null\n }\n\n return (\n <ProductListComponent products={validProducts} title={title} onAddToCart={onAddToCart} commonText={commonText} />\n )\n },\n}\n","/**\n * 产品对比组件\n * 显示多个产品的对比信息,采用表格布局展示各维度差异\n * 基于参考设计:顶部产品展示 + 底部对比表格\n */\n\nimport React, { useState } from 'react'\nimport type { Product, MessageRenderer, CommonText } from '../../types'\nimport { DEFAULT_COMMON_TEXT } from '../../constants'\n\n/**\n * 对比维度数据结构\n */\ninterface ComparisonDimension {\n label: string\n values: Array<{\n product_id: string\n [key: string]: any\n }>\n}\n\n/**\n * 产品对比数据结构\n */\nexport interface ProductComparisonData {\n products: Product[]\n dimensions: {\n price?: ComparisonDimension\n variants?: ComparisonDimension\n member_price?: ComparisonDimension\n discount?: ComparisonDimension\n [key: string]: ComparisonDimension | undefined\n }\n commonText?: CommonText\n}\n\nexport interface ProductComparisonProps {\n /**\n * 产品对比数据\n */\n data: ProductComparisonData\n\n /**\n * 是否为用户消息\n */\n isUser?: boolean\n\n /**\n * 是否为系统消息\n */\n isSystem?: boolean\n\n /**\n * 添加到购物车回调\n */\n onAddToCart?: (product: Product) => void\n\n /**\n * 通用文案配置\n */\n commonText?: CommonText\n}\n\n/**\n * 格式化价格显示\n */\nconst formatPrice = (amount: number, currency: string = 'USD'): string => {\n const symbol = currency === 'USD' ? '$' : currency\n return `${symbol}${amount.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`\n}\n\n/**\n * 产品对比组件\n *\n * 布局:\n * ```\n * ┌─────────────────────────────────────┐\n * │ [产品1图片] [产品2图片] │\n * │ 价格1 价格2 │\n * │ 颜色选项 颜色选项 │\n * ├─────────────────────────────────────┤\n * │ 维度1 │ 值1-1 │ 值1-2 │\n * │ 维度2 │ 值2-1 │ 值2-2 │\n * │ 维度3 │ 值3-1 │ 值3-2 │\n * └─────────────────────────────────────┘\n * ```\n */\nexport const ProductComparison: React.FC<ProductComparisonProps> = ({ data, onAddToCart, commonText }) => {\n const { products: rawProducts, dimensions } = data\n\n // 合并默认文案和自定义文案\n const mergedText = { ...DEFAULT_COMMON_TEXT, ...commonText }\n\n // 过滤掉 null 或无效的产品\n const allProducts = rawProducts?.filter(p => p && p.shopifyId) || []\n\n // 对比列数(固定为2列)\n const COMPARISON_COLUMNS = 2\n\n // 初始化每个对比位置的选中产品(默认取前两个产品)\n const initialSelectedProducts = allProducts.slice(0, COMPARISON_COLUMNS)\n const [selectedProducts, setSelectedProducts] = useState<Product[]>(initialSelectedProducts)\n\n // Early return 必须在所有 hooks 之后\n if (allProducts.length === 0) {\n return null\n }\n\n // 处理产品选择变更\n const handleProductChange = (index: number, productId: string) => {\n const newProduct = allProducts.find(p => p.shopifyId === productId)\n if (newProduct) {\n const newSelectedProducts = [...selectedProducts]\n newSelectedProducts[index] = newProduct\n setSelectedProducts(newSelectedProducts)\n }\n }\n\n // 当前显示的产品(确保只显示指定列数)\n const products = selectedProducts.slice(0, COMPARISON_COLUMNS)\n\n /**\n * 获取指定产品在某个维度的值\n */\n const getDimensionValue = (dimension: ComparisonDimension, productId: string): any => {\n if (!dimension || !dimension.values || !Array.isArray(dimension.values)) {\n return null\n }\n return dimension.values.find(v => v && v.product_id === productId)\n }\n\n /**\n * 渲染通用对比行\n */\n const renderComparisonRow = (label: string, dimension: ComparisonDimension | undefined) => {\n if (!dimension) return null\n\n return (\n <div className=\"border-b border-[#DADCE0] pb-2\">\n {/* 维度标签(标题) */}\n <div className=\"mb-3\">\n <span className=\"text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#86868C]\">{label}</span>\n </div>\n\n {/* 产品值列表(横向排列) */}\n <div className=\"flex gap-4\" style={{ gap: '36px' }}>\n {products.map((product, index) => {\n if (!product || !product.shopifyId) return null\n const value = getDimensionValue(dimension, product.shopifyId)\n\n return (\n <div key={`comparison-${index}`} className=\"flex-1\">\n {renderDimensionValue(value, dimension.label)}\n </div>\n )\n })}\n </div>\n </div>\n )\n }\n\n /**\n * 渲染维度值\n */\n const renderDimensionValue = (value: any, dimensionLabel: string) => {\n if (!value) {\n return <span className=\"text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">-</span>\n }\n\n // 根据不同维度类型渲染不同格式\n if (dimensionLabel.toLowerCase().includes('price')) {\n // 价格维度\n const priceDisplay =\n value.min === value.max\n ? formatPrice(value.min, value.currency)\n : `${formatPrice(value.min, value.currency)} - ${formatPrice(value.max, value.currency)}`\n return <span className=\"text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">{priceDisplay}</span>\n }\n\n if (dimensionLabel.toLowerCase().includes('variant')) {\n // 变体数量\n return (\n <span className=\"text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">\n {value.count || 0} {value.count === 1 ? 'variant' : 'variants'}\n </span>\n )\n }\n\n // 默认显示\n return (\n <span className=\"text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\">\n {value.display || value.value || '-'}\n </span>\n )\n }\n\n return (\n <div className=\"w-full overflow-hidden rounded-2xl bg-[#F5F6F7]\">\n {/* 顶部产品展示区域 */}\n <div className=\"flex p-4\" style={{ gap: '36px', paddingBottom: '0px' }}>\n {products.map((product, index) => {\n if (!product || !product.shopifyId) return null\n\n // 获取价格信息\n const priceInfo = dimensions.price ? getDimensionValue(dimensions.price, product.shopifyId) : null\n\n // 获取折扣信息\n const firstVariant = product.variants?.[0]\n const hasDiscount = firstVariant?.discount?.has_discount\n const discountPrice = hasDiscount ? firstVariant?.discount?.discount_price : null\n\n // 当前显示价格:有折扣时显示折扣价,否则显示原价\n const currentPrice = discountPrice || priceInfo?.min || product.price.amount\n const originalPrice = product.price.amount\n\n // Add to Cart 按钮点击处理\n const handleAddToCart = (e: React.MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (onAddToCart) {\n onAddToCart(product)\n }\n }\n\n return (\n <div key={`product-column-${index}`} className=\"flex flex-1 flex-col items-center\">\n {/* 产品选择下拉框 */}\n <div className=\"mb-4 w-full\">\n <select\n value={product.shopifyId}\n onChange={e => handleProductChange(index, e.target.value)}\n className=\"w-full rounded-lg border border-[#DADCE0] bg-[#F5F6F7] px-3 py-2 text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#1D1D1F]\"\n style={{\n appearance: 'none',\n backgroundImage:\n \"url(\\\"data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%231D1D1F' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\\\")\",\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'right 12px center',\n paddingRight: '32px',\n }}\n >\n {allProducts.map(p => (\n <option key={p.shopifyId} value={p.shopifyId}>\n {p.title.length > 30 ? `${p.title.slice(0, 30)}...` : p.title}\n </option>\n ))}\n </select>\n </div>\n\n {/* 产品图片 */}\n <a\n href={product.productUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mb-4 block w-full max-w-[160px]\"\n >\n <div className=\"aspect-square w-full overflow-hidden rounded-lg\">\n {product.imageUrl ? (\n <img\n src={product.imageUrl}\n alt={product.title}\n className=\"size-full object-contain\"\n loading=\"lazy\"\n />\n ) : (\n <div className=\"flex size-full items-center justify-center text-gray-400\">\n <svg className=\"size-12\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n </div>\n )}\n </div>\n </a>\n\n {/* 价格展示(带划线价) */}\n <div className=\"mb-4 flex flex-col items-center gap-1\">\n <div className=\"flex items-center gap-2\">\n {/* 当前价格(折扣价或原价) */}\n <span className=\"text-base font-bold leading-[1.2] tracking-[-0.02em] text-[#1D1D1F]\">\n {formatPrice(currentPrice, priceInfo?.currency || product.price.currency)}\n </span>\n {/* 划线价 - 仅在有折扣时显示 */}\n {hasDiscount && discountPrice && (\n <span className=\"text-base font-bold leading-[1.2] tracking-[-0.02em] text-[#4A4C56] line-through\">\n {formatPrice(originalPrice, product.price.currency)}\n </span>\n )}\n </div>\n </div>\n\n {/* Add to Cart 按钮 */}\n {onAddToCart && (\n <button\n type=\"button\"\n onClick={handleAddToCart}\n className=\"mb-3 w-fit rounded-full px-[20px] py-[10px] text-center text-sm font-bold leading-[1.2] tracking-[-0.04em] text-white\"\n style={{ backgroundColor: '#1D1D1F' }}\n >\n {mergedText.addToCart}\n </button>\n )}\n\n {/* 颜色选项(如果有variants) */}\n {product.variants && product.variants.length > 1 && (\n <div className=\"flex gap-2\">\n {product.variants.slice(0, 3).map((variant, idx) => (\n <div\n key={variant.id || idx}\n className=\"size-6 rounded-full border-2 border-[#DADCE0]\"\n style={{ backgroundColor: variant.color || '#000' }}\n title={variant.title}\n />\n ))}\n </div>\n )}\n </div>\n )\n })}\n </div>\n\n {/* 对比表格区域 */}\n <div className=\"flex flex-col gap-4 p-4\">\n {/* 遍历所有维度并渲染 */}\n {Object.entries(dimensions).map(([key, dimension]) => {\n if (!dimension || key === 'price') return null // price 已在顶部显示\n return <div key={key}>{renderComparisonRow(dimension.label, dimension)}</div>\n })}\n </div>\n </div>\n )\n}\n\n/**\n * 创建产品对比渲染器\n */\nexport const ProductComparisonRenderer: MessageRenderer = {\n render: (content, isUser, isSystem) => {\n if (content.type !== 'product_comparison' || !content.data) {\n return null\n }\n\n const comparisonData = content.data as ProductComparisonData & { onAddToCart?: (product: Product) => void }\n\n return (\n <ProductComparison\n data={comparisonData}\n isUser={isUser}\n isSystem={isSystem}\n onAddToCart={comparisonData.onAddToCart}\n commonText={comparisonData.commonText}\n />\n )\n },\n}\n","/**\n * 政策说明渲染器\n * 显示退货、保修等政策信息\n * 基于 specs/livechat-widget/data-model.md 的政策数据模型\n */\n\nimport React, { useState } from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport type { MessageRenderer, PolicyContent } from '../../types'\n\n/**\n * 政策说明渲染器\n *\n * 功能:\n * - 显示政策标题和内容\n * - 支持 Markdown 格式\n * - 可折叠/展开(内容较长时)\n *\n * 政策类型:\n * - 退货政策\n * - 保修政策\n * - 运费政策\n * - 隐私政策\n *\n * 布局:\n * ```\n * ┌─────────────────────────┐\n * │ 📋 政策标题 │\n * ├─────────────────────────┤\n * │ 政策内容... │\n * │ (支持 Markdown) │\n * │ │\n * │ [展开/收起] │\n * └─────────────────────────┘\n * ```\n *\n * @example\n * ```tsx\n * const content: PolicyContent = {\n * type: 'policy',\n * data: {\n * title: '退货政策',\n * content: '我们提供 30 天无理由退货...'\n * }\n * }\n * <PolicyBlock.render(content, false, false) />\n * ```\n */\nexport const PolicyBlock: MessageRenderer = {\n render: (content, isUser, isSystem) => {\n const policyContent = content as PolicyContent\n const { title, content: policyText } = policyContent.data\n\n if (!title || !policyText) {\n return null\n }\n\n // 判断内容是否较长(超过 200 字符)\n const isLongContent = policyText.length > 200\n\n return <PolicyCard title={title} content={policyText} isLong={isLongContent} />\n },\n}\n\n/**\n * 政策卡片组件(支持折叠)\n */\nconst PolicyCard: React.FC<{\n title: string\n content: string\n isLong: boolean\n}> = ({ title, content, isLong }) => {\n const [isExpanded, setIsExpanded] = useState(!isLong)\n\n const toggleExpand = () => {\n setIsExpanded(prev => !prev)\n }\n\n return (\n <div className=\"overflow-hidden rounded-lg border border-blue-200 bg-blue-50\">\n {/* 标题 */}\n <div className=\"flex items-center gap-2 border-b border-blue-200 bg-blue-100 px-3 py-2\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0 text-blue-700\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n <h3 className=\"text-sm font-semibold text-blue-900\">{title}</h3>\n </div>\n\n {/* 内容 */}\n <div className=\"px-3 py-2\">\n <div\n className={`\n text-sm leading-relaxed text-blue-900\n ${!isExpanded && isLong ? 'line-clamp-3' : ''}\n `}\n >\n <ReactMarkdown\n components={{\n p: ({ node, ...props }) => <p {...props} className=\"mb-2 last:mb-0\" />,\n ul: ({ node, ...props }) => <ul {...props} className=\"mb-2 ml-4 list-disc\" />,\n ol: ({ node, ...props }) => <ol {...props} className=\"mb-2 ml-4 list-decimal\" />,\n li: ({ node, ...props }) => <li {...props} className=\"mb-1\" />,\n strong: ({ node, ...props }) => <strong {...props} className=\"font-semibold\" />,\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n\n {/* 展开/收起按钮(仅长内容显示) */}\n {isLong && (\n <button\n type=\"button\"\n onClick={toggleExpand}\n className=\"mt-2 flex items-center gap-1 text-xs font-medium text-blue-700 hover:text-blue-800\"\n >\n <span>{isExpanded ? '收起' : '展开'}</span>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n )\n}\n","/**\n * 快捷回复按钮渲染器\n * 显示可点击的快捷回复选项\n * 基于 specs/livechat-widget/data-model.md 的快捷回复数据模型\n */\n\nimport React from 'react'\nimport type { MessageRenderer, QuickRepliesContent, QuickReply } from '../../types'\n\nexport interface QuickRepliesProps {\n /**\n * 快捷回复点击回调\n */\n onReplyClick?: (reply: QuickReply) => void\n}\n\n/**\n * 快捷回复按钮渲染器\n *\n * 功能:\n * - 显示多个快捷回复按钮\n * - 支持图标(可选)\n * - 点击后发送对应的消息\n *\n * 使用场景:\n * - 欢迎消息后的常见问题\n * - 引导用户选择\n * - 快速操作按钮\n *\n * 布局:\n * ```\n * ┌──────────┐ ┌──────────┐\n * │ 🛒 查价格 │ │ 📦 查物流 │\n * └──────────┘ └──────────┘\n * ┌──────────┐ ┌──────────┐\n * │ 📞 联系客服│ │ 💬 其他问题│\n * └──────────┘ └──────────┘\n * ```\n *\n * @example\n * ```tsx\n * const content: QuickRepliesContent = {\n * type: 'quick_replies',\n * data: {\n * replies: [\n * { id: '1', label: '查价格', value: '我想查询商品价格', icon: '🛒' },\n * { id: '2', label: '查物流', value: '我想查询物流信息', icon: '📦' }\n * ]\n * }\n * }\n * <QuickReplies.render(content, false, false) />\n * ```\n */\nexport const createQuickRepliesRenderer = (onReplyClick?: (reply: QuickReply) => void): MessageRenderer => ({\n render: (content, isUser, isSystem) => {\n const quickRepliesContent = content as QuickRepliesContent\n const { replies } = quickRepliesContent.data\n\n if (!replies || replies.length === 0) {\n return null\n }\n\n const handleClick = (reply: QuickReply) => {\n onReplyClick?.(reply)\n }\n\n return (\n <div className=\"flex flex-wrap gap-2\">\n {replies.map(reply => (\n <button\n key={reply.id}\n type=\"button\"\n onClick={() => handleClick(reply)}\n className=\"livechat-quick-reply-button inline-flex items-center gap-1 rounded-[19px] px-3 py-[6px] text-sm leading-[140%] tracking-[-0.02em] transition-transform hover:scale-105 active:scale-95\"\n >\n {/* 图标(可选) */}\n {reply.icon && <span className=\"text-base\">{reply.icon}</span>}\n\n {/* 标签 */}\n <span>{reply.label}</span>\n </button>\n ))}\n </div>\n )\n },\n})\n\n/**\n * 默认快捷回复渲染器(无回调)\n */\nexport const QuickReplies: MessageRenderer = createQuickRepliesRenderer()\n","/**\n * 思考状态消息渲染器\n * 显示 AI 助手正在思考的动画\n * 基于 specs/livechat-widget/plan.md 的思考状态设计\n */\n\nimport React from 'react'\nimport type { MessageRenderer, ThinkingContent } from '../../types'\n\n/**\n * 思考状态渲染器\n *\n * 功能:\n * - 显示\"正在思考...\"动画\n * - 三个跳动的圆点\n * - 黄色背景提示\n *\n * 动画效果:\n * - 使用 CSS 动画(livechat.css 中定义)\n * - 三个圆点依次跳动\n * - 循环播放\n *\n * @example\n * ```tsx\n * const content: ThinkingContent = {\n * type: 'thinking',\n * data: {\n * status: '正在查询商品信息...'\n * }\n * }\n * <ThinkingBlock.render(content, false, false) />\n * ```\n */\nexport const ThinkingBlock: MessageRenderer = {\n render: (content, isUser, isSystem) => {\n const thinkingContent = content as ThinkingContent\n const status = thinkingContent.data.status || ''\n\n return (\n <div className=\"flex items-center gap-2 py-1\">\n {/* 思考动画 - 三个跳动的点 */}\n <div className=\"livechat-thinking-dots flex gap-1\">\n <span className=\"size-2 rounded-full\" style={{ backgroundColor: 'rgba(0, 93, 142, 1)' }} />\n <span className=\"size-2 rounded-full\" style={{ backgroundColor: 'rgba(0, 93, 142, 0.6)' }} />\n <span className=\"size-2 rounded-full\" style={{ backgroundColor: 'rgba(0, 93, 142, 0.2)' }} />\n </div>\n\n {/* 状态文本(可选) */}\n {/* {status && <span className=\"text-sm text-gray-500\">{status}</span>} */}\n </div>\n )\n },\n}\n","/**\n * 错误消息渲染器\n * 显示错误提示信息\n * 基于 specs/livechat-widget/plan.md 的错误处理设计\n */\n\nimport React from 'react'\nimport type { MessageRenderer, ErrorContent } from '../../types'\n\n/**\n * 错误消息渲染器\n *\n * 功能:\n * - 显示错误消息\n * - 红色背景警告样式\n * - 可选错误代码\n *\n * 错误类型:\n * - 网络错误\n * - API 错误\n * - 会话过期\n * - 其他系统错误\n *\n * @example\n * ```tsx\n * const content: ErrorContent = {\n * type: 'error',\n * data: {\n * message: '网络连接失败,请重试',\n * code: 'NETWORK_ERROR'\n * }\n * }\n * <ErrorBlock.render(content, false, false) />\n * ```\n */\nexport const ErrorBlock: MessageRenderer = {\n render: (content, isUser, isSystem) => {\n const errorContent = content as ErrorContent\n const { message, code } = errorContent.data\n\n if (!message) {\n return null\n }\n\n return (\n <div className=\"flex flex-col gap-1 rounded-lg border border-red-200 bg-red-50 px-3 py-2\">\n {/* 错误图标 + 消息 */}\n <div className=\"flex items-start gap-2\">\n {/* 错误图标 */}\n <svg\n className=\"mt-0.5 size-5 shrink-0 text-red-600\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n\n {/* 错误消息 */}\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium text-red-800\">{message}</p>\n\n {/* 错误代码(可选) */}\n {code && <p className=\"mt-1 font-mono text-xs text-red-600\">Error code: {code}</p>}\n </div>\n </div>\n </div>\n )\n },\n}\n","/**\n * FAQ 列表组件\n * 显示常见问题列表,支持折叠/展开\n */\n\nimport React, { useState } from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport type { FAQListContent, FAQItem, MessageRenderer, MessageContent } from '../../types'\n\nexport interface FAQListProps {\n content: FAQListContent\n onQuestionClick?: (question: string) => void\n}\n\n/**\n * FAQ 列表渲染器\n * 用于注册到 MessageRendererRegistry\n */\nexport const FAQListRenderer: MessageRenderer = {\n render: (content: MessageContent) => {\n if (content.type !== 'faq_list') {\n return null\n }\n return <FAQList content={content as FAQListContent} />\n },\n}\n\nexport const FAQList: React.FC<FAQListProps> = ({ content, onQuestionClick }) => {\n const { found, count, total, results } = content.data\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set())\n\n // 如果没有找到结果\n if (!found || results.length === 0) {\n return (\n <div className=\"rounded-lg border border-gray-200 bg-white p-4\">\n <p className=\"text-sm text-gray-500\">未找到相关问题</p>\n </div>\n )\n }\n\n // 切换展开/折叠\n const toggleExpand = (id: string) => {\n setExpandedIds(prev => {\n const newSet = new Set(prev)\n if (newSet.has(id)) {\n newSet.delete(id)\n } else {\n newSet.add(id)\n }\n return newSet\n })\n }\n\n // 处理相关问题点击\n const handleRelatedQuestionClick = (question: string) => {\n onQuestionClick?.(question)\n }\n\n return (\n <div className=\"space-y-2\">\n {/* FAQ 列表 */}\n <div className=\"space-y-2\">\n {results.map(item => {\n const isExpanded = expandedIds.has(item.id)\n\n return (\n <div key={item.id} className=\"overflow-hidden rounded-2xl bg-[#F5F6F7] transition-all\">\n {/* 问题标题 - 可点击展开/折叠 */}\n <button\n onClick={() => toggleExpand(item.id)}\n className=\"flex w-full items-center justify-between gap-3 p-4 text-left transition-colors \"\n >\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#080A0F]\">\n {item.question}\n </span>\n </div>\n </div>\n\n {/* 展开/折叠图标 */}\n <svg\n className={`size-5 shrink-0 text-[#080A0F] transition-transform ${isExpanded ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {/* 答案内容 - 展开时显示 */}\n {isExpanded && (\n <div className=\" bg-[#F5F6F7] px-4 py-3 pt-0\">\n <div\n className=\"prose prose-sm max-w-none border-t border-gray-100 text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#4A4C56]\"\n style={{ paddingTop: '12px' }}\n >\n <ReactMarkdown>{item.answer}</ReactMarkdown>\n </div>\n\n {/* 相关问题 */}\n {item.relatedQuestions && item.relatedQuestions.length > 0 && (\n <div className=\"mt-4 border-t border-gray-200 pt-3\">\n <p className=\"mb-2 text-xs font-medium text-gray-500\">You may also want to know:</p>\n <div className=\"space-y-1\">\n {item.relatedQuestions.map((q, idx) => (\n <button\n key={idx}\n onClick={() => handleRelatedQuestionClick(q)}\n className=\"block w-full text-left text-xs text-blue-600 hover:text-blue-700 hover:underline\"\n >\n {q}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n","/**\n * 促销活动列表组件\n * 显示当前进行中的促销活动信息\n * 基于后端数据结构规范:promotion_list\n */\n\nimport React from 'react'\nimport type { MessageRenderer, CommonText } from '../../types'\nimport { DEFAULT_COMMON_TEXT } from '../../constants'\n\n/**\n * 促销活动数据结构\n */\nexport interface PromotionItem {\n id: string // 活动 ID\n title: string // 活动标题\n subtitle?: string // 副标题(如 \"Up to 30% off\")\n description?: string // 活动描述\n banner_url?: string // Banner 图片 URL\n url?: string // 活动详情页 URL\n time_range: {\n start: string // 开始时间 (ISO 8601)\n end?: string | null // 结束时间,null 表示无结束日期\n is_active: boolean // 是否当前活跃\n }\n priority?: number // 优先级(数字越大越靠前)\n product_count?: number // 参与商品数量\n metadata?: {\n display_order?: number\n target_audience?: string\n highlight_color?: string\n banner_url?:string\n }\n}\n\n/**\n * 促销活动列表数据结构\n */\nexport interface PromotionListData {\n found: boolean // 是否找到活动\n count: number // 返回的活动数量\n total?: number // 总活动数量(可选)\n results: PromotionItem[] // 活动列表\n commonText?: CommonText // 通用文案配置\n}\n\nexport interface PromotionListProps {\n /**\n * 促销活动列表数据\n */\n data: PromotionListData\n\n /**\n * 是否为用户消息\n */\n isUser?: boolean\n\n /**\n * 是否为系统消息\n */\n isSystem?: boolean\n}\n\n/**\n * 格式化日期显示\n */\nconst formatDate = (dateStr: string): string => {\n const date = new Date(dateStr)\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n}\n\n/**\n * 促销活动列表组件\n *\n * 功能:\n * - 显示当前进行中的促销活动\n * - 支持活动 Banner 图片展示\n * - 显示活动时间范围\n * - 显示参与商品数量\n * - 支持跳转到活动详情页\n *\n * @example\n * ```tsx\n * <PromotionList\n * data={{\n * found: true,\n * count: 2,\n * results: [...]\n * }}\n * />\n * ```\n */\nexport const PromotionList: React.FC<PromotionListProps> = ({ data, isUser = false, isSystem = false }) => {\n const { found, results, commonText } = data\n\n // 合并默认文案和自定义文案\n const mergedText = { ...DEFAULT_COMMON_TEXT, ...commonText }\n\n // 空状态处理\n // if (!found || !results || results.length === 0) {\n // return (\n // <div className=\"rounded-lg border border-gray-200 bg-gray-50 p-4 text-center\">\n // <p className=\"text-sm text-gray-500\">暂无进行中的活动</p>\n // </div>\n // )\n // }\n\n return (\n <div className=\"space-y-3\">\n {results.map(promotion => (\n <div\n key={promotion.id}\n className=\"relative overflow-hidden rounded-2xl bg-[#F5F6F7]\"\n >\n {/* Banner 图片 */}\n <div className=\"aspect-[16/9] w-full overflow-hidden bg-gray-100\">\n {promotion.banner_url||promotion?.metadata?.banner_url && (\n <img\n src={promotion.banner_url||promotion?.metadata?.banner_url}\n alt={promotion.title}\n className=\"size-full object-cover object-center\"\n loading=\"lazy\"\n />\n )}\n </div>\n\n {/* 活动信息 - 叠加在图片上 */}\n <div className=\"absolute inset-0 flex flex-col justify-end p-4 text-[#080A0F]\" style={{color:promotion?.metadata?.highlight_color}}>\n {/* 标题和副标题 */}\n <div className=\"mb-2\">\n <h3 className=\"text-xl font-bold leading-[1.2] tracking-[-0.04em] \">{promotion.title}</h3>\n {promotion.subtitle && (\n <p className=\"text-sm font-bold leading-[1.4] tracking-[-0.02em] \">\n {promotion.subtitle}\n </p>\n )}\n </div>\n\n {/* 查看详情按钮 */}\n {promotion.url && (\n <a\n href={promotion.url+'?ref=LiveChat'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-sm font-bold tracking-[-0.04em]\"\n >\n {mergedText.learnMore}\n <svg className=\"size-[18px]\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </a>\n )}\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n/**\n * 创建促销活动列表渲染器\n */\nexport const PromotionListRenderer: MessageRenderer = {\n render: (content, isUser, isSystem) => {\n if (content.type !== 'promotion_list' || !content.data) {\n return null\n }\n\n return <PromotionList data={content.data as PromotionListData} isUser={isUser} isSystem={isSystem} />\n },\n}\n","/**\n * 购物车卡片渲染器\n * 显示购物车内容、价格汇总和结账按钮\n * 基于后端返回的购物车数据结构\n */\n\nimport React from 'react'\nimport type { MessageRenderer, CartContent, CartLine, CartAmount } from '../../types'\nimport { CURRENCY_SYMBOLS, DEFAULT_COMMON_TEXT } from '../../constants.js'\n\n/**\n * 格式化金额\n * @param amount 金额对象\n * @returns 格式化后的金额字符串(如 \"$99.99\")\n */\nfunction formatAmount(amount: CartAmount): string {\n const { amount: value, currencyCode } = amount\n\n const symbol = CURRENCY_SYMBOLS[currencyCode] || currencyCode\n const numValue = parseFloat(value)\n\n return `${symbol}${numValue.toFixed(2)}`\n}\n\n/**\n * 购物车商品行组件\n */\nconst CartLineItem: React.FC<{\n line: CartLine\n}> = ({ line }) => {\n const { quantity, merchandise, cost } = line\n const { product, title: variantTitle, image } = merchandise\n\n // 商品图片 URL\n const imageUrl = image?.url || ''\n\n // 判断是否有折扣(总价 < 原价)\n const hasDiscount =\n parseFloat(cost.totalAmount.amount) < parseFloat(cost.subtotalAmount.amount) &&\n cost.totalAmount.currencyCode === cost.subtotalAmount.currencyCode\n\n return (\n <div className=\"flex gap-4\">\n {/* 商品图片 */}\n <div className=\"shrink-0 overflow-hidden rounded-md\" style={{ width: '72px', height: '72px' }}>\n <img src={imageUrl} alt={product.title} className=\"size-full object-cover\" loading=\"lazy\" />\n </div>\n\n {/* 商品信息 */}\n <div className=\"flex flex-1 flex-col\">\n <div className=\"flex items-end justify-between gap-2\">\n {/* 左侧:标题、变体、数量 */}\n <div className=\"flex-1\">\n <h4 className=\"line-clamp-2 text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#080A0F]\">\n {product.title}\n </h4>\n {variantTitle && (\n <p className=\"mt-0.5 text-sm font-bold leading-[1.4] tracking-[-0.02em] text-[#4A4C56]\">{variantTitle}</p>\n )}\n <p className=\"mt-1 text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#080A0F]\">×{quantity}</p>\n </div>\n\n {/* 右侧:价格 */}\n <div className=\"flex gap-1 text-right\">\n <div className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-gray-900\">\n {formatAmount(cost.totalAmount)}\n </div>\n {hasDiscount && (\n <div className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-[#4A4C56] line-through\">\n {formatAmount(cost.subtotalAmount)}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * 价格汇总组件(简化版)\n */\nconst CartSummary: React.FC<{\n total: CartAmount\n}> = ({ total }) => {\n return (\n <div className=\"border-t border-gray-200 p-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-gray-900\">Total</span>\n <span className=\"text-base font-bold leading-[1.4] tracking-[-0.02em] text-gray-900\">\n {formatAmount(total)}\n </span>\n </div>\n </div>\n )\n}\n\n/**\n * 购物车卡片渲染器\n *\n * 功能:\n * - 显示购物车商品列表\n * - 显示价格汇总(小计、折扣、总计)\n * - 显示折扣码\n * - 提供 Checkout 按钮\n * - 空购物车状态\n *\n * 布局:\n * ```\n * ┌─────────────────────────────────┐\n * │ 购物车 (3 件商品) │\n * ├─────────────────────────────────┤\n * │ [图] 商品1 │\n * │ 变体: Black │\n * │ 数量: 2 $199.98 │\n * ├─────────────────────────────────┤\n * │ [图] 商品2 │\n * │ 变体: White │\n * │ 数量: 1 $99.99 │\n * ├─────────────────────────────────┤\n * │ 小计 $299.97 │\n * │ 折扣 [SPRING20] -$30.00 │\n * │ 总计 $269.97 │\n * ├─────────────────────────────────┤\n * │ [Checkout 按钮] │\n * └─────────────────────────────────┘\n * ```\n *\n * @example\n * ```tsx\n * const content: CartContent = {\n * type: 'cart',\n * data: {\n * isEmpty: false,\n * cartId: \"gid://...\",\n * totalQuantity: 3,\n * lines: [...],\n * cost: {...},\n * checkoutUrl: \"https://...\"\n * }\n * }\n * <CartCard.render(content, false, false) />\n * ```\n */\nexport const CartCard: MessageRenderer = {\n render: content => {\n const cartContent = content as CartContent\n const { data } = cartContent\n\n if (!data) {\n return null\n }\n\n const { isEmpty, lines, cost, checkoutUrl, onCart, cartId, commonText } = data\n\n // 合并默认文案和自定义文案\n const mergedText = { ...DEFAULT_COMMON_TEXT, ...commonText }\n\n // 处理购物车按钮点击\n const handleCart = () => {\n if (onCart) {\n onCart(cartId, checkoutUrl)\n } else if (checkoutUrl) {\n window.open(checkoutUrl, '_blank', 'noopener,noreferrer')\n }\n }\n\n // 空购物车状态 - 不展示组件\n if (isEmpty || !lines || lines.length === 0) {\n return null\n }\n\n return (\n <div className=\"w-full max-w-md overflow-hidden rounded-2xl shadow-sm\" style={{ backgroundColor: '#F5F6F7' }}>\n {/* 商品列表 */}\n <div className=\"flex max-h-[400px] flex-col gap-4 overflow-y-auto p-3\">\n {lines.map(line => (\n <CartLineItem key={line.id} line={line} />\n ))}\n </div>\n\n {/* 价格汇总 */}\n <CartSummary total={cost.totalAmount} />\n\n {/* Checkout 按钮 */}\n {(checkoutUrl || onCart) && (\n <div className=\"px-4 pb-4\">\n <button\n type=\"button\"\n onClick={handleCart}\n className=\"w-full rounded-full py-[10px] text-center text-sm font-bold leading-[1.4] tracking-[-0.02em] text-white\"\n style={{ backgroundColor: '#1D1D1F' }}\n >\n {mergedText.viewMore}\n </button>\n </div>\n )}\n </div>\n )\n },\n}\n","import { classNames, HeadlessConfig, HeadlessProvider } from '@anker-in/lib'\nimport { RegistrationProvider } from '../components/registration/context/provider'\n\nimport { DTC_TASK_TYPE } from '../components/credits/context/const'\nimport { CreditsProvider } from '../components/credits/context/provider'\nimport { CreditsPageCommon } from '../components/credits/type'\nimport { FunctionMemberPriceConfig } from '../components/credits/context/memberPriceTypes'\n\nimport { CreditsBanner, CreditsBannerCopy } from '../components/credits/creditsBanner'\nimport { CreditsInfoCard, CreditsInfoCardCopy } from '../components/credits/creditsInfoCard'\nimport { CreditsBenefits, CreditsBenefitsCopy } from '../components/credits/creditsBenefits'\nimport { CreditsWaysToGetCredits, CreditsWaysToGetCreditsCopy } from '../components/credits/creditsWaysToGetCredits'\nimport { CreditsAnkersolixTask, CreditsAnkersolixTaskCopy } from '../components/credits/creditsAnkersolixTask'\nimport { CreditsRedeemList, CreditsRedeemListCopy } from '../components/credits/creditsRedeemList'\nimport { CreditsCash, CreditsCashCopy } from '../components/credits/creditsCash'\nimport { CreditsMemberPrice, CreditsMemberPriceCopy } from '../components/credits/creditsMemberPrice'\nimport { CreditsFaq, CreditsFaqCopy } from '../components/credits/creditsFaq'\nimport { CreditsNavigation, CreditsNavigationCopy } from '../components/credits/creditsNavigation'\nimport { AuthCodeActivateCopy } from 'src/components/registration/authCodeActivate/type'\n\nexport enum ComponentKey {\n Navigation = 'creditsNavigation',\n Banner = 'creditsBanner',\n InfoCard = 'creditsInfoCard',\n Benefits = 'creditsBenefits',\n WaysToGetCredits = 'creditsWaysToGetCredits',\n AnkersolixTask = 'creditsAnkersolixTask',\n RedeemList = 'creditsRedeemList',\n SpendCreditsLikeCash = 'creditsCash',\n MemberPrice = 'creditsMemberPrice',\n Faqs = 'creditsFaq',\n}\nexport type CreditsTemplateProps = {\n headlessConfig: HeadlessConfig\n siteConfig: {\n registrationsSettings: {\n authCodeActivate: AuthCodeActivateCopy\n }\n taskIdToTypeMapping: Record<string, DTC_TASK_TYPE>\n memberPriceDiscount?: FunctionMemberPriceConfig[]\n }\n creditsConfig?: {\n alpcBrand?: string\n }\n pageConfig: {\n order: ComponentKey[]\n common: CreditsPageCommon\n components: {\n [ComponentKey.Navigation]?: CreditsNavigationCopy\n [ComponentKey.Banner]?: CreditsBannerCopy\n [ComponentKey.InfoCard]?: CreditsInfoCardCopy\n [ComponentKey.Benefits]?: CreditsBenefitsCopy\n [ComponentKey.WaysToGetCredits]?: CreditsWaysToGetCreditsCopy\n [ComponentKey.AnkersolixTask]?: CreditsAnkersolixTaskCopy\n [ComponentKey.RedeemList]?: CreditsRedeemListCopy\n [ComponentKey.SpendCreditsLikeCash]?: CreditsCashCopy\n [ComponentKey.MemberPrice]?: CreditsMemberPriceCopy\n [ComponentKey.Faqs]?: CreditsFaqCopy\n }\n }\n userContext: {\n profile: any\n removeProfile: () => void\n isLoadingProfile: boolean\n creditInfo: any\n customer: any\n customerLoading: boolean\n fetchCreditInfo: () => void\n }\n registrationContext: {\n openSignUpPopup: () => void\n openSignInPopup: () => void\n }\n gtm: {\n pageGroup: string\n pageHandle?: string\n }\n cartConfig?: {\n addToCart: (params: {\n variantList: Array<{\n variant: any\n quantity: number\n attributes?: Array<{ key: string; value: string }>\n }>\n cartAttributes?: Record<string, string>\n discountCodes?: string[]\n }) => void | Promise<any>\n }\n}\n\nexport const CreditsTemplate = ({\n headlessConfig,\n siteConfig,\n creditsConfig,\n userContext,\n pageConfig,\n registrationContext,\n gtm,\n cartConfig,\n}: CreditsTemplateProps) => {\n console.log('siteConfig', siteConfig)\n return (\n <HeadlessProvider headlessConfig={headlessConfig}>\n <RegistrationProvider copy={siteConfig.registrationsSettings} email={userContext?.profile?.email}>\n <CreditsProvider\n profile={userContext?.profile}\n removeProfile={userContext?.removeProfile}\n isLoadingProfile={userContext?.isLoadingProfile}\n openSignInPopup={registrationContext.openSignInPopup}\n openSignUpPopup={registrationContext.openSignUpPopup}\n creditInfo={userContext?.creditInfo}\n taskIdToTypeMapping={siteConfig.taskIdToTypeMapping}\n customer={userContext?.customer}\n fetchCreditInfo={userContext?.fetchCreditInfo}\n customerLoading={userContext?.customerLoading}\n gtm={gtm}\n pageCommon={pageConfig.common}\n memberPriceDiscount={siteConfig.memberPriceDiscount}\n alpcBrand={creditsConfig?.alpcBrand}\n cartConfig={cartConfig}\n >\n {/* 导航组件 - 固定位置,不参与 order 排序 */}\n {pageConfig.components[ComponentKey.Navigation] && (\n <CreditsNavigation copy={pageConfig.components[ComponentKey.Navigation]} />\n )}\n <div className={classNames('bg-[#f5f5f7] leading-[1.2]')}>\n {pageConfig.order.map(key => {\n // 跳过导航组件,因为它已经固定渲染在上方\n if (key === ComponentKey.Navigation) return null\n const componentCopy = pageConfig.components?.[key]\n if (!componentCopy) return null\n return (\n <>\n {key === ComponentKey.Banner && <CreditsBanner copy={componentCopy as CreditsBannerCopy} id={key} />}\n {key === ComponentKey.InfoCard && userContext?.profile && (\n <CreditsInfoCard copy={componentCopy as CreditsInfoCardCopy} id={key} />\n )}\n {key === ComponentKey.Benefits && (\n <CreditsBenefits copy={componentCopy as CreditsBenefitsCopy} id={key} />\n )}\n {key === ComponentKey.WaysToGetCredits && (\n <CreditsWaysToGetCredits\n copy={componentCopy as CreditsWaysToGetCreditsCopy}\n id={key}\n classNames={\n headlessConfig.brand === 'anker'\n ? {\n subtitle: 'text-white',\n equalCreditsText:\n 'bg-gradient-to-r from-[#3AD1FF] to-[#008CD6] bg-clip-text text-transparent',\n }\n : {\n subtitle: 'text-[#D1D1D1]',\n equalCreditsText: 'text-[#F6EAD0]',\n }\n }\n />\n )}\n {key === ComponentKey.AnkersolixTask && (\n <CreditsAnkersolixTask copy={componentCopy as CreditsAnkersolixTaskCopy} id={key} />\n )}\n {key === ComponentKey.RedeemList && (\n <CreditsRedeemList copy={componentCopy as CreditsRedeemListCopy} id={key} />\n )}\n {key === ComponentKey.SpendCreditsLikeCash && (\n <CreditsCash copy={componentCopy as CreditsCashCopy} id={key} />\n )}\n {key === ComponentKey.MemberPrice && (\n <CreditsMemberPrice copy={componentCopy as CreditsMemberPriceCopy} id={key} />\n )}\n {key === ComponentKey.Faqs && <CreditsFaq copy={componentCopy as CreditsFaqCopy} id={key} />}\n {key !== ComponentKey.Banner && (\n <div className=\"laptop:h-16 desktop:h-[96px] lg-desktop:h-[128px] tablet:h-16 h-16\" />\n )}\n </>\n )\n })}\n </div>\n </CreditsProvider>\n </RegistrationProvider>\n </HeadlessProvider>\n )\n}\n","import { Button, Container, Heading, Picture, Text } from '@anker-in/headless-ui'\nimport { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline'\nimport { useMemo, useState, useRef, useEffect } from 'react'\n\nimport { TaskType, type CreditsAnkersolixTaskProps } from './type'\nimport { useActions } from '../creditsWaysToGetCredits/useActions'\nimport { useCreditsContext } from '../context/provider'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { useRegistration } from '../../registration'\nimport { CreditsUploadReceiptModal } from '../modal/creditsUploadReceiptModal'\nimport { CreditsSubscribeModal } from '../modal/subscribeModal'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport const CreditsAnkersolixTask = ({ copy, classNames, id }: CreditsAnkersolixTaskProps & { id?: string }) => {\n const [showMore, setShowMore] = useState(false)\n const { profile } = useCreditsContext()\n const { authCodeActivate } = useRegistration()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const isLogin = !!profile\n\n const [isUploadReceiptModalOpen, setIsUploadReceiptModalOpen] = useState(false)\n const [isSubscribeModalOpen, setIsSubscribeModalOpen] = useState(false)\n const [isSubscribeSuccess, setIsSubscribeSuccess] = useState(false)\n const [isUploadReceiptSuccess, setIsUploadReceiptSuccess] = useState(false)\n\n const { actions } = useActions({\n copy,\n subscribe: {\n openSubscribePopup: () => setIsSubscribeModalOpen(true),\n isSuccess: isSubscribeSuccess,\n },\n uploadReceipt: {\n openUploadReceiptPopup: () => setIsUploadReceiptModalOpen(true),\n isSuccess: isUploadReceiptSuccess,\n },\n })\n\n const shouldShowMask = (copy?.list || []).length > 3\n\n // Handle scroll after collapse animation\n useEffect(() => {\n if (!showMore && shouldShowMask && window.screen.width < 768) {\n const timer = setTimeout(() => {\n const section = document.getElementById(id || 'ankersolix-task')\n if (section) {\n section.scrollIntoView({ behavior: 'smooth', block: 'end' })\n }\n }, 300) // Match transition duration\n return () => clearTimeout(timer)\n }\n }, [showMore, shouldShowMask, id])\n const list = useMemo(() => {\n const list = copy.list\n .map(item => {\n if (!actions[item.id as keyof typeof actions]) {\n return undefined\n }\n const { finished, notLogin, notFinished, completed } = actions[item.id as keyof typeof actions]\n let buttonLabel = ''\n let handleClick = undefined\n let link = undefined\n if (!isLogin) {\n buttonLabel = notLogin.buttonLabel\n handleClick = notLogin.handleClick\n } else if (finished) {\n buttonLabel = completed.buttonLabel\n handleClick = undefined\n } else {\n buttonLabel = notFinished.buttonLabel\n handleClick = notFinished.handleClick\n link = (notFinished as { link: string }).link\n }\n return {\n ...item,\n buttonLabel,\n handleClick,\n finished,\n link,\n }\n })\n .filter(Boolean) as {\n title: string\n credits: string\n id: TaskType\n buttonLabel: string\n finished: boolean\n link: string\n handleClick: (() => void) | undefined\n }[]\n\n // 登录后,保留原顺序,将已完成的任务放在最后\n if (isLogin) {\n return list.sort((a, b) => {\n if (a?.finished && !b?.finished) {\n return 1 // a已完成,b未完成,a排在后面\n }\n if (!a?.finished && b?.finished) {\n return -1 // a未完成,b已完成,a排在前面\n }\n return 0 // 都已完成或都未完成,保持原顺序\n })\n } else {\n return list\n }\n }, [actions, copy.list, isLogin])\n\n return (\n <Container id={id} className=\"bg-[#F5F5F7]\">\n <Heading as=\"h2\" size=\"4\" html={copy.title} />\n <div\n className={cn(\n 'mt-[24px] p-[32px] md-l:p-[32px] md:p-[16px] relative overflow-hidden',\n rounded ? 'rounded-[8px]' : '',\n !rounded && 'l:rounded-none'\n )}\n style={{\n background: 'linear-gradient(180deg, rgba(255, 241, 214, 0) 39.51%, #F4CA81 119.53%)',\n }}\n >\n {/* 径向渐变背景层 - 使用伪元素模拟 */}\n <div\n className=\"absolute inset-0 pointer-events-none -z-10\"\n style={{\n background: 'radial-gradient(ellipse 130% 205% at 45% -20%, #FFF6EA 0%, #FFFFFF 73%, #FFF1D6 100%)',\n }}\n />\n {/* 副标题和装饰图部分 */}\n <div className=\"flex items-center justify-between xl-xxl:h-[448px] l-xl:h-[336px] h-[560px] l:h-auto md:flex-col md:items-start l:h-auto l:mb-[16px] l:flex-col-reverse l:items-start\">\n <div className=\"flex flex-col gap-[8px] l:mt-[8px]\">\n <Heading\n as=\"h3\"\n size={4}\n html={copy?.subtitle}\n className=\"text-[32px] font-bold text-[#080a0f] tracking-[-1.28px] leading-[1.2] xl:text-[24px]\"\n />\n <div className=\"flex items-center gap-[8px]\">\n <p\n className=\"text-[48px] font-bold leading-none bg-gradient-to-r from-[#2c7ed0] via-[#00a9e1] via-43% to-[#00db84] bg-clip-text text-transparent xl-xxl:text-[40px] l-xl:text-[32px] l:text-[24px]\"\n dangerouslySetInnerHTML={{ __html: copy.equalCredits }}\n />\n </div>\n </div>\n {copy.mainImage?.url && (\n <Picture\n className=\"h-full object-contain l:mx-auto md:h-auto md:w-full md-l:h-[302px]\"\n imgClassName=\"!h-full !object-contain\"\n source={copy.mainImage.url}\n />\n )}\n </div>\n\n {/* 卡片列表 */}\n <div className=\"relative mt-[24px]\">\n <div\n className={cn(\n 'grid grid-cols-3 gap-[16px] overflow-hidden md:grid-cols-1 md-l:grid-cols-2 min-md:!h-auto transition-all duration-300 ease-in-out'\n )}\n style={{\n height: showMore || !shouldShowMask ? 'auto' : '512px',\n }}\n >\n {list.map(item => (\n <div\n key={item.id}\n className={cn(\n 'flex min-h-[241px] xl-xxl:min-h-[192px] l:min-h-[160px] l-xl:min-h-[170px] flex-col justify-between bg-white p-[32px] xl:p-[16px]',\n rounded ? 'rounded-[16px]' : ''\n )}\n >\n <div>\n <Text\n as=\"p\"\n html={item.title}\n size={2}\n className=\"text-pretty text-[24px] font-bold xxl:text-[20px]\"\n />\n <div className=\"mt-[8px] l:mt-[4px] flex items-center\">\n <Picture\n className=\"size-[24px] xxl:size-[18px] [&_path]:size-full\"\n source=\"https://cdn.shopify.com/s/files/1/0511/6346/3874/files/20250902-153351.png?v=1756798450\"\n />\n <Text\n as=\"p\"\n html={item.credits}\n size={2}\n className=\"ml-[4px] mt-[6px] text-[18px] xxl:text-[14px]\"\n />\n </div>\n </div>\n\n {item.handleClick &&\n !(item.id === TaskType.UploadReceipt && isUploadReceiptSuccess) &&\n !(item.id === TaskType.Activate && authCodeActivate.isActivateSuccess) &&\n !(item.id === TaskType.Subscribe && isSubscribeSuccess) ? (\n <Button\n as={item.link ? 'a' : 'button'}\n {...(item.link && { href: item.link })}\n {...(item.handleClick && { onClick: item.handleClick })}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[24px] w-fit\"\n >\n {item.buttonLabel}\n </Button>\n ) : (\n <Button variant=\"primary\" size=\"lg\" className=\"mt-[24px] w-fit\" disabled>\n {item.buttonLabel}\n </Button>\n )}\n </div>\n ))}\n {!showMore && shouldShowMask && (\n <div\n className=\"absolute inset-0 pointer-events-none min-md:hidden\"\n style={{ background: 'linear-gradient(180deg, rgba(244, 202, 129, 0) 66.37%, #f4ca81 100%)' }}\n ></div>\n )}\n </div>\n {shouldShowMask && (\n <>\n {showMore ? (\n <button\n className=\"mx-auto mt-[12px] block w-fit min-md:hidden\"\n onClick={() => {\n setShowMore(false)\n }}\n >\n <ChevronUpIcon className=\"size-[40px] rounded-full bg-[#FFFFFF33] p-[8px]\"></ChevronUpIcon>\n </button>\n ) : (\n <>\n <div className=\"absolute bottom-0 flex w-full translate-y-1/2 justify-center min-md:hidden\">\n <button className=\"w-fit\" onClick={() => setShowMore(!showMore)}>\n <ChevronDownIcon className=\"size-[40px] rounded-full bg-[#FFFFFF33] p-[8px]\"></ChevronDownIcon>\n </button>\n </div>\n </>\n )}\n </>\n )}\n </div>\n </div>\n {copy.receipt && (\n <CreditsUploadReceiptModal\n isOpen={isUploadReceiptModalOpen}\n onClose={() => {\n setIsUploadReceiptModalOpen(false)\n }}\n copy={copy.receipt}\n onSuccess={() => {\n setIsUploadReceiptSuccess(true)\n }}\n />\n )}\n {copy.subscribe && (\n <CreditsSubscribeModal\n copy={copy.subscribe}\n onSuccess={() => {\n setIsSubscribeSuccess(true)\n setTimeout(() => {\n setIsSubscribeModalOpen(false)\n }, 3000)\n }}\n isOpen={isSubscribeModalOpen}\n onClose={() => {\n setIsSubscribeModalOpen(false)\n }}\n />\n )}\n </Container>\n )\n}\n","import { Container, Heading, Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'\nimport { useMemo, useState, useEffect, useCallback, useRef } from 'react'\nimport Decimal from 'decimal.js'\n\nimport MemberPriceItem from './MemberPriceItem'\nimport RedeemableItem from '../creditsCash/RedeemableItem'\nimport useRedeemableList from '../context/hooks/useRedeemableList'\nimport RulesModal from '../modal/rulesModal'\nimport { Pagination } from './Pagination'\nimport { useProductsByHandles, useHeadlessContext, gaTrack } from '@anker-in/lib'\nimport { CreditsMemberPriceCopy, MemberPriceProduct } from './type'\nimport { Product, classNames as cn } from '@anker-in/lib'\nimport { useCreditsContext } from '../context/provider'\nimport { RedeemItem } from '../creditsCash/type'\nimport { FunctionDiscountType } from '../context/memberPriceConst'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nexport const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy; id?: string }) => {\n const [activeTab, setActiveTab] = useState<'memberPrice' | 'redeem'>(copy.tabs[0]?.type || 'memberPrice')\n const [rules, setRules] = useState<string | string[]>()\n const [currentPage, setCurrentPage] = useState(1)\n const [itemsPerPage, setItemsPerPage] = useState(9) // 默认 1024px 以上:3列 × 3行 = 9\n const { redeemableList } = useRedeemableList()\n const { pageCommon, memberPriceDiscount, profile, gtm } = useCreditsContext()\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const containerRef = useRef<HTMLDivElement>(null)\n\n // 定义需要获取的 metafield,包括透明图和优惠券信息\n const variantMetafieldIdentifiers: any[] = [\n {\n namespace: 'global',\n key: 'transparentImg',\n },\n {\n namespace: '__discountCodeApp',\n key: 'data',\n },\n ]\n\n // 根据屏幕尺寸动态调整每页显示的商品数量\n useEffect(() => {\n const updateItemsPerPage = () => {\n const width = window.innerWidth\n if (width >= 1440) {\n // 1920px 以上:4列 × 3行 = 12个\n setItemsPerPage(12)\n } else if (width >= 1024) {\n // 1024px - 1919px:3列 × 3行 = 9个\n setItemsPerPage(9)\n } else if (width >= 768) {\n // 1024px 以下:3列 × 4行 = 12个\n setItemsPerPage(12)\n } else {\n // 768px 以下:2列 × 4行 = 8个\n setItemsPerPage(8)\n }\n }\n\n updateItemsPerPage()\n window.addEventListener('resize', updateItemsPerPage)\n return () => window.removeEventListener('resize', updateItemsPerPage)\n }, [])\n\n // 当切换 tab 或每页数量变化时重置页码\n useEffect(() => {\n setCurrentPage(1)\n }, [activeTab, itemsPerPage])\n\n // 根据配置的 ruleId 查找对应的会员价规则\n const targetRule = useMemo(() => {\n if (!memberPriceDiscount || !copy.memberPriceTab.memberPriceRuleId) return null\n return memberPriceDiscount.find(rule => String(rule.rule_id) === String(copy.memberPriceTab.memberPriceRuleId))\n }, [memberPriceDiscount, copy.memberPriceTab.memberPriceRuleId])\n\n const memberPriceHandles = useMemo(() => {\n if (!targetRule) return []\n\n // 获取所有 user_identity === 1 的 discounts\n const allDiscounts = targetRule.result_detail?.member_discounts?.filter(\n (discount: any) => discount.user_identity === 1\n ) || []\n\n // 合并所有 discounts 的 variants 的 handles\n const handles = allDiscounts.flatMap((discount: any) =>\n discount.main_products?.variants?.map((variant: any) => variant.handle) || []\n )\n\n return handles\n }, [targetRule])\n\n // 获取会员价产品数据(通过从 memberPriceDiscount 提取的 handles 获取产品)\n const { data: memberPriceProducts } = useProductsByHandles({\n handles: memberPriceHandles,\n metafieldIdentifiers: {\n variant: variantMetafieldIdentifiers,\n },\n })\n\n // 获取积分兑换产品数据\n const { data: redeemProducts } = useProductsByHandles({\n handles: copy?.redeemTab?.list?.map(item => item.products?.[0]?.handle) || [],\n metafieldIdentifiers: {\n variant: variantMetafieldIdentifiers,\n },\n })\n\n // 从 variant metafields 中获取有效的 coupon 折扣金额\n const getCouponDiscount = useCallback((variant: any) => {\n try {\n const discountData = variant?.metafields?.__discountCodeApp?.data\n if (!discountData) return 0\n\n // discountData 已经是对象,不需要 JSON.parse\n const discounts = discountData\n if (!Array.isArray(discounts) || discounts.length === 0) return 0\n\n // 获取第一个有效的 coupon(检查时间范围)\n const now = new Date()\n const validDiscount = discounts.find((discount: any) => {\n const startsAt = discount.starts_at ? new Date(discount.starts_at) : null\n const endsAt = discount.ends_at ? new Date(discount.ends_at) : null\n\n // 检查 coupon 是否在有效期内\n if (startsAt && startsAt > now) return false\n if (endsAt && endsAt < now) return false\n\n return true\n })\n\n // 返回折扣金额(fixed_amount 类型)\n if (validDiscount?.fixed_value) {\n return parseFloat(validDiscount.fixed_value)\n }\n\n return 0\n } catch (error) {\n console.error('Failed to get coupon discount:', error)\n return 0\n }\n }, [])\n\n // 计算会员价的辅助函数(仅使用普通会员 user_identity = 1 的折扣,并叠加 coupon 折扣)\n const calculateMemberPrice = useCallback(\n (price: number, discount: any, variant?: any) => {\n const discountConfig = discount?.discount_conf\n if (!discountConfig) return null\n\n // 根据折扣类型计算会员价\n let salePrice = new Decimal(price)\n switch (discountConfig.discount_type) {\n case FunctionDiscountType.Percentage:\n salePrice = salePrice.mul(100 - discountConfig.discount_value).div(100)\n break\n case FunctionDiscountType.FixedAmount:\n salePrice = salePrice.sub(discountConfig.discount_value)\n break\n case FunctionDiscountType.FixedPrice:\n salePrice = new Decimal(discountConfig.discount_value)\n break\n }\n\n // 叠加 coupon 折扣\n if (variant) {\n const couponDiscount = getCouponDiscount(variant)\n if (couponDiscount > 0) {\n salePrice = salePrice.sub(couponDiscount)\n }\n }\n\n // 确保价格不为负数\n if (salePrice.lessThan(0)) {\n salePrice = new Decimal(0)\n }\n\n return {\n memberPrice: salePrice.toNumber(),\n originalPrice: price,\n }\n },\n [getCouponDiscount]\n )\n\n // 处理会员价产品列表(仅普通会员 user_identity = 1 的折扣)\n const memberPriceList = useMemo(() => {\n if (!targetRule || !memberPriceProducts) return []\n\n // 获取所有 user_identity === 1 的 discounts\n const allDiscounts = targetRule.result_detail?.member_discounts?.filter(\n (discount: any) => discount.user_identity === 1\n ) || []\n\n // 合并所有 discounts 的 variants,并保存对应的 discount 信息\n const allVariantsWithDiscount = allDiscounts.flatMap((discount: any) =>\n (discount.main_products?.variants || []).map((variant: any) => ({\n ...variant,\n discount, // 将 discount 信息保存到 variant 中\n }))\n )\n\n return (\n (allVariantsWithDiscount\n .map((variantWithDiscount: any) => {\n const product = memberPriceProducts.find(p => p.handle === variantWithDiscount.handle)\n if (!product) return null\n\n const productVariant = product.variants?.find(v => v.sku === variantWithDiscount.sku) || product.variants?.[0]\n if (!productVariant || !productVariant.availableForSale) return null\n\n const priceResult = calculateMemberPrice(\n productVariant.price.amount,\n variantWithDiscount.discount,\n productVariant\n )\n if (!priceResult) return null\n\n return {\n product,\n productVariant,\n memberPrice: priceResult.memberPrice,\n originalPrice: priceResult.originalPrice,\n }\n })\n ?.filter(Boolean) as unknown as MemberPriceProduct[]) || []\n )\n }, [targetRule, memberPriceProducts, calculateMemberPrice])\n\n // 处理积分兑换产品列表(复用 creditsCash 的逻辑,过滤缺货商品)\n const redeemList = useMemo(() => {\n return redeemProducts\n ?.map((product: Product) => {\n const config = copy.redeemTab.list.find(item => item.products?.[0]?.handle === product.handle)\n const alpcData = redeemableList.find(item => item.id?.toString() === config?.redeemId?.toString())\n const productVariant =\n product.variants?.find((variant: any) => variant.sku === config?.products?.[0]?.sku) || product.variants?.[0]\n\n // 过滤条件:\n // 1. 必须有 alpcData 和 productVariant\n // 2. 商品不能缺货\n // 3. 如果有库存限制,则库存必须大于 0\n if (!alpcData || !productVariant) return null\n if (!productVariant.availableForSale) return null\n if (alpcData.is_limited && alpcData.remaining_inventory <= 0) return null\n\n return {\n product,\n productVariant,\n alpcData: {\n id: alpcData?.id,\n consumeCredits: alpcData?.consume_credits,\n remainingInventory: alpcData?.remaining_inventory,\n isLimited: alpcData?.is_limited,\n consumeType: alpcData?.consume_type,\n title: alpcData?.name,\n desc: alpcData?.note,\n },\n config,\n }\n })\n .filter(Boolean) as unknown as RedeemItem[]\n }, [redeemProducts, copy.redeemTab.list, redeemableList])\n\n // 计算会员价分页\n const memberPricePagination = useMemo(() => {\n const totalItems = memberPriceList?.length || 0\n const totalPages = Math.ceil(totalItems / itemsPerPage)\n const startIndex = (currentPage - 1) * itemsPerPage\n const endIndex = startIndex + itemsPerPage\n const currentItems = memberPriceList?.slice(startIndex, endIndex) || []\n\n return {\n totalPages,\n currentItems,\n showPagination: totalPages > 1,\n }\n }, [memberPriceList, currentPage, itemsPerPage])\n\n // 计算积分兑换分页\n const redeemPagination = useMemo(() => {\n const totalItems = redeemList?.length || 0\n const totalPages = Math.ceil(totalItems / itemsPerPage)\n const startIndex = (currentPage - 1) * itemsPerPage\n const endIndex = startIndex + itemsPerPage\n const currentItems = redeemList?.slice(startIndex, endIndex) || []\n\n return {\n totalPages,\n currentItems,\n showPagination: totalPages > 1,\n }\n }, [redeemList, currentPage, itemsPerPage])\n\n // 处理页面切换,滚动到模块顶部\n const handlePageChange = useCallback(\n (page: number) => {\n setCurrentPage(page)\n // 滚动到模块顶部\n if (containerRef.current) {\n const top = containerRef.current.offsetTop\n window.scrollTo({\n top: top - 80, // 减去 80px 的偏移量,避免被固定头部遮挡\n behavior: 'smooth',\n })\n }\n },\n [setCurrentPage]\n )\n\n // 处理 tab 切换并发送埋点\n const handleTabChange = useCallback(\n (value: string) => {\n const tabType = value as 'memberPrice' | 'redeem'\n setActiveTab(tabType)\n\n // 查找当前 tab 的 label\n const currentTab = copy.tabs.find(tab => tab.type === tabType)\n const tabLabel = currentTab?.label || ''\n\n // 发送 tab 点击埋点\n gaTrack({\n event: 'ga4Event',\n event_name: 'lp_button',\n member_active_status: profile?.activated ? 'active' : 'not active',\n event_parameters: {\n page_group: gtm.pageGroup,\n position: copy.title,\n button_name: tabLabel,\n },\n })\n },\n [copy.tabs, copy.title, profile?.activated, gtm.pageGroup]\n )\n\n return (\n <Container id={id} className={cn('bg-[#F5F5F5]')} ref={containerRef}>\n <Heading as=\"h2\" size=\"4\" html={copy.title} className=\"mx:px-[16px]\" />\n\n <Tabs\n align=\"left\"\n className=\"mt-[24px]\"\n value={activeTab}\n onValueChange={handleTabChange}\n >\n <TabsList>\n {copy.tabs.map((tab, index) => (\n <TabsTrigger key={index} value={tab.type}>\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n\n {/* Tab 内容 */}\n <div className=\"relative mt-[24px]\">\n {/* 会员价 Tab */}\n {activeTab === 'memberPrice' && (\n <>\n <div className=\"grid md:grid-cols-2 gap-[12px] grid-cols-4 md-xl:grid-cols-3 lg:gap-[16px]\">\n {memberPricePagination.currentItems?.map((item, index: number) => (\n <MemberPriceItem key={index} itemData={item} copy={copy.memberPriceTab} />\n ))}\n </div>\n <Pagination\n currentPage={currentPage}\n totalPages={memberPricePagination.totalPages}\n onPageChange={handlePageChange}\n />\n </>\n )}\n\n {/* 积分兑换 Tab */}\n {activeTab === 'redeem' && (\n <>\n <div className=\"grid md:grid-cols-2 gap-[12px] grid-cols-4 md-xl:grid-cols-3 lg:gap-[16px]\">\n {redeemPagination.currentItems?.map((item, index: number) => (\n <RedeemableItem\n key={index}\n copy={{\n title: copy.title,\n ...copy.redeemTab,\n }}\n itemData={item}\n setRules={setRules}\n currencyCode={redeemProducts?.[0]?.price.currencyCode || 'USD'}\n />\n ))}\n </div>\n <Pagination\n currentPage={currentPage}\n totalPages={redeemPagination.totalPages}\n onPageChange={handlePageChange}\n />\n </>\n )}\n </div>\n\n {/* Rules Modal */}\n {rules && (\n <RulesModal\n overlayClassName=\"md:px-[16px] md:items-center\"\n className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}\n isOpen={rules.length > 0}\n onClose={() => setRules([])}\n titleClassName=\"border-b-transparent h-[56px]\"\n rules={rules}\n scrollClassName=\"md:mt-[8px] md:mb-[24px] md:pt-0\"\n title={pageCommon?.ruleLabel}\n ruleClassName=\"text-[#1d1d1f] font-bold\"\n />\n )}\n </Container>\n )\n}\n","import { Button, Text, Picture, Badge } from '@anker-in/headless-ui'\nimport { useMemo, useState } from 'react'\n\nimport { CreditsMemberPriceCopy, MemberPriceProduct } from './type'\nimport { formatPrice, extractVariantId } from '../context/utils'\nimport { classNames as cn, useHeadlessContext, useBuyNow } from '@anker-in/lib'\nimport { useCreditsContext } from '../context/provider'\nimport { ROUNDED_BRANDS } from '../../../constants'\n\nfunction MemberPriceItem({\n itemData,\n copy,\n className,\n}: {\n itemData: MemberPriceProduct\n copy: CreditsMemberPriceCopy['memberPriceTab']\n className?: string\n}) {\n const { brand, locale } = useHeadlessContext()\n const { profile, openSignUpPopup, cartConfig, gtm } = useCreditsContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n // 使用 buyNow hook 来处理结算\n const { trigger: buyNow, isMutating: isBuying } = useBuyNow({}, { throwOnError: true })\n\n // 本地 loading 状态,避免全局 loading 影响所有卡片\n const [isAddingToCart, setIsAddingToCart] = useState(false)\n\n const isAvailable = useMemo(() => {\n return itemData.productVariant?.availableForSale\n }, [itemData.productVariant?.availableForSale])\n\n const isLogin = useMemo(() => {\n return !!profile\n }, [profile])\n\n // 从 variant metafields 中获取 coupon code\n const getCouponCode = useMemo(() => {\n try {\n const discountData = itemData.productVariant?.metafields?.__discountCodeApp?.data\n if (!discountData) return undefined\n\n // discountData 已经是对象,不需要 JSON.parse\n const discounts = discountData\n if (!Array.isArray(discounts) || discounts.length === 0) return undefined\n\n // 获取第一个有效的 coupon(检查时间范围)\n const now = new Date()\n const validDiscount = discounts.find((discount: any) => {\n const startsAt = discount.starts_at ? new Date(discount.starts_at) : null\n const endsAt = discount.ends_at ? new Date(discount.ends_at) : null\n\n // 检查 coupon 是否在有效期内\n if (startsAt && startsAt > now) return false\n if (endsAt && endsAt < now) return false\n\n return true\n })\n\n return validDiscount?.title\n } catch (error) {\n console.error('Failed to get discount code:', error)\n return undefined\n }\n }, [itemData.productVariant?.metafields])\n\n // Add to Cart 按钮点击 - 调用加购方法\n const handleAddToCart = async () => {\n if (!cartConfig?.addToCart) {\n console.warn('cartConfig.addToCart is required')\n return\n }\n\n try {\n setIsAddingToCart(true)\n\n // 构建 lineItem attributes\n const lineItemAttributes: Array<{ key: string; value: string }> = []\n if (getCouponCode) {\n lineItemAttributes.push({\n key: '_member_price',\n value: JSON.stringify({ code: getCouponCode }),\n })\n }\n\n await cartConfig.addToCart({\n variantList: [\n {\n variant: itemData.productVariant,\n quantity: 1,\n attributes: lineItemAttributes.length > 0 ? lineItemAttributes : undefined,\n },\n ],\n cartAttributes: {\n _member_type: String(profile?.memberType || 0),\n },\n discountCodes: getCouponCode ? [getCouponCode] : undefined,\n })\n } catch (error) {\n console.error('Add to cart failed:', error)\n } finally {\n setIsAddingToCart(false)\n }\n }\n\n // Shop Now 按钮点击 - 检查登录状态后使用 buyNow 进行结算\n const handleShopNow = () => {\n // 如果未登录,弹出登录弹窗\n if (!isLogin) {\n openSignUpPopup()\n return\n }\n\n // 构建 lineItem attributes\n const lineItemAttributes: Array<{ key: string; value: string }> = []\n if (getCouponCode) {\n lineItemAttributes.push({\n key: '_member_price',\n value: JSON.stringify({ code: getCouponCode }),\n })\n }\n\n // 已登录,执行购买\n buyNow({\n customAttributes: [\n {\n key: '_member_type',\n value: String(profile?.memberType || 0),\n },\n ],\n lineItems: [\n {\n variant: itemData.productVariant,\n quantity: 1,\n attributes: lineItemAttributes.length > 0 ? lineItemAttributes : undefined,\n },\n ],\n discountCodes: getCouponCode ? [getCouponCode] : undefined,\n gtmParams: {\n pageGroup: gtm.pageGroup,\n position: 'mmeber-price-card',\n },\n })\n }\n\n return (\n <div\n className={cn(\n 'relative flex flex-col items-center bg-[#EAEAEC] px-[24px] pb-[24px] l:px-[8px] l:pb-[8px] rounded-[16px] md-xl:px-[16px] md-xl:pb-[16px] md:rounded-[12px]',\n !rounded && 'rounded-none md:rounded-none',\n copy.badgeLabel ? 'pt-[48px] l:pt-[44px]' : 'pt-[24px] md-xl:pt-[16px] l:pt-[8px]',\n className\n )}\n >\n {/* Member 标签 Badge */}\n {copy.badgeLabel && (\n <Badge\n className=\"absolute left-[24px] !bg-gradient-brand l:left-[16px] top-[16px] z-10\"\n size=\"lg\"\n variant=\"promotional\"\n promotionalType=\"regular-member\"\n >\n {copy.badgeLabel}\n </Badge>\n )}\n\n {/* 产品图片 - 优先使用产品的 metafields 透明图 */}\n <a\n href={\n extractVariantId(itemData.productVariant?.id)\n ? `/products/${itemData.product.handle}?variant=${extractVariantId(itemData.productVariant?.id)}${gtm.pageHandle ? `&ref=${gtm.pageHandle}` : ''}`\n : `/products/${itemData.product.handle}${gtm.pageHandle ? `?ref=${gtm.pageHandle}` : ''}`\n }\n className={cn('relative mx-auto h-[196px] w-fit md:h-[120px] md-xxl:h-[138px]')}\n >\n <Picture\n className=\"mx-auto h-full w-auto\"\n imgClassName=\"h-full object-contain\"\n source={\n itemData?.productVariant?.metafields?.global?.transparentImg ||\n itemData?.config?.image?.url ||\n itemData?.productVariant?.image?.url\n }\n ></Picture>\n </a>\n\n {/* 产品信息 */}\n <div className={cn('mt-[10px] xl:mt-[8px] w-full')}>\n {/* 产品标题 - 使用产品的真实标题 */}\n <Text\n html={itemData?.product?.title}\n title={itemData?.product?.title}\n className=\"line-clamp-2 text-[24px] min-h-[58px] l-xxl:min-h-[48px] l:min-h-[38px] l-xxl:text-[20px] l:text-[16px] font-bold leading-[1.2] tracking-[-0.8px] text-[#080A0F]\"\n />\n\n {/* 价格信息 */}\n <div className=\"mt-[24px] l:mt-[12px] flex flex-col gap-[8px] l:gap-0\">\n {/* Member Price 标签 - 使用 text-brand-color-1 */}\n <Text\n html={copy.memberPriceLabel}\n className={cn(\n 'text-brand-color-0 text-[16px] l-xl:text-[14px] l:text-[12px] w-fit font-bold leading-[1.4] tracking-[-0.28px]',\n brand === 'ankersolix' &&\n 'leading-none bg-gradient-to-r from-[#2c7ed0] via-[#00a9e1] via-[43%] to-[#00db84] bg-clip-text text-transparent'\n )}\n as=\"p\"\n />\n\n {/* 会员价和原价在同一行 */}\n <div className=\"flex items-center gap-[4px]\">\n <Text\n html={formatPrice({\n amount: itemData.memberPrice,\n currencyCode: itemData?.productVariant?.price.currencyCode || 'USD',\n locale: locale,\n })}\n className=\"text-[24px] l-xxl:text-[20px] l:text-[16px] font-bold leading-[1.2] tracking-[-0.8px] text-[#080A0F]\"\n as=\"span\"\n />\n <Text\n html={formatPrice({\n amount: itemData.originalPrice,\n currencyCode: itemData?.productVariant?.price.currencyCode || 'USD',\n locale: locale,\n })}\n className=\"text-[24px] l-xxl:text-[20px] l:text-[16px] font-bold leading-[1.2] tracking-[-0.8px] text-[#4A4C56] line-through\"\n as=\"span\"\n />\n </div>\n\n {/* 按钮组 */}\n <div className=\"flex w-full mt-[8px] gap-[8px] l:flex-col\">\n {/* Add to Cart 按钮 */}\n <Button\n variant=\"secondary\"\n className=\"flex-1 md:w-full\"\n size=\"lg\"\n onClick={handleAddToCart}\n disabled={!isAvailable || !cartConfig?.addToCart || isAddingToCart}\n loading={isAddingToCart}\n >\n {copy.addToCart}\n </Button>\n\n {/* Shop Now 按钮 */}\n <Button\n variant=\"primary\"\n className=\"flex-1 md:w-full\"\n size=\"lg\"\n onClick={handleShopNow}\n disabled={!isAvailable || isBuying}\n loading={isBuying}\n >\n {copy.shopNowText}\n </Button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default MemberPriceItem\n","import { classNames as cn } from '@anker-in/lib'\n\ninterface PaginationProps {\n currentPage: number\n totalPages: number\n onPageChange: (page: number) => void\n}\n\nexport function Pagination({ currentPage, totalPages, onPageChange }: PaginationProps) {\n if (totalPages <= 1) return null\n\n // 计算要显示的页码\n const getPageNumbers = () => {\n const delta = 2 // 当前页前后显示的页码数量\n const range = []\n const rangeWithDots = []\n\n for (let i = 1; i <= totalPages; i++) {\n if (i === 1 || i === totalPages || (i >= currentPage - delta && i <= currentPage + delta)) {\n range.push(i)\n }\n }\n\n let prev = 0\n for (const i of range) {\n if (prev && i - prev > 1) {\n rangeWithDots.push('...')\n }\n rangeWithDots.push(i)\n prev = i\n }\n\n return rangeWithDots\n }\n\n const pages = getPageNumbers()\n\n return (\n <div className=\"mt-[32px] flex items-center justify-center gap-[8px]\">\n {/* 上一页按钮 */}\n <button\n onClick={() => onPageChange(Math.max(1, currentPage - 1))}\n disabled={currentPage === 1}\n className={cn(\n 'flex size-[32px] xl:size-[24px] items-center justify-center overflow-hidden bg-white',\n currentPage === 1 && 'cursor-not-allowed opacity-50'\n )}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M10 12L6 8L10 4\"\n stroke={currentPage === 1 ? '#767880' : '#080A0F'}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {/* 页码按钮 */}\n {pages.map((page, index) => {\n if (page === '...') {\n return (\n <div\n key={`ellipsis-${index}`}\n className=\"flex size-[32px] xl:size-[24px] items-center justify-center overflow-hidden bg-white\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"4.5\" cy=\"10\" r=\"1.25\" fill=\"#2A2C32\" />\n <circle cx=\"10\" cy=\"10\" r=\"1.25\" fill=\"#2A2C32\" />\n <circle cx=\"15.5\" cy=\"10\" r=\"1.25\" fill=\"#2A2C32\" />\n </svg>\n </div>\n )\n }\n\n const isActive = currentPage === page\n return (\n <button\n key={page}\n onClick={() => onPageChange(page as number)}\n className={cn(\n 'flex size-[32px] xl:size-[24px] pt-[4px] items-center justify-center overflow-hidden text-[16px] xl:text-[14px] font-bold leading-[1.4] tracking-[-0.28px]',\n isActive ? 'bg-[#080a0f] text-white' : 'bg-white text-[#080a0f]'\n )}\n >\n {page}\n </button>\n )\n })}\n\n {/* 下一页按钮 */}\n <button\n onClick={() => onPageChange(Math.min(totalPages, currentPage + 1))}\n disabled={currentPage === totalPages}\n className={cn(\n 'flex size-[32px] xl:size-[24px] items-center justify-center overflow-hidden bg-white',\n currentPage === totalPages && 'cursor-not-allowed opacity-50'\n )}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M6 4L10 8L6 12\"\n stroke={currentPage === totalPages ? '#767880' : '#080A0F'}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n )\n}\n","import { useEffect, useState, useRef, useCallback } from 'react'\nimport { classNames as cn } from '@anker-in/lib'\nimport { Container } from '@anker-in/headless-ui'\nimport { CreditsNavigationCopy } from './type'\n\nexport const CreditsNavigation = ({ copy }: { copy: CreditsNavigationCopy }) => {\n const [activeId, setActiveId] = useState<string>('')\n const observerRef = useRef<IntersectionObserver | null>(null)\n\n // 平滑滚动到目标模块\n const scrollToSection = (targetId: string) => {\n const element = document.getElementById(targetId)\n if (element) {\n const navHeight = 56 // 导航栏高度\n const elementPosition = element.getBoundingClientRect().top + window.pageYOffset\n const offsetPosition = elementPosition - navHeight\n\n window.scrollTo({\n top: offsetPosition,\n behavior: 'smooth',\n })\n }\n }\n\n // 使用 Intersection Observer 监听模块可见性\n const setupObserver = useCallback(() => {\n // 清理之前的 observer\n if (observerRef.current) {\n observerRef.current.disconnect()\n }\n\n // 计算每个元素在视口中的可见面积\n const visibilityMap = new Map<string, number>()\n\n const observerCallback = (entries: IntersectionObserverEntry[]) => {\n entries.forEach(entry => {\n const id = entry.target.id\n if (!id) return\n\n // 计算可见面积\n const visibleHeight = entry.intersectionRect.height\n const visibleWidth = entry.intersectionRect.width\n const visibleArea = visibleHeight * visibleWidth\n\n visibilityMap.set(id, entry.isIntersecting ? visibleArea : 0)\n })\n\n // 找出可见面积最大的元素\n let maxArea = 0\n let maxId = ''\n\n visibilityMap.forEach((area, id) => {\n if (area > maxArea) {\n maxArea = area\n maxId = id\n }\n })\n\n if (maxId && maxId !== activeId) {\n setActiveId(maxId)\n }\n }\n\n // 创建新的 observer\n observerRef.current = new IntersectionObserver(observerCallback, {\n threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1],\n rootMargin: '-56px 0px 0px 0px', // 考虑导航栏高度\n })\n\n // 观察所有目标元素\n copy.items.forEach(item => {\n const element = document.getElementById(item.targetId)\n if (element && observerRef.current) {\n observerRef.current.observe(element)\n }\n })\n }, [copy.items, activeId])\n\n useEffect(() => {\n setupObserver()\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect()\n }\n }\n }, [setupObserver])\n\n return (\n <nav id=\"creditsNavigation\" className={cn('sticky top-0 z-50 bg-white')}>\n <Container asChild>\n <div\n className={cn(\n 'md:overflow-x-auto md:overflow-y-hidden md:-mx-[16px] md:px-[16px]',\n 'md:scrollbar-hide md:[&::-webkit-scrollbar]:hidden md:[-ms-overflow-style:none] md:[scrollbar-width:none]'\n )}\n >\n <ul className={cn('flex items-end gap-[24px] pt-[16px] md:pt-[12px] md:gap-[16px] md:pr-[16px]')}>\n {copy.items.map((item, index) => {\n const isActive = activeId === item.targetId\n return (\n <li key={index} className={cn('md:flex-shrink-0')}>\n <button\n onClick={() => scrollToSection(item.targetId)}\n className={cn(\n 'pb-[16px] md:pb-[12px] text-[14px] font-bold tracking-[-0.28px] leading-[1.4]',\n 'transition-all duration-200 relative border-b-4 whitespace-nowrap',\n isActive\n ? 'text-[#080a0f] border-brand-1'\n : 'text-[#4a4c56] hover:text-[#080a0f] border-transparent'\n )}\n >\n {item.label}\n </button>\n </li>\n )\n })}\n </ul>\n </div>\n </Container>\n </nav>\n )\n}\n"],"mappings":"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","names":["React","is","useState","useEffect","useLayoutEffect","useDebugValue","is","React","useState","useLayoutEffect","useEffect","useDebugValue","ForwardRef","Fragment","Portal","hasOwnProperty","has","text","location","has","text","is","location","i","checker","location","printWarning","incrementReference","decrementReference","trackClass","untrackClass","add","remove","PortalOpenInstances","self","isTabKey","isEscKey","ModalPortal","classNames","self","createHTMLElement","getCreatePortal","Modal","portalClassName","classNames","decode","text","format","err","nodeInterop","cache","removeTrailingSlash","route","replace","getAssetPathFromRoute","route","ext","path","test","__unsafeCreateTrustedScriptURL","policy","getPolicy","window","trustedTypes","createPolicy","createHTML","input","createScript","createScriptURL","url","cancelIdleCallback","requestIdleCallback","self","bind","window","cb","start","Date","now","setTimeout","didTimeout","timeRemaining","Math","max","id","clearTimeout","getDeploymentIdQueryOrEmptyString","process","env","NEXT_DEPLOYMENT_ID","createRouteLoader","getClientBuildManifest","isAssetError","markAssetError","MS_MAX_IDLE_DELAY","withFuture","key","map","generator","entry","get","future","Promise","resolve","resolver","prom","set","then","value","catch","err","delete","ASSET_LOAD_ERROR","Symbol","Object","defineProperty","hasPrefetch","link","document","createElement","window","MSInputMethodContext","documentMode","relList","supports","canPrefetch","getAssetQueryString","getDeploymentIdQueryOrEmptyString","prefetchViaDom","href","as","reject","selector","querySelector","rel","crossOrigin","process","env","__NEXT_CROSS_ORIGIN","onload","onerror","Error","head","appendChild","appendScript","src","script","body","devBuildPromise","resolvePromiseWithTimeout","p","ms","cancelled","r","NODE_ENV","requestIdleCallback","setTimeout","self","__BUILD_MANIFEST","onBuildManifest","cb","__BUILD_MANIFEST_CB","getFilesForRoute","assetPrefix","route","scriptUrl","encodeURI","getAssetPathFromRoute","scripts","__unsafeCreateTrustedScriptURL","css","manifest","allFiles","filter","v","endsWith","entrypoints","Map","loadedScripts","styleSheets","routes","maybeExecuteScript","toString","fetchStyleSheet","fetch","credentials","res","ok","text","content","whenEntrypoint","onEntrypoint","execute","exports","component","default","error","undefined","input","old","loadRoute","prefetch","devBuildPromiseResolve","all","has","entrypoint","styles","assign","finally","cn","navigator","connection","saveData","test","effectiveType","output","HeadManagerContext","React","createContext","process","env","NODE_ENV","displayName","DOMAttributeNames","initHeadManager","isEqualNode","acceptCharset","className","htmlFor","httpEquiv","noModule","reactElementToDOM","type","props","el","document","createElement","p","hasOwnProperty","undefined","attr","toLowerCase","setAttribute","children","dangerouslySetInnerHTML","innerHTML","__html","textContent","Array","isArray","join","oldTag","newTag","HTMLElement","nonce","getAttribute","cloneTag","cloneNode","updateElements","process","env","__NEXT_STRICT_NEXT_HEAD","components","headEl","querySelector","headMetaTags","querySelectorAll","oldTags","metaCharset","push","i","length","headTag","metaTag","nextSibling","tagName","newTags","map","filter","k","len","splice","forEach","t","previousSibling","parentNode","removeChild","meta","name","content","appendChild","getElementsByTagName","headCountEl","NODE_ENV","console","error","headCount","Number","j","previousElementSibling","insertBefore","toString","mountedInstances","Set","updateHead","head","tags","h","href","titleComponent","title","handleClientScriptLoad","initScriptLoader","ScriptCache","Map","LoadCache","Set","ignoreProps","stylesheets","forEach","stylesheet","ReactDOM","head","document","link","createElement","rel","href","appendChild","onLoad","cacheKey","id","src","add","onReady","loadPromise","resolve","reject","el","addEventListener","call","afterLoad","e","catch","onError","children","textContent","value","undefined","includes","setAttribute","insertStylesheets","strategy","window","requestIdleCallback","loadScript","readyState","querySelectorAll","scripts","script","scriptLoaderItems","addBeforeInteractiveToCache","useEffect","hasOnReadyEffectCalled","hasLoadScriptEffectCalled","props","loadLazyScript","updateScripts","getIsSsr","styleSrc","restProps","dangerouslySetInnerHTML","nonce","integrity","as","Object","getObjectClassLabel","isPlainObject","value","Object","prototype","toString","call","getPrototypeOf","hasOwnProperty","isError","getProperError","err","process","env","NODE_ENV","Error","isPlainObject","JSON","stringify","getSortedRoutes","UrlNode","insert","urlPath","_insert","split","filter","Boolean","smoosh","_smoosh","prefix","childrenPaths","children","keys","sort","slugName","splice","indexOf","restSlugName","optionalRestSlugName","routes","map","c","get","reduce","prev","curr","push","placeholder","r","slice","Error","unshift","urlPaths","slugNames","isCatchAll","length","nextSegment","startsWith","endsWith","handleSlug","previousSlug","nextSlug","forEach","slug","replace","segmentName","isOptional","substring","has","set","Map","normalizedPages","root","pagePath","ensureLeadingSlash","path","startsWith","DEFAULT_SEGMENT_KEY","PAGE_SEGMENT_KEY","isGroupSegment","segment","endsWith","normalizeAppPath","normalizeRscURL","route","ensureLeadingSlash","split","reduce","pathname","segment","index","segments","isGroupSegment","length","url","replace","INTERCEPTION_ROUTE_MARKERS","extractInterceptionRouteInformation","isInterceptionRouteAppPath","path","split","find","segment","m","startsWith","undefined","interceptingRoute","marker","interceptedRoute","Error","normalizeAppPath","slice","concat","join","splitInterceptingRoute","length","isDynamicRoute","TEST_ROUTE","route","isInterceptionRouteAppPath","extractInterceptionRouteInformation","interceptedRoute","test","getSortedRoutes","isDynamicRoute","normalizePathSep","path","replace","denormalizePagePath","page","_page","normalizePathSep","startsWith","isDynamicRoute","slice","normalizeLocalePath","pathname","locales","detectedLocale","pathnameParts","split","some","locale","toLowerCase","splice","join","mitt","all","Object","create","on","type","handler","push","off","splice","indexOf","emit","evts","slice","map","DecodeError","MiddlewareNotFoundError","MissingStaticPage","NormalizeError","PageNotFoundError","SP","ST","WEB_VITALS","execOnce","getDisplayName","getLocationOrigin","getURL","isAbsoluteUrl","isResSent","loadGetInitialProps","normalizeRepeatedSlashes","stringifyError","fn","used","result","args","ABSOLUTE_URL_REGEX","url","test","protocol","hostname","port","window","location","href","origin","substring","length","Component","displayName","name","res","finished","headersSent","urlParts","split","urlNoQuery","replace","slice","join","App","ctx","process","env","NODE_ENV","prototype","getInitialProps","message","Error","pageProps","props","Object","keys","console","warn","performance","every","method","constructor","page","code","error","JSON","stringify","stack","assign","searchParamsToUrlQuery","urlQueryToSearchParams","searchParams","query","forEach","value","key","Array","isArray","push","stringifyUrlQueryParam","param","isNaN","String","urlQuery","result","URLSearchParams","Object","entries","item","append","set","target","searchParamsList","from","keys","delete","parseRelativeUrl","url","base","globalBase","URL","window","getLocationOrigin","resolvedBase","startsWith","location","href","pathname","searchParams","search","hash","origin","Error","query","searchParamsToUrlQuery","slice","length","code","parse","path","value","_a","result","decode","i","getPathMatch","path","options","keys","regexp","pathToRegexp","delimiter","sensitive","strict","matcher","regexpToFunction","regexModifier","RegExp","source","flags","pathname","params","match","removeUnnamedParams","key","name","escapeStringRegexp","reHasRegExp","reReplaceRegExp","str","test","replace","parseUrl","url","startsWith","parseRelativeUrl","parsedURL","URL","hash","hostname","href","pathname","port","protocol","query","searchParamsToUrlQuery","searchParams","search","ACTION","FLIGHT_PARAMETERS","NEXT_DID_POSTPONE_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_STATE_TREE","NEXT_RSC_UNION_QUERY","NEXT_URL","RSC_CONTENT_TYPE_HEADER","RSC_HEADER","parse","serialize","e","r","t","n","i","a","getCookieParser","headers","parseCookie","cookie","parse","parseCookieFn","require","Array","isArray","join","compileNonPath","matchHas","prepareDestination","getSafeParamName","paramName","newParamName","i","length","charCode","charCodeAt","escapeSegment","str","segmentName","replace","RegExp","escapeStringRegexp","unescapeSegments","req","query","has","missing","params","hasMatch","hasItem","value","key","type","toLowerCase","headers","cookies","getCookieParser","host","hostname","split","matcher","matches","Array","isArray","slice","match","groups","Object","keys","forEach","groupKey","allMatch","every","item","some","includes","compile","validate","args","assign","__nextLocale","__nextDefaultLocale","__nextDataReq","__nextInferredLocaleFromDefault","NEXT_RSC_UNION_QUERY","escapedDestination","destination","param","parsedDestination","parseUrl","destQuery","destPath","pathname","hash","destHostname","destPathParamKeys","destHostnameParamKeys","pathToRegexp","destParams","push","name","destPathCompiler","destHostnameCompiler","strOrArray","entries","map","paramKeys","filter","appendParamsToQuery","newUrl","isInterceptionRouteAppPath","segment","marker","INTERCEPTION_ROUTE_MARKERS","find","m","startsWith","search","err","message","Error","parsePath","path","hashIndex","indexOf","queryIndex","hasQuery","pathname","substring","query","undefined","hash","slice","pathHasPrefix","path","prefix","pathname","parsePath","startsWith","hasBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","pathHasPrefix","removeBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","__NEXT_MANUAL_CLIENT_BASE_PATH","hasBasePath","length","slice","startsWith","resolveRewrites","asPath","pages","rewrites","query","resolveHref","locales","matchedPage","externalDest","parsedAs","parseRelativeUrl","fsPathname","removeTrailingSlash","normalizeLocalePath","removeBasePath","pathname","resolvedHref","handleRewrite","rewrite","matcher","getPathMatch","source","process","env","__NEXT_TRAILING_SLASH","removeUnnamedParams","strict","params","has","missing","hasParams","matchHas","headers","host","document","location","hostname","navigator","userAgent","cookies","cookie","split","reduce","acc","item","key","value","join","Object","assign","destination","destRes","prepareDestination","appendParamsToQuery","parsedDestination","newUrl","includes","finished","i","beforeFiles","length","afterFiles","fallback","getRouteMatcher","re","groups","pathname","routeMatch","exec","decode","param","decodeURIComponent","_","DecodeError","params","Object","keys","forEach","slugName","g","m","pos","undefined","indexOf","split","map","entry","repeat","getNamedMiddlewareRegex","getNamedRouteRegex","getRouteRegex","NEXT_QUERY_PARAM_PREFIX","NEXT_INTERCEPTION_MARKER_PREFIX","parseParameter","param","optional","startsWith","endsWith","slice","repeat","key","getParametrizedRoute","route","segments","removeTrailingSlash","split","groups","groupIndex","parameterizedRoute","map","segment","markerMatch","INTERCEPTION_ROUTE_MARKERS","find","m","paramMatches","match","pos","escapeStringRegexp","join","normalizedRoute","re","RegExp","buildGetSafeRouteKey","i","routeKey","j","String","fromCharCode","Math","floor","getSafeKeyFromSegment","interceptionMarker","getSafeRouteKey","routeKeys","keyPrefix","cleanedKey","replace","invalidKey","length","isNaN","parseInt","interceptionPrefix","getNamedParametrizedRoute","prefixRouteKeys","namedParameterizedRoute","hasInterceptionMarker","some","usedMarker","undefined","prefixRouteKey","result","namedRegex","options","catchAll","catchAllRegex","catchAllGroupedRegex","formatUrl","formatWithValidation","urlObjectKeys","slashedProtocols","urlObj","auth","hostname","protocol","pathname","hash","query","host","encodeURIComponent","replace","indexOf","port","String","querystring","urlQueryToSearchParams","search","endsWith","slashes","test","url","process","env","NODE_ENV","Object","keys","forEach","key","includes","console","warn","detectDomainLocale","domainItems","hostname","detectedLocale","toLowerCase","item","domainHostname","domain","split","defaultLocale","locales","some","locale","detectDomainLocale","args","process","env","__NEXT_I18N_SUPPORT","require","normalizePathTrailingSlash","path","startsWith","process","env","__NEXT_MANUAL_TRAILING_SLASH","pathname","query","hash","parsePath","__NEXT_TRAILING_SLASH","test","removeTrailingSlash","endsWith","addPathPrefix","path","prefix","startsWith","pathname","query","hash","parsePath","addLocale","path","locale","defaultLocale","ignorePrefix","lower","toLowerCase","pathHasPrefix","addPathPrefix","addLocale","path","args","process","env","__NEXT_I18N_SUPPORT","normalizePathTrailingSlash","require","removeLocale","path","locale","process","env","__NEXT_I18N_SUPPORT","pathname","parsePath","pathLower","toLowerCase","localeLower","startsWith","length","slice","addBasePath","basePath","process","env","__NEXT_ROUTER_BASEPATH","path","required","normalizePathTrailingSlash","__NEXT_MANUAL_CLIENT_BASE_PATH","addPathPrefix","omit","object","keys","omitted","Object","forEach","key","includes","isLocalURL","url","isAbsoluteUrl","locationOrigin","getLocationOrigin","resolved","URL","origin","hasBasePath","pathname","_","interpolateAs","route","asPathname","query","interpolatedRoute","dynamicRegex","getRouteRegex","dynamicGroups","groups","dynamicMatches","getRouteMatcher","params","Object","keys","every","param","value","repeat","optional","replaced","Array","isArray","replace","map","segment","encodeURIComponent","join","result","resolveHref","router","href","resolveAs","base","urlAsString","formatWithValidation","urlProtoMatch","match","urlAsStringNoProto","slice","length","urlParts","split","console","error","pathname","normalizedUrl","normalizeRepeatedSlashes","isLocalURL","URL","startsWith","asPath","_","finalUrl","normalizePathTrailingSlash","interpolatedAs","isDynamicRoute","searchParams","query","searchParamsToUrlQuery","result","params","interpolateAs","hash","omit","resolvedHref","origin","isAPIRoute","value","Boolean","startsWith","removePathPrefix","path","prefix","pathHasPrefix","withoutPrefix","slice","length","startsWith","getNextPathnameInfo","pathname","options","basePath","i18n","trailingSlash","nextConfig","info","endsWith","pathHasPrefix","removePathPrefix","pathnameNoDataPrefix","startsWith","paths","replace","split","buildId","slice","join","parseData","result","i18nProvider","analyze","normalizeLocalePath","locales","locale","detectedLocale","addPathSuffix","path","suffix","startsWith","pathname","query","hash","parsePath","formatNextPathnameInfo","info","pathname","addLocale","locale","buildId","undefined","defaultLocale","ignorePrefix","trailingSlash","removeTrailingSlash","addPathSuffix","addPathPrefix","basePath","endsWith","compareRouterStates","a","b","stateKeys","Object","keys","length","i","key","queryKeys","query","j","queryKey","hasOwnProperty","isBot","userAgent","test","handleSmoothScroll","fn","options","onlyHashChange","htmlElement","document","documentElement","existing","style","scrollBehavior","dontForceLayout","getClientRects","require_react_is_production_min","require_react_is_development","ForwardRef","Fragment","Portal","require_react_is","e","r","t","n","reemit","c","o","i","s","__nccwpck_require__","BloomFilter","murmurhash2","str","h","i","length","c","charCodeAt","Math","imul","DEFAULT_ERROR_RATE","from","items","errorRate","filter","item","add","export","data","numItems","numBits","numHashes","bitArray","process","env","NEXT_RUNTIME","filterData","JSON","stringify","gzipSize","require","sync","console","warn","import","hashValues","getHashValues","forEach","hash","contains","every","push","constructor","ceil","log","Array","fill","createKey","Router","matchesMiddleware","buildCancellationError","Object","assign","Error","cancelled","options","matchers","Promise","resolve","router","pageLoader","getMiddleware","pathname","asPathname","parsePath","asPath","cleanedAs","hasBasePath","removeBasePath","asWithBasePathAndLocale","addBasePath","addLocale","locale","some","m","RegExp","regexp","test","stripOrigin","url","origin","getLocationOrigin","startsWith","substring","length","prepareUrlAs","as","resolvedHref","resolvedAs","resolveHref","hrefWasAbsolute","asWasAbsolute","preparedUrl","preparedAs","resolveDynamicRoute","pages","cleanPathname","removeTrailingSlash","denormalizePagePath","includes","page","isDynamicRoute","getRouteRegex","re","getMiddlewareData","source","response","nextConfig","basePath","i18n","locales","trailingSlash","Boolean","process","env","__NEXT_TRAILING_SLASH","rewriteHeader","headers","get","rewriteTarget","matchedPath","__NEXT_EXTERNAL_MIDDLEWARE_REWRITE_RESOLVE","parsedRewriteTarget","parseRelativeUrl","pathnameInfo","getNextPathnameInfo","parseData","fsPathname","all","getPageList","getClientBuildManifest","then","__rewrites","rewrites","normalizeLocalePath","parsedSource","__NEXT_HAS_REWRITES","undefined","result","resolveRewrites","query","path","matchedPage","parsedAs","resolvedPathname","matches","getRouteMatcher","type","src","formatNextPathnameInfo","defaultLocale","buildId","destination","hash","redirectTarget","newAs","newUrl","withMiddlewareEffects","fetchData","data","effect","dataHref","json","text","cacheKey","manualScrollRestoration","__NEXT_SCROLL_RESTORATION","window","history","v","sessionStorage","setItem","removeItem","n","SSG_DATA_NOT_FOUND","Symbol","fetchRetry","attempts","fetch","credentials","method","ok","status","tryToParseAsJSON","JSON","parse","error","fetchNextData","inflightCache","isPrefetch","hasMiddleware","isServerRender","parseJSON","persistCache","isBackground","unstable_skipClientCache","href","URL","location","getData","params","purpose","notFound","markAssetError","NODE_ENV","catch","err","message","Math","random","toString","slice","handleHardNavigation","getCancelledHandler","route","cancel","clc","handleCancelled","reload","back","forward","push","_key","stringify","x","self","pageXOffset","y","pageYOffset","change","replace","_bfl","skipNavigate","__NEXT_CLIENT_ROUTER_FILTER_ENABLED","matchesBflStatic","matchesBflDynamic","curAs","asNoSlash","asNoSlashLocale","_bfl_s","contains","normalizedAS","curAsParts","split","i","currentPart","join","_bfl_d","forcedScroll","isLocalURL","isQueryUpdating","_h","shallow","shouldResolveHref","_shouldResolveHref","nextState","state","readyStateChange","isReady","isSsr","prevLocale","__NEXT_I18N_SUPPORT","localePathResult","detectedLocale","formatWithValidation","didNavigate","detectedDomain","detectDomainLocale","domainLocales","isLocaleDomain","hostname","domain","asNoBasePath","http","ST","performance","mark","scroll","routeProps","_inFlightRoute","events","emit","removeLocale","localeChange","onlyAHashChange","changeState","scrollToHash","set","components","isError","parsed","urlIsNew","parsedAsPathname","__appRouter","isMiddlewareRewrite","isMiddlewareMatch","rewritesResult","p","externalDest","routeMatch","routeRegex","shouldInterpolate","interpolatedAs","interpolateAs","missingParams","keys","groups","filter","param","optional","console","warn","omit","isErrorRoute","routeInfo","getRouteInfo","isPreview","isFallback","cleanedParsedPathname","forEach","key","prefixedAs","rewriteAs","localeResult","curRouteMatch","component","Component","unstable_scriptLoader","scripts","concat","script","handleClientScriptLoad","props","__N_SSG","__N_SSP","pageProps","__N_REDIRECT","__N_REDIRECT_BASE_PATH","parsedHref","__N_PREVIEW","notFoundRoute","fetchComponent","_","isNotFound","__NEXT_DATA__","statusCode","isValidShallowRoute","shouldScroll","resetScroll","upcomingScrollState","upcomingRouterState","canSkipUpdating","compareRouterStates","e","document","documentElement","lang","hashRegex","getURL","_shallow","__N","handleRouteInfoError","loadErrorFail","isAssetError","styleSheets","getInitialProps","gipErr","routeInfoErr","requestedRoute","existingInfo","cachedRouteInfo","fetchNextDataParams","getDataHref","skipInterpolation","sbc","sdc","resolvedRoute","isAPIRoute","res","mod","isValidElementType","require","wasBailedPrefetch","shouldFetchData","_getData","fetched","getProperError","sub","beforePopState","cb","_bps","oldUrlNoHash","oldHash","newUrlNoHash","newHash","handleSmoothScroll","scrollTo","rawHash","decodeURIComponent","idEl","getElementById","scrollIntoView","nameEl","getElementsByName","onlyHashChange","prefetch","isBot","navigator","userAgent","urlPathname","originalPathname","__NEXT_MIDDLEWARE_PREFETCH","_isSsg","isSsg","priority","__NEXT_OPTIMISTIC_CLIENT_CACHE","componentResult","loadPage","fn","_getFlightData","ctx","App","AppTree","_wrapApp","loadGetInitialProps","constructor","initialProps","wrapApp","subscription","isFirstPopStateEvent","onPopState","__NA","getItem","initial","BloomFilter","routerFilterSValue","__NEXT_CLIENT_ROUTER_S_FILTER","staticFilterData","routerFilterDValue","__NEXT_CLIENT_ROUTER_D_FILTER","dynamicFilterData","numHashes","numItems","errorRate","import","autoExportDynamic","autoExport","__NEXT_ROUTER_BASEPATH","gssp","gip","isExperimentalCompile","appGip","gsp","search","_initialMatchesMiddlewarePromise","addEventListener","scrollRestoration","mitt","RouterContext","React","createContext","process","env","NODE_ENV","displayName","withRouter","ComposedComponent","WithRouterWrapper","props","router","useRouter","getInitialProps","origGetInitialProps","process","env","NODE_ENV","name","displayName","require_router","Router","createRouter","makePublicRouterInstance","useRouter","withRouter","singletonRouter","router","readyCallbacks","ready","callback","window","push","urlPropertyFields","routerEvents","coreMethodFields","Object","defineProperty","get","events","getRouter","message","Error","forEach","field","args","event","on","eventField","charAt","toUpperCase","substring","_singletonRouter","err","console","error","isError","stack","React","useContext","RouterContext","cb","scopedRouter","instance","property","assign","Array","isArray","require_router","components","decode","decode","parse","useMemo","useState","useEffect","useChatContext","code","code","ok","self","code","trail","code","constructs","ok","code","ok","code","ok","self","code","text","ok","previous","code","ok","self","code","map","table","ok","self","code","index","is","own","replace","find","domain","path","trail","code","code","head","map","value","exit","exit","table","row","sizes","columnIndex","code","exit","exit","map","ok","self","code","effects","nok","previous","ok","self","code","between","math","exit","jsx","jsx","jsxs","ResponseButton","useChatContext","useChatContext","jsx","jsxs","useCopilotChat","Role","TextMessage","jsx","useEffect","useCopilotChat","Role","ActionExecutionMessage","TextMessage","jsx","jsx","jsxs","useState","useMemo","useEffect","Button","useCopilotChat","useCopilotAction","useCopilotReadable","Role","ActionExecutionMessage","TextMessage","jsx","React","useState","useRef","useCallback","React","useRef","useMemo","useCallback","React","useEffect","createContext","useContext","useMemo","cache","React","useEffect","serialize","mutate","createContext","useContext","useMemo","React","useContext","useMemo","React","useContext","useMemo","fetcher","serialize","use","middleware","useSWR","noop","UNDEFINED","use","React","fetcher","cache","compare","serialize","useRef","useMemo","cachedData","useCallback","SWRConfig","React","useState","useRef","useCallback","fetcher","mutate","serialize","useCallback","useState","useEffect","useState","jsx","jsxs","useState","useEffect","ReactModal","useHeadlessContext","jsx","jsxs","useState","useHeadlessContext","useCallback","classNames","import_classnames","Button","Heading","Text","Fragment","jsx","jsxs","Heading","Text","classNames","Button","Container","Heading","useState","Heading","Picture","Text","cn","useHeadlessContext","jsx","jsxs","jsx","jsxs","useHeadlessContext","cn","Picture","Heading","Text","cn","jsx","jsxs","useState","Container","Heading","Button","Container","Text","useCallback","useState","Cookies","useCallback","useMemo","useState","useCallback","useEffect","useState","import_js_cookie","useCallback","useRef","useState","useHeadlessContext","fetcher","response","Cookies","useRef","useState","useCallback","useState","useHeadlessContext","fetcher","useHeadlessContext","useState","useCallback","useEffect","cn","useHeadlessContext","import_classnames","jsx","jsxs","classNames","Picture","Text","Fragment","jsx","jsxs","useState","useHeadlessContext","useMemo","tabs","useCallback","cn","Text","Picture","import_classnames","Tabs","TabsList","TabsTrigger","Picture","dayjs","useCallback","useMemo","useState","import_classnames","useHeadlessContext","useState","jsx","jsxs","useState","useHeadlessContext","classNames","useCallback","useEffect","useState","useHeadlessContext","useState","useEffect","useCallback","useHeadlessContext","jsx","jsxs","useState","useHeadlessContext","useMemo","useCallback","code","clipboard","classNames","Tabs","TabsList","TabsTrigger","dayjs","Picture","cn","useHeadlessContext","jsx","jsxs","useState","useHeadlessContext","useCallback","Container","cn","Text","Button","Button","Container","Heading","Picture","Text","React","React","ForwardRef","useEffect","useMemo","useRef","useState","useHeadlessContext","gaTrack","useMemo","useMemo","useMemo","useMemo","useMemo","useMemo","useHeadlessContext","useMemo","Button","Text","gaTrack","cn","useHeadlessContext","useCallback","useEffect","useRef","useState","jsx","jsxs","Message","createContext","useContext","useState","jsx","jsxs","createContext","useContext","useState","import_react_modal","cn","useHeadlessContext","useEffect","useState","jsx","jsxs","useHeadlessContext","useState","useEffect","ReactModal","cn","jsx","jsxs","useHeadlessContext","useState","useRef","code","useEffect","_a","_b","useCallback","gaTrack","newCode","_c","Text","cn","Button","Message","uploadReceipt","useHeadlessContext","useMemo","gaTrack","cn","useHeadlessContext","import_js_cookie","useCallback","useEffect","useState","Button","Picture","Text","classNames","fetcher","gaTrack","useHeadlessContext","jsx","jsxs","Cookies","useHeadlessContext","useState","useCallback","fetcher","gaTrack","useEffect","Text","classNames","Button","Picture","Fragment","jsx","jsxs","classNames","useState","useRef","useHeadlessContext","useMemo","list","useEffect","Container","cn","Heading","Picture","Text","Button","Container","Heading","Tabs","TabsList","TabsTrigger","Text","cn","useHeadlessContext","useMemo","useState","Heading","Text","cn","useEffect","useState","jsx","jsxs","Heading","Text","jsx","jsxs","useHeadlessContext","useMemo","_a","useState","Container","Heading","Text","Tabs","TabsList","TabsTrigger","cn","Container","Heading","useMemo","useState","Button","Text","Picture","useMemo","useState","useHeadlessContext","useHeadlessContext","_","gaTrack","cn","useHeadlessContext","jsx","jsxs","useHeadlessContext","useState","error","useMemo","_a","_b","_c","gaTrack","cn","Picture","Text","_d","Button","useCallback","useEffect","useState","useHeadlessContext","useState","useCallback","useEffect","Text","useMemo","cn","jsx","useMemo","Text","useHeadlessContext","cn","jsx","jsxs","useState","useHeadlessContext","_a","useMemo","_b","Container","cn","Heading","import_classnames","Container","Heading","Tabs","TabsList","TabsTrigger","useCallback","useMemo","useState","import_classnames","Button","Picture","Text","useCallback","useEffect","useState","import_copy_to_clipboard","useCallback","useEffect","useRef","useState","clipboard","useHeadlessContext","Text","jsx","jsxs","Text","Fragment","jsx","jsxs","useHeadlessContext","useState","_a","useCallback","useEffect","classNames","Picture","Text","text","Button","import_classnames","useCallback","useEffect","useMemo","useState","useEffect","useState","useHeadlessContext","useCallback","useMemo","useState","useHeadlessContext","useState","useMemo","addressRules","useCallback","useHeadlessContext","useHeadlessContext","useHeadlessContext","Picture","Text","jsx","jsxs","Error","import_classnames","Button","Text","Picture","Text","useHeadlessContext","jsx","jsxs","useHeadlessContext","Picture","Text","useHeadlessContext","jsx","jsxs","useHeadlessContext","classNames","Text","Button","import_classnames","Button","Text","import_classnames","useCallback","useEffect","useMemo","useState","Picture","useEffect","useRef","import_classnames","useEffect","useState","useHeadlessContext","jsx","jsxs","useState","useHeadlessContext","useEffect","classNames","Picture","Text","jsx","jsxs","import_classnames","useCallback","useEffect","useState","jsx","classNames","import_classnames","Picture","useEffect","useMemo","useState","useHeadlessContext","Fragment","jsx","jsxs","useState","useHeadlessContext","useMemo","useEffect","classNames","code","Picture","useHeadlessContext","jsx","jsxs","useHeadlessContext","useState","useMemo","useCallback","useEffect","classNames","useHeadlessContext","jsx","jsxs","useHeadlessContext","classNames","Text","Button","import_classnames","Button","Picture","Text","Fragment","useMemo","Fragment","jsx","jsxs","useMemo","_a","_b","classNames","Picture","Text","item","text","Button","jsx","jsxs","useHeadlessContext","useState","useMemo","_a","item","useCallback","useEffect","classNames","Error","useHeadlessContext","useProductsByHandles","gaTrack","cn","import_classnames","Button","Text","Picture","useMemo","gaTrack","useHeadlessContext","Text","jsx","jsxs","NoneProductValue","Text","jsx","jsxs","RedeemableItem","useHeadlessContext","useMemo","_a","_b","_c","_d","_e","classNames","Picture","NoneProductValue","Text","gaTrack","Button","Fragment","jsx","jsxs","useHeadlessContext","useState","useMemo","useProductsByHandles","_a","alpcItem","product","variant","useCallback","Container","classNames","Heading","cn","Tabs","gaTrack","TabsList","TabsTrigger","RedeemableItem","item","React","useEffect","useCallback","jsx","useState","useRef","useEffect","jsx","jsxs","useRef","useEffect","useState","useCallback","jsx","jsxs","jsx","jsxs","useEffect","useRef","jsx","jsx","jsxs","useRef","useState","useCallback","useEffect","useRef","useEffect","jsx","jsxs","jsx","jsxs","useState","useRef","useEffect","useState","useCallback","useRef","useEffect","useState","useCallback","useEffect","code","useState","useEffect","useRef","useCallback","useCallback","useRef","fetcher","fetcher","useRef","useCallback","ReactMarkdown","jsx","jsx","jsxs","formatPrice","useState","jsx","jsxs","formatPrice","useState","useState","jsx","jsxs","formatPrice","useState","useState","ReactMarkdown","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","code","useState","ReactMarkdown","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","React","useEffect","useCallback","classNames","Button","Container","Heading","Picture","Text","useMemo","useState","useEffect","cn","useHeadlessContext","Fragment","jsx","jsxs","classNames","useState","useHeadlessContext","useEffect","useMemo","list","Container","Heading","cn","Picture","Text","Button","Container","Heading","Tabs","TabsList","TabsTrigger","useMemo","useState","useEffect","useCallback","useRef","Button","Text","Picture","Badge","useMemo","useState","cn","useHeadlessContext","useBuyNow","jsx","jsxs","useHeadlessContext","useBuyNow","useState","useMemo","_a","_b","_c","cn","Badge","Picture","Text","Button","cn","jsx","jsxs","Pagination","useProductsByHandles","useHeadlessContext","gaTrack","cn","Fragment","jsx","jsxs","useState","useHeadlessContext","useRef","useEffect","useMemo","_a","_b","useProductsByHandles","useCallback","_c","gaTrack","Container","cn","Heading","Tabs","TabsList","TabsTrigger","Pagination","useEffect","useState","useRef","useCallback","cn","Container","jsx","Fragment","jsx","jsxs","ComponentKey","classNames","_a"]}
|