@salla.sa/twilight-theme-engine 1.0.152 → 1.0.154
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/{AddToCartForm-HOBSTMWX.js → AddToCartForm-OLEDEMIE.js} +3 -3
- package/dist/{AddToCartForm-HOBSTMWX.js.map → AddToCartForm-OLEDEMIE.js.map} +1 -1
- package/dist/{BlogAuthorPage-56OY5GCN.js → BlogAuthorPage-MKDIA4AG.js} +17 -17
- package/dist/{BlogAuthorPage-56OY5GCN.js.map → BlogAuthorPage-MKDIA4AG.js.map} +1 -1
- package/dist/{BlogCategoryPage-HW7A6RNL.js → BlogCategoryPage-7CHESQT7.js} +17 -17
- package/dist/{BlogCategoryPage-HW7A6RNL.js.map → BlogCategoryPage-7CHESQT7.js.map} +1 -1
- package/dist/{BlogPage-RRHKP3GP.js → BlogPage-PIVHFEZ5.js} +15 -15
- package/dist/{BlogPage-RRHKP3GP.js.map → BlogPage-PIVHFEZ5.js.map} +1 -1
- package/dist/{BlogSinglePage-STNMFQHX.js → BlogSinglePage-PEXIQ7PR.js} +15 -15
- package/dist/{BlogSinglePage-STNMFQHX.js.map → BlogSinglePage-PEXIQ7PR.js.map} +1 -1
- package/dist/{BlogTagPage-YD3EPTQY.js → BlogTagPage-VCUD5DJW.js} +17 -17
- package/dist/{BlogTagPage-YD3EPTQY.js.map → BlogTagPage-VCUD5DJW.js.map} +1 -1
- package/dist/{BrandsPage-KJFB4QBN.js → BrandsPage-ND3HFDVQ.js} +16 -16
- package/dist/{BrandsPage-KJFB4QBN.js.map → BrandsPage-ND3HFDVQ.js.map} +1 -1
- package/dist/{Breadcrumb-QKHYTTFB.js → Breadcrumb-4MDETQLE.js} +15 -15
- package/dist/{Breadcrumb-QKHYTTFB.js.map → Breadcrumb-4MDETQLE.js.map} +1 -1
- package/dist/{CartItem-DCCYGMRI.js → CartItem-5WYXUYGI.js} +15 -15
- package/dist/{CartItem-DCCYGMRI.js.map → CartItem-5WYXUYGI.js.map} +1 -1
- package/dist/{CartSummary-DAAYDRFS.js → CartSummary-COOUKCS3.js} +15 -15
- package/dist/{CartSummary-DAAYDRFS.js.map → CartSummary-COOUKCS3.js.map} +1 -1
- package/dist/{Copyright-GL5Q4FTN.js → Copyright-4YU3PMGG.js} +3 -3
- package/dist/{Copyright-GL5Q4FTN.js.map → Copyright-4YU3PMGG.js.map} +1 -1
- package/dist/{CustomerLayout-D7HC4G7V.js → CustomerLayout-H4ZEKJ25.js} +15 -15
- package/dist/{CustomerLayout-D7HC4G7V.js.map → CustomerLayout-H4ZEKJ25.js.map} +1 -1
- package/dist/{Footer-3NQWLPAA.js → Footer-ULEYKGIQ.js} +4 -4
- package/dist/{Footer-3NQWLPAA.js.map → Footer-ULEYKGIQ.js.map} +1 -1
- package/dist/{Header-SCR46P4B.js → Header-X7NAWY4Q.js} +8 -8
- package/dist/{Header-SCR46P4B.js.map → Header-X7NAWY4Q.js.map} +1 -1
- package/dist/{LatestProducts-4UML6BNG.js → LatestProducts-L7ZCBHXN.js} +17 -17
- package/dist/{LatestProducts-4UML6BNG.js.map → LatestProducts-L7ZCBHXN.js.map} +1 -1
- package/dist/{LoyaltyPage-CQIUT7MD.js → LoyaltyPage-V24SRFFS.js} +15 -15
- package/dist/{LoyaltyPage-CQIUT7MD.js.map → LoyaltyPage-V24SRFFS.js.map} +1 -1
- package/dist/{LoyaltyPointsPage-ZOZFDRZT.js → LoyaltyPointsPage-6EOV2N72.js} +6 -6
- package/dist/{LoyaltyPointsPage-ZOZFDRZT.js.map → LoyaltyPointsPage-6EOV2N72.js.map} +1 -1
- package/dist/{MainMenu-YLCB4MT7.js → MainMenu-XZ5JIRUH.js} +5 -5
- package/dist/{MainMenu-YLCB4MT7.js.map → MainMenu-XZ5JIRUH.js.map} +1 -1
- package/dist/{MasterLayout-BDDKPLS6.js → MasterLayout-JWU4HFC5.js} +15 -15
- package/dist/{MasterLayout-BDDKPLS6.js.map → MasterLayout-JWU4HFC5.js.map} +1 -1
- package/dist/{MobileMenu-S5LB622I.js → MobileMenu-NSDTTL23.js} +16 -16
- package/dist/{MobileMenu-S5LB622I.js.map → MobileMenu-NSDTTL23.js.map} +1 -1
- package/dist/{NotificationsPage-FPF7UU3Q.js → NotificationsPage-4Y2CXS2P.js} +15 -15
- package/dist/{NotificationsPage-FPF7UU3Q.js.map → NotificationsPage-4Y2CXS2P.js.map} +1 -1
- package/dist/{OrderSinglePage-M37ROUBX.js → OrderSinglePage-LFZSWWDU.js} +16 -16
- package/dist/{OrderSinglePage-M37ROUBX.js.map → OrderSinglePage-LFZSWWDU.js.map} +1 -1
- package/dist/{OrdersPage-GIZFTPQ7.js → OrdersPage-A2JZK3GN.js} +15 -15
- package/dist/{OrdersPage-GIZFTPQ7.js.map → OrdersPage-A2JZK3GN.js.map} +1 -1
- package/dist/{PageSingle-EQD5Y3L5.js → PageSingle-NC2PF3YM.js} +3 -3
- package/dist/{PageSingle-EQD5Y3L5.js.map → PageSingle-NC2PF3YM.js.map} +1 -1
- package/dist/{ProductDetails-53BXVF37.js → ProductDetails-5RGFTKUE.js} +4 -4
- package/dist/{ProductDetails-53BXVF37.js.map → ProductDetails-5RGFTKUE.js.map} +1 -1
- package/dist/{ProfilePage-6GJXTBFN.js → ProfilePage-OZM5T7NJ.js} +15 -15
- package/dist/{ProfilePage-6GJXTBFN.js.map → ProfilePage-OZM5T7NJ.js.map} +1 -1
- package/dist/{ReviewsPage-SCHVMKXV.js → ReviewsPage-CU3GLSAJ.js} +3 -3
- package/dist/{ReviewsPage-SCHVMKXV.js.map → ReviewsPage-CU3GLSAJ.js.map} +1 -1
- package/dist/{SeoCartWidget-IUXLYOTC.js → SeoCartWidget-UXCRYEEP.js} +15 -15
- package/dist/{SeoCartWidget-IUXLYOTC.js.map → SeoCartWidget-UXCRYEEP.js.map} +1 -1
- package/dist/{SettingsPage-2TKL2COF.js → SettingsPage-RJADQ5T4.js} +15 -15
- package/dist/{SettingsPage-2TKL2COF.js.map → SettingsPage-RJADQ5T4.js.map} +1 -1
- package/dist/{StoreClosedNotification-HHOQXT6N.js → StoreClosedNotification-UJ5IC442.js} +16 -16
- package/dist/{StoreClosedNotification-HHOQXT6N.js.map → StoreClosedNotification-UJ5IC442.js.map} +1 -1
- package/dist/{TestimonialsPage-GJJT7F5G.js → TestimonialsPage-ZUMMAZPC.js} +3 -3
- package/dist/{TestimonialsPage-GJJT7F5G.js.map → TestimonialsPage-ZUMMAZPC.js.map} +1 -1
- package/dist/{ThankYouPage-ZAEZWSUK.js → ThankYouPage-NZ6FATU5.js} +15 -15
- package/dist/{ThankYouPage-ZAEZWSUK.js.map → ThankYouPage-NZ6FATU5.js.map} +1 -1
- package/dist/{WalletPage-74LAUONG.js → WalletPage-S6SQOUM3.js} +16 -16
- package/dist/{WalletPage-74LAUONG.js.map → WalletPage-S6SQOUM3.js.map} +1 -1
- package/dist/{WebMcpTools-J6HCO5B6.js → WebMcpTools-J5PK7P6Y.js} +5 -5
- package/dist/{WebMcpTools-J6HCO5B6.js.map → WebMcpTools-J5PK7P6Y.js.map} +1 -1
- package/dist/{WishlistPage-SV55V5CP.js → WishlistPage-2MM52DNH.js} +17 -17
- package/dist/{WishlistPage-SV55V5CP.js.map → WishlistPage-2MM52DNH.js.map} +1 -1
- package/dist/api/advertisement.js +2 -2
- package/dist/api/apps.js +2 -2
- package/dist/api/blog.js +3 -3
- package/dist/api/brands.js +3 -3
- package/dist/api/cart.js +3 -3
- package/dist/api/category.js +3 -3
- package/dist/api/client.js +1 -1
- package/dist/api/home.js +2 -2
- package/dist/api/loyalty.js +3 -3
- package/dist/api/menu.js +2 -2
- package/dist/api/notification.js +2 -2
- package/dist/api/order.js +3 -3
- package/dist/api/page.js +3 -3
- package/dist/api/product.js +3 -3
- package/dist/api/profile.js +1 -1
- package/dist/api/store.js +2 -2
- package/dist/api/translations.js +2 -2
- package/dist/api/user.js +2 -2
- package/dist/api/wallet.js +2 -2
- package/dist/api/wishlist.js +4 -4
- package/dist/{chunk-JWYZLXJZ.js → chunk-2X7YKKJ7.js} +5 -5
- package/dist/{chunk-JWYZLXJZ.js.map → chunk-2X7YKKJ7.js.map} +1 -1
- package/dist/{chunk-XEHOZTER.js → chunk-32DWNWHW.js} +3 -3
- package/dist/{chunk-XEHOZTER.js.map → chunk-32DWNWHW.js.map} +1 -1
- package/dist/{chunk-KNY2ZZ5M.js → chunk-3MRO4LJQ.js} +3 -3
- package/dist/{chunk-KNY2ZZ5M.js.map → chunk-3MRO4LJQ.js.map} +1 -1
- package/dist/{chunk-HSJCVD3P.js → chunk-5DL4LE6K.js} +4 -4
- package/dist/{chunk-HSJCVD3P.js.map → chunk-5DL4LE6K.js.map} +1 -1
- package/dist/{chunk-F5RU2UCE.js → chunk-6HLNVLTE.js} +16 -17
- package/dist/chunk-6HLNVLTE.js.map +1 -0
- package/dist/{chunk-677OXNGV.js → chunk-6SL5AT2J.js} +3 -3
- package/dist/{chunk-677OXNGV.js.map → chunk-6SL5AT2J.js.map} +1 -1
- package/dist/{chunk-5VTVPQQB.js → chunk-7ZKWEKCV.js} +4 -4
- package/dist/{chunk-5VTVPQQB.js.map → chunk-7ZKWEKCV.js.map} +1 -1
- package/dist/chunk-B5TYEHY6.js +69 -0
- package/dist/chunk-B5TYEHY6.js.map +1 -0
- package/dist/{chunk-A2SS3TNE.js → chunk-BEJT4IGX.js} +3 -3
- package/dist/{chunk-A2SS3TNE.js.map → chunk-BEJT4IGX.js.map} +1 -1
- package/dist/{chunk-FCFIG4M3.js → chunk-DMJXUQFM.js} +3 -3
- package/dist/{chunk-FCFIG4M3.js.map → chunk-DMJXUQFM.js.map} +1 -1
- package/dist/{chunk-I3KAWUPG.js → chunk-FDBC2P25.js} +4 -4
- package/dist/{chunk-I3KAWUPG.js.map → chunk-FDBC2P25.js.map} +1 -1
- package/dist/{chunk-IO4CVUL5.js → chunk-FSRJ4DDA.js} +6 -4
- package/dist/chunk-FSRJ4DDA.js.map +1 -0
- package/dist/{chunk-R4LA6IMS.js → chunk-GHG3ZO4G.js} +3 -3
- package/dist/{chunk-R4LA6IMS.js.map → chunk-GHG3ZO4G.js.map} +1 -1
- package/dist/{chunk-UG44HSCN.js → chunk-GJLVSEHK.js} +4 -4
- package/dist/{chunk-UG44HSCN.js.map → chunk-GJLVSEHK.js.map} +1 -1
- package/dist/{chunk-O76H6TDP.js → chunk-HCEFSWAE.js} +3 -3
- package/dist/{chunk-O76H6TDP.js.map → chunk-HCEFSWAE.js.map} +1 -1
- package/dist/{chunk-BWKHA4ZD.js → chunk-HHFZIWUU.js} +4 -4
- package/dist/{chunk-BWKHA4ZD.js.map → chunk-HHFZIWUU.js.map} +1 -1
- package/dist/{chunk-LJXWCGBH.js → chunk-HVA2Z5FE.js} +7 -7
- package/dist/{chunk-LJXWCGBH.js.map → chunk-HVA2Z5FE.js.map} +1 -1
- package/dist/{chunk-N2RAPPQ3.js → chunk-I6IM4ZSC.js} +4 -4
- package/dist/{chunk-N2RAPPQ3.js.map → chunk-I6IM4ZSC.js.map} +1 -1
- package/dist/{chunk-BY4DQTOG.js → chunk-LRWN2LX2.js} +7 -7
- package/dist/{chunk-BY4DQTOG.js.map → chunk-LRWN2LX2.js.map} +1 -1
- package/dist/{chunk-AU2XMLTH.js → chunk-MM2VVKNO.js} +3 -3
- package/dist/{chunk-AU2XMLTH.js.map → chunk-MM2VVKNO.js.map} +1 -1
- package/dist/{chunk-SXJEZEGN.js → chunk-OHUPTPG4.js} +3 -3
- package/dist/{chunk-SXJEZEGN.js.map → chunk-OHUPTPG4.js.map} +1 -1
- package/dist/{chunk-ZC4O472R.js → chunk-OVQUDNCD.js} +5 -5
- package/dist/{chunk-ZC4O472R.js.map → chunk-OVQUDNCD.js.map} +1 -1
- package/dist/{chunk-64RDACOS.js → chunk-PJHZFV5U.js} +4 -4
- package/dist/{chunk-64RDACOS.js.map → chunk-PJHZFV5U.js.map} +1 -1
- package/dist/{chunk-EFKVEYML.js → chunk-PPMWSQAB.js} +5 -5
- package/dist/{chunk-EFKVEYML.js.map → chunk-PPMWSQAB.js.map} +1 -1
- package/dist/{chunk-S5KE6KPV.js → chunk-Q7HPYV4S.js} +4 -4
- package/dist/{chunk-S5KE6KPV.js.map → chunk-Q7HPYV4S.js.map} +1 -1
- package/dist/{chunk-VBAFSMNX.js → chunk-QCQL3VC3.js} +3 -3
- package/dist/{chunk-VBAFSMNX.js.map → chunk-QCQL3VC3.js.map} +1 -1
- package/dist/{chunk-I5GFTVR2.js → chunk-QIUMRUJ5.js} +4 -4
- package/dist/{chunk-I5GFTVR2.js.map → chunk-QIUMRUJ5.js.map} +1 -1
- package/dist/{chunk-EAQAPYYU.js → chunk-QMNDHORN.js} +7 -7
- package/dist/{chunk-EAQAPYYU.js.map → chunk-QMNDHORN.js.map} +1 -1
- package/dist/{chunk-4SZNUX4K.js → chunk-R4UJHW2H.js} +12 -55
- package/dist/{chunk-4SZNUX4K.js.map → chunk-R4UJHW2H.js.map} +1 -1
- package/dist/{chunk-GMXNVBCD.js → chunk-RH6XA7QJ.js} +3 -199
- package/dist/chunk-RH6XA7QJ.js.map +1 -0
- package/dist/{chunk-LAO3MSKN.js → chunk-RMVFYTDC.js} +7 -7
- package/dist/{chunk-LAO3MSKN.js.map → chunk-RMVFYTDC.js.map} +1 -1
- package/dist/{chunk-LPF6YURL.js → chunk-RWFN2I3J.js} +3 -3
- package/dist/{chunk-LPF6YURL.js.map → chunk-RWFN2I3J.js.map} +1 -1
- package/dist/{chunk-XTBFIIAR.js → chunk-TRN7H7CZ.js} +4 -4
- package/dist/{chunk-XTBFIIAR.js.map → chunk-TRN7H7CZ.js.map} +1 -1
- package/dist/{chunk-ZBGMIDDO.js → chunk-UAKGSKKH.js} +3 -3
- package/dist/{chunk-ZBGMIDDO.js.map → chunk-UAKGSKKH.js.map} +1 -1
- package/dist/{chunk-BIVBSVWR.js → chunk-URRP27P2.js} +4 -4
- package/dist/{chunk-BIVBSVWR.js.map → chunk-URRP27P2.js.map} +1 -1
- package/dist/{chunk-OZRGUVHQ.js → chunk-VGQZAYNF.js} +4 -4
- package/dist/{chunk-OZRGUVHQ.js.map → chunk-VGQZAYNF.js.map} +1 -1
- package/dist/{chunk-CV32FSEL.js → chunk-VHMTDACW.js} +3 -3
- package/dist/{chunk-CV32FSEL.js.map → chunk-VHMTDACW.js.map} +1 -1
- package/dist/{chunk-MJQ3HFLJ.js → chunk-XF3WN735.js} +3 -3
- package/dist/{chunk-MJQ3HFLJ.js.map → chunk-XF3WN735.js.map} +1 -1
- package/dist/{chunk-UL2DRYH3.js → chunk-XZ7MW3NA.js} +3 -3
- package/dist/{chunk-UL2DRYH3.js.map → chunk-XZ7MW3NA.js.map} +1 -1
- package/dist/{chunk-AFFBCOH6.js → chunk-YAATFJA4.js} +3 -3
- package/dist/{chunk-AFFBCOH6.js.map → chunk-YAATFJA4.js.map} +1 -1
- package/dist/{chunk-UBRG55VM.js → chunk-Z77NK3LX.js} +4 -4
- package/dist/{chunk-UBRG55VM.js.map → chunk-Z77NK3LX.js.map} +1 -1
- package/dist/{chunk-URBOD4MX.js → chunk-ZDJ2RDWX.js} +3 -3
- package/dist/{chunk-URBOD4MX.js.map → chunk-ZDJ2RDWX.js.map} +1 -1
- package/dist/components/cart/index.js +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/drawer/index.js +13 -13
- package/dist/components/home/index.js +18 -18
- package/dist/components/layout/index.js +4 -4
- package/dist/components/product/index.js +15 -15
- package/dist/components/snippets/AppsSnippets.d.ts.map +1 -1
- package/dist/components/store/index.js +14 -14
- package/dist/dev/editor/index.js +1 -1
- package/dist/dev/index.js +1 -1
- package/dist/{document-class-XYBFXCE7.js → document-class-QIFOUN5P.js} +13 -13
- package/dist/{document-class-XYBFXCE7.js.map → document-class-QIFOUN5P.js.map} +1 -1
- package/dist/hooks/index.js +13 -13
- package/dist/hooks/useGtm.js +13 -13
- package/dist/hooks/useMoney.js +13 -13
- package/dist/hooks/useStore.js +13 -13
- package/dist/hooks/useUser.js +3 -3
- package/dist/index.js +13 -13
- package/dist/{navigation-QDTYXINL.js → navigation-HSPERBV5.js} +4 -4
- package/dist/{navigation-QDTYXINL.js.map → navigation-HSPERBV5.js.map} +1 -1
- package/dist/{navigation-SHFUWYCA.js → navigation-KOFZQVGC.js} +5 -5
- package/dist/{navigation-SHFUWYCA.js.map → navigation-KOFZQVGC.js.map} +1 -1
- package/dist/{not-found-IFD562WC.js → not-found-VIELUHH6.js} +16 -16
- package/dist/{not-found-IFD562WC.js.map → not-found-VIELUHH6.js.map} +1 -1
- package/dist/providers/index.js +13 -13
- package/dist/routes/account/orders.js +4 -4
- package/dist/routes/account.js +13 -13
- package/dist/routes/blog.js +8 -8
- package/dist/routes/brands.js +4 -4
- package/dist/routes/cart.js +22 -22
- package/dist/routes/home.js +19 -19
- package/dist/routes/index.js +3 -3
- package/dist/routes/loyalty.js +5 -5
- package/dist/routes/page.js +4 -4
- package/dist/routes/product-listing.js +23 -23
- package/dist/routes/product.js +18 -18
- package/dist/routes/seo-redirects.d.ts +12 -0
- package/dist/routes/seo-redirects.d.ts.map +1 -1
- package/dist/routes/seo-redirects.js +3 -3
- package/dist/routes/testimonials.js +2 -2
- package/dist/routes/thank-you.js +4 -4
- package/dist/skeleton.js +19 -19
- package/dist/{store-lookup-AJT3ZHTS.js → store-lookup-AENCM5RG.js} +8 -8
- package/dist/{store-lookup-AJT3ZHTS.js.map → store-lookup-AENCM5RG.js.map} +1 -1
- package/dist/tanstack/link.d.ts.map +1 -1
- package/dist/tanstack/router.d.ts.map +1 -1
- package/dist/tanstack/templates/locale-wrapper.d.ts.map +1 -1
- package/dist/tanstack.js +13 -13
- package/dist/utils/index.js +2 -2
- package/dist/vite/index.js +3 -1
- package/dist/vite/index.js.map +1 -1
- package/package.json +1 -1
- package/tailwind/components/snippets/AppsSnippets.tsx.txt +0 -4
- package/tailwind/routes/seo-redirects.ts.txt +52 -2
- package/dist/chunk-F5RU2UCE.js.map +0 -1
- package/dist/chunk-GMXNVBCD.js.map +0 -1
- package/dist/chunk-IO4CVUL5.js.map +0 -1
- package/dist/chunk-SIYINCXL.js +0 -41
- package/dist/chunk-SIYINCXL.js.map +0 -1
- package/dist/utils/snippet-page-compat.d.ts +0 -45
- package/dist/utils/snippet-page-compat.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/testimonials/TestimonialsPage.tsx"],"names":[],"mappings":"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","file":"TestimonialsPage-
|
|
1
|
+
{"version":3,"sources":["../src/routes/testimonials/TestimonialsPage.tsx"],"names":[],"mappings":"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","file":"TestimonialsPage-ZUMMAZPC.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport { SallaComments } from '@salla.sa/twilight-components-react/comments';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useComments } from '../../hooks/useComments';\nimport type { TestimonialsPageProps } from './types';\nimport { Breadcrumb } from '../../components/common';\n\nconst buildSortOptions = (t: (key: string, fb: string) => string) => [\n { id: 'latest', label: t('pages.testimonials.sort_by_date_desc', 'Latest') },\n { id: 'oldest', label: t('pages.testimonials.sort_by_date_asc', 'Oldest') },\n {\n id: 'top_rating',\n label: t('pages.testimonials.sort_by_rating_desc', 'Top rated'),\n },\n {\n id: 'bottom_rating',\n label: t('pages.testimonials.sort_by_rating_asc', 'Low rated'),\n },\n];\n\nexport function TestimonialsPage({ page }: TestimonialsPageProps) {\n const { t } = useTranslation();\n const { commentsKey } = useComments();\n\n // Sync sort state with URL\n const [selectedSort, setSelectedSort] = useState(() => {\n const params = new URLSearchParams(window.location.search);\n return params.get('sort') || 'latest';\n });\n\n // Update URL when sort changes\n useEffect(() => {\n const url = new URL(window.location.href);\n url.searchParams.set('sort', selectedSort);\n window.history.replaceState(null, '', url.toString());\n }, [selectedSort]);\n\n return (\n <div className=\"container\">\n <Breadcrumb page={page} />\n\n <div className=\"flex justify-center\">\n <div className=\"w-full lg:w-10/12 bg-white rounded p-6 lg:p-8 mt-4 lg:mt-12\">\n <div className=\"mb-4 sm:mb-6 flex justify-between items-center\">\n <h1 className=\"font-bold text-2xl\">{page.title}</h1>\n <div className=\"flex items-center\">\n <label\n className=\"hidden sm:block rtl:ml-3 ltr:mr-3 whitespace-nowrap\"\n htmlFor=\"testimonials-filter\"\n >\n {t('pages.categories.sorting', 'Sort by')}\n </label>\n <select\n id=\"testimonials-filter\"\n className=\"form-input pt-0 pb-1 rtl:pl-10 ltr:pr-10 bg-white text-gray-900\"\n value={selectedSort}\n onChange={(e) => setSelectedSort(e.target.value)}\n >\n {buildSortOptions(t).map((opt) => (\n <option key={opt.id} value={opt.id}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Key prop forces reload when sort changes or new comment added */}\n <SallaComments\n key={`${selectedSort}-${commentsKey}`}\n testimonials\n // drifted wrapper types require itemId; testimonials mode has none\n itemId={undefined as never}\n sort={selectedSort as any}\n />\n </div>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import { stripUnsafeHtml } from './chunk-RUHSV4Z6.js';
|
|
2
|
-
import { usePageConfig } from './chunk-
|
|
2
|
+
import { usePageConfig } from './chunk-6HLNVLTE.js';
|
|
3
3
|
import './chunk-Q77J3D2W.js';
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
4
|
+
import './chunk-LRWN2LX2.js';
|
|
5
|
+
import './chunk-QCQL3VC3.js';
|
|
6
|
+
import './chunk-RH6XA7QJ.js';
|
|
7
7
|
import './chunk-X55R4VVK.js';
|
|
8
8
|
import './chunk-YL6X3ZMG.js';
|
|
9
|
-
import './chunk-
|
|
9
|
+
import './chunk-XF3WN735.js';
|
|
10
10
|
import './chunk-OXMUPNMH.js';
|
|
11
|
-
import './chunk-
|
|
11
|
+
import './chunk-VHMTDACW.js';
|
|
12
12
|
import './chunk-VVZNW5CB.js';
|
|
13
13
|
import './chunk-VDPMCOHX.js';
|
|
14
14
|
import './chunk-GD26FI4J.js';
|
|
15
15
|
import './chunk-BRIRWS2Q.js';
|
|
16
16
|
import './chunk-M2MJKUQF.js';
|
|
17
|
-
import './chunk-
|
|
17
|
+
import './chunk-UAKGSKKH.js';
|
|
18
18
|
import './chunk-OUW6WESU.js';
|
|
19
19
|
import './chunk-PPUV27YN.js';
|
|
20
20
|
import './chunk-HI5V5X3S.js';
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
21
|
+
import './chunk-32DWNWHW.js';
|
|
22
|
+
import './chunk-6SL5AT2J.js';
|
|
23
23
|
import './chunk-6T55LXJL.js';
|
|
24
24
|
import './chunk-Z653O7MX.js';
|
|
25
25
|
import './chunk-ZCH7W7DZ.js';
|
|
@@ -30,16 +30,16 @@ import './chunk-7V36I5GT.js';
|
|
|
30
30
|
import './chunk-6WI7R2BD.js';
|
|
31
31
|
import './chunk-LFMCUQQ3.js';
|
|
32
32
|
import './chunk-OAMIDZKW.js';
|
|
33
|
-
import './chunk-
|
|
33
|
+
import './chunk-XZ7MW3NA.js';
|
|
34
34
|
import './chunk-OQIIJRAS.js';
|
|
35
35
|
import './chunk-V2ZDTY6H.js';
|
|
36
|
-
import './chunk-
|
|
36
|
+
import './chunk-ZDJ2RDWX.js';
|
|
37
37
|
import { useIsClient, HookSlot } from './chunk-5XDPAKF5.js';
|
|
38
38
|
import './chunk-GCPEMNSU.js';
|
|
39
|
-
import './chunk-
|
|
39
|
+
import './chunk-DMJXUQFM.js';
|
|
40
40
|
import './chunk-Z5M4YYWT.js';
|
|
41
41
|
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
42
|
-
import './chunk-
|
|
42
|
+
import './chunk-MM2VVKNO.js';
|
|
43
43
|
import './chunk-AXW67SY7.js';
|
|
44
44
|
import './chunk-BYMOPN2S.js';
|
|
45
45
|
import './chunk-SKLEJJ6M.js';
|
|
@@ -183,5 +183,5 @@ function ThankYouPage({
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
export { ThankYouPage };
|
|
186
|
-
//# sourceMappingURL=ThankYouPage-
|
|
187
|
-
//# sourceMappingURL=ThankYouPage-
|
|
186
|
+
//# sourceMappingURL=ThankYouPage-NZ6FATU5.js.map
|
|
187
|
+
//# sourceMappingURL=ThankYouPage-NZ6FATU5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/thank-you/ThankYouPage.tsx"],"names":[],"mappings":"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","file":"ThankYouPage-
|
|
1
|
+
{"version":3,"sources":["../src/routes/thank-you/ThankYouPage.tsx"],"names":[],"mappings":"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","file":"ThankYouPage-NZ6FATU5.js","sourcesContent":["import { useMemo } from 'react';\nimport { HookSlot, useIsClient, usePageConfig } from '../../hooks';\nimport type { ThankYouPageProps } from './types';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { stripUnsafeHtml } from '../../utils/sanitize';\n\nconst EMPTY_MESSAGES: NonNullable<ThankYouPageProps['messages']> = [];\nconst ICON_FONT_URL = 'https://cdn.salla.network/fonts/hugeicons-font.css';\n\n/** The order confirmation page, built like Twig Raed's from the Twilight thank-you components. */\nexport function ThankYouPage({\n page,\n order,\n thank_you_title,\n messages = EMPTY_MESSAGES,\n instructions,\n items,\n is_pickable,\n created_at,\n loyalty_points = 0,\n loyalty_url,\n cashback,\n wallet_url,\n}: ThankYouPageProps) {\n const { store } = useTwilight();\n const { t } = useTranslation();\n // The order components read the order id from `salla.config.page.id`.\n usePageConfig(page);\n // The components rewrite their light DOM once the SDK loads, which can come before hydration.\n const isClient = useIsClient();\n const heading =\n thank_you_title ?? t('pages.thank_you.hero_title', 'Thank you for shopping with us! 😊');\n const currency = order?.currency;\n const itemsJson = useMemo(() => JSON.stringify(items ?? []), [items]);\n const discountsJson = useMemo(() => {\n const discounts = order?.amounts.discounts ?? [];\n return discounts.length\n ? JSON.stringify(discounts.map(({ title, discount }) => ({ name: title, discount })))\n : undefined;\n }, [order]);\n const amounts = order?.amounts;\n const showRewards = loyalty_points > 0 || !!cashback;\n\n return (\n <>\n <link rel=\"stylesheet\" href={ICON_FONT_URL} />\n\n <HookSlot name=\"thank-you:start\" />\n\n <div className=\"container\">\n {isClient && (\n <salla-thank-you-page className=\"thank-you-content\">\n <div slot=\"main\">\n <salla-thank-you-header\n heading={heading}\n subtitle={t('pages.thank_you.order_received', 'Your order has been received')}\n store-logo={store.logo || ''}\n store-name={store.name}\n reference-id={order ? String(order.reference_id) : undefined}\n created-at={created_at}\n >\n {instructions && (\n <article className=\"article article--main article--small text-center\">\n <p\n // nosemgrep: the store's own order message, with unsafe markup stripped\n dangerouslySetInnerHTML={{ __html: stripUnsafeHtml(instructions) }}\n />\n </article>\n )}\n {messages.map((message) => (\n <span key={message} className=\"font-bold\">\n {message}\n </span>\n ))}\n </salla-thank-you-header>\n\n <HookSlot name=\"thank-you:items.start\" />\n {order &&\n (is_pickable ? (\n <salla-order-branch\n data-testid=\"store-thankyou-branch\"\n items={itemsJson}\n currency={currency}\n sticky-cta\n />\n ) : (\n <salla-order-shipments\n data-testid=\"store-thankyou-shipments\"\n order-id={String(order.id)}\n items={itemsJson}\n currency={currency}\n sticky-cta\n />\n ))}\n <HookSlot name=\"thank-you:items.end\" />\n\n {order && amounts && (\n <salla-order-payment\n data-testid=\"store-thankyou-payment\"\n payment-method={order.payment?.method}\n currency={currency}\n payment-logo={\n order.payment?.method\n ? `https://cdn.salla.network/images/payment/${order.payment.method}_mini.png`\n : undefined\n }\n sub-total={amounts.sub_total.amount}\n total={amounts.total.amount}\n tax-amount={amounts.tax?.amount.amount}\n shipping-cost={amounts.shipping_cost?.amount}\n cod-cost={amounts.cash_on_delivery?.amount}\n discounts={discountsJson}\n invoice-url={order.urls.print}\n />\n )}\n </div>\n\n <HookSlot name=\"thank-you:payment.end\" />\n\n {showRewards && (\n <salla-order-rewards\n data-testid=\"store-thankyou-rewards\"\n {...(loyalty_points > 0\n ? { 'loyalty-points': loyalty_points, 'loyalty-url': loyalty_url }\n : {})}\n {...(cashback\n ? {\n 'cashback-amount': cashback.amount,\n currency: cashback.currency,\n 'cashback-url': wallet_url,\n }\n : {})}\n />\n )}\n\n <salla-next-order-coupon data-testid=\"store-thankyou-coupon\" />\n\n <salla-contacts\n data-testid=\"store-thankyou-contacts\"\n introduction={t(\n 'pages.thank_you.contact_us',\n 'Got a question? We are happy to hear from you'\n )}\n hide-title\n horizontal\n icons-only\n />\n\n <HookSlot name=\"thank-you:end\" />\n </salla-thank-you-page>\n )}\n </div>\n </>\n );\n}\n"]}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { wallet } from './chunk-
|
|
2
|
-
import { useMoney } from './chunk-
|
|
1
|
+
import { wallet } from './chunk-RWFN2I3J.js';
|
|
2
|
+
import { useMoney } from './chunk-6HLNVLTE.js';
|
|
3
3
|
import './chunk-Q77J3D2W.js';
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
4
|
+
import './chunk-LRWN2LX2.js';
|
|
5
|
+
import './chunk-QCQL3VC3.js';
|
|
6
|
+
import './chunk-RH6XA7QJ.js';
|
|
7
7
|
import './chunk-X55R4VVK.js';
|
|
8
8
|
import './chunk-YL6X3ZMG.js';
|
|
9
|
-
import './chunk-
|
|
9
|
+
import './chunk-XF3WN735.js';
|
|
10
10
|
import './chunk-OXMUPNMH.js';
|
|
11
|
-
import './chunk-
|
|
11
|
+
import './chunk-VHMTDACW.js';
|
|
12
12
|
import './chunk-VVZNW5CB.js';
|
|
13
13
|
import './chunk-VDPMCOHX.js';
|
|
14
14
|
import './chunk-GD26FI4J.js';
|
|
15
15
|
import './chunk-BRIRWS2Q.js';
|
|
16
16
|
import './chunk-M2MJKUQF.js';
|
|
17
|
-
import './chunk-
|
|
17
|
+
import './chunk-UAKGSKKH.js';
|
|
18
18
|
import './chunk-OUW6WESU.js';
|
|
19
19
|
import './chunk-PPUV27YN.js';
|
|
20
20
|
import './chunk-HI5V5X3S.js';
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
21
|
+
import './chunk-32DWNWHW.js';
|
|
22
|
+
import './chunk-6SL5AT2J.js';
|
|
23
23
|
import './chunk-6T55LXJL.js';
|
|
24
24
|
import './chunk-Z653O7MX.js';
|
|
25
25
|
import './chunk-ZCH7W7DZ.js';
|
|
@@ -30,16 +30,16 @@ import './chunk-7V36I5GT.js';
|
|
|
30
30
|
import './chunk-6WI7R2BD.js';
|
|
31
31
|
import './chunk-LFMCUQQ3.js';
|
|
32
32
|
import './chunk-OAMIDZKW.js';
|
|
33
|
-
import './chunk-
|
|
33
|
+
import './chunk-XZ7MW3NA.js';
|
|
34
34
|
import './chunk-OQIIJRAS.js';
|
|
35
35
|
import './chunk-V2ZDTY6H.js';
|
|
36
|
-
import './chunk-
|
|
36
|
+
import './chunk-ZDJ2RDWX.js';
|
|
37
37
|
import { HookSlot } from './chunk-5XDPAKF5.js';
|
|
38
38
|
import './chunk-GCPEMNSU.js';
|
|
39
|
-
import './chunk-
|
|
39
|
+
import './chunk-DMJXUQFM.js';
|
|
40
40
|
import './chunk-Z5M4YYWT.js';
|
|
41
41
|
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
42
|
-
import { LazyNoContent } from './chunk-
|
|
42
|
+
import { LazyNoContent } from './chunk-MM2VVKNO.js';
|
|
43
43
|
import './chunk-AXW67SY7.js';
|
|
44
44
|
import './chunk-BYMOPN2S.js';
|
|
45
45
|
import './chunk-SKLEJJ6M.js';
|
|
@@ -205,5 +205,5 @@ function WalletPage({ query, transactions, balance, pagination }) {
|
|
|
205
205
|
}
|
|
206
206
|
|
|
207
207
|
export { WalletPage };
|
|
208
|
-
//# sourceMappingURL=WalletPage-
|
|
209
|
-
//# sourceMappingURL=WalletPage-
|
|
208
|
+
//# sourceMappingURL=WalletPage-S6SQOUM3.js.map
|
|
209
|
+
//# sourceMappingURL=WalletPage-S6SQOUM3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/account/wallet/WalletPage.tsx"],"names":["TransactionRow"],"mappings":"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","file":"WalletPage-74LAUONG.js","sourcesContent":["import { memo, useCallback, useRef } from 'react';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { wallet } from '../../../api/wallet';\nimport type { TransactionItem } from '../../../api/wallet';\nimport { HookSlot, useMoney } from '../../../hooks';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport type { WalletPageProps } from './types';\nimport { NoContent } from '../../../components/common';\n\nconst TransactionRow = memo(function TransactionRow({\n transaction,\n}: {\n transaction: TransactionItem;\n}) {\n const { t, locale } = useTranslation();\n const { format: formatMoney } = useMoney();\n\n const formatTimestamp = (ts: number) => {\n if (!ts) return '';\n return new Date(ts * 1000).toLocaleDateString(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n });\n };\n\n const actionTypeClass =\n transaction.action_type === 'cashback'\n ? 's-wallet-table-transaction-status-cashback'\n : transaction.action_type === 'refund'\n ? 's-wallet-table-transaction-status-refund'\n : transaction.action_type === 'purchase_by_wallet'\n ? 's-wallet-table-transaction-status-purchase'\n : '';\n\n return (\n <tr className=\"s-wallet-table-tbody-tr s-wallet-table-tbody-tr-shadow animated\">\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.transaction_number')}:</span>\n {transaction.id && <span className=\"hidden md:inline-block\">#{transaction.id}</span>}\n <div className=\"flex items-center md:hidden\">\n {transaction.id && <span>#{transaction.id}</span>}\n </div>\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.amount')}:</span>\n <div>{formatMoney(transaction.amount, { type: 'general' })}</div>\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.date')}:</span>\n {transaction.created_at ? formatTimestamp(transaction.created_at) : ''}\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.order_no')}:</span>\n <span className=\"rtl:mr-auto ltr:ml-auto md:mx-0\">\n {transaction.order_id && <span>#{transaction.order_id}</span>}\n </span>\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.expiry_date')}:</span>\n <span>{transaction.expired_at ? formatTimestamp(transaction.expired_at) : ''}</span>\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <div>\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.transaction_type')}:</span>\n </div>\n <div className={`s-wallet-table-transaction-status-default ${actionTypeClass}`}>\n {!!transaction.description && (\n <>\n <i\n id={transaction.id.toString()}\n className=\"sicon-information text-lg rtl:ml-4 ltr:mr-4 s-wallet-table-transaction-status-icon-success\"\n />\n <salla-tooltip\n text={transaction.description}\n targetId={transaction.id.toString()}\n />\n </>\n )}\n <span>{transaction.title}</span>\n </div>\n </div>\n </td>\n </tr>\n );\n});\n\nexport function WalletPage({ query, transactions, balance, pagination }: WalletPageProps) {\n const { t } = useTranslation();\n\n const { format: formatMoney } = useMoney();\n\n const nextPageRef = useRef(query.page + 1);\n\n const loader = useCallback(async () => {\n const pageToLoad = nextPageRef.current;\n const result = await wallet.list({ page: pageToLoad });\n\n nextPageRef.current = pageToLoad + 1;\n\n return {\n items: result.items,\n next: result.next,\n };\n }, []);\n\n if (transactions.length === 0) {\n return (\n <>\n <HookSlot name=\"customer:wallet.transactions.start\" />\n <NoContent icon=\"sicon-full-wallet\" message={`${t('pages.wallet.no_transactions')}`} />\n <HookSlot name=\"customer:wallet.transactions.end\" />\n </>\n );\n }\n\n return (\n <>\n <HookSlot name=\"customer:wallet.transactions.start\" />\n <table className=\"s-wallet-table\">\n <tbody className=\"s-wallet-table-tbody\">\n <tr className=\"s-table__tr\">\n <td>\n <div className=\"s-wallet-table-balance-container\">\n <i className=\"s-wallet-table-balance-icon sicon-wallet\" />\n <div>\n <div>{formatMoney(balance, { type: 'general' })}</div>\n <div className=\"font-normal text-gray-400\">{t('pages.wallet.balance')}</div>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <h2 className=\"mt-8\">{t('pages.wallet.title')}</h2>\n <table className=\"s-wallet-table\">\n <thead className=\"s-wallet-table-head\">\n <tr className=\"s-wallet-table-head-tr\">\n <th scope=\"col\">{t('pages.wallet.transaction_number')}</th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.amount')}\n </th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.date')}\n </th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.order_no')}\n </th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.expiry_date')}\n </th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.transaction_type')}\n </th>\n </tr>\n </thead>\n <tbody className=\"s-wallet-table-tbody\">\n <ItemsList<TransactionItem>\n items={transactions}\n loader={loader}\n mode={pagination.next ? 'infinite' : 'static'}\n itemsAs=\"Fragment\"\n t={(key, fallback) => t(key, fallback || key)}\n >\n {(items) =>\n items.map((transaction) => (\n <TransactionRow key={transaction.id} transaction={transaction} />\n ))\n }\n </ItemsList>\n </tbody>\n </table>\n <HookSlot name=\"customer:wallet.transactions.end\" />\n </>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/routes/account/wallet/WalletPage.tsx"],"names":["TransactionRow"],"mappings":"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","file":"WalletPage-S6SQOUM3.js","sourcesContent":["import { memo, useCallback, useRef } from 'react';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { wallet } from '../../../api/wallet';\nimport type { TransactionItem } from '../../../api/wallet';\nimport { HookSlot, useMoney } from '../../../hooks';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport type { WalletPageProps } from './types';\nimport { NoContent } from '../../../components/common';\n\nconst TransactionRow = memo(function TransactionRow({\n transaction,\n}: {\n transaction: TransactionItem;\n}) {\n const { t, locale } = useTranslation();\n const { format: formatMoney } = useMoney();\n\n const formatTimestamp = (ts: number) => {\n if (!ts) return '';\n return new Date(ts * 1000).toLocaleDateString(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n });\n };\n\n const actionTypeClass =\n transaction.action_type === 'cashback'\n ? 's-wallet-table-transaction-status-cashback'\n : transaction.action_type === 'refund'\n ? 's-wallet-table-transaction-status-refund'\n : transaction.action_type === 'purchase_by_wallet'\n ? 's-wallet-table-transaction-status-purchase'\n : '';\n\n return (\n <tr className=\"s-wallet-table-tbody-tr s-wallet-table-tbody-tr-shadow animated\">\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.transaction_number')}:</span>\n {transaction.id && <span className=\"hidden md:inline-block\">#{transaction.id}</span>}\n <div className=\"flex items-center md:hidden\">\n {transaction.id && <span>#{transaction.id}</span>}\n </div>\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.amount')}:</span>\n <div>{formatMoney(transaction.amount, { type: 'general' })}</div>\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.date')}:</span>\n {transaction.created_at ? formatTimestamp(transaction.created_at) : ''}\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.order_no')}:</span>\n <span className=\"rtl:mr-auto ltr:ml-auto md:mx-0\">\n {transaction.order_id && <span>#{transaction.order_id}</span>}\n </span>\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.expiry_date')}:</span>\n <span>{transaction.expired_at ? formatTimestamp(transaction.expired_at) : ''}</span>\n </div>\n </td>\n\n <td className=\"s-wallet-table-tbody-tr-td\">\n <div className=\"s-wallet-table-tbody-tr-td-content\">\n <div>\n <span className=\"s-wallet-mobile-title\">{t('pages.wallet.transaction_type')}:</span>\n </div>\n <div className={`s-wallet-table-transaction-status-default ${actionTypeClass}`}>\n {!!transaction.description && (\n <>\n <i\n id={transaction.id.toString()}\n className=\"sicon-information text-lg rtl:ml-4 ltr:mr-4 s-wallet-table-transaction-status-icon-success\"\n />\n <salla-tooltip\n text={transaction.description}\n targetId={transaction.id.toString()}\n />\n </>\n )}\n <span>{transaction.title}</span>\n </div>\n </div>\n </td>\n </tr>\n );\n});\n\nexport function WalletPage({ query, transactions, balance, pagination }: WalletPageProps) {\n const { t } = useTranslation();\n\n const { format: formatMoney } = useMoney();\n\n const nextPageRef = useRef(query.page + 1);\n\n const loader = useCallback(async () => {\n const pageToLoad = nextPageRef.current;\n const result = await wallet.list({ page: pageToLoad });\n\n nextPageRef.current = pageToLoad + 1;\n\n return {\n items: result.items,\n next: result.next,\n };\n }, []);\n\n if (transactions.length === 0) {\n return (\n <>\n <HookSlot name=\"customer:wallet.transactions.start\" />\n <NoContent icon=\"sicon-full-wallet\" message={`${t('pages.wallet.no_transactions')}`} />\n <HookSlot name=\"customer:wallet.transactions.end\" />\n </>\n );\n }\n\n return (\n <>\n <HookSlot name=\"customer:wallet.transactions.start\" />\n <table className=\"s-wallet-table\">\n <tbody className=\"s-wallet-table-tbody\">\n <tr className=\"s-table__tr\">\n <td>\n <div className=\"s-wallet-table-balance-container\">\n <i className=\"s-wallet-table-balance-icon sicon-wallet\" />\n <div>\n <div>{formatMoney(balance, { type: 'general' })}</div>\n <div className=\"font-normal text-gray-400\">{t('pages.wallet.balance')}</div>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n <h2 className=\"mt-8\">{t('pages.wallet.title')}</h2>\n <table className=\"s-wallet-table\">\n <thead className=\"s-wallet-table-head\">\n <tr className=\"s-wallet-table-head-tr\">\n <th scope=\"col\">{t('pages.wallet.transaction_number')}</th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.amount')}\n </th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.date')}\n </th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.order_no')}\n </th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.expiry_date')}\n </th>\n <th scope=\"col\" className=\"s-wallet-table-head-tr-th\">\n {t('pages.wallet.transaction_type')}\n </th>\n </tr>\n </thead>\n <tbody className=\"s-wallet-table-tbody\">\n <ItemsList<TransactionItem>\n items={transactions}\n loader={loader}\n mode={pagination.next ? 'infinite' : 'static'}\n itemsAs=\"Fragment\"\n t={(key, fallback) => t(key, fallback || key)}\n >\n {(items) =>\n items.map((transaction) => (\n <TransactionRow key={transaction.id} transaction={transaction} />\n ))\n }\n </ItemsList>\n </tbody>\n </table>\n <HookSlot name=\"customer:wallet.transactions.end\" />\n </>\n );\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { product } from './chunk-
|
|
1
|
+
import { product } from './chunk-HHFZIWUU.js';
|
|
2
2
|
import { getModelContext } from './chunk-Q77J3D2W.js';
|
|
3
3
|
import { storePageUrl } from './chunk-M2MJKUQF.js';
|
|
4
|
-
import { useNavigate, resolveRelativePath, defaultNavigate } from './chunk-
|
|
4
|
+
import { useNavigate, resolveRelativePath, defaultNavigate } from './chunk-UAKGSKKH.js';
|
|
5
5
|
import './chunk-OUW6WESU.js';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-DMJXUQFM.js';
|
|
7
7
|
import './chunk-Z5M4YYWT.js';
|
|
8
8
|
import './chunk-IURXJAIK.js';
|
|
9
9
|
import { whenSallaReady } from './chunk-7IVHY4OR.js';
|
|
@@ -400,5 +400,5 @@ function WebMcpTools() {
|
|
|
400
400
|
}
|
|
401
401
|
|
|
402
402
|
export { WebMcpTools as default };
|
|
403
|
-
//# sourceMappingURL=WebMcpTools-
|
|
404
|
-
//# sourceMappingURL=WebMcpTools-
|
|
403
|
+
//# sourceMappingURL=WebMcpTools-J5PK7P6Y.js.map
|
|
404
|
+
//# sourceMappingURL=WebMcpTools-J5PK7P6Y.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/webmcp/page-navigation.ts","../src/webmcp/input.ts","../src/webmcp/results.ts","../src/webmcp/schema.ts","../src/webmcp/cart-tools.ts","../src/webmcp/catalog-tools.ts","../src/webmcp/page-tools.ts","../src/webmcp/tools.ts","../src/webmcp/registerWebMcpTools.ts","../src/webmcp/salla-deps.ts","../src/webmcp/useWebMcpTools.ts","../src/webmcp/WebMcpTools.tsx"],"names":["product"],"mappings":"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","file":"WebMcpTools-J6HCO5B6.js","sourcesContent":["import { defaultNavigate, resolveRelativePath } from '../providers/NavigationProvider';\nimport { getTwilightContext, hasTwilightSettings } from '../twilight/context';\nimport { storePageUrl } from '../utils/baseHead';\n\ntype Navigate = (to: string) => void;\n\nconst isAbsolute = (to: string): boolean => /^[a-z][a-z\\d+.-]*:/i.test(to);\n\nfunction currentSettings() {\n return hasTwilightSettings() ? getTwilightContext().settings : undefined;\n}\n\n/**\n * Make `navigate` safe to call with either a store-relative path (`/cart`) or the\n * absolute URL the API gives a product (`https://shop.example/ar/oud/p7`).\n *\n * - The TanStack router's navigate takes the router's own paths and would append an\n * absolute URL to the current page (`/ar/cart/https:/shop…`). A same-store URL is\n * turned into its store-relative path, as the engine's link interception does; one\n * that cannot be (another origin) loads as a normal page.\n * - The default navigate (`client={false}`, the Next.js adapter) assigns\n * `window.location`, where `/cart` is the host's cart: on a shared host that is\n * another store's page, because stores live under their username. A path becomes\n * the store's own address; an absolute URL is already one.\n */\nexport function withStoreAddress(navigate: Navigate): Navigate {\n const usesWindowLocation = navigate === defaultNavigate;\n\n return (to) => {\n const settings = currentSettings();\n\n if (usesWindowLocation) {\n return navigate(isAbsolute(to) ? to : (storePageUrl(settings, to) ?? to));\n }\n if (!isAbsolute(to)) return navigate(to);\n\n const store = settings?.store;\n const path = store?.url ? resolveRelativePath(to, store.url, store.username) : null;\n return path ? navigate(path) : defaultNavigate(to);\n };\n}\n","/**\n * Input parsing for the tools. The JSON schema is only a hint to the model, so\n * every handler re-checks here and returns a message the agent can correct from.\n */\n\nexport type Parsed<T> = { ok: true; value: T } | { ok: false; error: string };\n\nconst ok = <T>(value: T): Parsed<T> => ({ ok: true, value });\nconst fail = (error: string): Parsed<never> => ({ ok: false, error });\n\n/** A positive whole number from a number or numeric string. */\nexport function parsePositiveInt(raw: unknown, field: string): Parsed<number> {\n const value = typeof raw === 'string' && raw.trim() !== '' ? Number(raw) : raw;\n if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {\n return fail(`\"${field}\" must be a positive whole number.`);\n }\n return ok(value);\n}\n\nexport function parseQuantity(raw: unknown): Parsed<number> {\n return raw === undefined ? ok(1) : parsePositiveInt(raw, 'quantity');\n}\n\nexport function parseId(raw: unknown, field: string): Parsed<string> {\n const value = typeof raw === 'number' ? String(raw) : raw;\n if (typeof value !== 'string' || value.trim() === '') {\n return fail(`\"${field}\" is required. Get it from get-cart.`);\n }\n return ok(value.trim());\n}\n\nexport function parseKeyword(raw: unknown): Parsed<string> {\n if (typeof raw !== 'string' || raw.trim() === '') {\n return fail('\"keyword\" is required: the words to search the catalog for.');\n }\n return ok(raw.trim());\n}\n\nexport const SEARCH_LIMIT_DEFAULT = 5;\nexport const SEARCH_LIMIT_MAX = 10;\n\nexport function parseLimit(raw: unknown): number {\n if (typeof raw !== 'number' || !Number.isFinite(raw)) return SEARCH_LIMIT_DEFAULT;\n return Math.min(SEARCH_LIMIT_MAX, Math.max(1, Math.trunc(raw)));\n}\n","import type { WebMcpToolResult } from './types';\n\n/** A successful result: the payload as JSON text, which is what agents read best. */\nexport function jsonResult(payload: unknown): WebMcpToolResult {\n return { content: [{ type: 'text', text: JSON.stringify(payload) }] };\n}\n\n/** A failed result with a message the agent can act on. Handlers never throw. */\nexport function errorResult(message: string): WebMcpToolResult {\n return { content: [{ type: 'text', text: message }], isError: true };\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error && error.message ? error.message : 'Unknown error';\n}\n\n/** Run `action`, turning anything it throws into an error result. */\nexport async function guarded(\n label: string,\n action: () => Promise<WebMcpToolResult>\n): Promise<WebMcpToolResult> {\n try {\n return await action();\n } catch (error) {\n return errorResult(`${label} failed: ${errorMessage(error)}`);\n }\n}\n","/** JSON Schema pieces shared by several tools. */\n\nexport const PRODUCT_ID_SCHEMA = {\n type: 'number',\n description: 'Product id, from search-products.',\n} as const;\n\nexport const ITEM_ID_SCHEMA = {\n type: 'string',\n description: 'Cart line id (the \"id\" of an item in get-cart), not the product id.',\n} as const;\n\nexport const QUANTITY_SCHEMA = {\n type: 'number',\n description: 'Whole number of units. Defaults to 1.',\n} as const;\n","import { parseId, parsePositiveInt, parseQuantity } from './input';\nimport { errorResult, guarded, jsonResult } from './results';\nimport { ITEM_ID_SCHEMA, PRODUCT_ID_SCHEMA, QUANTITY_SCHEMA } from './schema';\nimport type { WebMcpDeps, WebMcpTool } from './types';\n\nfunction getCartTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'get-cart',\n description:\n \"Read the shopper's current cart: items (with the line ids needed to change them), count and total. The cart is null when it is empty.\",\n inputSchema: { type: 'object', properties: {} },\n execute: () =>\n guarded('Reading the cart', async () => jsonResult({ cart: await deps.getCart() })),\n };\n}\n\nfunction addToCartTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'add-to-cart',\n description:\n \"Add a product to the shopper's cart and return the updated cart. Only works for products with no required options; for those, use open-page to send the shopper to the product page. Does not check out.\",\n inputSchema: {\n type: 'object',\n properties: { productId: PRODUCT_ID_SCHEMA, quantity: QUANTITY_SCHEMA },\n required: ['productId'],\n },\n execute: (input) =>\n guarded('Adding to the cart', async () => {\n const id = parsePositiveInt(input.productId, 'productId');\n if (!id.ok) return errorResult(id.error);\n const quantity = parseQuantity(input.quantity);\n if (!quantity.ok) return errorResult(quantity.error);\n\n const product = await deps.getProduct(id.value);\n if (!product.inStock) {\n return errorResult(`\"${product.name}\" is out of stock or unavailable.`);\n }\n if (product.needsProductPage === true) {\n return errorResult(\n `\"${product.name}\" needs choices made first (options, a variant, an amount…). Use open-page with page \"product\" and productId ${product.id} (${product.url}) so the shopper can pick them.`\n );\n }\n return jsonResult({ cart: await deps.addToCart(id.value, quantity.value) });\n }),\n };\n}\n\nfunction updateCartItemTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'update-cart-item',\n description:\n 'Change the quantity of a line already in the cart (use get-cart for the line id). Returns the updated cart.',\n inputSchema: {\n type: 'object',\n properties: {\n itemId: ITEM_ID_SCHEMA,\n quantity: { ...QUANTITY_SCHEMA, description: 'New quantity.' },\n },\n required: ['itemId', 'quantity'],\n },\n execute: (input) =>\n guarded('Updating the cart', async () => {\n const itemId = parseId(input.itemId, 'itemId');\n if (!itemId.ok) return errorResult(itemId.error);\n const quantity = parsePositiveInt(input.quantity, 'quantity');\n if (!quantity.ok) return errorResult(quantity.error);\n return jsonResult({ cart: await deps.updateCartItem(itemId.value, quantity.value) });\n }),\n };\n}\n\nfunction removeCartItemTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'remove-cart-item',\n description:\n 'Remove a line from the cart (use get-cart for the line id). Returns the updated cart.',\n inputSchema: {\n type: 'object',\n properties: { itemId: ITEM_ID_SCHEMA },\n required: ['itemId'],\n },\n execute: (input) =>\n guarded('Removing from the cart', async () => {\n const itemId = parseId(input.itemId, 'itemId');\n if (!itemId.ok) return errorResult(itemId.error);\n return jsonResult({ cart: await deps.removeCartItem(itemId.value) });\n }),\n };\n}\n\nexport function createCartTools(deps: WebMcpDeps): WebMcpTool[] {\n return [\n getCartTool(deps),\n addToCartTool(deps),\n updateCartItemTool(deps),\n removeCartItemTool(deps),\n ];\n}\n","import { parseKeyword, parseLimit, parsePositiveInt, SEARCH_LIMIT_MAX } from './input';\nimport { errorResult, guarded, jsonResult } from './results';\nimport { PRODUCT_ID_SCHEMA } from './schema';\nimport type { WebMcpDeps, WebMcpTool } from './types';\n\nfunction searchProductsTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'search-products',\n description:\n \"Search this store's catalog by keyword. Returns up to a few matching products with id, name, price, stock and page URL. Use it to find a product before reading details or adding it to the cart.\",\n inputSchema: {\n type: 'object',\n properties: {\n keyword: { type: 'string', description: 'Words to search for, e.g. \"oud perfume\".' },\n limit: {\n type: 'number',\n description: `How many products to return (1-${SEARCH_LIMIT_MAX}). Defaults to 5.`,\n },\n },\n required: ['keyword'],\n },\n execute: (input) =>\n guarded('Product search', async () => {\n const keyword = parseKeyword(input.keyword);\n if (!keyword.ok) return errorResult(keyword.error);\n const products = await deps.searchProducts(keyword.value, parseLimit(input.limit));\n return jsonResult({ products });\n }),\n };\n}\n\nfunction getProductTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'get-product',\n description:\n 'Get one product by id: price, sale state, stock, and whether the shopper must pick options (size, color…) on the product page first.',\n inputSchema: {\n type: 'object',\n properties: { productId: PRODUCT_ID_SCHEMA },\n required: ['productId'],\n },\n execute: (input) =>\n guarded('Loading the product', async () => {\n const id = parsePositiveInt(input.productId, 'productId');\n if (!id.ok) return errorResult(id.error);\n return jsonResult({ product: await deps.getProduct(id.value) });\n }),\n };\n}\n\nexport function createCatalogTools(deps: WebMcpDeps): WebMcpTool[] {\n return [searchProductsTool(deps), getProductTool(deps)];\n}\n","import { parsePositiveInt } from './input';\nimport { errorResult, guarded, jsonResult } from './results';\nimport { PRODUCT_ID_SCHEMA } from './schema';\nimport type { WebMcpDeps, WebMcpTool } from './types';\n\nfunction openPageTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'open-page',\n description:\n 'Navigate the shopper\\'s visible page to the cart, the home page, or a product page. Use \"cart\" to let the shopper review and check out themselves; checkout is never done by a tool.',\n inputSchema: {\n type: 'object',\n properties: {\n page: { type: 'string', enum: ['cart', 'home', 'product'] },\n productId: { ...PRODUCT_ID_SCHEMA, description: 'Required when page is \"product\".' },\n },\n required: ['page'],\n },\n execute: (input) =>\n guarded('Opening the page', async () => {\n if (input.page === 'cart') {\n deps.openPage('/cart');\n return jsonResult({ opened: 'cart' });\n }\n if (input.page === 'home') {\n deps.openPage('/');\n return jsonResult({ opened: 'home' });\n }\n if (input.page === 'product') {\n const id = parsePositiveInt(input.productId, 'productId');\n if (!id.ok) return errorResult(id.error);\n const product = await deps.getProduct(id.value);\n deps.openPage(product.url);\n return jsonResult({ opened: product.url });\n }\n return errorResult('\"page\" must be one of: cart, home, product.');\n }),\n };\n}\n\nexport function createPageTools(deps: WebMcpDeps): WebMcpTool[] {\n return [openPageTool(deps)];\n}\n","import { createCartTools } from './cart-tools';\nimport { createCatalogTools } from './catalog-tools';\nimport { createPageTools } from './page-tools';\nimport type { WebMcpDeps, WebMcpTool } from './types';\n\n/**\n * The storefront tools. Deliberately small — every tool costs the agent context\n * (see the spec's \"tool budget\") — and none of them places an order or pays: the\n * shopper finishes checkout on the page.\n */\nexport function createWebMcpTools(deps: WebMcpDeps): WebMcpTool[] {\n return [...createCatalogTools(deps), ...createCartTools(deps), ...createPageTools(deps)];\n}\n","import { getModelContext } from './model-context';\nimport { createWebMcpTools } from './tools';\nimport type { WebMcpDeps } from './types';\n\nconst NOT_ALLOWED = 'NotAllowedError';\n\nfunction reportRegistrationFailure(toolName: string, error: unknown): void {\n // The page's Permissions-Policy (or an iframe without `allow`) can switch tools\n // off. That is a choice, not a fault, so it stays quiet.\n if (error instanceof DOMException && error.name === NOT_ALLOWED) return;\n console.warn('[twilight] WebMCP could not register tool:', toolName, error);\n}\n\n/**\n * Register the storefront tools with the browser's WebMCP, if it has one.\n *\n * A no-op everywhere else. Returns a dispose that unregisters every tool (they\n * share one `AbortSignal`, which is how the spec unregisters a tool).\n */\nexport function registerWebMcpTools(deps: WebMcpDeps): () => void {\n const modelContext = getModelContext();\n if (!modelContext) return () => {};\n\n const controller = new AbortController();\n for (const tool of createWebMcpTools(deps)) {\n try {\n Promise.resolve(modelContext.registerTool(tool, { signal: controller.signal })).catch(\n (error: unknown) => reportRegistrationFailure(tool.name, error)\n );\n } catch (error) {\n reportRegistrationFailure(tool.name, error);\n }\n }\n return () => controller.abort();\n}\n","import { product as productApi } from '../api/product';\nimport type { Money, Product } from '../types';\nimport type { SallaCartDetailsData, SallaSDK } from '../types/salla-sdk';\nimport { whenSallaReady } from '../utils/sdk-helpers';\nimport type { WebMcpCartSummary, WebMcpDeps, WebMcpProductSummary } from './types';\n\n/** How long a tool waits for the Salla SDK before telling the agent to retry. */\nconst SDK_WAIT_MS = 8_000;\n\n/** Product types a plain \"add one\" call can buy; the rest need input from the shopper. */\nconst SIMPLE_TYPES: ReadonlySet<string> = new Set(['product', 'digital']);\n\nfunction sdkReady(): Promise<SallaSDK> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n cancel();\n reject(new Error('The store is not ready yet. Try again in a moment.'));\n }, SDK_WAIT_MS);\n const cancel = whenSallaReady((sdk) => {\n clearTimeout(timer);\n resolve(sdk);\n });\n });\n}\n\n/** Prices arrive as numbers, `{ amount }` objects or formatted text (\"1,200.50 SAR\"). */\nfunction toAmount(value: unknown): number {\n if (typeof value === 'number') return value;\n if (value && typeof value === 'object' && 'amount' in value) {\n return toAmount((value as Money).amount);\n }\n if (typeof value === 'string') {\n const parsed = Number.parseFloat(value.replace(/,/g, '').replace(/[^\\d.-]/g, ''));\n return Number.isFinite(parsed) ? parsed : 0;\n }\n return 0;\n}\n\n/**\n * Whether the product needs choices made on its page. A details response lists the\n * options and variants, so it can say no; a list response does not, so it can only\n * say yes (a non-plain type, or `has_options`) and otherwise leaves the answer open.\n */\nfunction needsProductPage(p: Product, detailed: boolean): boolean | undefined {\n if (!SIMPLE_TYPES.has(p.type)) return true;\n if ((p.options ?? []).some((option) => option.required)) return true;\n if ((p.skus ?? []).length > 0) return true;\n if (detailed) return false;\n return p.has_options === true ? true : undefined;\n}\n\nfunction toProductSummary(p: Product, detailed: boolean): WebMcpProductSummary {\n const onSale = p.is_on_sale === true;\n const needs = needsProductPage(p, detailed);\n\n return {\n id: Number(p.id),\n name: p.name,\n url: p.url,\n price: toAmount(onSale && p.sale_price ? p.sale_price : p.price),\n ...(onSale ? { regularPrice: toAmount(p.regular_price) } : {}),\n currency: p.currency,\n onSale,\n inStock: p.status !== 'out' && p.status !== 'out-and-notify' && p.is_available !== false,\n ...(needs === undefined ? {} : { needsProductPage: needs }),\n };\n}\n\nfunction toCartSummary(cart: SallaCartDetailsData, currency: string): WebMcpCartSummary {\n return {\n id: cart.id,\n count: cart.count,\n total: toAmount(cart.total),\n currency,\n coupon: cart.coupon ?? null,\n items: (cart.items ?? []).map((item) => ({\n id: String(item.id),\n productId: item.product_id,\n name: item.product_name,\n quantity: item.quantity,\n total: toAmount(item.total),\n })),\n };\n}\n\nasync function readCart(sdk: SallaSDK): Promise<WebMcpCartSummary | null> {\n const cartId = await sdk.cart.api.getCurrentCartId();\n if (!cartId) return null;\n const response = await sdk.api.cart.details(cartId, ['items']);\n // A cart already turned into an order answers with a redirect and no `cart`.\n const cart = response?.data?.cart;\n return cart ? toCartSummary(cart, sdk.config.currency()?.code ?? '') : null;\n}\n\n/**\n * The real tool dependencies: the engine's product API for the catalog, and the\n * Salla SDK for the cart. Cart changes go through `salla.cart.*`, the same calls\n * the UI buttons use, so the cart badge, drawer and toasts update as they would\n * for a click — the shopper and the agent share one visible cart.\n */\nexport function createSallaWebMcpDeps(navigate: (to: string) => void): WebMcpDeps {\n const mutateThenRead = async (\n change: (sdk: SallaSDK) => Promise<unknown>\n ): Promise<WebMcpCartSummary | null> => {\n const sdk = await sdkReady();\n await change(sdk);\n return readCart(sdk);\n };\n\n return {\n searchProducts: async (keyword, limit) => {\n const { items } = await productApi.list({ source: 'search', keyword, perPage: limit });\n return items.map((item) => toProductSummary(item, false));\n },\n getProduct: async (productId) =>\n toProductSummary(await productApi.find(String(productId)), true),\n getCart: async () => readCart(await sdkReady()),\n addToCart: (productId, quantity) =>\n mutateThenRead((sdk) => sdk.cart.addItem({ id: productId, quantity })),\n updateCartItem: (itemId, quantity) =>\n mutateThenRead((sdk) => sdk.cart.updateItem({ id: itemId, quantity })),\n removeCartItem: (itemId) => mutateThenRead((sdk) => sdk.cart.deleteItem(itemId)),\n openPage: navigate,\n };\n}\n","import { useEffect, useRef } from 'react';\nimport { useNavigate } from '../providers/NavigationProvider';\nimport { withStoreAddress } from './page-navigation';\nimport { registerWebMcpTools } from './registerWebMcpTools';\nimport { createSallaWebMcpDeps } from './salla-deps';\n\n/**\n * Expose the storefront to in-browser AI agents through WebMCP for as long as the\n * calling component is mounted. Does nothing where the browser has no WebMCP.\n *\n * `navigate` is read through a ref so a router that hands out a new function on\n * each render does not unregister and re-register every tool (the spec warns\n * that each change churns the agent's tool list).\n */\nexport function useWebMcpTools(): void {\n const navigate = useNavigate();\n const navigateRef = useRef(navigate);\n useEffect(() => {\n navigateRef.current = navigate;\n }, [navigate]);\n\n useEffect(\n () =>\n registerWebMcpTools(createSallaWebMcpDeps((to) => withStoreAddress(navigateRef.current)(to))),\n []\n );\n}\n","import { useWebMcpTools } from './useWebMcpTools';\n\n/**\n * Mounts the WebMCP storefront tools. Renders nothing; a component rather than a\n * call in `TwilightProvider` because it needs the router's `navigate`, which only\n * exists below the provider's navigation setup. Loaded lazily — no shopper needs\n * it to see the page.\n */\nexport default function WebMcpTools(): null {\n useWebMcpTools();\n return null;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/webmcp/page-navigation.ts","../src/webmcp/input.ts","../src/webmcp/results.ts","../src/webmcp/schema.ts","../src/webmcp/cart-tools.ts","../src/webmcp/catalog-tools.ts","../src/webmcp/page-tools.ts","../src/webmcp/tools.ts","../src/webmcp/registerWebMcpTools.ts","../src/webmcp/salla-deps.ts","../src/webmcp/useWebMcpTools.ts","../src/webmcp/WebMcpTools.tsx"],"names":["product"],"mappings":";;;;;;;;;;;;;;;;;AAMA,IAAM,UAAA,GAAa,CAAC,EAAA,KAAwB,qBAAA,CAAsB,KAAK,EAAE,CAAA;AAEzE,SAAS,eAAA,GAAkB;AACzB,EAAA,OAAO,mBAAA,EAAoB,GAAI,kBAAA,EAAmB,CAAE,QAAA,GAAW,MAAA;AACjE;AAeO,SAAS,iBAAiB,QAAA,EAA8B;AAC7D,EAAA,MAAM,qBAAqB,QAAA,KAAa,eAAA;AAExC,EAAA,OAAO,CAAC,EAAA,KAAO;AACb,IAAA,MAAM,WAAW,eAAA,EAAgB;AAEjC,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,OAAO,QAAA,CAAS,WAAW,EAAE,CAAA,GAAI,KAAM,YAAA,CAAa,QAAA,EAAU,EAAE,CAAA,IAAK,EAAG,CAAA;AAAA,IAC1E;AACA,IAAA,IAAI,CAAC,UAAA,CAAW,EAAE,CAAA,EAAG,OAAO,SAAS,EAAE,CAAA;AAEvC,IAAA,MAAM,QAAQ,QAAA,EAAU,KAAA;AACxB,IAAA,MAAM,IAAA,GAAO,OAAO,GAAA,GAAM,mBAAA,CAAoB,IAAI,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,IAAA;AAC/E,IAAA,OAAO,IAAA,GAAO,QAAA,CAAS,IAAI,CAAA,GAAI,gBAAgB,EAAE,CAAA;AAAA,EACnD,CAAA;AACF;;;ACjCA,IAAM,KAAK,CAAI,KAAA,MAAyB,EAAE,EAAA,EAAI,MAAM,KAAA,EAAM,CAAA;AAC1D,IAAM,OAAO,CAAC,KAAA,MAAkC,EAAE,EAAA,EAAI,OAAO,KAAA,EAAM,CAAA;AAG5D,SAAS,gBAAA,CAAiB,KAAc,KAAA,EAA+B;AAC5E,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,MAAK,KAAM,EAAA,GAAK,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA;AAC3E,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,CAAC,OAAO,SAAA,CAAU,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,EAAG;AACtE,IAAA,OAAO,IAAA,CAAK,CAAA,CAAA,EAAI,KAAK,CAAA,kCAAA,CAAoC,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,GAAG,KAAK,CAAA;AACjB;AAEO,SAAS,cAAc,GAAA,EAA8B;AAC1D,EAAA,OAAO,QAAQ,MAAA,GAAY,EAAA,CAAG,CAAC,CAAA,GAAI,gBAAA,CAAiB,KAAK,UAAU,CAAA;AACrE;AAEO,SAAS,OAAA,CAAQ,KAAc,KAAA,EAA+B;AACnE,EAAA,MAAM,QAAQ,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA;AACtD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACpD,IAAA,OAAO,IAAA,CAAK,CAAA,CAAA,EAAI,KAAK,CAAA,oCAAA,CAAsC,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,CAAA;AACxB;AAEO,SAAS,aAAa,GAAA,EAA8B;AACzD,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,IAAA,OAAW,EAAA,EAAI;AAChD,IAAA,OAAO,KAAK,6DAA6D,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,EAAA,CAAG,GAAA,CAAI,IAAA,EAAM,CAAA;AACtB;AAEO,IAAM,oBAAA,GAAuB,CAAA;AAC7B,IAAM,gBAAA,GAAmB,EAAA;AAEzB,SAAS,WAAW,GAAA,EAAsB;AAC/C,EAAA,IAAI,OAAO,QAAQ,QAAA,IAAY,CAAC,OAAO,QAAA,CAAS,GAAG,GAAG,OAAO,oBAAA;AAC7D,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAkB,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAC,CAAA;AAChE;;;ACzCO,SAAS,WAAW,OAAA,EAAoC;AAC7D,EAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG,CAAA,EAAE;AACtE;AAGO,SAAS,YAAY,OAAA,EAAmC;AAC7D,EAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AACrE;AAEO,SAAS,aAAa,KAAA,EAAwB;AACnD,EAAA,OAAO,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,GAAU,MAAM,OAAA,GAAU,eAAA;AACnE;AAGA,eAAsB,OAAA,CACpB,OACA,MAAA,EAC2B;AAC3B,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,MAAA,EAAO;AAAA,EACtB,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,YAAY,CAAA,EAAG,KAAK,YAAY,YAAA,CAAa,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9D;AACF;;;ACxBO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa;AACf,CAAA;AAEO,IAAM,cAAA,GAAiB;AAAA,EAC5B,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa;AACf,CAAA;AAEO,IAAM,eAAA,GAAkB;AAAA,EAC7B,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa;AACf,CAAA;;;ACVA,SAAS,YAAY,IAAA,EAA8B;AACjD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EACE,uIAAA;AAAA,IACF,aAAa,EAAE,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,EAAC,EAAE;AAAA,IAC9C,OAAA,EAAS,MACP,OAAA,CAAQ,kBAAA,EAAoB,YAAY,UAAA,CAAW,EAAE,IAAA,EAAM,MAAM,IAAA,CAAK,OAAA,EAAQ,EAAG,CAAC;AAAA,GACtF;AACF;AAEA,SAAS,cAAc,IAAA,EAA8B;AACnD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EACE,0MAAA;AAAA,IACF,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY,EAAE,SAAA,EAAW,iBAAA,EAAmB,UAAU,eAAA,EAAgB;AAAA,MACtE,QAAA,EAAU,CAAC,WAAW;AAAA,KACxB;AAAA,IACA,OAAA,EAAS,CAAC,KAAA,KACR,OAAA,CAAQ,sBAAsB,YAAY;AACxC,MAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,KAAA,CAAM,SAAA,EAAW,WAAW,CAAA;AACxD,MAAA,IAAI,CAAC,EAAA,CAAG,EAAA,EAAI,OAAO,WAAA,CAAY,GAAG,KAAK,CAAA;AACvC,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAA;AAC7C,MAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,OAAO,WAAA,CAAY,SAAS,KAAK,CAAA;AAEnD,MAAA,MAAMA,QAAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,GAAG,KAAK,CAAA;AAC9C,MAAA,IAAI,CAACA,SAAQ,OAAA,EAAS;AACpB,QAAA,OAAO,WAAA,CAAY,CAAA,CAAA,EAAIA,QAAAA,CAAQ,IAAI,CAAA,iCAAA,CAAmC,CAAA;AAAA,MACxE;AACA,MAAA,IAAIA,QAAAA,CAAQ,qBAAqB,IAAA,EAAM;AACrC,QAAA,OAAO,WAAA;AAAA,UACL,CAAA,CAAA,EAAIA,SAAQ,IAAI,CAAA,kHAAA,EAAgHA,SAAQ,EAAE,CAAA,EAAA,EAAKA,SAAQ,GAAG,CAAA,+BAAA;AAAA,SAC5J;AAAA,MACF;AACA,MAAA,OAAO,UAAA,CAAW,EAAE,IAAA,EAAM,MAAM,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,KAAA,EAAO,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA;AAAA,IAC5E,CAAC;AAAA,GACL;AACF;AAEA,SAAS,mBAAmB,IAAA,EAA8B;AACxD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EACE,6GAAA;AAAA,IACF,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,MAAA,EAAQ,cAAA;AAAA,QACR,QAAA,EAAU,EAAE,GAAG,eAAA,EAAiB,aAAa,eAAA;AAAgB,OAC/D;AAAA,MACA,QAAA,EAAU,CAAC,QAAA,EAAU,UAAU;AAAA,KACjC;AAAA,IACA,OAAA,EAAS,CAAC,KAAA,KACR,OAAA,CAAQ,qBAAqB,YAAY;AACvC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,QAAQ,CAAA;AAC7C,MAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,OAAO,WAAA,CAAY,OAAO,KAAK,CAAA;AAC/C,MAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,KAAA,CAAM,QAAA,EAAU,UAAU,CAAA;AAC5D,MAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,OAAO,WAAA,CAAY,SAAS,KAAK,CAAA;AACnD,MAAA,OAAO,UAAA,CAAW,EAAE,IAAA,EAAM,MAAM,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,KAAA,EAAO,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA;AAAA,IACrF,CAAC;AAAA,GACL;AACF;AAEA,SAAS,mBAAmB,IAAA,EAA8B;AACxD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EACE,uFAAA;AAAA,IACF,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY,EAAE,MAAA,EAAQ,cAAA,EAAe;AAAA,MACrC,QAAA,EAAU,CAAC,QAAQ;AAAA,KACrB;AAAA,IACA,OAAA,EAAS,CAAC,KAAA,KACR,OAAA,CAAQ,0BAA0B,YAAY;AAC5C,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,QAAQ,CAAA;AAC7C,MAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,OAAO,WAAA,CAAY,OAAO,KAAK,CAAA;AAC/C,MAAA,OAAO,UAAA,CAAW,EAAE,IAAA,EAAM,MAAM,KAAK,cAAA,CAAe,MAAA,CAAO,KAAK,CAAA,EAAG,CAAA;AAAA,IACrE,CAAC;AAAA,GACL;AACF;AAEO,SAAS,gBAAgB,IAAA,EAAgC;AAC9D,EAAA,OAAO;AAAA,IACL,YAAY,IAAI,CAAA;AAAA,IAChB,cAAc,IAAI,CAAA;AAAA,IAClB,mBAAmB,IAAI,CAAA;AAAA,IACvB,mBAAmB,IAAI;AAAA,GACzB;AACF;;;AC5FA,SAAS,mBAAmB,IAAA,EAA8B;AACxD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EACE,mMAAA;AAAA,IACF,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,0CAAA,EAA2C;AAAA,QACnF,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,QAAA;AAAA,UACN,WAAA,EAAa,kCAAkC,gBAAgB,CAAA,iBAAA;AAAA;AACjE,OACF;AAAA,MACA,QAAA,EAAU,CAAC,SAAS;AAAA,KACtB;AAAA,IACA,OAAA,EAAS,CAAC,KAAA,KACR,OAAA,CAAQ,kBAAkB,YAAY;AACpC,MAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,CAAM,OAAO,CAAA;AAC1C,MAAA,IAAI,CAAC,OAAA,CAAQ,EAAA,EAAI,OAAO,WAAA,CAAY,QAAQ,KAAK,CAAA;AACjD,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,cAAA,CAAe,QAAQ,KAAA,EAAO,UAAA,CAAW,KAAA,CAAM,KAAK,CAAC,CAAA;AACjF,MAAA,OAAO,UAAA,CAAW,EAAE,QAAA,EAAU,CAAA;AAAA,IAChC,CAAC;AAAA,GACL;AACF;AAEA,SAAS,eAAe,IAAA,EAA8B;AACpD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EACE,2IAAA;AAAA,IACF,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY,EAAE,SAAA,EAAW,iBAAA,EAAkB;AAAA,MAC3C,QAAA,EAAU,CAAC,WAAW;AAAA,KACxB;AAAA,IACA,OAAA,EAAS,CAAC,KAAA,KACR,OAAA,CAAQ,uBAAuB,YAAY;AACzC,MAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,KAAA,CAAM,SAAA,EAAW,WAAW,CAAA;AACxD,MAAA,IAAI,CAAC,EAAA,CAAG,EAAA,EAAI,OAAO,WAAA,CAAY,GAAG,KAAK,CAAA;AACvC,MAAA,OAAO,UAAA,CAAW,EAAE,OAAA,EAAS,MAAM,KAAK,UAAA,CAAW,EAAA,CAAG,KAAK,CAAA,EAAG,CAAA;AAAA,IAChE,CAAC;AAAA,GACL;AACF;AAEO,SAAS,mBAAmB,IAAA,EAAgC;AACjE,EAAA,OAAO,CAAC,kBAAA,CAAmB,IAAI,CAAA,EAAG,cAAA,CAAe,IAAI,CAAC,CAAA;AACxD;;;AC/CA,SAAS,aAAa,IAAA,EAA8B;AAClD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EACE,CAAA,mLAAA,CAAA;AAAA,IACF,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,QAC1D,SAAA,EAAW,EAAE,GAAG,iBAAA,EAAmB,aAAa,kCAAA;AAAmC,OACrF;AAAA,MACA,QAAA,EAAU,CAAC,MAAM;AAAA,KACnB;AAAA,IACA,OAAA,EAAS,CAAC,KAAA,KACR,OAAA,CAAQ,oBAAoB,YAAY;AACtC,MAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,QAAA,IAAA,CAAK,SAAS,OAAO,CAAA;AACrB,QAAA,OAAO,UAAA,CAAW,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,MACtC;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,QAAA,IAAA,CAAK,SAAS,GAAG,CAAA;AACjB,QAAA,OAAO,UAAA,CAAW,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,MACtC;AACA,MAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,QAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,KAAA,CAAM,SAAA,EAAW,WAAW,CAAA;AACxD,QAAA,IAAI,CAAC,EAAA,CAAG,EAAA,EAAI,OAAO,WAAA,CAAY,GAAG,KAAK,CAAA;AACvC,QAAA,MAAMA,QAAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAW,GAAG,KAAK,CAAA;AAC9C,QAAA,IAAA,CAAK,QAAA,CAASA,SAAQ,GAAG,CAAA;AACzB,QAAA,OAAO,UAAA,CAAW,EAAE,MAAA,EAAQA,QAAAA,CAAQ,KAAK,CAAA;AAAA,MAC3C;AACA,MAAA,OAAO,YAAY,6CAA6C,CAAA;AAAA,IAClE,CAAC;AAAA,GACL;AACF;AAEO,SAAS,gBAAgB,IAAA,EAAgC;AAC9D,EAAA,OAAO,CAAC,YAAA,CAAa,IAAI,CAAC,CAAA;AAC5B;;;AChCO,SAAS,kBAAkB,IAAA,EAAgC;AAChE,EAAA,OAAO,CAAC,GAAG,kBAAA,CAAmB,IAAI,CAAA,EAAG,GAAG,eAAA,CAAgB,IAAI,CAAA,EAAG,GAAG,eAAA,CAAgB,IAAI,CAAC,CAAA;AACzF;;;ACRA,IAAM,WAAA,GAAc,iBAAA;AAEpB,SAAS,yBAAA,CAA0B,UAAkB,KAAA,EAAsB;AAGzE,EAAA,IAAI,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,WAAA,EAAa;AACjE,EAAA,OAAA,CAAQ,IAAA,CAAK,4CAAA,EAA8C,QAAA,EAAU,KAAK,CAAA;AAC5E;AAQO,SAAS,oBAAoB,IAAA,EAA8B;AAChE,EAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,EAAA,IAAI,CAAC,YAAA,EAAc,OAAO,MAAM;AAAA,EAAC,CAAA;AAEjC,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,KAAA,MAAW,IAAA,IAAQ,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC1C,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,OAAA,CAAQ,YAAA,CAAa,YAAA,CAAa,IAAA,EAAM,EAAE,QAAQ,UAAA,CAAW,MAAA,EAAQ,CAAC,CAAA,CAAE,KAAA;AAAA,QAC9E,CAAC,KAAA,KAAmB,yBAAA,CAA0B,IAAA,CAAK,MAAM,KAAK;AAAA,OAChE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,yBAAA,CAA0B,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IAC5C;AAAA,EACF;AACA,EAAA,OAAO,MAAM,WAAW,KAAA,EAAM;AAChC;;;AC3BA,IAAM,WAAA,GAAc,GAAA;AAGpB,IAAM,+BAAoC,IAAI,GAAA,CAAI,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA;AAExE,SAAS,QAAA,GAA8B;AACrC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,MAAA,EAAO;AACP,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,oDAAoD,CAAC,CAAA;AAAA,IACxE,GAAG,WAAW,CAAA;AACd,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,CAAC,GAAA,KAAQ;AACrC,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,IACb,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAGA,SAAS,SAAS,KAAA,EAAwB;AACxC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,YAAY,KAAA,EAAO;AAC3D,IAAA,OAAO,QAAA,CAAU,MAAgB,MAAM,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAC,CAAA;AAChF,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,CAAA;AACT;AAOA,SAAS,gBAAA,CAAiB,GAAY,QAAA,EAAwC;AAC5E,EAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,CAAA,CAAE,IAAI,GAAG,OAAO,IAAA;AACtC,EAAA,IAAA,CAAK,CAAA,CAAE,OAAA,IAAW,EAAC,EAAG,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,QAAQ,CAAA,EAAG,OAAO,IAAA;AAChE,EAAA,IAAA,CAAK,EAAE,IAAA,IAAQ,EAAC,EAAG,MAAA,GAAS,GAAG,OAAO,IAAA;AACtC,EAAA,IAAI,UAAU,OAAO,KAAA;AACrB,EAAA,OAAO,CAAA,CAAE,WAAA,KAAgB,IAAA,GAAO,IAAA,GAAO,MAAA;AACzC;AAEA,SAAS,gBAAA,CAAiB,GAAY,QAAA,EAAyC;AAC7E,EAAA,MAAM,MAAA,GAAS,EAAE,UAAA,KAAe,IAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,CAAA,EAAG,QAAQ,CAAA;AAE1C,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA;AAAA,IACf,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,KAAK,CAAA,CAAE,GAAA;AAAA,IACP,KAAA,EAAO,SAAS,MAAA,IAAU,CAAA,CAAE,aAAa,CAAA,CAAE,UAAA,GAAa,EAAE,KAAK,CAAA;AAAA,IAC/D,GAAI,SAAS,EAAE,YAAA,EAAc,SAAS,CAAA,CAAE,aAAa,CAAA,EAAE,GAAI,EAAC;AAAA,IAC5D,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,MAAA;AAAA,IACA,OAAA,EAAS,EAAE,MAAA,KAAW,KAAA,IAAS,EAAE,MAAA,KAAW,gBAAA,IAAoB,EAAE,YAAA,KAAiB,KAAA;AAAA,IACnF,GAAI,KAAA,KAAU,MAAA,GAAY,EAAC,GAAI,EAAE,kBAAkB,KAAA;AAAM,GAC3D;AACF;AAEA,SAAS,aAAA,CAAc,MAA4B,QAAA,EAAqC;AACtF,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAAA,IAC1B,QAAA;AAAA,IACA,MAAA,EAAQ,KAAK,MAAA,IAAU,IAAA;AAAA,IACvB,QAAQ,IAAA,CAAK,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MACvC,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,MAClB,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,MAAM,IAAA,CAAK,YAAA;AAAA,MACX,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,KAC5B,CAAE;AAAA,GACJ;AACF;AAEA,eAAe,SAAS,GAAA,EAAkD;AACxE,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,IAAA,CAAK,IAAI,gBAAA,EAAiB;AACnD,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,GAAA,CAAI,KAAK,OAAA,CAAQ,MAAA,EAAQ,CAAC,OAAO,CAAC,CAAA;AAE7D,EAAA,MAAM,IAAA,GAAO,UAAU,IAAA,EAAM,IAAA;AAC7B,EAAA,OAAO,IAAA,GAAO,cAAc,IAAA,EAAM,GAAA,CAAI,OAAO,QAAA,EAAS,EAAG,IAAA,IAAQ,EAAE,CAAA,GAAI,IAAA;AACzE;AAQO,SAAS,sBAAsB,QAAA,EAA4C;AAChF,EAAA,MAAM,cAAA,GAAiB,OACrB,MAAA,KACsC;AACtC,IAAA,MAAM,GAAA,GAAM,MAAM,QAAA,EAAS;AAC3B,IAAA,MAAM,OAAO,GAAG,CAAA;AAChB,IAAA,OAAO,SAAS,GAAG,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,OAAO,OAAA,EAAS,KAAA,KAAU;AACxC,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,OAAA,CAAW,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,CAAA;AACrF,MAAA,OAAO,MAAM,GAAA,CAAI,CAAC,SAAS,gBAAA,CAAiB,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA,UAAA,EAAY,OAAO,SAAA,KACjB,gBAAA,CAAiB,MAAM,OAAA,CAAW,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,IACjE,OAAA,EAAS,YAAY,QAAA,CAAS,MAAM,UAAU,CAAA;AAAA,IAC9C,SAAA,EAAW,CAAC,SAAA,EAAW,QAAA,KACrB,eAAe,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,CAAK,QAAQ,EAAE,EAAA,EAAI,SAAA,EAAW,QAAA,EAAU,CAAC,CAAA;AAAA,IACvE,cAAA,EAAgB,CAAC,MAAA,EAAQ,QAAA,KACvB,eAAe,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,CAAK,WAAW,EAAE,EAAA,EAAI,MAAA,EAAQ,QAAA,EAAU,CAAC,CAAA;AAAA,IACvE,cAAA,EAAgB,CAAC,MAAA,KAAW,cAAA,CAAe,CAAC,QAAQ,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA,IAC/E,QAAA,EAAU;AAAA,GACZ;AACF;;;AC9GO,SAAS,cAAA,GAAuB;AACrC,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,WAAA,GAAc,OAAO,QAAQ,CAAA;AACnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EACxB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,SAAA;AAAA,IACE,MACE,mBAAA,CAAoB,qBAAA,CAAsB,CAAC,EAAA,KAAO,gBAAA,CAAiB,WAAA,CAAY,OAAO,CAAA,CAAE,EAAE,CAAC,CAAC,CAAA;AAAA,IAC9F;AAAC,GACH;AACF;;;AClBe,SAAR,WAAA,GAAqC;AAC1C,EAAA,cAAA,EAAe;AACf,EAAA,OAAO,IAAA;AACT","file":"WebMcpTools-J5PK7P6Y.js","sourcesContent":["import { defaultNavigate, resolveRelativePath } from '../providers/NavigationProvider';\nimport { getTwilightContext, hasTwilightSettings } from '../twilight/context';\nimport { storePageUrl } from '../utils/baseHead';\n\ntype Navigate = (to: string) => void;\n\nconst isAbsolute = (to: string): boolean => /^[a-z][a-z\\d+.-]*:/i.test(to);\n\nfunction currentSettings() {\n return hasTwilightSettings() ? getTwilightContext().settings : undefined;\n}\n\n/**\n * Make `navigate` safe to call with either a store-relative path (`/cart`) or the\n * absolute URL the API gives a product (`https://shop.example/ar/oud/p7`).\n *\n * - The TanStack router's navigate takes the router's own paths and would append an\n * absolute URL to the current page (`/ar/cart/https:/shop…`). A same-store URL is\n * turned into its store-relative path, as the engine's link interception does; one\n * that cannot be (another origin) loads as a normal page.\n * - The default navigate (`client={false}`, the Next.js adapter) assigns\n * `window.location`, where `/cart` is the host's cart: on a shared host that is\n * another store's page, because stores live under their username. A path becomes\n * the store's own address; an absolute URL is already one.\n */\nexport function withStoreAddress(navigate: Navigate): Navigate {\n const usesWindowLocation = navigate === defaultNavigate;\n\n return (to) => {\n const settings = currentSettings();\n\n if (usesWindowLocation) {\n return navigate(isAbsolute(to) ? to : (storePageUrl(settings, to) ?? to));\n }\n if (!isAbsolute(to)) return navigate(to);\n\n const store = settings?.store;\n const path = store?.url ? resolveRelativePath(to, store.url, store.username) : null;\n return path ? navigate(path) : defaultNavigate(to);\n };\n}\n","/**\n * Input parsing for the tools. The JSON schema is only a hint to the model, so\n * every handler re-checks here and returns a message the agent can correct from.\n */\n\nexport type Parsed<T> = { ok: true; value: T } | { ok: false; error: string };\n\nconst ok = <T>(value: T): Parsed<T> => ({ ok: true, value });\nconst fail = (error: string): Parsed<never> => ({ ok: false, error });\n\n/** A positive whole number from a number or numeric string. */\nexport function parsePositiveInt(raw: unknown, field: string): Parsed<number> {\n const value = typeof raw === 'string' && raw.trim() !== '' ? Number(raw) : raw;\n if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {\n return fail(`\"${field}\" must be a positive whole number.`);\n }\n return ok(value);\n}\n\nexport function parseQuantity(raw: unknown): Parsed<number> {\n return raw === undefined ? ok(1) : parsePositiveInt(raw, 'quantity');\n}\n\nexport function parseId(raw: unknown, field: string): Parsed<string> {\n const value = typeof raw === 'number' ? String(raw) : raw;\n if (typeof value !== 'string' || value.trim() === '') {\n return fail(`\"${field}\" is required. Get it from get-cart.`);\n }\n return ok(value.trim());\n}\n\nexport function parseKeyword(raw: unknown): Parsed<string> {\n if (typeof raw !== 'string' || raw.trim() === '') {\n return fail('\"keyword\" is required: the words to search the catalog for.');\n }\n return ok(raw.trim());\n}\n\nexport const SEARCH_LIMIT_DEFAULT = 5;\nexport const SEARCH_LIMIT_MAX = 10;\n\nexport function parseLimit(raw: unknown): number {\n if (typeof raw !== 'number' || !Number.isFinite(raw)) return SEARCH_LIMIT_DEFAULT;\n return Math.min(SEARCH_LIMIT_MAX, Math.max(1, Math.trunc(raw)));\n}\n","import type { WebMcpToolResult } from './types';\n\n/** A successful result: the payload as JSON text, which is what agents read best. */\nexport function jsonResult(payload: unknown): WebMcpToolResult {\n return { content: [{ type: 'text', text: JSON.stringify(payload) }] };\n}\n\n/** A failed result with a message the agent can act on. Handlers never throw. */\nexport function errorResult(message: string): WebMcpToolResult {\n return { content: [{ type: 'text', text: message }], isError: true };\n}\n\nexport function errorMessage(error: unknown): string {\n return error instanceof Error && error.message ? error.message : 'Unknown error';\n}\n\n/** Run `action`, turning anything it throws into an error result. */\nexport async function guarded(\n label: string,\n action: () => Promise<WebMcpToolResult>\n): Promise<WebMcpToolResult> {\n try {\n return await action();\n } catch (error) {\n return errorResult(`${label} failed: ${errorMessage(error)}`);\n }\n}\n","/** JSON Schema pieces shared by several tools. */\n\nexport const PRODUCT_ID_SCHEMA = {\n type: 'number',\n description: 'Product id, from search-products.',\n} as const;\n\nexport const ITEM_ID_SCHEMA = {\n type: 'string',\n description: 'Cart line id (the \"id\" of an item in get-cart), not the product id.',\n} as const;\n\nexport const QUANTITY_SCHEMA = {\n type: 'number',\n description: 'Whole number of units. Defaults to 1.',\n} as const;\n","import { parseId, parsePositiveInt, parseQuantity } from './input';\nimport { errorResult, guarded, jsonResult } from './results';\nimport { ITEM_ID_SCHEMA, PRODUCT_ID_SCHEMA, QUANTITY_SCHEMA } from './schema';\nimport type { WebMcpDeps, WebMcpTool } from './types';\n\nfunction getCartTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'get-cart',\n description:\n \"Read the shopper's current cart: items (with the line ids needed to change them), count and total. The cart is null when it is empty.\",\n inputSchema: { type: 'object', properties: {} },\n execute: () =>\n guarded('Reading the cart', async () => jsonResult({ cart: await deps.getCart() })),\n };\n}\n\nfunction addToCartTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'add-to-cart',\n description:\n \"Add a product to the shopper's cart and return the updated cart. Only works for products with no required options; for those, use open-page to send the shopper to the product page. Does not check out.\",\n inputSchema: {\n type: 'object',\n properties: { productId: PRODUCT_ID_SCHEMA, quantity: QUANTITY_SCHEMA },\n required: ['productId'],\n },\n execute: (input) =>\n guarded('Adding to the cart', async () => {\n const id = parsePositiveInt(input.productId, 'productId');\n if (!id.ok) return errorResult(id.error);\n const quantity = parseQuantity(input.quantity);\n if (!quantity.ok) return errorResult(quantity.error);\n\n const product = await deps.getProduct(id.value);\n if (!product.inStock) {\n return errorResult(`\"${product.name}\" is out of stock or unavailable.`);\n }\n if (product.needsProductPage === true) {\n return errorResult(\n `\"${product.name}\" needs choices made first (options, a variant, an amount…). Use open-page with page \"product\" and productId ${product.id} (${product.url}) so the shopper can pick them.`\n );\n }\n return jsonResult({ cart: await deps.addToCart(id.value, quantity.value) });\n }),\n };\n}\n\nfunction updateCartItemTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'update-cart-item',\n description:\n 'Change the quantity of a line already in the cart (use get-cart for the line id). Returns the updated cart.',\n inputSchema: {\n type: 'object',\n properties: {\n itemId: ITEM_ID_SCHEMA,\n quantity: { ...QUANTITY_SCHEMA, description: 'New quantity.' },\n },\n required: ['itemId', 'quantity'],\n },\n execute: (input) =>\n guarded('Updating the cart', async () => {\n const itemId = parseId(input.itemId, 'itemId');\n if (!itemId.ok) return errorResult(itemId.error);\n const quantity = parsePositiveInt(input.quantity, 'quantity');\n if (!quantity.ok) return errorResult(quantity.error);\n return jsonResult({ cart: await deps.updateCartItem(itemId.value, quantity.value) });\n }),\n };\n}\n\nfunction removeCartItemTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'remove-cart-item',\n description:\n 'Remove a line from the cart (use get-cart for the line id). Returns the updated cart.',\n inputSchema: {\n type: 'object',\n properties: { itemId: ITEM_ID_SCHEMA },\n required: ['itemId'],\n },\n execute: (input) =>\n guarded('Removing from the cart', async () => {\n const itemId = parseId(input.itemId, 'itemId');\n if (!itemId.ok) return errorResult(itemId.error);\n return jsonResult({ cart: await deps.removeCartItem(itemId.value) });\n }),\n };\n}\n\nexport function createCartTools(deps: WebMcpDeps): WebMcpTool[] {\n return [\n getCartTool(deps),\n addToCartTool(deps),\n updateCartItemTool(deps),\n removeCartItemTool(deps),\n ];\n}\n","import { parseKeyword, parseLimit, parsePositiveInt, SEARCH_LIMIT_MAX } from './input';\nimport { errorResult, guarded, jsonResult } from './results';\nimport { PRODUCT_ID_SCHEMA } from './schema';\nimport type { WebMcpDeps, WebMcpTool } from './types';\n\nfunction searchProductsTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'search-products',\n description:\n \"Search this store's catalog by keyword. Returns up to a few matching products with id, name, price, stock and page URL. Use it to find a product before reading details or adding it to the cart.\",\n inputSchema: {\n type: 'object',\n properties: {\n keyword: { type: 'string', description: 'Words to search for, e.g. \"oud perfume\".' },\n limit: {\n type: 'number',\n description: `How many products to return (1-${SEARCH_LIMIT_MAX}). Defaults to 5.`,\n },\n },\n required: ['keyword'],\n },\n execute: (input) =>\n guarded('Product search', async () => {\n const keyword = parseKeyword(input.keyword);\n if (!keyword.ok) return errorResult(keyword.error);\n const products = await deps.searchProducts(keyword.value, parseLimit(input.limit));\n return jsonResult({ products });\n }),\n };\n}\n\nfunction getProductTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'get-product',\n description:\n 'Get one product by id: price, sale state, stock, and whether the shopper must pick options (size, color…) on the product page first.',\n inputSchema: {\n type: 'object',\n properties: { productId: PRODUCT_ID_SCHEMA },\n required: ['productId'],\n },\n execute: (input) =>\n guarded('Loading the product', async () => {\n const id = parsePositiveInt(input.productId, 'productId');\n if (!id.ok) return errorResult(id.error);\n return jsonResult({ product: await deps.getProduct(id.value) });\n }),\n };\n}\n\nexport function createCatalogTools(deps: WebMcpDeps): WebMcpTool[] {\n return [searchProductsTool(deps), getProductTool(deps)];\n}\n","import { parsePositiveInt } from './input';\nimport { errorResult, guarded, jsonResult } from './results';\nimport { PRODUCT_ID_SCHEMA } from './schema';\nimport type { WebMcpDeps, WebMcpTool } from './types';\n\nfunction openPageTool(deps: WebMcpDeps): WebMcpTool {\n return {\n name: 'open-page',\n description:\n 'Navigate the shopper\\'s visible page to the cart, the home page, or a product page. Use \"cart\" to let the shopper review and check out themselves; checkout is never done by a tool.',\n inputSchema: {\n type: 'object',\n properties: {\n page: { type: 'string', enum: ['cart', 'home', 'product'] },\n productId: { ...PRODUCT_ID_SCHEMA, description: 'Required when page is \"product\".' },\n },\n required: ['page'],\n },\n execute: (input) =>\n guarded('Opening the page', async () => {\n if (input.page === 'cart') {\n deps.openPage('/cart');\n return jsonResult({ opened: 'cart' });\n }\n if (input.page === 'home') {\n deps.openPage('/');\n return jsonResult({ opened: 'home' });\n }\n if (input.page === 'product') {\n const id = parsePositiveInt(input.productId, 'productId');\n if (!id.ok) return errorResult(id.error);\n const product = await deps.getProduct(id.value);\n deps.openPage(product.url);\n return jsonResult({ opened: product.url });\n }\n return errorResult('\"page\" must be one of: cart, home, product.');\n }),\n };\n}\n\nexport function createPageTools(deps: WebMcpDeps): WebMcpTool[] {\n return [openPageTool(deps)];\n}\n","import { createCartTools } from './cart-tools';\nimport { createCatalogTools } from './catalog-tools';\nimport { createPageTools } from './page-tools';\nimport type { WebMcpDeps, WebMcpTool } from './types';\n\n/**\n * The storefront tools. Deliberately small — every tool costs the agent context\n * (see the spec's \"tool budget\") — and none of them places an order or pays: the\n * shopper finishes checkout on the page.\n */\nexport function createWebMcpTools(deps: WebMcpDeps): WebMcpTool[] {\n return [...createCatalogTools(deps), ...createCartTools(deps), ...createPageTools(deps)];\n}\n","import { getModelContext } from './model-context';\nimport { createWebMcpTools } from './tools';\nimport type { WebMcpDeps } from './types';\n\nconst NOT_ALLOWED = 'NotAllowedError';\n\nfunction reportRegistrationFailure(toolName: string, error: unknown): void {\n // The page's Permissions-Policy (or an iframe without `allow`) can switch tools\n // off. That is a choice, not a fault, so it stays quiet.\n if (error instanceof DOMException && error.name === NOT_ALLOWED) return;\n console.warn('[twilight] WebMCP could not register tool:', toolName, error);\n}\n\n/**\n * Register the storefront tools with the browser's WebMCP, if it has one.\n *\n * A no-op everywhere else. Returns a dispose that unregisters every tool (they\n * share one `AbortSignal`, which is how the spec unregisters a tool).\n */\nexport function registerWebMcpTools(deps: WebMcpDeps): () => void {\n const modelContext = getModelContext();\n if (!modelContext) return () => {};\n\n const controller = new AbortController();\n for (const tool of createWebMcpTools(deps)) {\n try {\n Promise.resolve(modelContext.registerTool(tool, { signal: controller.signal })).catch(\n (error: unknown) => reportRegistrationFailure(tool.name, error)\n );\n } catch (error) {\n reportRegistrationFailure(tool.name, error);\n }\n }\n return () => controller.abort();\n}\n","import { product as productApi } from '../api/product';\nimport type { Money, Product } from '../types';\nimport type { SallaCartDetailsData, SallaSDK } from '../types/salla-sdk';\nimport { whenSallaReady } from '../utils/sdk-helpers';\nimport type { WebMcpCartSummary, WebMcpDeps, WebMcpProductSummary } from './types';\n\n/** How long a tool waits for the Salla SDK before telling the agent to retry. */\nconst SDK_WAIT_MS = 8_000;\n\n/** Product types a plain \"add one\" call can buy; the rest need input from the shopper. */\nconst SIMPLE_TYPES: ReadonlySet<string> = new Set(['product', 'digital']);\n\nfunction sdkReady(): Promise<SallaSDK> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n cancel();\n reject(new Error('The store is not ready yet. Try again in a moment.'));\n }, SDK_WAIT_MS);\n const cancel = whenSallaReady((sdk) => {\n clearTimeout(timer);\n resolve(sdk);\n });\n });\n}\n\n/** Prices arrive as numbers, `{ amount }` objects or formatted text (\"1,200.50 SAR\"). */\nfunction toAmount(value: unknown): number {\n if (typeof value === 'number') return value;\n if (value && typeof value === 'object' && 'amount' in value) {\n return toAmount((value as Money).amount);\n }\n if (typeof value === 'string') {\n const parsed = Number.parseFloat(value.replace(/,/g, '').replace(/[^\\d.-]/g, ''));\n return Number.isFinite(parsed) ? parsed : 0;\n }\n return 0;\n}\n\n/**\n * Whether the product needs choices made on its page. A details response lists the\n * options and variants, so it can say no; a list response does not, so it can only\n * say yes (a non-plain type, or `has_options`) and otherwise leaves the answer open.\n */\nfunction needsProductPage(p: Product, detailed: boolean): boolean | undefined {\n if (!SIMPLE_TYPES.has(p.type)) return true;\n if ((p.options ?? []).some((option) => option.required)) return true;\n if ((p.skus ?? []).length > 0) return true;\n if (detailed) return false;\n return p.has_options === true ? true : undefined;\n}\n\nfunction toProductSummary(p: Product, detailed: boolean): WebMcpProductSummary {\n const onSale = p.is_on_sale === true;\n const needs = needsProductPage(p, detailed);\n\n return {\n id: Number(p.id),\n name: p.name,\n url: p.url,\n price: toAmount(onSale && p.sale_price ? p.sale_price : p.price),\n ...(onSale ? { regularPrice: toAmount(p.regular_price) } : {}),\n currency: p.currency,\n onSale,\n inStock: p.status !== 'out' && p.status !== 'out-and-notify' && p.is_available !== false,\n ...(needs === undefined ? {} : { needsProductPage: needs }),\n };\n}\n\nfunction toCartSummary(cart: SallaCartDetailsData, currency: string): WebMcpCartSummary {\n return {\n id: cart.id,\n count: cart.count,\n total: toAmount(cart.total),\n currency,\n coupon: cart.coupon ?? null,\n items: (cart.items ?? []).map((item) => ({\n id: String(item.id),\n productId: item.product_id,\n name: item.product_name,\n quantity: item.quantity,\n total: toAmount(item.total),\n })),\n };\n}\n\nasync function readCart(sdk: SallaSDK): Promise<WebMcpCartSummary | null> {\n const cartId = await sdk.cart.api.getCurrentCartId();\n if (!cartId) return null;\n const response = await sdk.api.cart.details(cartId, ['items']);\n // A cart already turned into an order answers with a redirect and no `cart`.\n const cart = response?.data?.cart;\n return cart ? toCartSummary(cart, sdk.config.currency()?.code ?? '') : null;\n}\n\n/**\n * The real tool dependencies: the engine's product API for the catalog, and the\n * Salla SDK for the cart. Cart changes go through `salla.cart.*`, the same calls\n * the UI buttons use, so the cart badge, drawer and toasts update as they would\n * for a click — the shopper and the agent share one visible cart.\n */\nexport function createSallaWebMcpDeps(navigate: (to: string) => void): WebMcpDeps {\n const mutateThenRead = async (\n change: (sdk: SallaSDK) => Promise<unknown>\n ): Promise<WebMcpCartSummary | null> => {\n const sdk = await sdkReady();\n await change(sdk);\n return readCart(sdk);\n };\n\n return {\n searchProducts: async (keyword, limit) => {\n const { items } = await productApi.list({ source: 'search', keyword, perPage: limit });\n return items.map((item) => toProductSummary(item, false));\n },\n getProduct: async (productId) =>\n toProductSummary(await productApi.find(String(productId)), true),\n getCart: async () => readCart(await sdkReady()),\n addToCart: (productId, quantity) =>\n mutateThenRead((sdk) => sdk.cart.addItem({ id: productId, quantity })),\n updateCartItem: (itemId, quantity) =>\n mutateThenRead((sdk) => sdk.cart.updateItem({ id: itemId, quantity })),\n removeCartItem: (itemId) => mutateThenRead((sdk) => sdk.cart.deleteItem(itemId)),\n openPage: navigate,\n };\n}\n","import { useEffect, useRef } from 'react';\nimport { useNavigate } from '../providers/NavigationProvider';\nimport { withStoreAddress } from './page-navigation';\nimport { registerWebMcpTools } from './registerWebMcpTools';\nimport { createSallaWebMcpDeps } from './salla-deps';\n\n/**\n * Expose the storefront to in-browser AI agents through WebMCP for as long as the\n * calling component is mounted. Does nothing where the browser has no WebMCP.\n *\n * `navigate` is read through a ref so a router that hands out a new function on\n * each render does not unregister and re-register every tool (the spec warns\n * that each change churns the agent's tool list).\n */\nexport function useWebMcpTools(): void {\n const navigate = useNavigate();\n const navigateRef = useRef(navigate);\n useEffect(() => {\n navigateRef.current = navigate;\n }, [navigate]);\n\n useEffect(\n () =>\n registerWebMcpTools(createSallaWebMcpDeps((to) => withStoreAddress(navigateRef.current)(to))),\n []\n );\n}\n","import { useWebMcpTools } from './useWebMcpTools';\n\n/**\n * Mounts the WebMCP storefront tools. Renders nothing; a component rather than a\n * call in `TwilightProvider` because it needs the router's `navigate`, which only\n * exists below the provider's navigation setup. Loaded lazily — no shopper needs\n * it to see the page.\n */\nexport default function WebMcpTools(): null {\n useWebMcpTools();\n return null;\n}\n"]}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { wishlist } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import { useMoney } from './chunk-
|
|
1
|
+
import { wishlist } from './chunk-Q7HPYV4S.js';
|
|
2
|
+
import './chunk-HHFZIWUU.js';
|
|
3
|
+
import { useMoney } from './chunk-6HLNVLTE.js';
|
|
4
4
|
import './chunk-Q77J3D2W.js';
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
7
|
-
import './chunk-
|
|
5
|
+
import './chunk-LRWN2LX2.js';
|
|
6
|
+
import './chunk-QCQL3VC3.js';
|
|
7
|
+
import './chunk-RH6XA7QJ.js';
|
|
8
8
|
import './chunk-X55R4VVK.js';
|
|
9
9
|
import './chunk-YL6X3ZMG.js';
|
|
10
|
-
import './chunk-
|
|
10
|
+
import './chunk-XF3WN735.js';
|
|
11
11
|
import './chunk-OXMUPNMH.js';
|
|
12
|
-
import './chunk-
|
|
12
|
+
import './chunk-VHMTDACW.js';
|
|
13
13
|
import './chunk-VVZNW5CB.js';
|
|
14
14
|
import './chunk-VDPMCOHX.js';
|
|
15
15
|
import './chunk-GD26FI4J.js';
|
|
16
16
|
import './chunk-BRIRWS2Q.js';
|
|
17
17
|
import './chunk-M2MJKUQF.js';
|
|
18
|
-
import { useLocation } from './chunk-
|
|
18
|
+
import { useLocation } from './chunk-UAKGSKKH.js';
|
|
19
19
|
import './chunk-OUW6WESU.js';
|
|
20
20
|
import './chunk-PPUV27YN.js';
|
|
21
21
|
import './chunk-HI5V5X3S.js';
|
|
22
|
-
import './chunk-
|
|
23
|
-
import './chunk-
|
|
22
|
+
import './chunk-32DWNWHW.js';
|
|
23
|
+
import './chunk-6SL5AT2J.js';
|
|
24
24
|
import './chunk-6T55LXJL.js';
|
|
25
25
|
import './chunk-Z653O7MX.js';
|
|
26
26
|
import './chunk-ZCH7W7DZ.js';
|
|
@@ -31,16 +31,16 @@ import './chunk-7V36I5GT.js';
|
|
|
31
31
|
import './chunk-6WI7R2BD.js';
|
|
32
32
|
import { useWishlist } from './chunk-LFMCUQQ3.js';
|
|
33
33
|
import './chunk-OAMIDZKW.js';
|
|
34
|
-
import './chunk-
|
|
34
|
+
import './chunk-XZ7MW3NA.js';
|
|
35
35
|
import './chunk-OQIIJRAS.js';
|
|
36
36
|
import './chunk-V2ZDTY6H.js';
|
|
37
|
-
import './chunk-
|
|
37
|
+
import './chunk-ZDJ2RDWX.js';
|
|
38
38
|
import { HookSlot } from './chunk-5XDPAKF5.js';
|
|
39
39
|
import './chunk-GCPEMNSU.js';
|
|
40
|
-
import './chunk-
|
|
40
|
+
import './chunk-DMJXUQFM.js';
|
|
41
41
|
import './chunk-Z5M4YYWT.js';
|
|
42
42
|
import { useTranslation } from './chunk-TYNZ5B2B.js';
|
|
43
|
-
import { LazyNoContent, Image } from './chunk-
|
|
43
|
+
import { LazyNoContent, Image } from './chunk-MM2VVKNO.js';
|
|
44
44
|
import './chunk-AXW67SY7.js';
|
|
45
45
|
import './chunk-BYMOPN2S.js';
|
|
46
46
|
import './chunk-SKLEJJ6M.js';
|
|
@@ -502,5 +502,5 @@ function WishlistPage(props) {
|
|
|
502
502
|
}
|
|
503
503
|
|
|
504
504
|
export { WishlistPage };
|
|
505
|
-
//# sourceMappingURL=WishlistPage-
|
|
506
|
-
//# sourceMappingURL=WishlistPage-
|
|
505
|
+
//# sourceMappingURL=WishlistPage-2MM52DNH.js.map
|
|
506
|
+
//# sourceMappingURL=WishlistPage-2MM52DNH.js.map
|