@salla.sa/twilight-theme-engine 1.0.35 → 1.0.37
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-PNZBIPJU.js → AddToCartForm-BAXWUVBW.js} +3 -3
- package/dist/{AddToCartForm-PNZBIPJU.js.map → AddToCartForm-BAXWUVBW.js.map} +1 -1
- package/dist/{BlogAuthorPage-FTVPPHHS.js → BlogAuthorPage-C7ENIUKC.js} +16 -15
- package/dist/BlogAuthorPage-C7ENIUKC.js.map +1 -0
- package/dist/{BlogCategoryPage-TJFW7DDI.js → BlogCategoryPage-QODJTKFE.js} +16 -15
- package/dist/BlogCategoryPage-QODJTKFE.js.map +1 -0
- package/dist/{BlogPage-RD4JUGKY.js → BlogPage-N5BKRIWD.js} +14 -13
- package/dist/BlogPage-N5BKRIWD.js.map +1 -0
- package/dist/{BlogSinglePage-DVZX3WVW.js → BlogSinglePage-HVSCXCCV.js} +14 -13
- package/dist/BlogSinglePage-HVSCXCCV.js.map +1 -0
- package/dist/{BlogTagPage-UON2ASKW.js → BlogTagPage-YXYYHD5S.js} +16 -15
- package/dist/BlogTagPage-YXYYHD5S.js.map +1 -0
- package/dist/{BrandsPage-R4KTDEG3.js → BrandsPage-UP3HKHGR.js} +14 -13
- package/dist/BrandsPage-UP3HKHGR.js.map +1 -0
- package/dist/{Breadcrumb-YNVX6ZXO.js → Breadcrumb-5464BOGG.js} +14 -13
- package/dist/Breadcrumb-5464BOGG.js.map +1 -0
- package/dist/{CartItem-6P4AB6LQ.js → CartItem-TARZW35A.js} +14 -13
- package/dist/CartItem-TARZW35A.js.map +1 -0
- package/dist/{CartSummary-A25PNJSY.js → CartSummary-2KSBKQM7.js} +14 -13
- package/dist/CartSummary-2KSBKQM7.js.map +1 -0
- package/dist/{Copyright-J6O4JUG7.js → Copyright-2D7W6OS4.js} +3 -3
- package/dist/{Copyright-J6O4JUG7.js.map → Copyright-2D7W6OS4.js.map} +1 -1
- package/dist/{CustomerLayout-JNUTNHBA.js → CustomerLayout-Z3JGXMO7.js} +14 -13
- package/dist/CustomerLayout-Z3JGXMO7.js.map +1 -0
- package/dist/{Footer-GR7WW7UA.js → Footer-DFZFOH5E.js} +14 -13
- package/dist/{Footer-GR7WW7UA.js.map → Footer-DFZFOH5E.js.map} +1 -1
- package/dist/{Header-2CTHBDYE.js → Header-CF5TQMWR.js} +6 -6
- package/dist/{Header-2CTHBDYE.js.map → Header-CF5TQMWR.js.map} +1 -1
- package/dist/{LoyaltyPage-EHRGBXF6.js → LoyaltyPage-TOXOPXEU.js} +15 -14
- package/dist/LoyaltyPage-TOXOPXEU.js.map +1 -0
- package/dist/{MainMenu-TFUVK4W7.js → MainMenu-6VTPCMMJ.js} +7 -7
- package/dist/{MainMenu-TFUVK4W7.js.map → MainMenu-6VTPCMMJ.js.map} +1 -1
- package/dist/{MasterLayout-ODH7CFAU.js → MasterLayout-PQ2XGL6A.js} +14 -13
- package/dist/{MasterLayout-ODH7CFAU.js.map → MasterLayout-PQ2XGL6A.js.map} +1 -1
- package/dist/{MobileMenu-5OJEI2CQ.js → MobileMenu-UWDB2BHQ.js} +15 -14
- package/dist/MobileMenu-UWDB2BHQ.js.map +1 -0
- package/dist/{NotificationsPage-U4ULROLR.js → NotificationsPage-3WUAFRTU.js} +14 -13
- package/dist/NotificationsPage-3WUAFRTU.js.map +1 -0
- package/dist/{OrderSinglePage-O2ODTG33.js → OrderSinglePage-T2UE2EJI.js} +15 -14
- package/dist/OrderSinglePage-T2UE2EJI.js.map +1 -0
- package/dist/{OrdersPage-72RXJGSH.js → OrdersPage-762O24YK.js} +15 -14
- package/dist/OrdersPage-762O24YK.js.map +1 -0
- package/dist/{PageSingle-7Y4WJAA6.js → PageSingle-Y6IVAY3E.js} +3 -3
- package/dist/{PageSingle-7Y4WJAA6.js.map → PageSingle-Y6IVAY3E.js.map} +1 -1
- package/dist/{ProductDetails-GYCTNAWE.js → ProductDetails-7G7QOLTB.js} +3 -3
- package/dist/{ProductDetails-GYCTNAWE.js.map → ProductDetails-7G7QOLTB.js.map} +1 -1
- package/dist/{ProfilePage-GVYL5NVL.js → ProfilePage-H2JWTJJY.js} +14 -13
- package/dist/ProfilePage-H2JWTJJY.js.map +1 -0
- package/dist/{SeoCartWidget-KHDAMXBG.js → SeoCartWidget-XYWATIV3.js} +14 -13
- package/dist/SeoCartWidget-XYWATIV3.js.map +1 -0
- package/dist/{SettingsPage-ZCLDJNHY.js → SettingsPage-WQX22FTS.js} +14 -13
- package/dist/SettingsPage-WQX22FTS.js.map +1 -0
- package/dist/{StoreClosedNotification-6O34WQJV.js → StoreClosedNotification-TL4XY6OS.js} +15 -14
- package/dist/{StoreClosedNotification-6O34WQJV.js.map → StoreClosedNotification-TL4XY6OS.js.map} +1 -1
- package/dist/{TestimonialsPage-Y3DCS2RB.js → TestimonialsPage-PWVTHBOS.js} +3 -3
- package/dist/{TestimonialsPage-Y3DCS2RB.js.map → TestimonialsPage-PWVTHBOS.js.map} +1 -1
- package/dist/{ThankYouPage-MPF4V5T3.js → ThankYouPage-C573J2KJ.js} +14 -13
- package/dist/ThankYouPage-C573J2KJ.js.map +1 -0
- package/dist/{WalletPage-XVEZKUCP.js → WalletPage-7JE6PELL.js} +15 -14
- package/dist/WalletPage-7JE6PELL.js.map +1 -0
- package/dist/{WishlistPage-MALKVYV4.js → WishlistPage-XTQ6IRG7.js} +15 -14
- package/dist/WishlistPage-XTQ6IRG7.js.map +1 -0
- package/dist/api/apps.js +4 -4
- package/dist/api/brands.js +5 -5
- package/dist/api/cart.js +5 -5
- package/dist/api/category.js +5 -5
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +3 -3
- package/dist/api/home.js +4 -4
- package/dist/api/loyalty.js +5 -5
- package/dist/api/menu.js +4 -4
- package/dist/api/notification.js +4 -4
- package/dist/api/order.js +5 -5
- package/dist/api/page.js +5 -5
- package/dist/api/product.js +5 -5
- package/dist/api/profile.js +3 -3
- package/dist/api/store.d.ts.map +1 -1
- package/dist/api/store.js +4 -4
- package/dist/api/translations.js +4 -4
- package/dist/api/user.js +4 -4
- package/dist/api/wishlist.js +4 -4
- package/dist/{chunk-QOK3ANNB.js → chunk-2AGMXJVP.js} +4 -4
- package/dist/{chunk-QOK3ANNB.js.map → chunk-2AGMXJVP.js.map} +1 -1
- package/dist/{chunk-Z2BE6MDB.js → chunk-2KZORZZN.js} +14 -6
- package/dist/chunk-2KZORZZN.js.map +1 -0
- package/dist/{chunk-BOOOVZS4.js → chunk-4PLGRQAS.js} +4 -4
- package/dist/{chunk-BOOOVZS4.js.map → chunk-4PLGRQAS.js.map} +1 -1
- package/dist/{chunk-DLDDKPRN.js → chunk-5FH6E2FQ.js} +16 -20
- package/dist/chunk-5FH6E2FQ.js.map +1 -0
- package/dist/{chunk-VBXAGCNI.js → chunk-5R5IGGI3.js} +5 -5
- package/dist/{chunk-VBXAGCNI.js.map → chunk-5R5IGGI3.js.map} +1 -1
- package/dist/{chunk-FQGCCV4T.js → chunk-5TRRUV7N.js} +3 -3
- package/dist/{chunk-FQGCCV4T.js.map → chunk-5TRRUV7N.js.map} +1 -1
- package/dist/{chunk-Q56S25OH.js → chunk-63WNORBK.js} +6 -6
- package/dist/{chunk-Q56S25OH.js.map → chunk-63WNORBK.js.map} +1 -1
- package/dist/chunk-6IATCGID.js +7 -0
- package/dist/chunk-6IATCGID.js.map +1 -0
- package/dist/{chunk-LG556DIE.js → chunk-6KI2QCPL.js} +3 -3
- package/dist/{chunk-LG556DIE.js.map → chunk-6KI2QCPL.js.map} +1 -1
- package/dist/{chunk-GQ7IBJ55.js → chunk-6MGDRMZM.js} +4 -4
- package/dist/{chunk-GQ7IBJ55.js.map → chunk-6MGDRMZM.js.map} +1 -1
- package/dist/{chunk-5ACY5CD3.js → chunk-6XWMNQ52.js} +10 -4
- package/dist/chunk-6XWMNQ52.js.map +1 -0
- package/dist/{chunk-WXOABH6J.js → chunk-AZ5HAIYQ.js} +26 -11
- package/dist/chunk-AZ5HAIYQ.js.map +1 -0
- package/dist/chunk-BK4VEUF3.js +14 -0
- package/dist/{chunk-IN5RFJF2.js.map → chunk-BK4VEUF3.js.map} +1 -1
- package/dist/{chunk-L6UGY2OB.js → chunk-BWIESZJK.js} +3 -3
- package/dist/{chunk-L6UGY2OB.js.map → chunk-BWIESZJK.js.map} +1 -1
- package/dist/{chunk-Z2P4M6T6.js → chunk-CCCKRNO4.js} +3 -3
- package/dist/{chunk-Z2P4M6T6.js.map → chunk-CCCKRNO4.js.map} +1 -1
- package/dist/{chunk-RQHOAA7U.js → chunk-CZS4ZHQK.js} +3 -3
- package/dist/{chunk-RQHOAA7U.js.map → chunk-CZS4ZHQK.js.map} +1 -1
- package/dist/{chunk-TXYT42AU.js → chunk-E5EH32L7.js} +3 -3
- package/dist/{chunk-TXYT42AU.js.map → chunk-E5EH32L7.js.map} +1 -1
- package/dist/{chunk-6EBQ27KE.js → chunk-EFHSAWDQ.js} +23 -15
- package/dist/chunk-EFHSAWDQ.js.map +1 -0
- package/dist/{chunk-T3I4T3XB.js → chunk-FKOBOGLQ.js} +7 -7
- package/dist/{chunk-T3I4T3XB.js.map → chunk-FKOBOGLQ.js.map} +1 -1
- package/dist/{chunk-Y5FBDMFV.js → chunk-JBXTU5NM.js} +22 -12
- package/dist/chunk-JBXTU5NM.js.map +1 -0
- package/dist/{chunk-OOYJHQLQ.js → chunk-KFH3OBFW.js} +4 -4
- package/dist/{chunk-OOYJHQLQ.js.map → chunk-KFH3OBFW.js.map} +1 -1
- package/dist/{chunk-LXIEAZZJ.js → chunk-KLTQ2UST.js} +3 -3
- package/dist/{chunk-LXIEAZZJ.js.map → chunk-KLTQ2UST.js.map} +1 -1
- package/dist/{chunk-6JLVUQWD.js → chunk-MCYEMXFY.js} +4 -4
- package/dist/{chunk-6JLVUQWD.js.map → chunk-MCYEMXFY.js.map} +1 -1
- package/dist/{chunk-C4S4VXWW.js → chunk-ME727LL4.js} +3 -3
- package/dist/{chunk-C4S4VXWW.js.map → chunk-ME727LL4.js.map} +1 -1
- package/dist/{chunk-NTOIR3NK.js → chunk-NX6BEOXW.js} +4 -4
- package/dist/{chunk-NTOIR3NK.js.map → chunk-NX6BEOXW.js.map} +1 -1
- package/dist/{chunk-FPQAYFHZ.js → chunk-OGGWNPF3.js} +3 -3
- package/dist/{chunk-FPQAYFHZ.js.map → chunk-OGGWNPF3.js.map} +1 -1
- package/dist/{chunk-STHBBSK2.js → chunk-QG2Q6HB5.js} +3 -3
- package/dist/{chunk-STHBBSK2.js.map → chunk-QG2Q6HB5.js.map} +1 -1
- package/dist/{chunk-CBQKQCKI.js → chunk-RBISDOPR.js} +4 -4
- package/dist/{chunk-CBQKQCKI.js.map → chunk-RBISDOPR.js.map} +1 -1
- package/dist/{chunk-57RYHNW2.js → chunk-RIZOT5FN.js} +3 -3
- package/dist/{chunk-57RYHNW2.js.map → chunk-RIZOT5FN.js.map} +1 -1
- package/dist/{chunk-47C6C2NN.js → chunk-TMR7TZMB.js} +4 -4
- package/dist/{chunk-47C6C2NN.js.map → chunk-TMR7TZMB.js.map} +1 -1
- package/dist/{chunk-5IEQLAAY.js → chunk-ULQMJUO2.js} +4 -4
- package/dist/{chunk-5IEQLAAY.js.map → chunk-ULQMJUO2.js.map} +1 -1
- package/dist/{chunk-6BVPVYLN.js → chunk-VZHYSYKG.js} +4 -4
- package/dist/{chunk-6BVPVYLN.js.map → chunk-VZHYSYKG.js.map} +1 -1
- package/dist/{chunk-EV4JSMFZ.js → chunk-X26WB7AG.js} +3 -3
- package/dist/{chunk-EV4JSMFZ.js.map → chunk-X26WB7AG.js.map} +1 -1
- package/dist/{chunk-E3J2RXBS.js → chunk-XLGVT7QF.js} +3 -3
- package/dist/{chunk-E3J2RXBS.js.map → chunk-XLGVT7QF.js.map} +1 -1
- package/dist/{chunk-XBLA5RFR.js → chunk-XLVAVCUV.js} +5 -5
- package/dist/{chunk-XBLA5RFR.js.map → chunk-XLVAVCUV.js.map} +1 -1
- package/dist/{chunk-GCAIIFF3.js → chunk-XTOXFAP7.js} +3 -3
- package/dist/{chunk-GCAIIFF3.js.map → chunk-XTOXFAP7.js.map} +1 -1
- package/dist/{chunk-B4SPJFNB.js → chunk-YOA3UVDE.js} +4 -4
- package/dist/{chunk-B4SPJFNB.js.map → chunk-YOA3UVDE.js.map} +1 -1
- package/dist/{chunk-HYESKIWZ.js → chunk-ZNWNJZSM.js} +4 -4
- package/dist/{chunk-HYESKIWZ.js.map → chunk-ZNWNJZSM.js.map} +1 -1
- package/dist/{chunk-MY3ZH5BA.js → chunk-ZZA7L3RI.js} +6 -6
- package/dist/{chunk-MY3ZH5BA.js.map → chunk-ZZA7L3RI.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 +12 -11
- package/dist/components/home/index.js +15 -14
- package/dist/components/layout/index.js +5 -5
- package/dist/components/product/index.js +13 -12
- package/dist/components/store/index.js +14 -13
- package/dist/components/store/index.js.map +1 -1
- package/dist/document-class-5BBGX5LN.js +24 -0
- package/dist/{document-class-BQBALA53.js.map → document-class-5BBGX5LN.js.map} +1 -1
- package/dist/hooks/index.js +12 -11
- package/dist/hooks/registerDefaultHooks.d.ts.map +1 -1
- package/dist/hooks/useGtm.js +12 -11
- package/dist/hooks/useMoney.js +12 -11
- package/dist/hooks/useStore.js +12 -11
- package/dist/hooks/useUser.js +5 -5
- package/dist/index.js +12 -11
- package/dist/index.js.map +1 -1
- package/dist/{navigation-B6TEUWEK.js → navigation-D7QS3NK2.js} +4 -4
- package/dist/{navigation-B6TEUWEK.js.map → navigation-D7QS3NK2.js.map} +1 -1
- package/dist/{navigation-RYSVWICZ.js → navigation-DQNNT2LY.js} +5 -5
- package/dist/{navigation-RYSVWICZ.js.map → navigation-DQNNT2LY.js.map} +1 -1
- package/dist/{not-found-OPY73PW5.js → not-found-QM2L2D7P.js} +14 -13
- package/dist/not-found-QM2L2D7P.js.map +1 -0
- package/dist/providers/index.js +12 -11
- package/dist/routes/account/orders.js +6 -6
- package/dist/routes/account.js +14 -14
- package/dist/routes/blog.js +10 -10
- package/dist/routes/brands.js +6 -6
- package/dist/routes/cart.js +20 -19
- package/dist/routes/cart.js.map +1 -1
- package/dist/routes/home.js +17 -16
- package/dist/routes/index.js +3 -3
- package/dist/routes/loyalty.js +6 -6
- package/dist/routes/page.js +6 -6
- package/dist/routes/product-listing.js +17 -16
- package/dist/routes/product-listing.js.map +1 -1
- package/dist/routes/product.js +15 -14
- package/dist/routes/product.js.map +1 -1
- package/dist/routes/root/head.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 +6 -6
- package/dist/skeleton.js +17 -16
- package/dist/tanstack/middleware/twilight.d.ts.map +1 -1
- package/dist/tanstack.js +17 -15
- package/dist/tanstack.js.map +1 -1
- package/dist/twilight/context.d.ts +22 -5
- package/dist/twilight/context.d.ts.map +1 -1
- package/dist/utils/cookies.d.ts +46 -6
- package/dist/utils/cookies.d.ts.map +1 -1
- package/dist/utils/fast-checkout.d.ts +4 -0
- package/dist/utils/fast-checkout.d.ts.map +1 -0
- package/dist/utils/index.js +4 -4
- package/dist/utils/runtime-env.d.ts +13 -0
- package/dist/utils/runtime-env.d.ts.map +1 -1
- package/dist/utils/theme-version.d.ts +33 -0
- package/dist/utils/theme-version.d.ts.map +1 -0
- package/dist/vite/index.js +2 -2
- package/package.json +1 -1
- package/dist/BlogAuthorPage-FTVPPHHS.js.map +0 -1
- package/dist/BlogCategoryPage-TJFW7DDI.js.map +0 -1
- package/dist/BlogPage-RD4JUGKY.js.map +0 -1
- package/dist/BlogSinglePage-DVZX3WVW.js.map +0 -1
- package/dist/BlogTagPage-UON2ASKW.js.map +0 -1
- package/dist/BrandsPage-R4KTDEG3.js.map +0 -1
- package/dist/Breadcrumb-YNVX6ZXO.js.map +0 -1
- package/dist/CartItem-6P4AB6LQ.js.map +0 -1
- package/dist/CartSummary-A25PNJSY.js.map +0 -1
- package/dist/CustomerLayout-JNUTNHBA.js.map +0 -1
- package/dist/LoyaltyPage-EHRGBXF6.js.map +0 -1
- package/dist/MobileMenu-5OJEI2CQ.js.map +0 -1
- package/dist/NotificationsPage-U4ULROLR.js.map +0 -1
- package/dist/OrderSinglePage-O2ODTG33.js.map +0 -1
- package/dist/OrdersPage-72RXJGSH.js.map +0 -1
- package/dist/ProfilePage-GVYL5NVL.js.map +0 -1
- package/dist/SeoCartWidget-KHDAMXBG.js.map +0 -1
- package/dist/SettingsPage-ZCLDJNHY.js.map +0 -1
- package/dist/ThankYouPage-MPF4V5T3.js.map +0 -1
- package/dist/WalletPage-XVEZKUCP.js.map +0 -1
- package/dist/WishlistPage-MALKVYV4.js.map +0 -1
- package/dist/chunk-5ACY5CD3.js.map +0 -1
- package/dist/chunk-6EBQ27KE.js.map +0 -1
- package/dist/chunk-DLDDKPRN.js.map +0 -1
- package/dist/chunk-IN5RFJF2.js +0 -14
- package/dist/chunk-WXOABH6J.js.map +0 -1
- package/dist/chunk-Y5FBDMFV.js.map +0 -1
- package/dist/chunk-Z2BE6MDB.js.map +0 -1
- package/dist/document-class-BQBALA53.js +0 -23
- package/dist/not-found-OPY73PW5.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/cart/CartItem.tsx"],"names":[],"mappings":"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","file":"CartItem-6P4AB6LQ.js","sourcesContent":["import type { Money, CartItem as CartItemType } from '../../types';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useMoney } from '../../hooks/useMoney';\nimport { Link, Image } from '../common';\nimport { SallaCartItemOffers } from '@salla.sa/twilight-components-react/cart-item-offers';\nimport { SallaQuantityInput } from '@salla.sa/twilight-components-react/quantity-input';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaProductOptions } from '@salla.sa/twilight-components-react/product-options';\n\ninterface CartItemProps {\n item: CartItemType;\n isFirst?: boolean;\n}\n\nfunction toNumber(value: number | Money | undefined): number | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'number') return value;\n return value.amount;\n}\n\nfunction moneyCurrency(value: number | Money | undefined): string | undefined {\n if (typeof value !== 'object') return undefined;\n return value.currency;\n}\n\nconst handleChange = (e: React.ChangeEvent<HTMLFormElement>) => {\n window.salla?.form.onChange('cart.updateItem', e);\n};\n\nexport function CartItem({ item, isFirst = false }: CartItemProps) {\n const { t } = useTranslation();\n const { format } = useMoney();\n\n const handleDelete = async () => {\n await window.salla?.cart.deleteItem(item.id);\n document.querySelector(`#item-${item.id}`)?.remove();\n };\n\n const isFreeProduct = toNumber(item.price) === 0 && item.has_discount;\n\n return (\n <form onChange={handleChange} id={`item-${item.id}`}>\n <section className=\"cart-item bg-white p-5 xs:p-7 rounded-md mb-5 relative\">\n <input type=\"hidden\" name=\"id\" value={item.id} />\n\n <div className=\"md:flex rtl:space-x-reverse md:space-x-12 items-start justify-between mb-8 last:mb-0\">\n <div className=\"flex flex-1 rtl:space-x-reverse space-x-4\">\n <Link to={item.url} className=\"relative overflow-hidden shrink-0\">\n <Image\n src={item.product_image}\n alt={item.product_name}\n className=\"flex-none w-24 h-20 border border-gray-200 bg-gray-100 rounded-md object-center object-cover\"\n aspectRatio=\"6/5\"\n priority={isFirst}\n />\n\n {isFreeProduct && (\n <div className=\"free-ribbon absolute top-[11px] right-[-38px] w-32 bg-red-600 text-white text-xs font-bold text-center py-1 rotate-45 shadow-md\">\n {/* Twig: trans('pages.loyalty_program.free_product') */}\n {t('pages.loyalty_program.free_product', 'Free')}\n </div>\n )}\n </Link>\n\n <div className=\"space-y-1\">\n <div className=\"text-gray-900 leading-6 text-lg font-bold\">\n <Link to={item.url} className=\"text-base\">\n {item.product_name}\n </Link>\n </div>\n\n <div className=\"flex items-center gap-2 flex-wrap\">\n {item.offer && (\n <span className=\"text-sm text-gray-500 line-through item-regular-price\">\n {format(toNumber(item.product_price), {\n currency: moneyCurrency(item.product_price),\n })}\n </span>\n )}\n\n {item.is_on_sale && (\n <span className=\"inline-flex gap-1 leading-4 text-sm text-gray-500 line-through item-original-price\">\n {format(toNumber(item.original_price), {\n currency: moneyCurrency(item.original_price),\n })}\n </span>\n )}\n\n <span\n className={`inline-flex gap-1 leading-4 item-price ${item.has_discount ? 'text-red-800' : 'text-sm text-gray-500'}`}\n >\n {format(toNumber(item.price), { currency: moneyCurrency(item.price) })}\n </span>\n </div>\n\n {item.weight_label && (\n <p className=\"text-sm text-gray-500\">\n {t('pages.cart.weight', 'Weight')}: <span>{item.weight_label}</span>\n </p>\n )}\n\n {/* Twig: class=\"{{ item.detailed_offers ? 'hidden' : '' }}\" — hide old offer when detailed_offers present */}\n {item.offer && !item.detailed_offers?.length && (\n <span className=\"old-offers flex items-center gap-1 mx-1.5\">\n <i className=\"sicon-discount-calculator text-gray-500 offer-icon\"></i>\n <span className=\"text-sm text-gray-500 offer-name\">{item.offer.names}</span>\n </span>\n )}\n\n {item.detailed_offers && item.detailed_offers.length > 0 && (\n <SallaCartItemOffers\n quantity={item.quantity}\n itemId={String(item.id) as any}\n productPrice={toNumber(item.product_price) ?? 0}\n offers={JSON.stringify(item.detailed_offers)}\n />\n )}\n </div>\n </div>\n\n <div className=\"border-t border-b border-gray-200 py-3 md:p-0 md:border-none mt-5 md:mt-0 flex gap-8 justify-between items-center md:items-start\">\n {item.type === 'donating' ? (\n <span></span>\n ) : item.is_hidden_quantity ? (\n <>\n <input\n type=\"hidden\"\n value={item.quantity}\n name=\"quantity\"\n aria-label={t('pages.products.quantity', 'Quantity')}\n />\n <span className=\"w-10 text-center\">{item.quantity}</span>\n </>\n ) : (\n <SallaQuantityInput\n cartItemId={item.id}\n max={item.max_quantity ?? undefined}\n className=\"transition transition-color duration-300\"\n aria-label={t('pages.products.quantity', 'Quantity')}\n value={item.quantity}\n name=\"quantity\"\n />\n )}\n\n <p className=\"text-primary flex-none font-bold text-sm rtl:md:pl-12 ltr:md:pr-12\">\n <span>{t('pages.cart.total', 'Total')}:</span>\n <span className=\"inline-block item-total\">\n {item.is_available\n ? item.detailed_offers?.length\n ? format(toNumber(item.total_special_price), {\n currency: moneyCurrency(item.total_special_price),\n })\n : format(toNumber(item.total), { currency: moneyCurrency(item.total) })\n : t('pages.products.out_of_stock', 'Out of Stock')}\n </span>\n </p>\n </div>\n </div>\n\n {/* Twig: {% include 'pages.partials.product.options' with {product:item} %} */}\n {item.options && item.options.length > 0 && (\n <SallaProductOptions options={JSON.stringify(item.options)} productId={item.product_id} />\n )}\n\n <span className=\"absolute top-1.5 rtl:left-1.5 ltr:right-1.5 rtl:xs:left-5 ltr:xs:right-5 xs:top-5\">\n <SallaButton\n type=\"button\"\n shape=\"icon\"\n size=\"small\"\n color=\"danger\"\n className=\"btn--delete\"\n ariaLabel={t('common.elements.remove', 'Remove from the cart')}\n onClick={handleDelete}\n >\n <i className=\"sicon-cancel\"></i>\n </SallaButton>\n </span>\n </section>\n </form>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/cart/CartSummary.tsx"],"names":[],"mappings":"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","file":"CartSummary-A25PNJSY.js","sourcesContent":["import { useCallback } from 'react';\nimport { HookSlot } from '../../hooks/HookSlot';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useCoupon } from '../../hooks/useCoupon';\nimport { useMoney } from '../../hooks/useMoney';\nimport { stripUnsafeHtml } from '../../utils/sanitize';\nimport { SallaLoyalty } from '@salla.sa/twilight-components-react/loyalty';\nimport { SallaGifting } from '@salla.sa/twilight-components-react/gifting';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaTieredOffer } from '@salla.sa/twilight-components-react/tiered-offer';\nimport type { Cart } from '../../types';\n\ninterface CartSummaryProps {\n cart: Cart;\n applyCouponEnabled?: boolean;\n taxAmount?: number;\n loyalty?: Cart['loyalty'];\n gift?: Cart['gift'];\n loyaltyPoints?: number;\n}\n\nexport function CartSummary({\n cart,\n applyCouponEnabled = true,\n taxAmount,\n loyalty,\n gift,\n loyaltyPoints,\n}: CartSummaryProps) {\n const { t } = useTranslation();\n const { format } = useMoney();\n\n const handleCartSubmit = useCallback(async () => {\n try {\n await window.salla?.cart.submit();\n } catch {\n // Error handling\n }\n }, []);\n\n return (\n <div className=\"sticky top-24 w-full lg:w-96 rtl:lg:mr-8 ltr:lg:ml-8\">\n <HookSlot name=\"cart:summary.start\" />\n {cart.free_shipping_bar && <FreeShippingBar freeShippingBar={cart.free_shipping_bar} />}\n\n {/* Twig: {% if loyalty and user.loyalty_points %} — top-level page vars rendered inside sidebar */}\n {loyalty && loyaltyPoints && (\n <div className=\"shadow-default mb-5 rounded-md p-3 xs:p-7 bg-white\">\n <SallaLoyalty\n customerPoints={loyaltyPoints}\n prizePoints={loyalty.prize.points}\n prizeTitle={loyalty.prize.title}\n />\n </div>\n )}\n\n {/* Twig: {{gift.enabled ? '' : 'hidden'}} — top-level page var rendered inside sidebar */}\n {gift?.enabled && (\n <div id=\"cart-gifting\" className=\"shadow-default bg-white xs:p-2 rounded-md mb-5 relative\">\n <SallaGifting\n id=\"salla-gifting\"\n className=\"mt-5\"\n widgetTitle={t('pages.cart.gift_widget_title', 'Send as a gift')}\n widgetSubtitle={gift.text}\n {...(gift.type ? { [gift.type + 'Products']: true } : {})}\n vertical\n />\n </div>\n )}\n\n <div className=\"shadow-default bg-white p-5 xs:p-7 rounded-md mb-5 relative transition-height duration-1000\">\n <h2 className=\"font-bold text-sm mb-5\">{t('pages.cart.summary', 'Order Summary')}</h2>\n\n <div className=\"flex justify-between text-sm mb-5\">\n <span className=\"text-gray-500\">\n {taxAmount\n ? t('pages.cart.items_total_without_tax', 'Items total (excl. tax)')\n : t('pages.cart.items_total', 'Items total')}\n </span>\n <b id=\"sub-total\">{format(cart.sub_total)}</b>\n </div>\n\n {cart.options?.length > 0 && (\n <div className=\"flex justify-between text-sm mb-5\">\n <span className=\"text-gray-500\">\n {t('pages.cart.order_options_total', 'Options total')}\n </span>\n <b id=\"cart-options-total\">{format(cart.options_total ?? undefined)}</b>\n </div>\n )}\n\n {cart.has_shipping && (\n <div id=\"shipping-cost\" className=\"flex justify-between text-sm mb-5\">\n <span className=\"text-gray-500\">{t('pages.cart.shipping_cost', 'Shipping cost')}</span>\n <b>{format(cart.real_shipping_cost)}</b>\n </div>\n )}\n\n {applyCouponEnabled && <CouponInput initialCoupon={cart.coupon ?? undefined} />}\n\n {!!cart.total_discount && (\n <div id=\"total-discount\" className=\"flex justify-between text-sm\">\n <span className=\"text-gray-500 block h-10\">{t('pages.cart.discount', 'Discount')}</span>\n <b>- {format(cart.total_discount)}</b>\n </div>\n )}\n\n {!!taxAmount && (\n <div className=\"flex justify-between text-sm mb-5\">\n <span className=\"text-gray-500\">\n {t('pages.cart.VAT_tax_amount', 'VAT Tax Amount')}\n </span>\n <b id=\"tax-amount\">{format(taxAmount)}</b>\n </div>\n )}\n\n <div className=\"flex justify-between text-lg mb-5\">\n <span className=\"text-gray-500\">{t('pages.cart.final_total', 'Total')}</span>\n <b data-cart-total>{format(cart.total)}</b>\n </div>\n\n <div className=\"cart-submit-wrap\">\n <HookSlot name=\"cart:submit.start\" />\n <SallaButton\n id=\"cart-submit\"\n loaderPosition=\"center\"\n width=\"wide\"\n onClick={handleCartSubmit}\n >\n {t('pages.cart.complete_order', 'Complete Order')}\n </SallaButton>\n <HookSlot name=\"cart:submit.end\" />\n </div>\n\n <HookSlot name=\"cart:summary.end\" />\n </div>\n\n <SallaTieredOffer />\n </div>\n );\n}\n\nfunction FreeShippingBar({\n freeShippingBar,\n}: {\n freeShippingBar: NonNullable<Cart['free_shipping_bar']>;\n}) {\n const isFree = freeShippingBar.has_free_shipping;\n const { t } = useTranslation();\n\n return (\n <div className=\"shadow-default bg-white p-5 xs:p-7 rounded-md mb-5 relative\" id=\"free-shipping\">\n <div className=\"flex rtl:space-x-reverse space-x-3 items-center\">\n <i className=\"bg-primary text-white rounded-icon sicon-shipping-fast\"></i>\n <div className=\"flex-1\">\n <h4 className=\"shipping-item font-bold text-sm mb-1.5\">\n {t('pages.cart.free_shipping', 'Free Shipping')}\n </h4>\n <p className=\"shipping-item text-sm text-gray-500\">\n {isFree ? (\n <>\n <span\n id=\"free-shipping-msg\"\n dangerouslySetInnerHTML={{\n __html: stripUnsafeHtml(\n t('pages.cart.has_free_shipping', 'You have free shipping!')\n ),\n }}\n />\n <span className=\"emoji\" id=\"free-shipping-applied\">\n 🎉\n </span>\n </>\n ) : (\n <span\n id=\"free-shipping-msg\"\n dangerouslySetInnerHTML={{\n __html: stripUnsafeHtml(\n t(\n 'pages.cart.free_shipping_alert',\n 'Get free shipping when you add :amount more'\n ).replace(':amount', String(freeShippingBar.remaining))\n ),\n }}\n />\n )}\n </p>\n </div>\n </div>\n {!isFree && (\n <div className=\"mt-8 bg-border-color rounded-full\" id=\"free-shipping-bar\">\n <div\n className=\"progress-bg transition-all duration-500 h-2.5 bg-primary relative rounded-full flex justify-end\"\n style={{ width: `${freeShippingBar.percent}%` }}\n >\n <i className=\"inline-block sicon-shipping-fast absolute -top-5 rtl:left-0 ltr:right-0\"></i>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction CouponInput({ initialCoupon }: { initialCoupon?: string }) {\n const { t } = useTranslation();\n const { value, error, apply, remove } = useCoupon();\n\n // Use initial coupon from cart if available\n const appliedCoupon = value ?? initialCoupon;\n\n const handleApplyCoupon = useCallback(\n async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const formData = new FormData(event.currentTarget);\n const code = formData.get('coupon') as string;\n if (code?.trim()) {\n await apply(code.trim());\n }\n },\n [apply]\n );\n\n const handleRemoveCoupon = useCallback(async () => {\n await remove();\n }, [remove]);\n\n return (\n <form className=\"border-t border-gray-200 border-b py-5 mb-5\" onSubmit={handleApplyCoupon}>\n <label htmlFor=\"coupon-input\" className=\"block text-sm\">\n {t('pages.cart.have_coupon', 'Have a coupon?')}\n </label>\n <div className=\"mt-2.5 relative\">\n <input\n placeholder={t('pages.cart.coupon_placeholder', 'Enter coupon code')}\n disabled={!!appliedCoupon}\n className=\"rtl:pl-24 ltr:pr-24 form-input\"\n defaultValue={appliedCoupon}\n id=\"coupon-input\"\n name=\"coupon\"\n aria-label={t('pages.cart.apply_coupon', 'Apply coupon')}\n type=\"text\"\n />\n\n <SallaButton\n type=\"submit\"\n className={`btn--coupon ${appliedCoupon ? 'has-coupon btn--danger' : 'has-not-coupon btn--default'}`}\n loaderPosition=\"center\"\n onClick={appliedCoupon ? handleRemoveCoupon : undefined}\n >\n <span className=\"coupon-text\">\n {appliedCoupon ? '' : t('pages.cart.apply_coupon_btn', 'Apply')}\n </span>\n {appliedCoupon && <i className=\"sicon-cancel icon text-xl w-8\"></i>}\n </SallaButton>\n </div>\n {error && (\n <span className=\"text-xs text-red-700\" id=\"coupon-error\">\n {error}\n </span>\n )}\n </form>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/CustomerLayout.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,IAAA,EAAK,EAAwB;AACtE,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,OAAA,EAAQ;AAE/B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,kBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,6DAAA,EACZ,QAAA,EAAA,IAAA,oBAAQ,GAAA,CAAC,cAAA,EAAA,EAAW,IAAA,EAAY,SAAA,EAAU,oCAAA,EAAqC,GAClF,CAAA,EACF,CAAA;AAAA,wBAGC,KAAA,EAAA,EAAI,SAAA,EAAU,sBACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sDAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,YAAA,EAAW,SAAA;AAAA,UACX,SAAA,EAAU,yJAAA;AAAA,UAET,QAAA,EAAA;AAAA,YAAA,IAAA,EAAM,IAAA,KAAS,SAAA,oBACd,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uEAAA,EACb,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,YAAA,EAAY,IAAA,EAAC,KAAA,EAAO,IAAA,EAAM,MAAA,EACzC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4EAAA,EACd,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAoC,CAAA,EACtD,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAAA,4BAGF,GAAA,CAAC,SAAI,SAAA,EAAU,iBAAA,EACb,8BAAC,aAAA,EAAA,EAAc,MAAA,EAAM,MAAC,CAAA,EACxB;AAAA;AAAA;AAAA,OACF;AAAA,sBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACZ,QAAA,EAAA;AAAA,QAAA,IAAA,EAAM,yBACL,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uEAAA,EACX,eAAK,KAAA,EACR,CAAA;AAAA,QAED;AAAA,OAAA,EACH;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"CustomerLayout-JNUTNHBA.js","sourcesContent":["import { useUser } from '../../hooks';\nimport { SallaFileUpload } from '@salla.sa/twilight-components-react/file-upload';\nimport { SallaUserMenu } from '@salla.sa/twilight-components-react/user-menu';\nimport { Breadcrumb } from '../common';\nimport type { LayoutProps } from './types';\nimport type { Page } from '../../types';\n\ninterface CustomerLayoutProps extends LayoutProps {\n page?: Page;\n}\n\nexport function CustomerLayout({ children, page }: CustomerLayoutProps) {\n const { data: user } = useUser();\n\n return (\n <>\n <div className=\"profile-header gradient-bg\">\n <div className=\"container relative flex justify-between h-full items-center\">\n {page && <Breadcrumb page={page} className=\"breadcrumbs w-full py-5 self-start\" />}\n </div>\n </div>\n\n {/* Main content area */}\n <div className=\"container lg:mb-24\">\n <div className=\"flex items-start flex-col lg:flex-row justify-center\">\n <nav\n aria-label=\"Sidebar\"\n className=\"shrink-0 lg:sticky top-24 lg:-mt-28 lg:shadow-default rounded-md lg:bg-white w-full lg:w-72 rtl:lg:ml-8 ltr:lg:mr-8 lg:pt-8 lg:pb-11 sidebar space-y-px\"\n >\n {page?.slug === 'profile' && (\n <div className=\"text-center md:mb-9\">\n <div className=\"h-20 w-20 m-auto avatar-wrap bg-gray-100 rounded-full overflow-hidden\">\n <SallaFileUpload profileImage value={user?.avatar}>\n <span className=\"avatar-placeholder flex justify-center items-center flex-col w-full h-full\">\n <span className=\"sicon-user text-2xl text-gray-400\"></span>\n </span>\n </SallaFileUpload>\n </div>\n </div>\n )}\n\n <div className=\"hidden lg:block\">\n <SallaUserMenu inline />\n </div>\n </nav>\n\n <div className=\"main-content w-full flex-1 lg:pt-10 max-w-3xl\">\n {page?.title && (\n <h1 className=\"font-bold text-lg text-center sm:rtl:text-right sm:ltr:text-left mb-2\">\n {page.title}\n </h1>\n )}\n {children}\n </div>\n </div>\n </div>\n </>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/loyalty/LoyaltyPage.tsx"],"names":[],"mappings":"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","file":"LoyaltyPage-EHRGBXF6.js","sourcesContent":["import { useCopyToClipboard } from '@uidotdev/usehooks';\nimport { SallaLoyalty } from '@salla.sa/twilight-components-react/loyalty';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaSlider } from '@salla.sa/twilight-components-react/slider';\nimport type { LoyaltyPageProps } from './types';\nimport { Breadcrumb, Link, Image } from '../../components/common';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { useUser } from '../../hooks';\nimport { useQuery } from '@tanstack/react-query';\nimport { loyalty } from '../../api/loyalty';\n\nexport function LoyaltyPage({ loyalty: loyaltyData, page }: LoyaltyPageProps) {\n const { data: user } = useUser();\n const { t } = useTranslation();\n const [, copyToClipboard] = useCopyToClipboard();\n const { data: customerPoints } = useQuery(loyalty.queries.points());\n\n return (\n <>\n <div\n className=\"h-62 -mb-52 w-full bg-primary rtl:right-0 ltr:left-0 relative -z-1 bg-cover bg-no-repeat bg-center\"\n style={{ backgroundImage: loyaltyData.image ? `url(${loyaltyData.image})` : undefined }}\n >\n <div className=\"overlay h-full w-full bg-black opacity-50 absolute top-0 left-0\"></div>\n </div>\n\n <div className=\"container space-y-8 lg:space-y-16\">\n <Breadcrumb page={page} />\n\n {/* Loyalty Banner */}\n <div className=\"loyalty__banner\">\n <div className=\"loyalty__banner-inner\">\n <i className=\"sicon-star2 star-anime text-amber-400 text-7xl\"></i>\n <div className=\"loyalty__banner-content\">\n <div className=\"info\">\n <h1>{loyaltyData.name}</h1>\n <p>{loyaltyData.description}</p>\n {customerPoints != null && (\n <div className=\"loyalty-points\">\n {t('pages.loyalty_program.you_have')}{' '}\n <span className=\"count-number count-anime\">{customerPoints}</span>{' '}\n {t('pages.loyalty_program.point')}\n </div>\n )}\n </div>\n\n <SallaLoyalty customerPoints={customerPoints ?? undefined}>\n <span slot=\"widget\">\n <SallaButton\n onClick={() =>\n (\n document.querySelector('salla-loyalty') as HTMLElement & {\n open: () => void;\n }\n )?.open()\n }\n >\n {t('pages.loyalty_program.exchange_points')}\n </SallaButton>\n </span>\n </SallaLoyalty>\n </div>\n </div>\n\n {/* Background stars */}\n <div className=\"loyalty-star loyalty-star--first\">\n <i className=\"sicon-star2\"></i>\n </div>\n <div className=\"loyalty-star loyalty-star--second\">\n <i className=\"sicon-star2\"></i>\n </div>\n </div>\n\n {/* Ways to get points */}\n <section className=\"points-ways pt-6\">\n <div className=\"s-block__title\">\n <h2>{t('pages.loyalty_program.ways_to_get_points')}</h2>\n </div>\n <div className=\"points-ways__list\">\n {loyaltyData.points.map((point) => (\n <div key={point.id ?? point.key ?? point.name} className=\"way-item\">\n <div className=\"flex rtl:space-x-reverse space-x-4\">\n <span\n className={`way-item__icon ${point.icon || 'sicon-star'}`}\n style={{ color: point.color }}\n >\n <span style={{ backgroundColor: point.color }}></span>\n </span>\n <div className=\"way-item__content\">\n <h3 style={{ color: point.color }}>\n {point.points} {t('pages.loyalty_program.point')}\n </h3>\n <p>{point.description}</p>\n </div>\n </div>\n\n {user?.type === 'user' && (\n <div className=\"way-item__action\">\n {point.type === 'share' && point.url ? (\n <div className=\"border relative border-primary rounded-3xl h-[34px] text-center pr-14 pl-5\">\n <SallaButton\n onClick={() => point.url && copyToClipboard(point.url)}\n shape=\"link\"\n className=\"absolute w-12 top-0 right-0 h-full px-3 !pt-1 border-l border-primary hover:opacity-80\"\n ariaLabel={t('pages.loyalty_program.copy_link')}\n >\n <i className=\"copy-icon sicon-swap-fill\"></i>\n </SallaButton>\n <h3\n className=\"font-bold text-sm leading-8 whitespace-nowrap text-ellipsis overflow-hidden text-primary\"\n dir=\"ltr\"\n >\n {point.url}\n </h3>\n </div>\n ) : point.type === 'profile' ? (\n <div className=\"text-green-500 text-center border relative border-green-300 rounded-3xl bg-green-50 min-h-[34px] w-full pt-1 px-4\">\n <i className=\"sicon-check-circle d-inline-block\"></i>\n <span className=\"break-all\">{t('pages.loyalty_program.completed')}</span>\n </div>\n ) : (\n <SallaButton\n fill=\"outline\"\n width=\"wide\"\n href={point.url}\n className=\"!rounded-3xl text-sm !py-1.5\"\n >\n {point.name}\n </SallaButton>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </section>\n\n {/* Prizes */}\n {loyaltyData.prizes.map((prizeGroup) => (\n <div key={`${prizeGroup.type}:${prizeGroup.title}`}>\n <SallaSlider\n type=\"carousel\"\n loop={prizeGroup.items.length < 4 ? false : true}\n blockTitle={prizeGroup.title}\n id={`loyalty-slider-${prizeGroup.type}`}\n sliderConfig={{ watchOverflow: true }}\n >\n <div slot=\"items\">\n {prizeGroup.items.map((prize) => (\n <div key={prize.id} className=\"slide--one-fourth\">\n <div className=\"product-entry flex-col\">\n {prize.url ? (\n <Link to={prize.url} className=\"product-entry__image h-40\">\n <Image\n className=\"sm:h-full w-full object-cover rounded-t-md\"\n src={prize.image}\n alt={prize.name}\n aspectRatio=\"1/1\"\n />\n </Link>\n ) : (\n <Image\n className=\"sm:h-full w-full object-cover rounded-t-md\"\n src={prize.image}\n alt={prize.name}\n aspectRatio=\"1/1\"\n />\n )}\n <div className=\"flex-1 p-5\">\n <h3 className=\"product-entry__title leading-6 mb-2.5\">\n {prize.url ? <Link to={prize.url}>{prize.name}</Link> : prize.name}\n </h3>\n {prize.description && (\n <p className=\"text-sm leading-6\">{prize.description}</p>\n )}\n </div>\n {user?.type === 'user' && (\n <div className=\"font-bold text-primary p-4 text-center border-t\">\n {prize.cost_points} {t('pages.loyalty_program.point')}\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n </SallaSlider>\n </div>\n ))}\n </div>\n </>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/MobileMenu.tsx"],"names":["MobileMenuSkeleton"],"mappings":"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","file":"MobileMenu-5OJEI2CQ.js","sourcesContent":["import { useState, useCallback, useEffect, memo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { Drawer } from '../../components/drawer';\nimport { Link } from '../common';\nimport { menu } from '../../api/menu';\nimport type { MenuItem } from '../../types';\n\nexport interface MobileMenuProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nconst MOBILE_SKELETON_ITEMS = 5;\nconst SKELETON_WIDTHS = ['w-32', 'w-28', 'w-36', 'w-24', 'w-30'];\n\nconst MobileMenuSkeleton = memo(function MobileMenuSkeleton() {\n return (\n <ul className=\"divide-y divide-gray-100\">\n {Array.from({ length: MOBILE_SKELETON_ITEMS }, (_, i) => (\n <li key={i} className=\"py-4\">\n <span\n className={`inline-block animate-pulse rounded bg-gray-200 h-5 ${SKELETON_WIDTHS[i]}`}\n />\n </li>\n ))}\n </ul>\n );\n});\n\nexport function MobileMenu(props: MobileMenuProps) {\n if (!props.isOpen) return null;\n return <MobileMenuContent {...props} />;\n}\n\nfunction MobileMenuContent({ onClose }: MobileMenuProps) {\n const { theme } = useTwilight();\n const { data: menus = [], isLoading } = useQuery(menu.queries.header());\n const { t } = useTranslation();\n\n const [menuStack, setMenuStack] = useState<{ title: string; items: MenuItem[] }[]>([]);\n const [isAnimating, setIsAnimating] = useState(false);\n\n const currentLevel = menuStack[menuStack.length - 1] ?? { title: '', items: menus };\n const isRootLevel = menuStack.length === 0;\n\n const openSubmenu = useCallback((item: MenuItem) => {\n if (item.children && item.children.length > 0) {\n setIsAnimating(true);\n setMenuStack((prev) => [...prev, { title: item.title, items: item.children! }]);\n requestAnimationFrame(() => {\n setIsAnimating(false);\n });\n }\n }, []);\n\n const goBack = useCallback(() => {\n setIsAnimating(true);\n setMenuStack((prev) => prev.slice(0, -1));\n requestAnimationFrame(() => {\n setIsAnimating(false);\n });\n }, []);\n\n useEffect(() => {\n document.body.classList.add('menu-opened');\n return () => document.body.classList.remove('menu-opened');\n }, []);\n\n const getListAnimationClass = () => {\n if (isAnimating) {\n return theme.is_rtl ? 'translate-x-4 opacity-0' : '-translate-x-4 opacity-0';\n }\n return 'translate-x-0 opacity-100';\n };\n\n return (\n <>\n <Drawer\n isOpen\n onClose={onClose}\n size=\"md\"\n closeOnBackdropClick={true}\n preventBodyScroll={false}\n className=\"overflow-visible\"\n >\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={t('common.buttons.close', 'Close')}\n className=\"absolute top-0 w-12 h-12 flex items-center justify-center bg-[#d35a51] text-white hover:bg-red-600 transition-colors z-50 ltr:-right-12 rtl:-left-12\"\n >\n <i className=\"sicon-cancel text-xl leading-none\"></i>\n </button>\n\n <Drawer.Header showCloseButton={false} onClose={onClose}>\n <div className=\"flex items-center gap-2 w-full\">\n {!isRootLevel && (\n <button\n type=\"button\"\n className=\"text-gray-500 hover:text-gray-800 transition-colors flex-shrink-0\"\n onClick={goBack}\n aria-label={t('common.buttons.back', 'Back')}\n >\n <i className=\"sicon-keyboard_arrow_left text-xl flex items-center justify-center\"></i>\n </button>\n )}\n <span className=\"font-bold text-lg truncate flex-1 text-center pr-6 rtl:pl-6 rtl:pr-0\">\n {isRootLevel ? t('blocks.header.main_menu', 'Menu') : currentLevel.title}\n </span>\n </div>\n </Drawer.Header>\n <Drawer.Body className=\"p-0 overflow-hidden\">\n <nav className=\"mobile-menu h-full overflow-y-auto\">\n {isLoading ? (\n <MobileMenuSkeleton />\n ) : (\n <ul\n className={`divide-y divide-gray-100 transition-all duration-200 ease-out ${getListAnimationClass()}`}\n >\n {currentLevel.items.map((item) => {\n const hasChildren =\n item.has_children && item.children && item.children.length > 0;\n\n return (\n <li key={item.id} className=\"mobile-menu-item\">\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"flex items-center justify-between w-full py-4 hover:text-primary transition-colors text-start group\"\n onClick={() => openSubmenu(item)}\n >\n <span className=\"text-gray-800 group-hover:text-primary font-medium text-base\">\n {item.title}\n </span>\n <i className=\"sicon-keyboard_arrow_right rtl:rotate-180 text-gray-500 group-hover:text-primary text-lg flex items-center justify-center h-full\"></i>\n </button>\n ) : (\n <Link\n to={item.url}\n className=\"block w-full py-4 hover:text-primary transition-colors text-gray-800 font-medium text-base group\"\n onClick={onClose}\n >\n <span className=\"group-hover:translate-x-1 rtl:group-hover:-translate-x-1 inline-block transition-transform\">\n {item.title}\n </span>\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </nav>\n </Drawer.Body>\n </Drawer>\n </>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/account/notifications/NotificationsPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,SAAS,gBAAA,CAAiB,EAAE,YAAA,EAAa,EAAmC;AAC1E,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,MAAM,YAAA,CAAa,GAAA;AAAA,MACnB,SAAA,EAAW,CAAA,gDAAA,EAAmD,YAAA,CAAa,OAAA,GAAU,+BAA+B,EAAE,CAAA,CAAA;AAAA,MAEtH,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2BAAA,EACd,QAAA,kBAAA,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,WAAW,CAAA,yCAAA,EAA4C,CAAC,YAAA,CAAa,OAAA,GAAU,mCAAmC,EAAE,CAAA;AAAA;AAAA,SACrH,EACH,CAAA;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAI,uBAAa,KAAA,EAAM,CAAA;AAAA,4BACxB,GAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,YAAA,CAAa,IAAA,EAAK;AAAA,WAAA,EACxB,CAAA;AAAA,0BACA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EACd,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,uDAAA,EAAwD,CAAA;AAAA,4BACrE,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,YAAA,CAAa,QAAA,EAAS;AAAA,WAAA,EAC/B;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,iBAAA,CAAkB,EAAE,aAAA,EAAc,EAA2B;AAC3E,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,oCAAA,EAAqC,CAAA;AAAA,oBACpD,GAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EACZ,wBAAc,MAAA,GAAS,CAAA,mBACtB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,wBAAc,GAAA,CAAI,CAAC,IAAA,qBAClB,GAAA,CAAC,gBAAA,EAAA,EAA+B,YAAA,EAAc,QAAvB,IAAA,CAAK,EAAwB,CACrD,CAAA,EACH,CAAA,mBAEA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,iBAAA;AAAA,QACL,OAAA,EAAS,CAAA,CAAE,gCAAA,EAAkC,kBAAkB;AAAA;AAAA,KACjE,EAEJ,CAAA;AAAA,oBACA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,kCAAA,EAAmC;AAAA,GAAA,EACpD,CAAA;AAEJ","file":"NotificationsPage-U4ULROLR.js","sourcesContent":["import { HookSlot } from '../../../hooks';\nimport { NoContent } from '../../../components/common';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport type { NotificationsPageProps, Notification } from './types';\n\nfunction NotificationItem({ notification }: { notification: Notification }) {\n return (\n <a\n href={notification.url}\n className={`s-notifications-item s-notifications-item-shadow${notification.is_read ? ' s-notifications-item-read' : ''}`}\n >\n <span className=\"s-notifications-item-icon\">\n <i\n className={`s-notifications-item-icon sicon-bell-ring${!notification.is_read ? ' s-notifications-item-icon-new' : ''}`}\n ></i>\n </span>\n <div className=\"s-notifications-item-content\">\n <div className=\"s-notifications-item-content-leading\">\n <h4>{notification.title}</h4>\n <p>{notification.body}</p>\n </div>\n <span className=\"s-notifications-item-content-trailing\">\n <i className=\"sicon-time s-notifications-item-content-trailing-icon\"></i>\n <span>{notification.time_ago}</span>\n </span>\n </div>\n </a>\n );\n}\n\nexport function NotificationsPage({ notifications }: NotificationsPageProps) {\n const { t } = useTranslation();\n\n return (\n <>\n <HookSlot name=\"customer:notifications.items.start\" />\n <div className=\"s-notifications-wrapper\">\n {notifications.length > 0 ? (\n <div className=\"s-notifications-container space-y-2\">\n {notifications.map((item: Notification) => (\n <NotificationItem key={item.id} notification={item} />\n ))}\n </div>\n ) : (\n <NoContent\n icon=\"sicon-bell-ring\"\n message={t('blocks.header.no_notifications', 'No notifications')}\n />\n )}\n </div>\n <HookSlot name=\"customer:notifications.items.end\" />\n </>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/account/orders/OrderSinglePage.tsx"],"names":["ContentSkeleton","order"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,IAAM,eAAA,GAAkB,IAAA,CAAK,SAASA,gBAAAA,GAAkB;AACtD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAAgC,CAAA;AAAA,oBAC/C,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,oBAC/C,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EAAgC;AAAA,GAAA,EACjD,CAAA;AAEJ,CAAC,CAAA;AAEM,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAAC,MAAAA,EAAM,EAAyB;AAC/D,EAAA,MAAM,EAAE,CAAA,EAAG,SAAA,EAAU,GAAI,cAAA,EAAe;AACxC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,OAAA,EAAQ;AAC/B,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAW,GAAI,OAAA,EAAQ;AACvC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,QAAA,EAAS;AAC5B,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,KAAK,CAAA;AAE5D,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,kBAAA,KAAuB,QAAA,CAAS;AAAA,IAClE,GAAG,KAAA,CAAS,OAAA,CAAQ,UAAU,MAAA,CAAOA,MAAAA,CAAM,EAAE,CAAC,CAAA;AAAA,IAC9C,OAAA,EAASA,OAAM,QAAA,CAAS;AAAA,GACzB,CAAA;AACD,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,gBAAA,KAAqB,QAAA,CAAS;AAAA,IAC9D,GAAG,KAAA,CAAS,OAAA,CAAQ,QAAQ,MAAA,CAAOA,MAAAA,CAAM,EAAE,CAAC,CAAA;AAAA,IAC5C,OAAA,EAASA,OAAM,OAAA,CAAQ;AAAA,GACxB,CAAA;AAED,EAAA,MAAM,CAAC,YAAA,EAAc,aAAa,CAAA,GAAI,WAAW,YAAY;AAG3D,IAAA,MAAM,OAAO,KAAA,EAAO,KAAA,CAAM,oBAAoB,MAAA,CAAOA,MAAAA,CAAM,EAAE,CAAC,CAAA;AAC9D,IAAA,mBAAA,CAAoB,KAAK,CAAA;AACzB,IAAA,QAAA,CAAS,OAAO,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,QAAA,EAAUA,MAAAA,CAAM,EAAE,CAAC,CAAA;AAEvB,EAAA,MAAM,CAAC,WAAA,EAAa,YAAY,CAAA,GAAI,WAAW,YAAY;AACzD,IAAA,MAAM,OAAO,KAAA,EAAO,KAAA,CAAM,OAAO,MAAA,CAAOA,MAAAA,CAAM,EAAE,CAAC,CAAA;AACjD,IAAA,kBAAA,CAAmB,KAAK,CAAA;AAExB,IAAA,QAAA,CAAS,OAAO,QAAA,CAAS,QAAA,EAAU,EAAE,OAAA,EAAS,MAAM,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,QAAA,EAAUA,MAAAA,CAAM,EAAE,CAAC,CAAA;AAEvB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,sCAAA,EAAuC,CAAA;AAAA,oBAGtD,GAAA,CAAC,WAAM,SAAA,EAAU,uCAAA,EACf,8BAAC,OAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,0GAAA,EACZ,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,WAAU,uGAAA,EACZ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACZ,QAAA,EAAA,CAAA,CAAE,mBAAmB,CAAA,EACxB,CAAA;AAAA,4BACC,GAAA,EAAA,EAAG,QAAA,EAAA,UAAA,CAAWA,MAAAA,CAAM,UAAA,CAAW,IAAI,CAAA,EAAE;AAAA,OAAA,EACxC,CAAA;AAAA,sBAEA,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yIAAA,EACZ,QAAA,EAAA;AAAA,wBAAA,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qEAAA;AAAA,YACV,KAAA,EAAO,EAAE,KAAA,EAAOA,MAAAA,CAAM,OAAO,KAAA,EAAM;AAAA,YAElC,QAAA,EAAA;AAAA,cAAAA,MAAAA,CAAM,MAAA,CAAO,IAAA,oBAAQ,GAAA,CAAC,GAAA,EAAA,EAAE,WAAW,CAAA,KAAA,EAAQA,MAAAA,CAAM,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,CAAA;AAAA,8BACjE,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAAA,MAAAA,CAAM,OAAO,IAAA,EAAK;AAAA;AAAA;AAAA,SAC3B;AAAA,wBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACZ,QAAA,EAAA;AAAA,UAAAA,MAAAA,CAAM,SAAS,OAAA,oBACd,GAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA,CAAA,CAAE,yCAAyC,CAAA,EAC9C,CAAA;AAAA,0BAGF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8DAAA,EACZ,QAAA,EAAA;AAAA,YAAAA,MAAAA,CAAM,KAAK,eAAA,oBACV,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAMA,OAAM,IAAA,CAAK,eAAA;AAAA,gBACjB,MAAA,EAAO,QAAA;AAAA,gBACP,GAAA,EAAI,qBAAA;AAAA,gBACJ,SAAA,EAAU,kCAAA;AAAA,gBAEV,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,kBAAA,CAAA,CAAE,sBAAsB,CAAA;AAAA,kCACzB,GAAA;AAAA,oBAAC,GAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EACE,IAAA,IAAQ,SAAA,KAAc,KAAA,GAClB,qBAAA,GACA;AAAA;AAAA;AAEP,iBAAA,EACH;AAAA;AAAA,aACF;AAAA,YAEDA,MAAAA,CAAM,IAAA,CAAK,QAAA,EAAU,GAAA,CAAI,CAAC,WAAA,qBACzB,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBAEC,IAAA,EAAM,WAAA;AAAA,gBACN,MAAA,EAAO,QAAA;AAAA,gBACP,GAAA,EAAI,qBAAA;AAAA,gBACJ,SAAA,EAAU,kCAAA;AAAA,gBAEV,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,kBAAA,CAAA,CAAE,uBAAuB,CAAA;AAAA,kCAC1B,GAAA;AAAA,oBAAC,GAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EACE,IAAA,IAAQ,SAAA,KAAc,KAAA,GAClB,qBAAA,GACA;AAAA;AAAA;AAEP,iBAAA,EACH;AAAA,eAAA;AAAA,cAfK;AAAA,aAiBR;AAAA,WAAA,EACH,CAAA;AAAA,UAECA,MAAAA,CAAM,KAAK,OAAA,oBACV,IAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,SAAA;AAAA,cACL,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,MACP,MAAA,CAAO,IAAA;AAAA,gBACLA,OAAM,IAAA,CAAK,OAAA;AAAA,gBACX,QAAA;AAAA,gBACA;AAAA,eACF;AAAA,cAGF,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,wBAAA,EAAyB,CAAA;AAAA,gBACrC,EAAE,oBAAoB;AAAA;AAAA;AAAA;AACzB,SAAA,EAEJ;AAAA,OAAA,EACF;AAAA,KAAA,EACF,GACF,CAAA,EACF,CAAA;AAAA,IAGCA,MAAAA,CAAM,kCACL,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,sBAAA,EAAuB,CAAA;AAAA,sBACpC,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,uBAAA;AAAA,UACV,uBAAA,EAAyB,EAAE,MAAA,EAAQA,MAAAA,CAAM,cAAA;AAAe;AAAA;AAC1D,KAAA,EACF,CAAA,EACF,CAAA;AAAA,IAIDA,OAAM,OAAA,CAAQ,QAAA,oBACb,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0CAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAA,EAAkB,QAAA,EAAA,CAAA,CAAE,gCAAgC,CAAA,EAAE,CAAA;AAAA,4BACnE,GAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,CAAA,CAAE,kCAAkC,CAAA,EAAE;AAAA,OAAA,EAChE,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,OAAA;AAAA,UACN,SAAA,EAAU,iCAAA;AAAA,UACV,SAAS,MAAM,MAAA,CAAO,KAAA,EAAO,KAAA,CAAM,SAAS,cAAc,CAAA;AAAA,UAEzD,YAAE,mBAAmB;AAAA;AAAA;AACxB,KAAA,EACF,CAAA;AAAA,IAID,KAAA,CAAM,QAAA,EAAU,MAAA,EAAQ,YAAA,IAAgB,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,oBACnE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qGAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,YAAA,EAAa,CAAA;AAAA,2BACzB,GAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,mDAAmD,CAAA;AAAA,QAAG,GAAA;AAAA,QACxD,KAAA,CAAM,UAAU,MAAA,EAAQ,aAAA;AAAA,QAAc,GAAA;AAAA,QAAE,EAAE,8BAA8B,CAAA;AAAA,QAAE;AAAA,OAAA,EAC7E;AAAA,KAAA,EACF,CAAA;AAAA,IAIDA,OAAM,QAAA,CAAS,SAAA,KACb,qCACC,GAAA,CAAC,eAAA,EAAA,EAAgB,IAEjB,SAAA,EAAW,GAAA,CAAI,CAAC,QAAA,yBACb,KAAA,EAAA,EAAsB,SAAA,EAAU,mBAC/B,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mJAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iDAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAK,QAAA,CAAS,IAAA;AAAA,YACd,SAAA,EAAU,kBAAA;AAAA,YACV,KAAK,QAAA,CAAS,IAAA;AAAA,YACd,WAAA,EAAY;AAAA;AAAA,SACd;AAAA,wBACA,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,IAAA,EAAK;AAAA,OAAA,EACvB,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACZ,QAAA,EAAA;AAAA,QAAA,QAAA,CAAS,MAAA,yBACP,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,CAAA,CAAE,0BAA0B,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE,GAAA;AAAA,0BACjC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAA,EAAa,mBAAS,MAAA,EAAO;AAAA,SAAA,EAC/C,CAAA;AAAA,QAED,SAAS,YAAA,oBACR,IAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,MAAM,QAAA,CAAS,YAAA;AAAA,YACf,MAAA,EAAO,QAAA;AAAA,YACP,GAAA,EAAI,qBAAA;AAAA,YACJ,SAAA,EAAU,iCAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EAAmC,CAAA;AAAA,cAClD,EAAE,2BAA2B;AAAA;AAAA;AAAA;AAChC,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA,EAAA,EA9BQ,QAAA,CAAS,EA+BnB,CACD,CAAA,CAAA;AAAA,IAIJA,MAAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBAChB,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,sBAAoB,IAAA,CAAK,EAAA;AAAA,QACzB,4BAAA,EAA4B,KAAK,OAAA,EAAS,EAAA;AAAA,QAC1C,SAAA,EAAU,wGAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,OAAA,mBACJ,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAK,EAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,WAAU,UAAA,EACpC,QAAA,kBAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,GAAA,EAAK,KAAK,KAAA,IAAS,yBAAA;AAAA,kBACnB,KAAK,IAAA,CAAK,IAAA;AAAA,kBACV,SAAA,EAAW,CAAA,iBAAA,EAAoB,IAAA,CAAK,KAAA,GAAQ,UAAU,SAAS,CAAA,WAAA;AAAA;AAAA,eACjE,EACF,CAAA;AAAA,mCACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI,KAAK,OAAA,CAAQ,GAAA;AAAA,oBACjB,SAAA,EAAU,sGAAA;AAAA,oBAET,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,iBACR;AAAA,oCACC,GAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,QAAQ,MAAA,EAAQ;AAAA,kBACnC,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ;AAAA,iBAChC,CAAA,EACH;AAAA,eAAA,EACF;AAAA,aAAA,EACF,CAAA,mBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA;AAAA,8BAC3D,GAAA,CAAC,GAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,MAAA,EAAQ,MAAA,EAAQ,EAAE,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,CAAA,EAClF;AAAA,aAAA,EACF,CAAA;AAAA,4BAGF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,UAAK,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA,CAAA,CAAE,yBAAA,EAA2B,UAAU,CAAA,EAC1C,CAAA;AAAA,8BACA,GAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,IAAA,CAAK,QAAA,EAAS;AAAA,aAAA,EACpB,CAAA;AAAA,4BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,UAAK,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA,CAAA,CAAE,sBAAA,EAAwB,OAAO,CAAA,EACpC,CAAA;AAAA,8BACA,GAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,IAAA,EAAM,MAAA,EAAQ,EAAE,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,QAAA,EAAU,CAAA,EAAE;AAAA,aAAA,EACnF,CAAA;AAAA,4BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,UAAK,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA,CAAA,CAAE,kBAAA,EAAoB,OAAO,CAAA,EAChC,CAAA;AAAA,8BACA,GAAA,CAAC,GAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,KAAA,EAAO,MAAA,EAAQ,EAAE,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,CAAA,EAChF;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,UAGC,IAAA,CAAK,iBAAA,oBACJ,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,YAAA,EAAa,CAAA;AAAA,iCACzB,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,cAAA,CAAA,CAAE,+BAA+B,CAAA;AAAA,cAAE,IAAA;AAAA,8BAAE,GAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,aAAA,EACnE;AAAA,WAAA,EACF,CAAA;AAAA,UAID,IAAA,CAAK,OAAA,EAAS,IAAA,KAAS,SAAA,IACtB,IAAA,CAAK,wBACJ,IAAA,CAAK,oBAAA,CAAmC,MAAA,GAAS,CAAA,oBAChD,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,gBAAA,wBACH,IAAA,EAAA,EAAG,SAAA,EAAU,qCACZ,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,WAAU,0CAAA,EACZ,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA,CAAA,CAAE,0BAA0B,CAAA,EAC/B,CAAA;AAAA,8BACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAgB,eAAK,gBAAA,EAAiB;AAAA,aAAA,EACxD,CAAA,EACF,CAAA;AAAA,4BAEF,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA,IAAA,CAAK,oBAAA,CAAmC,MAAA,GAAS,CAAA,GAC/C,CAAA,CAAE,yBAAyB,CAAA,GAC3B,CAAA,CAAE,yBAAyB,CAAA,EACjC,CAAA;AAAA,4BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,kBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,YAAA,EAAc,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAG,CAAA,EACzD;AAAA,WAAA,EACF,CAAA;AAAA,UAIH,EACC,IAAA,CAAK,OAAA,EAAS,IAAA,KAAS,SAAA,IACvB,KAAK,oBAAA,IACJ,IAAA,CAAK,oBAAA,CAAmC,MAAA,GAAS,sBAC/C,GAAA,CAAC,iBAAA,EAAA,EAAkB,cAAc,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAG,CAAA;AAAA,UAE3D,IAAA,CAAK,IAAA,oBACJ,IAAA,CAAC,GAAA,EAAA,EAAE,WAAU,4BAAA,EACX,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,cAAA,CAAA,CAAE,wBAAwB,MAAM,CAAA;AAAA,cAAE;AAAA,aAAA,EAAE,CAAA;AAAA,YAC1C,IAAA,CAAK;AAAA,WAAA,EACR,CAAA;AAAA,UAID,KAAK,WAAA,IAAe,IAAA,CAAK,YAAY,MAAA,GAAS,CAAA,wBAC5C,KAAA,EAAA,EAAI,SAAA,EAAU,kDAAA,EACb,QAAA,kBAAA,GAAA,CAAC,QAAG,SAAA,EAAU,gDAAA,EACX,eAAK,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,qBACrB,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAU,6CAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,4BAA4B,CAAA,EAAE,CAAA;AAAA,gCAC9D,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,WAAW,CAAA,YAAA,EAAe,UAAA,CAAW,IAAA,KAAS,OAAA,GAAU,kBAAkB,SAAS,CAAA,CAAA;AAAA,oBAElF,qBAAW,IAAA,KAAS,OAAA,IAAW,UAAA,CAAW,GAAA,uBACxC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,kBAAA,GAAA,CAAC,OAAE,IAAA,EAAM,UAAA,CAAW,KAAK,MAAA,EAAO,QAAA,EAAS,KAAI,qBAAA,EAC3C,QAAA,kBAAA,GAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAU,iCAAA;AAAA,wBACV,KAAK,UAAA,CAAW,GAAA;AAAA,wBAChB,KAAK,IAAA,CAAK;AAAA;AAAA,qBACZ,EACF,CAAA,EACF,CAAA,mBAEA,GAAA,CAAC,GAAA,EAAA,EAAE,MAAM,UAAA,CAAW,GAAA,EAAM,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAAE;AAAA;AAAA;AAEzD;AAAA,aAAA;AAAA,YApBK,CAAA,EAAG,UAAA,CAAW,IAAI,CAAA,CAAA,EAAI,WAAW,GAAG,CAAA;AAAA,WAsB5C,GACH,CAAA,EACF;AAAA;AAAA,OAAA;AAAA,MA5IG,IAAA,CAAK;AAAA,KA+Ib,CAAA;AAAA,oBAGD,GAAA,CAAC,oBAAA,EAAA,EAAqB,OAAA,EAAS,IAAA,CAAK,SAAA,CAAUA,OAAM,OAAO,CAAA,EAAI,GAAI,EAAC,EAAW,CAAA;AAAA,IAAA,CAG7EA,MAAAA,CAAM,OAAA,CAAQ,WAAA,IAAeA,MAAAA,CAAM,OAAA,CAAQ,WAAA,IAAeA,MAAAA,CAAM,OAAA,CAAQ,OAAA,qBACxE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACX,QAAA,EAAA;AAAA,MAAA,CAAAA,OAAM,OAAA,CAAQ,WAAA,IAAeA,OAAM,OAAA,CAAQ,OAAA,yBAC1C,KAAA,EAAA,EAAI,SAAA,EAAWA,MAAAA,CAAM,OAAA,CAAQ,UAAU,aAAA,GAAgB,gBAAA,EACrD,UAAAA,MAAAA,CAAM,OAAA,CAAQ,WACZA,MAAAA,CAAM,OAAA,EAAS,uBAAA,IAA2B,CAAA,MAAO,oBAChD,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,cAAA,EAAgB,QAAA,EAAA,CAAA,CAAE,sCAAsC,CAAA,EAAE,CAAA,GACxEA,OAAM,IAAA,CAAK,QAAA,wBACZ,WAAA,EAAA,EAAY,KAAA,EAAM,QAAO,IAAA,EAAMA,MAAAA,CAAM,KAAK,QAAA,EACzC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,sCAAA,EAAuC,CAAA;AAAA,wBACpD,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,6BAA6B,CAAA,EAAE;AAAA,OAAA,EAC1C,CAAA,mBAEA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAgB,YAAE,sCAAsC,CAAA,EAAE,CAAA,GAE1E,IAAA,mBACF,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,SAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EACX,QAAA,EAAA,CAAA,CAAE,sBAAsB,CAAA,EAC3B,CAAA;AAAA,8BACC,GAAA,EAAA,EAAE,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,CAAA,CAAE,kCAAkC,CAAA,EAAE;AAAA,SAAA,EACtE,CAAA;AAAA,6BACC,WAAA,EAAA,EAAY,OAAA,EAAS,MAAM,mBAAA,CAAoB,IAAI,CAAA,EAClD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,sCAAA,EAAuC,CAAA;AAAA,0BACpD,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,sBAAsB,CAAA,EAAE;AAAA,SAAA,EACnC;AAAA,OAAA,EACF,IACE,IAAA,EACN,CAAA;AAAA,MAGDA,OAAM,OAAA,CAAQ,WAAA,oBACb,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,SAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EAAuC,QAAA,EAAA,CAAA,CAAE,qBAAqB,CAAA,EAAE,CAAA;AAAA,8BAC7E,GAAA,EAAA,EAAE,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAA,CAAA,CAAE,oCAAoC,CAAA,EAAE;AAAA,SAAA,EACxE,CAAA;AAAA,wBACA,IAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,MAAA,EAAO,KAAA,EAAM,UAAS,OAAA,EAAS,MAAM,kBAAA,CAAmB,IAAI,CAAA,EAC7E,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,6CAAA,EAA8C,CAAA;AAAA,0BAC3D,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,qBAAqB,CAAA,EAAE;AAAA,SAAA,EAClC;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,IAID,gBAAA,mBACC,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA,mBAEjB,IAAA,CAAA,QAAA,EAAA,EAEG,QAAA,EAAA;AAAA,MAAA,OAAA,EAAS,GAAA;AAAA,QACR,CAAC,MAAA,KACC,MAAA,CAAO,IAAA,KAAS,QAAA,oBACd,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,0DAAA;AAAA,YAEV,+BAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,MAAA,EAAQ,QAAA,EAAA,MAAA,CAAO,OAAA,EAAQ,CAAA;AAAA,8BACpC,GAAA,CAAC,oBAAiB,SAAA,EAAS,IAAA,EAAC,MAAK,OAAA,EAAQ,KAAA,EAAO,OAAO,MAAA,EAAQ,CAAA;AAAA,cAC9D,OAAO,MAAA,EAAQ,GAAA;AAAA,gBACd,CAAC,QACC,GAAA,oBACE,GAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBAEC,SAAA,EAAU,0DAAA;AAAA,oBACV,GAAA,EAAK,GAAA;AAAA,oBACL,GAAA,EAAI;AAAA,mBAAA;AAAA,kBAHC;AAAA;AAIP;AAEN,aAAA,EACF;AAAA,WAAA;AAAA,UAjBK,MAAA,CAAO;AAAA;AAkBd,OAEN;AAAA,MAAA,CAEE,MAAM;AACN,QAAA,MAAM,iBAAiB,OAAA,EAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,UAAU,CAAA;AACjE,QAAA,OACE,kCACE,GAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,0DAAA,EACjB,+BAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,CAAA,CAAE,4BAA4B,CAAA,EAAE,CAAA;AAAA,0BACxE,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,MAAA,EAAQ,yBAAe,OAAA,EAAQ,CAAA;AAAA,8BAC3C,gBAAA,EAAA,EAAiB,SAAA,EAAS,IAAA,EAAC,KAAA,EAAO,eAAe,MAAA,EAAQ;AAAA,SAAA,EAC5D,CAAA,EACF,CAAA;AAAA,MAGN,CAAA,GAAG;AAAA,MAAA,CAED,MAAM;AACN,QAAA,MAAM,oBAAoB,OAAA,EAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,aAAa,CAAA;AACvE,QAAA,OACE,qCACE,GAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,0DAAA,EACjB,+BAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wBAAA,EAA0B,QAAA,EAAA,CAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA;AAAA,0BACzE,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,MAAA,EAAQ,4BAAkB,OAAA,EAAQ,CAAA;AAAA,8BAC9C,gBAAA,EAAA,EAAiB,SAAA,EAAS,IAAA,EAAC,KAAA,EAAO,kBAAkB,MAAA,EAAQ;AAAA,SAAA,EAC/D,CAAA,EACF,CAAA;AAAA,MAGN,CAAA;AAAG,KAAA,EACL,CAAA;AAAA,oBAGF,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,oCAAA,EAAqC,CAAA;AAAA,IAEnDA,MAAAA,CAAM,OAAA,CAAQ,QAAA,oBAAY,GAAA,CAAC,gBAAA,EAAA,EAAiB,CAAA;AAAA,IAG5C,IAAA,IAAQA,MAAAA,CAAM,OAAA,CAAQ,WAAA,IAAe,gBAAA,oBACpC,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,IAAA;AAAA,QACN,QAAA,EAAU,EAAE,mCAAmC,CAAA;AAAA,QAC/C,SAAA,EAAU,SAAA;AAAA,QAEV,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,QAAA,EAAS,WAAU,wBAAA,EAC3B,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,eAAY,KAAA,EAAM,MAAA,EAAO,OAAA,EAAS,aAAA,EAAe,UAAU,YAAA,CAAa,OAAA,EACtE,QAAA,EAAA,YAAA,CAAa,OAAA,uBACX,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAuB,CAAA,GAEvC,CAAA,CAAE,oBAAoB,CAAA,EAE1B,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,QAAA;AAAA,cACV,IAAA,EAAK,SAAA;AAAA,cACL,KAAA,EAAM,OAAA;AAAA,cACN,OAAA,EAAS,MAAM,mBAAA,CAAoB,KAAK,CAAA;AAAA,cACxC,UAAU,YAAA,CAAa,OAAA;AAAA,cAEtB,YAAE,wBAAwB;AAAA;AAAA;AAC7B,SAAA,EACF;AAAA;AAAA,KACF;AAAA,IAIDA,OAAM,OAAA,CAAQ,WAAA,IAAe,mCAC5B,GAAA,CAAC,UAAA,EAAA,EAAW,OAAM,IAAA,EAAK,QAAA,EAAU,EAAE,kCAAkC,CAAA,EAAG,WAAU,OAAA,EAChF,QAAA,kBAAA,IAAA,CAAC,SAAI,IAAA,EAAK,QAAA,EAAS,WAAU,wBAAA,EAC3B,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,QAAA;AAAA,UACN,SAAA,EAAU,uBAAA;AAAA,UACV,OAAA,EAAS,YAAA;AAAA,UACT,UAAU,WAAA,CAAY,OAAA;AAAA,UAErB,QAAA,EAAA,WAAA,CAAY,0BACX,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,sBAAA,EAAuB,CAAA,GAEvC,EAAE,oBAAoB;AAAA;AAAA,OAE1B;AAAA,sBACA,GAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,QAAA;AAAA,UACV,IAAA,EAAK,SAAA;AAAA,UACL,KAAA,EAAM,OAAA;AAAA,UACN,OAAA,EAAS,MAAM,kBAAA,CAAmB,KAAK,CAAA;AAAA,UACvC,UAAU,WAAA,CAAY,OAAA;AAAA,UAErB,YAAE,wBAAwB;AAAA;AAAA;AAC7B,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"OrderSinglePage-O2ODTG33.js","sourcesContent":["import { useState, memo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { SallaOrderDetails } from '@salla.sa/twilight-components-react/order-details';\nimport { SallaRatingStars } from '@salla.sa/twilight-components-react/rating-stars';\nimport { SallaRatingModal } from '@salla.sa/twilight-components-react/rating-modal';\nimport { SallaModal } from '@salla.sa/twilight-components-react/modal';\nimport { SallaOrderTotalsCard } from '@salla.sa/twilight-components-react/order-totals-card';\nimport { HookSlot, useUser, useDate } from '../../../hooks';\nimport { useAsyncFn } from '../../../hooks/useAsyncFn';\nimport { useMoney } from '../../../hooks/useMoney';\nimport type { OrderSinglePageProps } from '../types';\nimport { useTwilight } from '../../../providers/twilight-context';\nimport { useNavigate } from '../../../providers/NavigationProvider';\n\nimport { Link, Image } from '../../../components/common';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport { order as orderApi } from '../../../api/order';\n\nconst ContentSkeleton = memo(function ContentSkeleton() {\n return (\n <div className=\"animate-pulse bg-white rounded-md p-5 space-y-3\">\n <div className=\"h-4 bg-gray-200 rounded w-1/3\" />\n <div className=\"h-4 bg-gray-200 rounded w-2/3\" />\n <div className=\"h-4 bg-gray-200 rounded w-1/2\" />\n </div>\n );\n});\n\nexport function OrderSinglePage({ order }: OrderSinglePageProps) {\n const { t, direction } = useTranslation();\n const { store } = useTwilight();\n const { data: user } = useUser();\n const navigate = useNavigate();\n const { format: formatDate } = useDate();\n const { format } = useMoney();\n const [showReorderModal, setShowReorderModal] = useState(false);\n const [showCancelModal, setShowCancelModal] = useState(false);\n\n const { data: shipments, isLoading: isLoadingShipments } = useQuery({\n ...orderApi.queries.shipments(String(order.id)),\n enabled: order.features.shippable,\n });\n const { data: ratings, isLoading: isLoadingRatings } = useQuery({\n ...orderApi.queries.ratings(String(order.id)),\n enabled: order.actions.rateable,\n });\n\n const [reorderState, handleReorder] = useAsyncFn(async () => {\n // Pass the order id explicitly: salla.js falls back to `salla.config.get('page.id')`,\n // which this SSR theme never sets, so a bare call would hit `reorder/undefined`.\n await window.salla?.order.createCartFromOrder(Number(order.id));\n setShowReorderModal(false);\n navigate('/cart');\n }, [navigate, order.id]);\n\n const [cancelState, handleCancel] = useAsyncFn(async () => {\n await window.salla?.order.cancel(Number(order.id));\n setShowCancelModal(false);\n // Invalidate current route to refetch order data\n navigate(window.location.pathname, { replace: true });\n }, [navigate, order.id]);\n\n return (\n <div className=\"space-y-4\">\n <HookSlot name=\"customer:orders.single.details.start\" />\n\n {/* Order Details Table */}\n <table className=\"min-w-full rounded-md overflow-hidden\">\n <tbody>\n <tr className=\"bg-white overflow-hidden flex md:table-row flex-row md:flex-row flex-wrap md:flex-no-wrap py-1.5 md:py-0\">\n <td className=\"single-order-header-item w-full md:w-auto px-3 md:px-6 py-2 md:py-4 md:h-20 whitespace-nowrap text-sm\">\n <div className=\"rtl:ml-2 ltr:mr-2 font-normal text-gray-400\">\n {t('pages.orders.date')}\n </div>\n <b>{formatDate(order.created_at.date)}</b>\n </td>\n\n <td className=\"single-order-header-item flex justify-between items-center w-full md:w-auto px-3 md:px-6 py-2 md:py-4 md:h-20 whitespace-nowrap text-sm\">\n <span\n className=\"text-primary inline-flex items-center rtl:space-x-reverse space-x-1\"\n style={{ color: order.status.color }}\n >\n {order.status.icon && <i className={`mt-1 ${order.status.icon}`}></i>}\n <span>{order.status.name}</span>\n </span>\n\n <div className=\"flex items-center justify-between\">\n {order.type === 'quote' && (\n <span className=\"text-red-500 ml-4\">\n {t('pages.orders.your_order_is_under_review')}\n </span>\n )}\n\n <div className=\"flex space-x-2 rtl:space-x-reverse text-start flex-none px-2\">\n {order.urls.digital_content && (\n <a\n href={order.urls.digital_content}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"salla-button salla-button--small\"\n >\n <span className=\"salla-button-text\">\n {t('pages.orders.digital')}\n <i\n className={\n user && direction === 'rtl'\n ? 'sicon-arrow-up-left'\n : 'sicon-arrow-up-right'\n }\n ></i>\n </span>\n </a>\n )}\n {order.urls.tracking?.map((trackingUrl) => (\n <a\n key={trackingUrl}\n href={trackingUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"salla-button salla-button--small\"\n >\n <span className=\"salla-button-text\">\n {t('pages.orders.tracking')}\n <i\n className={\n user && direction === 'rtl'\n ? 'sicon-arrow-up-left'\n : 'sicon-arrow-up-right'\n }\n ></i>\n </span>\n </a>\n ))}\n </div>\n\n {order.urls.receipt && (\n <SallaButton\n fill=\"outline\"\n size=\"small\"\n onClick={() =>\n window.open(\n order.urls.receipt,\n '_blank',\n 'toolbar=yes, scrollbars=yes, resizable=yes, width=900, height=700'\n )\n }\n >\n <i className=\"sicon-printer2 v-align\"></i>\n {t('pages.orders.print')}\n </SallaButton>\n )}\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n\n {/* Refund Message */}\n {order.refund_message && (\n <div className=\"min-w-full rounded-md overflow-hidden\">\n <div className=\"bg-white flex items-center gap-1 rounded-md px-3 py-5 md:px-5\">\n <i className=\"sicon-refund h-6 w-6\"></i>\n <p\n className=\"font-medium text-base\"\n dangerouslySetInnerHTML={{ __html: order.refund_message }}\n />\n </div>\n </div>\n )}\n\n {/* Rating Message */}\n {order.actions.rateable && (\n <div className=\"rating-header gradient-bg center-between\">\n <div>\n <h2 className=\"font-bold mb-1\">{t('pages.order.order_rating_title')}</h2>\n <p className=\"text-sm\">{t('pages.order.order_rating_message')}</p>\n </div>\n <SallaButton\n color=\"light\"\n className=\"btn--rounded-full !text-primary\"\n onClick={() => window.salla?.event.dispatch('rating::open')}\n >\n {t('pages.rating.rate')}\n </SallaButton>\n </div>\n )}\n\n {/* Rating Update Info Banner */}\n {store.settings?.rating?.allow_update && ratings && ratings.length > 0 && (\n <div className=\"flex items-start gap-2 bg-blue-50 border border-blue-200 text-blue-500 px-2 py-3 rounded-md text-sm\">\n <i className=\"sicon-info\"></i>\n <p>\n {t('pages.order.can_edit_or_delete_your_review_within')}{' '}\n {store.settings?.rating?.update_period} {t('pages.order.days_since_added')}.\n </p>\n </div>\n )}\n\n {/* Order Shipments */}\n {order.features.shippable &&\n (isLoadingShipments ? (\n <ContentSkeleton />\n ) : (\n shipments?.map((shipment) => (\n <div key={shipment.id} className=\"shipping-orders\">\n <div className=\"flex flex-col md:flex-row justify-between md:items-center bg-white px-5 py-3 border-b border-gray-100 rounded-t-md text-sm space-y-4 md:space-y-0\">\n <div className=\"flex items-center space-x-2 rtl:space-x-reverse\">\n <Image\n src={shipment.logo}\n className=\"max-w-16 max-h-8\"\n alt={shipment.name}\n aspectRatio=\"2/1\"\n />\n <span>{shipment.name}</span>\n </div>\n <div className=\"flex space-x-5 rtl:space-x-reverse\">\n {shipment.number && (\n <span>\n {t('pages.orders.shipment_no')}:{' '}\n <span className=\"font-bold\">{shipment.number}</span>\n </span>\n )}\n {shipment.tracking_url && (\n <a\n href={shipment.tracking_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"salla-button salla-button--link\"\n >\n <span className=\"sicon-shipping rtl:ml-1 ltr:mr-1\"></span>\n {t('pages.orders.tracking_url')}\n </a>\n )}\n </div>\n </div>\n </div>\n ))\n ))}\n\n {/* Order Items */}\n {order.items.map((item) => (\n <div\n key={item.id}\n data-order-item-id={item.id}\n data-order-item-product-id={item.product?.id}\n className=\"order-item bg-white p-5 border-b border-gray-100 first:rounded-t-md last:rounded-b-md last:border-none\"\n >\n <div className=\"mb-5 last:mb-0\">\n {item.product ? (\n <div className=\"flex rtl:space-x-reverse space-x-5 mb-4\">\n <Link to={item.product.url} className=\"shrink-0\">\n <Image\n src={item.image || '/images/placeholder.png'}\n alt={item.name}\n className={`w-18 h-14 object-${item.image ? 'cover' : 'contain'} rounded-md`}\n />\n </Link>\n <div>\n <Link\n to={item.product.url}\n className=\"block leading-5 mb-1.5 md:text-base font-semibold transition-colors text-gray-500 hover:text-primary\"\n >\n {item.name}\n </Link>\n <b>\n {format(item.amounts.amount?.amount, {\n currency: item.amounts.amount?.currency,\n })}\n </b>\n </div>\n </div>\n ) : (\n <div className=\"w-full flex justify-between text-sm py-2.5\">\n <span className=\"w-40 inline-block font-normal\">{item.name}</span>\n <b>\n {format(item.amounts.amount?.amount, { currency: item.amounts.amount?.currency })}\n </b>\n </div>\n )}\n\n <div className=\"w-full flex justify-between text-sm py-2.5\">\n <span className=\"w-40 inline-block font-normal\">\n {t('pages.products.quantity', 'Quantity')}\n </span>\n <b>{item.quantity}</b>\n </div>\n <div className=\"flex justify-between text-sm py-2.5\">\n <span className=\"w-40 inline-block font-normal\">\n {t('pages.products.price', 'Price')}\n </span>\n <b>{format(item.amounts.cost?.amount, { currency: item.amounts.cost?.currency })}</b>\n </div>\n <div className=\"flex justify-between text-sm py-2.5\">\n <span className=\"w-40 inline-block font-normal\">\n {t('pages.cart.total', 'Total')}\n </span>\n <b>\n {format(item.amounts.total?.amount, { currency: item.amounts.total?.currency })}\n </b>\n </div>\n </div>\n\n {/* Availability Date */}\n {item.availability_date && (\n <div className=\"flex gap-2 text-sm py-2.5 text-blue-500\">\n <i className=\"sicon-info\"></i>\n <span>\n {t('pages.products.expected_to_be')}: <b>{item.availability_date}</b>\n </span>\n </div>\n )}\n\n {/* Booking / Reservations */}\n {item.product?.type === 'booking' &&\n item.product_reservations &&\n (item.product_reservations as unknown[]).length > 0 && (\n <>\n {item.booking_location && (\n <ul className=\"font-medium text-xs text-gray-600\">\n <li className=\"py-1 flex justify-between items-baseline\">\n <span className=\"mt-5 mb-3.5 text-sm font-bold\">\n {t('common.elements.location')}\n </span>\n <span className=\"text-unicode\">{item.booking_location}</span>\n </li>\n </ul>\n )}\n <h3 className=\"mt-5 mb-3.5 text-sm font-bold\">\n {(item.product_reservations as unknown[]).length > 1\n ? t('pages.cart.reservations')\n : t('pages.cart.item_options')}\n </h3>\n <div className=\"rounded-md p-4 border border-gray-200 mb-2\">\n <SallaOrderDetails orderDetails={JSON.stringify(item)} />\n </div>\n </>\n )}\n\n {/* Order details (sub-products / options) — for non-booking items */}\n {!(\n item.product?.type === 'booking' &&\n item.product_reservations &&\n (item.product_reservations as unknown[]).length > 0\n ) && <SallaOrderDetails orderDetails={JSON.stringify(item)} />}\n\n {item.note && (\n <p className=\"mt-3 text-sm text-gray-500\">\n <span>{t('common.elements.note', 'Note')}: </span>\n {item.note}\n </p>\n )}\n\n {/* Attachments */}\n {item.attachments && item.attachments.length > 0 && (\n <div className=\"flow-root rounded-md px-4 border border-gray-200\">\n <dl className=\"text-sm text-dark divide-y divide-border-color\">\n {item.attachments.map((attachment) => (\n <div\n key={`${attachment.type}:${attachment.url}`}\n className=\"py-3.5 md:flex items-center justify-between\"\n >\n <dt className=\"mb-2 md:mb-0\">{t('pages.products.attachments')}</dt>\n <dd\n className={`font-medium ${attachment.type === 'image' ? 'text-gray-900' : 'text-xs'}`}\n >\n {attachment.type === 'image' && attachment.url ? (\n <div className=\"flex rtl:space-x-reverse space-x-2.5\">\n <a href={attachment.url} target=\"_blank\" rel=\"noopener noreferrer\">\n <Image\n className=\"h-7 w-7 object-cover rounded-md\"\n src={attachment.url}\n alt={item.name}\n />\n </a>\n </div>\n ) : (\n <a href={attachment.url}>{t('pages.orders.file_url')}</a>\n )}\n </dd>\n </div>\n ))}\n </dl>\n </div>\n )}\n </div>\n ))}\n\n {/* Order Totals */}\n <SallaOrderTotalsCard amounts={JSON.stringify(order.amounts)} {...({} as any)} />\n\n {/* Reorder & Cancel Actions */}\n {(order.actions.reorderable || order.actions.cancellable || order.actions.payable) && (\n <div className=\"bg-white rounded-md p-5 divide-y divide-border-color space-y-4\">\n {(order.actions.reorderable || order.actions.payable) && (\n <div className={order.actions.payable ? 'flex-center' : 'center-between'}>\n {order.actions.payable ? (\n (order.payment?.pending_payment_ends_at ?? 0) === 0 ? (\n <span className=\"text-red-500\">{t('pages.orders.pending_payment_expired')}</span>\n ) : order.urls.checkout ? (\n <SallaButton width=\"wide\" href={order.urls.checkout}>\n <i className=\"sicon sicon-wallet rtl:ml-2 ltr:mr-2\"></i>\n <span>{t('pages.orders.finish_payment')}</span>\n </SallaButton>\n ) : (\n <span className=\"text-red-500\">{t('pages.orders.pending_payment_expired')}</span>\n )\n ) : user ? (\n <>\n <div className=\"text-sm\">\n <h3 className=\"font-bold text-lg leading-none mb-1\">\n {t('pages.orders.reorder')}\n </h3>\n <p className=\"text-gray-500\">{t('pages.orders.reorder_description')}</p>\n </div>\n <SallaButton onClick={() => setShowReorderModal(true)}>\n <i className=\"sicon sicon-rotate rtl:ml-2 ltr:mr-2\"></i>\n <span>{t('pages.orders.reorder')}</span>\n </SallaButton>\n </>\n ) : null}\n </div>\n )}\n\n {order.actions.cancellable && (\n <div className=\"center-between pt-4\">\n <div className=\"text-sm\">\n <h3 className=\"font-bold text-lg leading-none mb-1\">{t('pages.orders.cancel')}</h3>\n <p className=\"text-gray-500\">{t('pages.order.order_cancelation_desc')}</p>\n </div>\n <SallaButton shape=\"link\" color=\"danger\" onClick={() => setShowCancelModal(true)}>\n <i className=\"sicon sicon-cancel-circle rtl:ml-2 ltr:mr-2\"></i>\n <span>{t('pages.orders.cancel')}</span>\n </SallaButton>\n </div>\n )}\n </div>\n )}\n\n {/* Ratings */}\n {isLoadingRatings ? (\n <ContentSkeleton />\n ) : (\n <>\n {/* Product Ratings (type: \"rating\") */}\n {ratings?.map(\n (rating) =>\n rating.type === 'rating' && (\n <section\n key={rating.id}\n className=\"flex justify-between items-start bg-white p-5 rounded-md\"\n >\n <div>\n <p className=\"mb-2\">{rating.content}</p>\n <SallaRatingStars withLabel size=\"small\" value={rating.rating} />\n {rating.images?.map(\n (img) =>\n img && (\n <Image\n key={img}\n className=\"w-20 h-20 object-cover rounded-md mt-2 mr-2 inline-block\"\n src={img}\n alt=\"\"\n />\n )\n )}\n </div>\n </section>\n )\n )}\n\n {(() => {\n const shippingRating = ratings?.find((r) => r.type === 'shipping');\n return (\n shippingRating && (\n <section className=\"flex justify-between items-start bg-white p-5 rounded-md\">\n <div>\n <h2 className=\"text-lg font-bold mb-5\">{t('pages.rating.rate_shipping')}</h2>\n <p className=\"mb-2\">{shippingRating.content}</p>\n <SallaRatingStars withLabel value={shippingRating.rating} />\n </div>\n </section>\n )\n );\n })()}\n\n {(() => {\n const testimonialRating = ratings?.find((r) => r.type === 'testimonial');\n return (\n testimonialRating && (\n <section className=\"flex justify-between items-start bg-white p-5 rounded-md\">\n <div>\n <h2 className=\"text-lg font-bold mb-5\">{t('pages.rating.rate_the_store')}</h2>\n <p className=\"mb-2\">{testimonialRating.content}</p>\n <SallaRatingStars withLabel value={testimonialRating.rating} />\n </div>\n </section>\n )\n );\n })()}\n </>\n )}\n\n <HookSlot name=\"customer:orders.single.details.end\" />\n\n {order.actions.rateable && <SallaRatingModal />}\n\n {/* Reorder Modal */}\n {user && order.actions.reorderable && showReorderModal && (\n <SallaModal\n width=\"sm\"\n subTitle={t('pages.orders.reorder_confirmation')}\n iconStyle=\"success\"\n >\n <div slot=\"footer\" className=\"grid grid-cols-2 gap-3\">\n <SallaButton width=\"wide\" onClick={handleReorder} disabled={reorderState.loading}>\n {reorderState.loading ? (\n <span className=\"loader loader--small\"></span>\n ) : (\n t('common.elements.ok')\n )}\n </SallaButton>\n <SallaButton\n className=\"w-full\"\n fill=\"outline\"\n color=\"light\"\n onClick={() => setShowReorderModal(false)}\n disabled={reorderState.loading}\n >\n {t('common.elements.cancel')}\n </SallaButton>\n </div>\n </SallaModal>\n )}\n\n {/* Cancel Modal */}\n {order.actions.cancellable && showCancelModal && (\n <SallaModal width=\"sm\" subTitle={t('pages.orders.cancel_confirmation')} iconStyle=\"error\">\n <div slot=\"footer\" className=\"grid grid-cols-2 gap-3\">\n <SallaButton\n color=\"danger\"\n className=\"w-full cursor-pointer\"\n onClick={handleCancel}\n disabled={cancelState.loading}\n >\n {cancelState.loading ? (\n <span className=\"loader loader--small\"></span>\n ) : (\n t('common.elements.ok')\n )}\n </SallaButton>\n <SallaButton\n className=\"w-full\"\n fill=\"outline\"\n color=\"light\"\n onClick={() => setShowCancelModal(false)}\n disabled={cancelState.loading}\n >\n {t('common.elements.cancel')}\n </SallaButton>\n </div>\n </SallaModal>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/account/orders/OrdersPage.tsx"],"names":["order"],"mappings":"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","file":"OrdersPage-72RXJGSH.js","sourcesContent":["import { useState, useRef, useCallback } from 'react';\nimport { useCopyToClipboard } from '@uidotdev/usehooks';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { HookSlot, useDate, useMoney } from '../../../hooks';\nimport { NoContent, Link } from '../../../components/common';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport { order } from '../../../api/order';\nimport type { OrdersPageProps, OrderListItem } from './types';\n\nexport function OrdersPage({ orders, cursor, query }: OrdersPageProps) {\n const { t } = useTranslation();\n const cursorRef = useRef<string | null>(cursor?.next ?? null);\n const prevQueryRef = useRef(query);\n if (prevQueryRef.current !== query) {\n prevQueryRef.current = query;\n cursorRef.current = cursor?.next ?? null;\n }\n\n const loader = useCallback(async () => {\n if (!cursorRef.current) return { items: [], next: null };\n\n const response = await order.list({\n cursor: cursorRef.current,\n status: query?.status,\n feedback_status: query?.feedback_status,\n });\n cursorRef.current = response.cursor?.next ?? null;\n return {\n items: response.data,\n next: response.cursor?.next ?? null,\n };\n }, [query]);\n\n return (\n <>\n <HookSlot name=\"customer:orders.index.items.start\" />\n\n {orders.length === 0 ? (\n <NoContent icon=\"sicon-packed-box\" message={t('pages.orders.non_orders')} />\n ) : (\n <ItemsList\n items={orders}\n loader={cursor?.next ? loader : undefined}\n mode=\"button\"\n className=\"s-orders-wrapper\"\n t={(key, fallback) => t(key, fallback ?? '')}\n >\n {(items: OrderListItem[]) => (\n <table className=\"s-orders-table\">\n <thead className=\"s-orders-table-head\">\n <tr className=\"s-orders-table-head-tr\">\n <th className=\"s-orders-table-head-tr-th\" scope=\"col\">\n {t('pages.thank_you.order_id')}\n </th>\n <th className=\"s-orders-table-head-tr-th\" scope=\"col\">\n {t('pages.orders.total')}\n </th>\n <th className=\"s-orders-table-head-tr-th\" scope=\"col\">\n {t('pages.orders.date')}\n </th>\n <th className=\"s-orders-table-head-tr-th\" scope=\"col\">\n {t('pages.orders.status')}\n </th>\n </tr>\n </thead>\n <tbody className=\"s-orders-table-tbody\">\n {items.map((orderItem) => (\n <OrderRow key={orderItem.id} order={orderItem} />\n ))}\n </tbody>\n </table>\n )}\n </ItemsList>\n )}\n\n <HookSlot name=\"customer:orders.index.items.end\" />\n </>\n );\n}\n\nfunction OrderRow({ order }: { order: OrderListItem }) {\n const { t, isRTL } = useTranslation();\n const { format: formatDate } = useDate();\n const { format: formatMoney } = useMoney();\n const [, copyToClipboard] = useCopyToClipboard();\n const [copied, setCopied] = useState(false);\n const orderUrl = `/account/orders/${order.id}`;\n\n const handleCopy = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n copyToClipboard(String(order.reference_id));\n setCopied(true);\n setTimeout(() => setCopied(false), 1000);\n };\n\n return (\n <tr className=\"s-orders-table-tbody-tr s-orders-table-tbody-tr-shadow\">\n <td className=\"s-orders-table-tbody-tr-td\">\n <div className=\"s-orders-table-tbody-tr-td-content\">\n <span className=\"s-orders-mobile-title\">{t('pages.thank_you.order_id')}:</span>\n <span className=\"s-orders-reference-id hidden md:inline-block\">\n #{order.reference_id}\n </span>\n <Link to={orderUrl} aria-label={t('pages.thank_you.order_id')} />\n <div className=\"s-orders-copy-to-clipboard-button flex items-center md:hidden\">\n <SallaButton\n className={`relative ${copied ? 'copied' : 'code-to-copy'}`}\n color=\"dark\"\n shape=\"link\"\n data-content={order.reference_id.toString()}\n onClick={handleCopy}\n >\n {isRTL ? (\n <>\n <i className=\"sicon-swap-stroke s-orders-copy-to-clipboard-button-icon pointer-events-none rtl:mr-1 ltr:ml-1\" />\n <span>#{order.reference_id}</span>\n </>\n ) : (\n <>\n <span>#{order.reference_id}</span>\n <i className=\"sicon-swap-stroke s-orders-copy-to-clipboard-button-icon pointer-events-none rtl:mr-1 ltr:ml-1\" />\n </>\n )}\n </SallaButton>\n </div>\n </div>\n </td>\n\n <td className=\"s-orders-table-tbody-tr-td\">\n <div className=\"s-orders-table-tbody-tr-td-content\">\n <span className=\"s-orders-mobile-title\">{t('pages.orders.total')}:</span>\n {formatMoney(order.amounts.total.amount, { currency: order.amounts.total.currency })}\n <Link to={orderUrl} aria-label={t('pages.orders.total')} />\n </div>\n </td>\n\n <td className=\"s-orders-table-tbody-tr-td\">\n <div className=\"s-orders-table-tbody-tr-td-content\">\n <span className=\"s-orders-mobile-title\">{t('pages.orders.date')}:</span>\n {formatDate(order.created_at.date)}\n <Link to={orderUrl} aria-label={t('pages.orders.date')} />\n </div>\n </td>\n\n <td className=\"s-orders-table-tbody-tr-td\">\n <div className=\"s-orders-table-tbody-tr-td-content\">\n <span className=\"s-orders-mobile-title\">{t('pages.orders.status')}:</span>\n <span\n className=\"s-orders-status-container rtl:mr-auto ltr:ml-auto md:mx-0\"\n style={order.status.color ? { color: order.status.color } : undefined}\n >\n {order.status.icon && <i className={`mt-1 ${order.status.icon}`} />}\n <span>{order.status.name}</span>\n </span>\n <i\n className={`sicon-star2 s-orders-status-rated ${\n order.features.is_read ? 's-orders-rated-text' : 's-orders-unrated-text'\n }`}\n />\n <Link to={orderUrl} aria-label={t('pages.orders.status')} />\n </div>\n </td>\n </tr>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/account/profile/ProfilePage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,SAAS,YAAY,MAAA,EAA0B;AACpD,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,OAAA,EAAQ;AAE/B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,wBAAA,EAAyB,CAAA;AAAA,oBAExC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,6BAAA,EAA8B,CAAA;AAAA,wBAE5C,gBAAA,EAAA,EAAiB,CAAA;AAAA,oBAElB,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,2BAAA,EAA4B,CAAA;AAAA,wBAE1C,WAAA,EAAA,EAAY,CAAA;AAAA,oBAEb,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACE,GAAI,MAAM,WAAA,EAAa,qBAAA,GAAwB,EAAE,YAAA,EAAc,IAAA,KAAS,EAAC;AAAA,QAC1E,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBAEA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,sBAAA,EAAuB;AAAA,GAAA,EACxC,CAAA;AAEJ","file":"ProfilePage-GVYL5NVL.js","sourcesContent":["import { SallaUserProfile } from '@salla.sa/twilight-components-react/user-profile';\nimport { SallaVerify } from '@salla.sa/twilight-components-react/verify';\nimport { SallaUserSettings } from '@salla.sa/twilight-components-react/user-settings';\nimport { HookSlot, useUser } from '../../../hooks';\nimport type { ProfilePageProps } from './types';\n\nexport function ProfilePage(_props: ProfilePageProps) {\n const { data: user } = useUser();\n\n return (\n <>\n <HookSlot name=\"customer:profile.start\" />\n\n <HookSlot name=\"customer:profile.form.start\" />\n\n <SallaUserProfile />\n\n <HookSlot name=\"customer:profile.form.end\" />\n\n <SallaVerify />\n\n <SallaUserSettings\n {...(user?.preferences?.notifications_enabled ? { isNotifiable: true } : {})}\n className=\"mt-10 block\"\n />\n\n <HookSlot name=\"customer:profile.end\" />\n </>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/analytics/gtm.ts","../src/components/cart/SeoCartWidget.tsx"],"names":[],"mappings":"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","file":"SeoCartWidget-KHDAMXBG.js","sourcesContent":["import type { Cart, CartItem } from '../../types';\n\n// ─── Payload Types ───────────────────────────────────────────────────────────\n\nexport interface GtmCheckoutProduct {\n id: number;\n name: string;\n price: number;\n quantity: number;\n}\n\nexport interface GtmCheckoutEvent {\n event: 'checkout';\n ecommerce: {\n checkout: {\n actionField: { step: 1 | 2 | 3 };\n products: GtmCheckoutProduct[];\n cart_total: number;\n currency: string;\n };\n };\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction getPriceAmount(value: CartItem['price']): number {\n if (typeof value === 'number') return value;\n return value.amount;\n}\n\nfunction getTotalAmount(value: Cart['total']): number {\n if (typeof value === 'number') return value;\n return parseFloat(value) || 0;\n}\n\n/**\n * Maps `Cart.items` to the GTM product array format.\n *\n * Only available items are included — mirrors PHP `$cartService->getAvailableItems()`.\n */\nexport function mapCartItemsToProducts(items: CartItem[]): GtmCheckoutProduct[] {\n return items\n .filter((item) => item.is_available)\n .map((item) => ({\n id: item.product_id,\n name: item.product_name,\n price: getPriceAmount(item.price),\n quantity: item.quantity,\n }));\n}\n\n// ─── Main Utility ─────────────────────────────────────────────────────────────\n\n/**\n * Pushes a GTM `checkout` event to `window.dataLayer`.\n *\n * Safe to call in SSR environments — guards against `typeof window`.\n * Initialises `window.dataLayer` if GTM hasn't done so yet.\n *\n * @param step Checkout funnel step (1 = cart, 2 = shipping, 3 = payment)\n * @param cart Current cart data from the Twilight loader\n * @param currencyCode ISO 4217 currency code, e.g. \"SAR\"\n */\nexport function pushCheckoutEvent(step: 1 | 2 | 3, cart: Cart, currencyCode: string): void {\n if (typeof window === 'undefined') return;\n\n window.dataLayer = window.dataLayer ?? [];\n\n const payload: GtmCheckoutEvent = {\n event: 'checkout',\n ecommerce: {\n checkout: {\n actionField: { step },\n products: mapCartItemsToProducts(cart.items),\n cart_total: getTotalAmount(cart.total),\n currency: currencyCode,\n },\n },\n };\n\n window.dataLayer.push(payload);\n}\n","import { useEffect } from 'react';\nimport { useTwilight } from '../../providers/TwilightProvider';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport type { Cart } from '../../types';\nimport { pushCheckoutEvent } from '../../lib/analytics/gtm';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SeoCartWidgetProps {\n /**\n * Cart data from the TanStack Router loader — no extra fetch needed.\n */\n cart: Cart;\n /**\n * Current checkout funnel step.\n * Defaults to `1` (cart view) — CartPage always passes this default.\n * The widget internally listens to Salla SDK events to promote to 2 / 3.\n */\n step?: 1 | 2 | 3;\n}\n\n// ─── Page title translation keys (mirrors PHP SeoCartWidget::$pageTitle) ─────\n\n/**\n * Matches the PHP backend exactly:\n * ```php\n * protected $pageTitle = [\n * self::STEP_CART => 'common.titles.cart',\n * self::STEP_SHIPPING => 'common.titles.shipping',\n * self::STEP_PAYMENT => 'common.titles.checkout',\n * ];\n * ```\n */\nconst PAGE_TITLE_KEYS: Record<1 | 2 | 3, string> = {\n 1: 'common.titles.cart',\n 2: 'common.titles.shipping',\n 3: 'common.titles.checkout',\n};\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * SeoCartWidget — Null-rendering analytics side-effect component.\n *\n * Responsibilities:\n * 1. Fires a GTM `checkout` event (step 1) on cart page load.\n * 2. Listens to Salla SDK checkout overlay events to fire steps 2 & 3.\n * 3. Updates `document.title` to reflect the cart context.\n *\n * Architecture:\n * - Lives in `theme-engine` so all themes using the engine get GTM tracking.\n * - Mounted directly inside `CartPage`, which already has loader data.\n * - `window.dataLayer` must be initialised by the store's GTM embed snippet;\n * the widget initialises it as a safe-guard but does NOT inject GTM itself.\n * - Must be mounted inside `<TwilightProvider>` (reads `currency` from context).\n *\n * @example\n * // In CartPage:\n * <SeoCartWidget cart={cart} />\n */\nexport function SeoCartWidget({ cart, step = 1 }: SeoCartWidgetProps) {\n const { store, currency } = useTwilight();\n const { t } = useTranslation();\n const currencyCode = currency?.code ?? 'SAR';\n\n // ── Fire GTM checkout event for step 1 (or whichever step is passed) ────────\n useEffect(() => {\n pushCheckoutEvent(step, cart, currencyCode);\n // Re-fire if the cart id, contents, or currency changes\n }, [step, cart, currencyCode]);\n\n // ── Subscribe to Salla SDK checkout step events (steps 2 & 3) ──────────────\n // Fires GTM events when the user advances through the checkout overlay.\n useEffect(() => {\n const salla = window.salla;\n if (!salla?.event?.on) return;\n\n const onShipping = () => pushCheckoutEvent(2, cart, currencyCode);\n const onPayment = () => pushCheckoutEvent(3, cart, currencyCode);\n\n salla.event.on('checkout::step.shipping', onShipping);\n salla.event.on('checkout::step.payment', onPayment);\n\n return () => {\n salla.event?.off?.('checkout::step.shipping', onShipping);\n salla.event?.off?.('checkout::step.payment', onPayment);\n };\n }, [cart, currencyCode]);\n\n // ── Update document title — mirrors PHP SeoCartWidget::$pageTitle ───────────\n // Step 1 → 'common.titles.cart' (e.g. \"Cart\")\n // Step 2 → 'common.titles.shipping' (e.g. \"Shipping\")\n // Step 3 → 'common.titles.checkout' (e.g. \"Checkout\")\n useEffect(() => {\n const storeName = store.name ?? '';\n const stepTitle = t(PAGE_TITLE_KEYS[step], PAGE_TITLE_KEYS[step]);\n document.title = storeName ? `${stepTitle} — ${storeName}` : stepTitle;\n }, [step, store.name, t]);\n\n return null;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/account/settings/SettingsPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,SAAS,aAAa,MAAA,EAA2B;AACtD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,yBAAA,EAA0B,CAAA;AAAA,wBACxC,iBAAA,EAAA,EAAkB,CAAA;AAAA,oBACnB,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,uBAAA,EAAwB;AAAA,GAAA,EACzC,CAAA;AAEJ","file":"SettingsPage-ZCLDJNHY.js","sourcesContent":["import { SallaUserSettings } from '@salla.sa/twilight-components-react/user-settings';\nimport { HookSlot } from '../../../hooks';\nimport type { SettingsPageProps } from './types';\n\nexport function SettingsPage(_props: SettingsPageProps) {\n return (\n <>\n <HookSlot name=\"customer:settings.start\" />\n <SallaUserSettings />\n <HookSlot name=\"customer:settings.end\" />\n </>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/thank-you/ThankYouPage.tsx"],"names":[],"mappings":"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","file":"ThankYouPage-MPF4V5T3.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport { useCopyToClipboard } from '@uidotdev/usehooks';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { Link } from '../../components/common';\nimport { HookSlot } from '../../hooks';\nimport type { ThankYouPageProps } from './types';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport confettiImage from './confetti.svg';\n\nconst EMPTY_MESSAGES: NonNullable<ThankYouPageProps['messages']> = [];\n\nexport function ThankYouPage({\n order,\n thank_you_title,\n messages = EMPTY_MESSAGES,\n}: ThankYouPageProps) {\n const { store } = useTwilight();\n const { t } = useTranslation();\n const title =\n thank_you_title ?? t('pages.thank_you.hero_title', 'Thank you for shopping with us! 😊');\n const [invoiceSent, setInvoiceSent] = useState(order?.email_sent ?? false);\n const [invoiceMessage, setInvoiceMessage] = useState<string | null>(null);\n const [, copyToClipboard] = useCopyToClipboard();\n\n // Listen for invoice sent event (matches thankyou.js)\n useEffect(() => {\n const salla = window.salla;\n if (!salla?.order?.event?.onInvoiceSent) return;\n\n const handleInvoiceSent = (res: { data?: { message?: string } }) => {\n setInvoiceMessage(\n res.data?.message || t('pages.thank_you.invoice_sent_success', 'Invoice sent successfully')\n );\n setInvoiceSent(true);\n };\n\n salla.order.event.onInvoiceSent(handleInvoiceSent);\n\n return () => {\n salla.event.off('order::invoice.sent', handleInvoiceSent as (...args: unknown[]) => void);\n };\n }, [t]);\n\n return (\n <>\n <HookSlot name=\"thank-you:start\" />\n\n <div className=\"h-52 -mb-52 w-full bg-primary rtl:right-0 ltr:left-0 relative -z-1\">\n <svg\n className=\"text-primary absolute top-full\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 1440 320\"\n >\n <path\n className=\"fill-current\"\n fillOpacity=\"1\"\n d=\"M0,96L120,112C240,128,480,160,720,165.3C960,171,1200,149,1320,138.7L1440,128L1440,0L1320,0C1200,0,960,0,720,0C480,0,240,0,120,0L0,0Z\"\n ></path>\n </svg>\n </div>\n\n <div className=\"container mb-20\">\n <nav className=\"w-full py-5\">\n <ol className=\"list-reset flex items-center text-sm text-primary-reverse\">\n <li>\n <Link to=\"/\" className=\"fix-align text-primary-reverse\">\n {t('common.titles.home', 'Home')}\n </Link>\n </li>\n <li>\n <i className=\"sicon-keyboard_arrow_left mx-2\"></i>\n </li>\n <li>\n <span className=\"fix-align\">{title}</span>\n </li>\n </ol>\n </nav>\n\n <div className=\"bg-white p-4 md:p-8 rounded-md mb-6 md:mb-8\">\n <div className=\"flex flex-col items-center pt-16 pb-10\">\n <img src={confettiImage} alt={title} className=\"size-[140px] mb-8\" />\n <h1 className=\"font-bold text-lg mb-2.5\">{title}</h1>\n <p className=\"text-gray-500 max-w-xs text-center text-sm leading-6 mb-2.5\">\n {t(\n 'pages.thank_you.description',\n 'Your order has been received and will be reviewed and confirmed shortly.'\n )}\n </p>\n {order && (\n <>\n <p className=\"text-gray-500 max-w-xs text-center text-sm leading-6 mb-6\">\n {t('pages.thank_you.order_id_label', 'Order ID')}{' '}\n <SallaButton\n className=\"relative\"\n onClick={() => copyToClipboard(String(order.reference_id))}\n color=\"dark\"\n shape=\"link\"\n >\n <span>#{order.reference_id}</span>\n <i className=\"copy-icon sicon-swap-stroke pointer-events-none rtl:mr-1 ltr:ml-1\"></i>\n </SallaButton>\n </p>\n <Link\n to={`/account/orders/${order.id}`}\n className=\"bg-primary text-white text-sm font-bold h-10 px-4 rounded-md flex items-center justify-center gap-1.5\"\n >\n <i className=\"sicon-newspaper rtl:ml-1 ltr:mr-1\"></i>\n {t('pages.thank_you.view_order_details', 'View Order Details')}\n </Link>\n </>\n )}\n </div>\n\n {(order as { instructions?: string } | undefined)?.instructions && (\n <article\n className=\"article article--main article--small text-center\"\n dangerouslySetInnerHTML={{\n __html: (order as { instructions?: string }).instructions ?? '',\n }}\n />\n )}\n\n {messages.map((message) => (\n <div\n key={message}\n className=\"flex flex-col items-center pt-1 pb-10 justify-start rtl:space-x-reverse space-x-2\"\n >\n <span className=\"font-bold\">{message}</span>\n </div>\n ))}\n\n <HookSlot name=\"thank-you:items.start\" />\n <HookSlot name=\"thank-you:items.end\" />\n </div>\n\n <div className=\"lg:flex rtl:space-x-reverse lg:space-x-8\">\n {invoiceSent ? (\n <div className=\"duration-500 hover:shadow-default flex-1 bg-white p-8 rounded-md mb-6 md:mb-10 flex flex-col items-center justify-center\">\n <div className=\"bg-gray-100 rounded-icon w-12 h-12 mb-2.5\">\n <i className=\"sicon-newspaper-alt text-xl\"></i>\n </div>\n <p className=\"text-sm mb-2.5\">\n {t('pages.thank_you.email_sent_to', 'Email sent to')}\n </p>\n <b className=\"text-sm\">{order?.customer?.email}</b>\n {invoiceMessage && <p className=\"text-sm text-green-600 mt-2\">{invoiceMessage}</p>}\n </div>\n ) : (\n <div\n id=\"invoice-form\"\n className={invoiceMessage ? 'thankyou-block sent' : 'thankyou-block'}\n >\n {invoiceMessage ? (\n <div className=\"text-center\">\n <div className=\"bg-gray-100 rounded-icon w-12 h-12 mb-2.5 mx-auto\">\n <i className=\"sicon-newspaper-alt text-xl\"></i>\n </div>\n <p className=\"text-sm\" dangerouslySetInnerHTML={{ __html: invoiceMessage }} />\n </div>\n ) : (\n <>\n <div className=\"bg-gray-100 rounded-icon w-12 h-12 mb-2.5\">\n <i className=\"sicon-newspaper-alt text-xl\"></i>\n </div>\n <p className=\"text-sm mb-2.5\">\n {t('pages.thank_you.resend_invoice', 'Resend invoice email')}\n </p>\n <form\n onSubmit={(e) => {\n e.preventDefault();\n window.salla?.form.onSubmit('order.sendInvoice', e);\n }}\n >\n <div className=\"flex max-w-3xl w-full\">\n <input\n type=\"email\"\n className=\"form-input rtl:rounded-l-none ltr:rounded-r-none rtl:border-l-0 ltr:border-r-0 !w-[160px] sm:!w-[220px]\"\n placeholder=\"your@email.com\"\n required\n name=\"email\"\n />\n <SallaButton\n type=\"submit\"\n loaderPosition=\"center\"\n className=\"rtl:rounded-r-none ltr:rounded-l-none lg:w-24 h-10\"\n >\n <span className=\"btn__text\">{t('pages.thank_you.send', 'Send')}</span>\n </SallaButton>\n </div>\n </form>\n </>\n )}\n </div>\n )}\n\n <div className=\"thankyou-block\">\n <div className=\"bg-gray-100 rounded-icon w-12 h-12 mb-2.5\">\n <i className=\"sicon-mail-letter text-xl\"></i>\n </div>\n <p className=\"text-sm mb-2.5\">{t('pages.thank_you.support', 'Support')}</p>\n\n <div className=\"flex rtl:space-x-reverse space-x-6\">\n {store.contacts.mobile && (\n <div className=\"text-sm unicode flex items-center\">\n <i className=\"sicon-phone\"></i>\n <a\n href={`tel:${store.contacts.mobile}`}\n className=\"hover:text-primary transition\"\n >\n <b className=\"unicode mx-1.5\">{store.contacts.mobile}</b>\n </a>\n </div>\n )}\n\n {store.contacts.whatsapp && (\n <div className=\"text-sm unicode flex items-center\">\n <i className=\"sicon-whatsapp\"></i>\n <a\n href={`https://wa.me/${store.contacts.whatsapp.replace(/[\\s+-]/g, '')}`}\n className=\"hover:text-primary transition\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <b className=\"unicode mx-1.5\">{store.contacts.whatsapp}</b>\n </a>\n </div>\n )}\n </div>\n </div>\n </div>\n\n <HookSlot name=\"thank-you:end\" />\n </div>\n </>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/account/wallet/WalletPage.tsx"],"names":["TransactionRow"],"mappings":"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","file":"WalletPage-XVEZKUCP.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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/account/wishlist/WishlistPage.tsx"],"names":[],"mappings":"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","file":"WishlistPage-MALKVYV4.js","sourcesContent":["import { useRef } from 'react';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { SallaAddProductButton } from '@salla.sa/twilight-components-react/add-product-button';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { wishlist } from '../../../api/wishlist';\nimport type { Product } from '../../../types';\nimport { HookSlot, useWishlist, useMoney } from '../../../hooks';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport type { WishlistPageProps } from './types';\nimport { NoContent, Image } from '../../../components/common';\nimport { useLocation } from '../../../providers/NavigationProvider';\n\nfunction WishlistCard({ product: prod }: { product: Product }) {\n const { remove } = useWishlist();\n const { format } = useMoney();\n\n const handleRemove = () => {\n if (prod.id) {\n remove(Number(prod.id));\n }\n };\n\n const displayPrice = prod.sale_price ?? prod.price;\n const regularPrice = prod.regular_price;\n\n return (\n <div id={`wishlist-product-${prod.id}`} className=\"product-entry product-entry--wishlist\">\n <div className=\"flex items-center mb-4 sm:mb-0\">\n <a href={prod.url} className=\"product-entry__image\">\n <Image\n className=\"object-cover w-full h-full\"\n src={prod.image?.url}\n alt={prod.image?.alt ?? prod.name}\n aspectRatio=\"1/1\"\n />\n </a>\n <div className=\"flex-1 rtl:pr-5 ltr:pl-5\">\n <h3 className=\"text-sm text-gray-800 leading-6 mb-1.5 rtl:pl-5 ltr:pr-5 rtl:md:pl-8 ltr:md:pr-8 line-clamp-1\">\n <a href={prod.url}>{prod.name}</a>\n </h3>\n <div className=\"w-full center-between\">\n {prod.is_on_sale && regularPrice ? (\n <div className=\"space-x-1 rtl:space-x-reverse\">\n <h4 className=\"inline-block text-sm font-bold text-red-400\">\n {format(displayPrice)}\n </h4>\n <span className=\"text-sm text-gray-500 line-through\">{format(regularPrice)}</span>\n </div>\n ) : (\n <h4 className=\"text-sm font-bold\">{format(displayPrice)}</h4>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex items-center space-x-4 rtl:space-x-reverse\">\n <SallaAddProductButton\n productStatus={prod.status}\n productId={prod.id}\n productType={prod.type}\n loaderPosition=\"center\"\n fill=\"outline\"\n className=\"flex-grow w-full sm:grow-0 md:w-40\"\n />\n <SallaButton\n loaderPosition=\"center\"\n shape=\"icon\"\n size=\"small\"\n color=\"danger\"\n className=\"btn--delete\"\n onClick={handleRemove}\n >\n <i className=\"sicon-cancel\" />\n </SallaButton>\n </div>\n </div>\n );\n}\n\nexport function WishlistPage({ query, products, pagination }: WishlistPageProps) {\n const { t } = useTranslation();\n const { pathname, searchStr } = useLocation();\n\n // Track the next page to load (starts at page 2 since page 1 is SSR)\n const nextPageRef = useRef(query.page + 1);\n\n const loader = async () => {\n const pageToLoad = nextPageRef.current;\n const result = await wishlist.list({ page: pageToLoad });\n\n nextPageRef.current = pageToLoad + 1;\n\n return {\n items: result.items,\n next: result.next,\n };\n };\n\n return (\n <div className=\"space-y-5\" id=\"wishlist\">\n <HookSlot name=\"customer:wishlist.items.start\" />\n <ItemsList<Product>\n items={products}\n loader={loader}\n mode={pagination?.next ? 'infinite' : 'static'}\n pageUrl={pathname + searchStr}\n className=\"s-products-list\"\n itemsClassName=\"s-products-list-wrapper s-products-list-row-cards\"\n empty={\n <div className=\"text-center py-16\">\n <NoContent\n icon=\"sicon-heart\"\n message={t('common.errors.no_wishlist', \"You don't have any wishes\")}\n actionLabel={t('pages.offer.continue_shopping', 'Continue shopping')}\n actionUrl=\"/\"\n />\n </div>\n }\n t={(key, fallback) => t(key, fallback || key)}\n >\n {(items) => items.map((prod) => <WishlistCard key={prod.id} product={prod} />)}\n </ItemsList>\n <HookSlot name=\"customer:wishlist.items.end\" />\n </div>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/errors.ts","../src/providers/i18n-factory.ts","../src/twilight/context.ts"],"names":[],"mappings":";;;;;;AAAO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EACvC,YAAY,OAAA,EAAkB;AAC5B,IAAA,KAAA,CAAM,WAAW,qCAAqC,CAAA;AACtD,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;ACOO,SAAS,kBAAA,CACd,MAAA,EACA,YAAA,EACA,iBAAA,EACc;AACd,EAAA,MAAM,WAAW,cAAA,EAAe;AAChC,EAAA,MAAM,QAAA,GAAW,GAAG,MAAM,CAAA,MAAA,CAAA;AAE1B,EAAA,QAAA,CAAS,GAAA,CAAI,gBAAgB,CAAA,CAAE,IAAA,CAAK;AAAA,IAClC,GAAA,EAAK,MAAA;AAAA,IACL,WAAA,EAAa,MAAA;AAAA,IACb,EAAA,EAAI,CAAC,KAAA,EAAO,OAAO,CAAA;AAAA,IACnB,SAAA,EAAW,KAAA;AAAA,IACX,UAAA,EAAY,OAAA;AAAA,IACZ,SAAA,EAAW;AAAA,MACT,CAAC,MAAM,GAAG;AAAA,QACR,GAAA,EAAK,YAAA,GAAe,QAAQ,CAAA,IAAK,EAAC;AAAA,QAClC,KAAA,EAAO,iBAAA,GAAoB,QAAQ,CAAA,IAAK;AAAC;AAC3C,KACF;AAAA,IACA,aAAA,EAAe,EAAE,WAAA,EAAa,KAAA,EAAM;AAAA,IACpC,KAAA,EAAO,EAAE,WAAA,EAAa,KAAA,EAAM;AAAA,IAC5B,YAAA,EAAc,GAAA;AAAA,IACd,WAAA,EAAa;AAAA,GACd,CAAA;AAED,EAAA,OAAO,QAAA;AACT;;;ACwCA,IAAM,gBAAA,GAAqC;AAAA,EACzC,IAAA,EAAM,EAAA;AAAA,EACN,QAAA,EAAU,EAAA;AAAA,EACV,QAAQ,EAAC;AAAA,EACT,SAAA,EAAW,EAAA;AAAA,EACX,OAAO,EAAC;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAmBA,IAAM,YAAA,GAA4B;AAAA,EAChC,WAAA,EAAa,IAAA;AAAA,EACb,QAAA,EAAU,IAAA;AAAA,EACV,MAAA,EAAQ,eAAA;AAAA,EACR,OAAA,EAAS,EAAA;AAAA,EACT,QAAA,EAAU,EAAE,GAAG,gBAAA,EAAiB;AAAA,EAChC,SAAA,EAAW,IAAA;AAAA,EACX,KAAA,EAAO,IAAA;AAAA,EACP,OAAA,EAAS,IAAA;AAAA,EACT,WAAA,EAAa,IAAA;AAAA,EACb,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AASA,IAAI,IAAA,GAA4C,IAAA;AAChD,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,EAAA,IAAI;AAEF,IAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,SAAA,CAAQ,aAAkB,CAAA;AAGxD,IAAA,IAAA,GAAO,IAAI,iBAAA,EAA+B;AAAA,EAC5C,CAAA,CAAA,MAAQ;AACN,IAAA,IAAA,GAAO,IAAA;AAAA,EACT;AACF;AAEA,IAAM,WAAA,GAA2B,EAAE,GAAG,YAAA,EAAa;AAEnD,SAAS,gBAAA,GAAgC;AACvC,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,IAAA,IAAI,CAAC,KAAA;AACH,MAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AACtF,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,WAAA;AACT;AAUA,SAAS,cAAA,CAAe,OAAoB,OAAA,EAAyC;AACnF,EAAA,IAAI,iBAAiB,OAAA,IAAW,OAAA,CAAQ,WAAA,EAAa,KAAA,CAAM,cAAc,OAAA,CAAQ,WAAA;AACjF,EAAA,IAAI,cAAc,OAAA,IAAW,OAAA,CAAQ,YAAY,IAAA,EAAM,KAAA,CAAM,WAAW,OAAA,CAAQ,QAAA;AAChF,EAAA,IAAI,YAAY,OAAA,IAAW,OAAA,CAAQ,UAAU,IAAA,EAAM,KAAA,CAAM,SAAS,OAAA,CAAQ,MAAA;AAC1E,EAAA,IAAI,aAAa,OAAA,IAAW,OAAA,CAAQ,WAAW,IAAA,EAAM,KAAA,CAAM,UAAU,OAAA,CAAQ,OAAA;AAC7E,EAAA,IAAI,UAAA,IAAc,OAAA,IAAW,OAAA,CAAQ,QAAA,IAAY,IAAA;AAC/C,IAAA,KAAA,CAAM,WAAW,EAAE,GAAG,MAAM,QAAA,EAAU,GAAG,QAAQ,QAAA,EAAS;AAC5D,EAAA,IAAI,WAAA,IAAe,OAAA,IAAW,OAAA,CAAQ,SAAA,KAAc,MAAA;AAClD,IAAA,KAAA,CAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,IAAA;AACzC,EAAA,IAAI,OAAA,IAAW,WAAW,OAAA,CAAQ,KAAA,KAAU,QAAW,KAAA,CAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,IAAA;AAAA,OAAA,IAC7E,SAAA,IAAa,OAAA,IAAW,OAAA,CAAQ,OAAA,KAAY,MAAA;AACnD,IAAA,KAAA,CAAM,KAAA,GAAQ,QAAQ,OAAA,IAAW,IAAA,GAAO,OAAO,EAAE,EAAA,EAAI,QAAQ,OAAA,EAAQ;AACvE,EAAA,IAAI,SAAA,IAAa,OAAA,IAAW,OAAA,CAAQ,OAAA,KAAY,MAAA;AAC9C,IAAA,KAAA,CAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,IAAA;AACrC,EAAA,IAAI,aAAA,IAAiB,OAAA,IAAW,OAAA,CAAQ,WAAA,KAAgB,MAAA;AACtD,IAAA,KAAA,CAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,IAAA;AAC7C,EAAA,IAAI,UAAU,OAAA,IAAW,OAAA,CAAQ,QAAQ,IAAA,EAAM,KAAA,CAAM,OAAO,OAAA,CAAQ,IAAA;AACpE,EAAA,IAAI,MAAA,IAAU,OAAA,EAAS,KAAA,CAAM,IAAA,GAAO,OAAA,CAAQ,IAAA;AAC5C,EAAA,IAAI,cAAA,IAAkB,OAAA,EAAS,KAAA,CAAM,YAAA,GAAe,OAAA,CAAQ,YAAA;AAC5D,EAAA,IAAI,cAAA,IAAkB,OAAA,EAAS,KAAA,CAAM,YAAA,GAAe,OAAA,CAAQ,YAAA;AAC5D,EAAA,IAAI,QAAA,IAAY,OAAA,EAAS,KAAA,CAAM,MAAA,GAAS,OAAA,CAAQ,MAAA;AAClD;AAMO,SAAS,sBAAA,CAA0B,SAAmC,EAAA,EAAgB;AAC3F,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,IAAA,GAAoB,EAAE,GAAG,YAAA,EAAa;AAC5C,IAAA,cAAA,CAAe,MAAM,OAAO,CAAA;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,EAAE,CAAA;AAAA,EAC1B;AACA,EAAA,cAAA,CAAe,aAAa,OAAO,CAAA;AACnC,EAAA,OAAO,EAAA,EAAG;AACZ;AAIA,IAAM,SAAA,uBAAgB,GAAA,EAAgB;AAE/B,SAAS,kBAAkB,QAAA,EAAkC;AAClE,EAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,EAAA,OAAO,MAAM;AACX,IAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,EAC3B,CAAA;AACF;AAEO,SAAS,sBAAsB,OAAA,EAAyC;AAC7E,EAAA,cAAA,CAAe,gBAAA,IAAoB,OAAO,CAAA;AAE1C,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,KAAA,MAAW,QAAA,IAAY,WAAW,QAAA,EAAS;AAAA,EAC7C;AACF;AAWO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,IAAI;AACF,IAAA,OAAO,gBAAA,GAAmB,QAAA,IAAY,IAAA;AAAA,EACxC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAUO,SAAS,eAAA,GAA0E;AACxF,EAAA,IAAI;AACF,IAAA,MAAM,OAAO,gBAAA,EAAiB;AAC9B,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,WAAA,EAAa,KAAK,WAAA,EAAY;AAAA,EAChE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,EAC5C;AACF;AAEO,SAAS,kBAAA,GAAsC;AACpD,EAAA,MAAM,OAAO,gBAAA,EAAiB;AAC9B,EAAA,OAAO;AAAA,IACL,IAAI,WAAA,GAAc;AAChB,MAAA,OAAO,IAAA,CAAK,WAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,QAAA,GAAW;AACb,MAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,aAAA,EAAc;AAC5C,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,MAAA,GAAS;AACX,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,OAAA,GAAU;AACZ,MAAA,OAAO,IAAA,CAAK,OAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,QAAA,GAAW;AACb,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,SAAA,GAAY;AACd,MAAA,OAAO,IAAA,CAAK,SAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,OAAA,GAAU;AACZ,MAAA,OAAO,IAAA,CAAK,OAAO,EAAA,IAAM,IAAA;AAAA,IAC3B,CAAA;AAAA,IACA,IAAI,OAAA,GAAU;AACZ,MAAA,OAAO,IAAA,CAAK,OAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,WAAA,GAAc;AAChB,MAAA,OAAO,IAAA,CAAK,WAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,IAAA,GAAO;AACT,MAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,QAAA,MAAM,eAAe,IAAA,CAAK,WAAA,EAAa,YAAA,CAAa,CAAC,cAAc,CAAC,CAAA;AAEpE,QAAA,IAAA,CAAK,IAAA,GAAO,kBAAA,CAAmB,IAAA,CAAK,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC1D;AACA,MAAA,OAAO,IAAA,CAAK,IAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,GAAA,GAAM;AACR,MAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA,CAAE,GAAA;AAAA,IACtC,CAAA;AAAA,IACA,IAAI,IAAA,GAAO;AACT,MAAA,OAAO,IAAA,CAAK,IAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,IAAA,CAAK,YAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,IAAA,CAAK,YAAA;AAAA,IACd,CAAA;AAAA,IACA,IAAI,MAAA,GAAS;AACX,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd;AAAA,GACF;AACF","file":"chunk-5ACY5CD3.js","sourcesContent":["export class SettingsError extends Error {\n constructor(message?: string) {\n super(message ?? 'Store settings could not be loaded.');\n this.name = 'SettingsError';\n }\n}\n","import { createInstance, type i18n as I18nInstance } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nexport type TranslationMessages = Record<string, Record<string, string>>;\n\n/**\n * Creates a new i18next instance for the given locale.\n *\n * @param locale - Active locale code, e.g. `'ar'`\n * @param translations - App translations from the Salla API (store-specific)\n * @param themeTranslations - Bundled theme translations (static defaults)\n */\nexport function createI18nInstance(\n locale: string,\n translations?: TranslationMessages,\n themeTranslations?: TranslationMessages\n): I18nInstance {\n const instance = createInstance();\n const transKey = `${locale}.trans`;\n\n instance.use(initReactI18next).init({\n lng: locale,\n fallbackLng: locale,\n ns: ['app', 'theme'],\n defaultNS: 'app',\n fallbackNS: 'theme',\n resources: {\n [locale]: {\n app: translations?.[transKey] ?? {},\n theme: themeTranslations?.[transKey] ?? {},\n },\n },\n interpolation: { escapeValue: false },\n react: { useSuspense: false },\n keySeparator: '.',\n nsSeparator: false,\n });\n\n return instance;\n}\n\n/**\n * Creates i18n instance for testing\n * @param locale - Locale code (default: 'ar')\n * @param translations - Optional translations\n */\nexport function createTestI18n(locale = 'ar', translations?: TranslationMessages): I18nInstance {\n return createI18nInstance(locale, translations);\n}\n","import type { QueryClient } from '@tanstack/react-query';\nimport type { i18n } from 'i18next';\nimport type { StoreContext } from '../api/store';\nimport type { AppSnippet, AppSettings } from '../api/apps';\nimport { FALLBACK_LOCALE, getLanguageInfo } from '../providers/locale-constants';\nimport type { TranslationMessages } from '../providers/i18n-factory';\nimport { createI18nInstance } from '../providers/i18n-factory';\nimport { SettingsError } from '../utils/errors';\nimport type { ActiveScope } from '../utils/cookies';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface TwilightLocation<TSearch = Record<string, unknown>> {\n href: string;\n pathname: string;\n search: TSearch;\n searchStr: string;\n state: Record<string, unknown>;\n hash: string;\n}\n\nexport interface PageContext {\n slug: string;\n id?: string | number;\n title: string;\n url?: string;\n parent?: { id: string | number; name: string; url: string } | null;\n breadcrumbs?: { name: string; url: string }[];\n}\n\nexport interface TwilightContext {\n queryClient: QueryClient;\n settings: StoreContext;\n locale: string;\n routeId: string;\n location: TwilightLocation;\n authToken: string | null;\n /**\n * The selected market and, once bullet delivery confirmed one, its branch\n * allocation — the full object the SDK sends as `s-scope-*` headers. Seeded from\n * the `scope` cookie on the server; see {@link ActiveScope}.\n */\n scope: ActiveScope | null;\n /** `scope.id`, kept for callers that only need the market. */\n scopeId: string | null;\n /**\n * Which store this request is for, when something other than the hostname says\n * so — the `?storeId=` a preview was opened with, or the cookie remembering it.\n *\n * Null on a live storefront, where the hostname is the answer and there is\n * nothing to carry. See {@link resolveRequestStoreId}.\n */\n storeId: string | null;\n /**\n * The host this request arrived on, captured server-side.\n *\n * A theme worker is deployed with no vars and no bindings, so the request is\n * the only thing that knows which storefront it is serving. On the client this\n * is `window.location.host`; on the server nothing else has it.\n */\n requestHost: string | null;\n i18n: i18n;\n dir: 'ltr' | 'rtl';\n page?: PageContext;\n /** Installed apps' snippets, fetched in rootBeforeLoad so AppsSnippets can render CDN\n * <script> tags during SSR (React Query isn't dehydrated here, so useQuery has no SSR data). */\n appsSnippets?: AppSnippet[];\n /** Per-app public `app.*` buckets, fetched in rootBeforeLoad so rootHead can install the\n * `Salla.appScope` factory inline at parse time — ahead of the snippets' onReady callbacks. */\n appsSettings?: AppSettings;\n extras?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Internal Store\n// ============================================================================\n\nconst DEFAULT_LOCATION: TwilightLocation = {\n href: '',\n pathname: '',\n search: {},\n searchStr: '',\n state: {},\n hash: '',\n};\n\ninterface ContextData {\n queryClient: QueryClient;\n settings: StoreContext | null;\n locale: string;\n routeId: string;\n location: TwilightLocation;\n authToken: string | null;\n scope: ActiveScope | null;\n storeId: string | null;\n requestHost: string | null;\n i18n?: i18n;\n page?: PageContext;\n appsSnippets?: AppSnippet[];\n appsSettings?: AppSettings;\n extras?: Record<string, unknown>;\n}\n\nconst DEFAULT_DATA: ContextData = {\n queryClient: null as unknown as QueryClient,\n settings: null,\n locale: FALLBACK_LOCALE,\n routeId: '',\n location: { ...DEFAULT_LOCATION },\n authToken: null,\n scope: null,\n storeId: null,\n requestHost: null,\n i18n: undefined,\n page: undefined,\n};\n\n// ============================================================================\n// Storage: AsyncLocalStorage (server) or module-level store (client)\n// ============================================================================\n\ntype AsyncLocalStore<T> = { getStore(): T | undefined; run(val: T, fn: () => unknown): unknown };\n\n// Initialize ALS at module load time for SSR — no race condition\nlet _als: AsyncLocalStore<ContextData> | null = null;\nif (typeof window === 'undefined') {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { AsyncLocalStorage } = require('node:async_hooks') as {\n AsyncLocalStorage: new <T>() => AsyncLocalStore<T>;\n };\n _als = new AsyncLocalStorage<ContextData>();\n } catch {\n _als = null;\n }\n}\n\nconst clientStore: ContextData = { ...DEFAULT_DATA };\n\nfunction getTwilightStore(): ContextData {\n if (_als) {\n const store = _als.getStore();\n if (!store)\n throw new Error('[Twilight] No request context. Wrap with runWithTwilightContext().');\n return store;\n }\n return clientStore;\n}\n\nfunction writableStore(): ContextData {\n if (_als) {\n const store = _als.getStore();\n if (store) return store;\n }\n return clientStore;\n}\n\nfunction mergeIntoStore(store: ContextData, partial: Partial<TwilightContext>): void {\n if ('queryClient' in partial && partial.queryClient) store.queryClient = partial.queryClient;\n if ('settings' in partial && partial.settings != null) store.settings = partial.settings;\n if ('locale' in partial && partial.locale != null) store.locale = partial.locale;\n if ('routeId' in partial && partial.routeId != null) store.routeId = partial.routeId;\n if ('location' in partial && partial.location != null)\n store.location = { ...store.location, ...partial.location };\n if ('authToken' in partial && partial.authToken !== undefined)\n store.authToken = partial.authToken ?? null;\n if ('scope' in partial && partial.scope !== undefined) store.scope = partial.scope ?? null;\n else if ('scopeId' in partial && partial.scopeId !== undefined)\n store.scope = partial.scopeId == null ? null : { id: partial.scopeId };\n if ('storeId' in partial && partial.storeId !== undefined)\n store.storeId = partial.storeId ?? null;\n if ('requestHost' in partial && partial.requestHost !== undefined)\n store.requestHost = partial.requestHost ?? null;\n if ('i18n' in partial && partial.i18n != null) store.i18n = partial.i18n;\n if ('page' in partial) store.page = partial.page;\n if ('appsSnippets' in partial) store.appsSnippets = partial.appsSnippets;\n if ('appsSettings' in partial) store.appsSettings = partial.appsSettings;\n if ('extras' in partial) store.extras = partial.extras;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\nexport function runWithTwilightContext<T>(partial: Partial<TwilightContext>, fn: () => T): T {\n if (_als) {\n const data: ContextData = { ...DEFAULT_DATA };\n mergeIntoStore(data, partial);\n return _als.run(data, fn) as T;\n }\n mergeIntoStore(clientStore, partial);\n return fn();\n}\n\n// Client-only subscription so React consumers (useRouteId/useIsHome/…) re-render\n// when navigation mutates the module store. Mirrors hooks/useWishlist.ts.\nconst listeners = new Set<() => void>();\n\nexport function subscribeTwilight(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nexport function updateTwilightContext(partial: Partial<TwilightContext>): void {\n mergeIntoStore(getTwilightStore(), partial);\n // Server uses AsyncLocalStorage and has no React subscribers; notify on client only.\n if (typeof window !== 'undefined') {\n for (const listener of listeners) listener();\n }\n}\n\n/**\n * Whether store settings are available, without throwing.\n *\n * `getTwilightContext().settings` throws a `SettingsError` when the store is\n * empty, which is fatal inside a head function during hydration. Callers that\n * need to *test* availability must use this instead of a try/catch around the\n * getter. Returns false when there is no request context at all (server-side\n * calls outside `runWithTwilightContext`).\n */\nexport function hasTwilightSettings(): boolean {\n try {\n return getTwilightStore().settings != null;\n } catch {\n return false;\n }\n}\n\n/**\n * The store this request names and the host it arrived on, without throwing.\n *\n * Separate from {@link getTwilightContext} because store identity is read while\n * deciding *what to fetch* — before there is a context worth having — and on the\n * server outside a request the getter throws. A caller asking \"which store?\" has\n * a sane answer for \"none named\"; it has none for an exception.\n */\nexport function getRequestStore(): { storeId: string | null; requestHost: string | null } {\n try {\n const data = getTwilightStore();\n return { storeId: data.storeId, requestHost: data.requestHost };\n } catch {\n return { storeId: null, requestHost: null };\n }\n}\n\nexport function getTwilightContext(): TwilightContext {\n const data = getTwilightStore();\n return {\n get queryClient() {\n return data.queryClient;\n },\n get settings() {\n if (!data.settings) throw new SettingsError();\n return data.settings;\n },\n get locale() {\n return data.locale;\n },\n get routeId() {\n return data.routeId;\n },\n get location() {\n return data.location;\n },\n get authToken() {\n return data.authToken;\n },\n get scope() {\n return data.scope;\n },\n get scopeId() {\n return data.scope?.id ?? null;\n },\n get storeId() {\n return data.storeId;\n },\n get requestHost() {\n return data.requestHost;\n },\n get i18n() {\n if (!data.i18n) {\n const translations = data.queryClient?.getQueryData(['translations']) as\n TranslationMessages | undefined;\n data.i18n = createI18nInstance(data.locale, translations);\n }\n return data.i18n;\n },\n get dir() {\n return getLanguageInfo(data.locale).dir;\n },\n get page() {\n return data.page;\n },\n get appsSnippets() {\n return data.appsSnippets;\n },\n get appsSettings() {\n return data.appsSettings;\n },\n get extras() {\n return data.extras;\n },\n };\n}\n\n/** @internal Reset store for testing */\nexport function resetForTesting(): void {\n Object.assign(writableStore(), { ...DEFAULT_DATA });\n}\n"]}
|