@salla.sa/twilight-theme-engine 1.0.119 → 1.0.121

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.
Files changed (214) hide show
  1. package/dist/{AddToCartForm-2E25Z3JH.js → AddToCartForm-IBFOXI5E.js} +3 -3
  2. package/dist/{AddToCartForm-2E25Z3JH.js.map → AddToCartForm-IBFOXI5E.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-DIQMXVKT.js → BlogAuthorPage-J546AKLR.js} +16 -16
  4. package/dist/{BlogAuthorPage-DIQMXVKT.js.map → BlogAuthorPage-J546AKLR.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-CIEC3I3C.js → BlogCategoryPage-OSPLRNKU.js} +16 -16
  6. package/dist/{BlogCategoryPage-CIEC3I3C.js.map → BlogCategoryPage-OSPLRNKU.js.map} +1 -1
  7. package/dist/{BlogPage-SRBQBKLP.js → BlogPage-WGJWGZG3.js} +14 -14
  8. package/dist/{BlogPage-SRBQBKLP.js.map → BlogPage-WGJWGZG3.js.map} +1 -1
  9. package/dist/{BlogSinglePage-5BD3OVXK.js → BlogSinglePage-W2F7VH5G.js} +14 -14
  10. package/dist/{BlogSinglePage-5BD3OVXK.js.map → BlogSinglePage-W2F7VH5G.js.map} +1 -1
  11. package/dist/{BlogTagPage-ZCDTNTKI.js → BlogTagPage-RRVZ7ZG7.js} +16 -16
  12. package/dist/{BlogTagPage-ZCDTNTKI.js.map → BlogTagPage-RRVZ7ZG7.js.map} +1 -1
  13. package/dist/{BrandsPage-XHWYHEQS.js → BrandsPage-VVU7NIGH.js} +15 -15
  14. package/dist/{BrandsPage-XHWYHEQS.js.map → BrandsPage-VVU7NIGH.js.map} +1 -1
  15. package/dist/{Breadcrumb-OODSTILO.js → Breadcrumb-SQOQLAWK.js} +14 -14
  16. package/dist/{Breadcrumb-OODSTILO.js.map → Breadcrumb-SQOQLAWK.js.map} +1 -1
  17. package/dist/{CartItem-N7PX7K6E.js → CartItem-JFT72XAH.js} +14 -14
  18. package/dist/{CartItem-N7PX7K6E.js.map → CartItem-JFT72XAH.js.map} +1 -1
  19. package/dist/{CartSummary-FVM26G2M.js → CartSummary-V72EGJAH.js} +14 -14
  20. package/dist/{CartSummary-FVM26G2M.js.map → CartSummary-V72EGJAH.js.map} +1 -1
  21. package/dist/{Copyright-JCBJN5YN.js → Copyright-4LUGL7KS.js} +3 -3
  22. package/dist/{Copyright-JCBJN5YN.js.map → Copyright-4LUGL7KS.js.map} +1 -1
  23. package/dist/{CustomerLayout-B3W377Y4.js → CustomerLayout-BLQZM3GR.js} +14 -14
  24. package/dist/{CustomerLayout-B3W377Y4.js.map → CustomerLayout-BLQZM3GR.js.map} +1 -1
  25. package/dist/{Footer-JYJDPUSD.js → Footer-KBU7XIM5.js} +4 -4
  26. package/dist/{Footer-JYJDPUSD.js.map → Footer-KBU7XIM5.js.map} +1 -1
  27. package/dist/{Header-DETRFG6N.js → Header-I6N5ULUM.js} +8 -8
  28. package/dist/{Header-DETRFG6N.js.map → Header-I6N5ULUM.js.map} +1 -1
  29. package/dist/{LoyaltyPage-UBYNGW6Z.js → LoyaltyPage-CTKA57XO.js} +14 -14
  30. package/dist/{LoyaltyPage-UBYNGW6Z.js.map → LoyaltyPage-CTKA57XO.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-OMCCDBLI.js → LoyaltyPointsPage-7LHAL3KB.js} +6 -6
  32. package/dist/{LoyaltyPointsPage-OMCCDBLI.js.map → LoyaltyPointsPage-7LHAL3KB.js.map} +1 -1
  33. package/dist/{MainMenu-BNVH3EVF.js → MainMenu-46I757B7.js} +5 -5
  34. package/dist/{MainMenu-BNVH3EVF.js.map → MainMenu-46I757B7.js.map} +1 -1
  35. package/dist/{MasterLayout-OLB2JUUR.js → MasterLayout-UJCD626U.js} +14 -14
  36. package/dist/{MasterLayout-OLB2JUUR.js.map → MasterLayout-UJCD626U.js.map} +1 -1
  37. package/dist/{MobileMenu-2EAPAHX5.js → MobileMenu-E6KNAN6W.js} +15 -15
  38. package/dist/{MobileMenu-2EAPAHX5.js.map → MobileMenu-E6KNAN6W.js.map} +1 -1
  39. package/dist/{NotificationsPage-PIQJTEHJ.js → NotificationsPage-E7JWYOHQ.js} +14 -14
  40. package/dist/{NotificationsPage-PIQJTEHJ.js.map → NotificationsPage-E7JWYOHQ.js.map} +1 -1
  41. package/dist/{OrderSinglePage-YPNO5B3Z.js → OrderSinglePage-E5CXFWHO.js} +15 -15
  42. package/dist/{OrderSinglePage-YPNO5B3Z.js.map → OrderSinglePage-E5CXFWHO.js.map} +1 -1
  43. package/dist/{OrdersPage-FYL73WZO.js → OrdersPage-IRLHRXRF.js} +14 -14
  44. package/dist/{OrdersPage-FYL73WZO.js.map → OrdersPage-IRLHRXRF.js.map} +1 -1
  45. package/dist/{PageSingle-3VAW7S6B.js → PageSingle-TJIE3K3X.js} +3 -3
  46. package/dist/{PageSingle-3VAW7S6B.js.map → PageSingle-TJIE3K3X.js.map} +1 -1
  47. package/dist/{ProductDetails-UJ4MKTFM.js → ProductDetails-DIAKASL7.js} +4 -4
  48. package/dist/{ProductDetails-UJ4MKTFM.js.map → ProductDetails-DIAKASL7.js.map} +1 -1
  49. package/dist/{ProfilePage-5NZVZU2S.js → ProfilePage-A4DPAJJE.js} +14 -14
  50. package/dist/{ProfilePage-5NZVZU2S.js.map → ProfilePage-A4DPAJJE.js.map} +1 -1
  51. package/dist/{ReviewsPage-SYD5UUVN.js → ReviewsPage-NMQGT3HF.js} +3 -3
  52. package/dist/{ReviewsPage-SYD5UUVN.js.map → ReviewsPage-NMQGT3HF.js.map} +1 -1
  53. package/dist/{SeoCartWidget-R45K7M4U.js → SeoCartWidget-LMXOG3M3.js} +14 -14
  54. package/dist/{SeoCartWidget-R45K7M4U.js.map → SeoCartWidget-LMXOG3M3.js.map} +1 -1
  55. package/dist/{SettingsPage-DWTUF5TO.js → SettingsPage-7CZVRNC5.js} +14 -14
  56. package/dist/{SettingsPage-DWTUF5TO.js.map → SettingsPage-7CZVRNC5.js.map} +1 -1
  57. package/dist/{StoreClosedNotification-2NARK6HJ.js → StoreClosedNotification-2IJACZGK.js} +15 -15
  58. package/dist/{StoreClosedNotification-2NARK6HJ.js.map → StoreClosedNotification-2IJACZGK.js.map} +1 -1
  59. package/dist/{TestimonialsPage-QAOBCMAV.js → TestimonialsPage-5ZIV46PJ.js} +3 -3
  60. package/dist/{TestimonialsPage-QAOBCMAV.js.map → TestimonialsPage-5ZIV46PJ.js.map} +1 -1
  61. package/dist/{ThankYouPage-GBAAHFWB.js → ThankYouPage-KBQ7YTUJ.js} +14 -14
  62. package/dist/{ThankYouPage-GBAAHFWB.js.map → ThankYouPage-KBQ7YTUJ.js.map} +1 -1
  63. package/dist/{WalletPage-QWJM6DTB.js → WalletPage-LZXWUBMX.js} +15 -15
  64. package/dist/{WalletPage-QWJM6DTB.js.map → WalletPage-LZXWUBMX.js.map} +1 -1
  65. package/dist/{WishlistPage-PCQR3DEF.js → WishlistPage-O7AMVN6T.js} +16 -16
  66. package/dist/{WishlistPage-PCQR3DEF.js.map → WishlistPage-O7AMVN6T.js.map} +1 -1
  67. package/dist/api/advertisement.js +2 -2
  68. package/dist/api/apps.js +2 -2
  69. package/dist/api/blog.js +3 -3
  70. package/dist/api/brands.js +3 -3
  71. package/dist/api/cart.js +3 -3
  72. package/dist/api/category.js +3 -3
  73. package/dist/api/client.d.ts.map +1 -1
  74. package/dist/api/client.js +1 -1
  75. package/dist/api/home.js +2 -2
  76. package/dist/api/loyalty.js +3 -3
  77. package/dist/api/menu.js +2 -2
  78. package/dist/api/notification.js +2 -2
  79. package/dist/api/order.js +3 -3
  80. package/dist/api/page.js +3 -3
  81. package/dist/api/product.js +3 -3
  82. package/dist/api/profile.js +1 -1
  83. package/dist/api/store.js +2 -2
  84. package/dist/api/translations.js +2 -2
  85. package/dist/api/user.js +2 -2
  86. package/dist/api/wallet.js +2 -2
  87. package/dist/api/wishlist.js +4 -4
  88. package/dist/{chunk-VXSBJZ3E.js → chunk-2FN3V65B.js} +4 -4
  89. package/dist/{chunk-VXSBJZ3E.js.map → chunk-2FN3V65B.js.map} +1 -1
  90. package/dist/{chunk-MQALPNFL.js → chunk-2VLLOUXA.js} +4 -4
  91. package/dist/{chunk-MQALPNFL.js.map → chunk-2VLLOUXA.js.map} +1 -1
  92. package/dist/{chunk-QWGSGNM7.js → chunk-3Q2SY5EH.js} +7 -7
  93. package/dist/{chunk-QWGSGNM7.js.map → chunk-3Q2SY5EH.js.map} +1 -1
  94. package/dist/{chunk-CKMLOJGM.js → chunk-65HHD72A.js} +6 -6
  95. package/dist/{chunk-CKMLOJGM.js.map → chunk-65HHD72A.js.map} +1 -1
  96. package/dist/{chunk-NEHOBD4K.js → chunk-7OHV6ZVA.js} +3 -3
  97. package/dist/{chunk-NEHOBD4K.js.map → chunk-7OHV6ZVA.js.map} +1 -1
  98. package/dist/{chunk-CTNSIK3V.js → chunk-AFZY6VS5.js} +7 -7
  99. package/dist/{chunk-CTNSIK3V.js.map → chunk-AFZY6VS5.js.map} +1 -1
  100. package/dist/{chunk-4EATTQQA.js → chunk-AKLPLYOV.js} +3 -3
  101. package/dist/{chunk-4EATTQQA.js.map → chunk-AKLPLYOV.js.map} +1 -1
  102. package/dist/{chunk-7K3AK6IC.js → chunk-ASXBALNQ.js} +4 -4
  103. package/dist/{chunk-7K3AK6IC.js.map → chunk-ASXBALNQ.js.map} +1 -1
  104. package/dist/chunk-CPVIIWML.js +14 -0
  105. package/dist/{chunk-UI625G7U.js.map → chunk-CPVIIWML.js.map} +1 -1
  106. package/dist/{chunk-3LJF7ECP.js → chunk-CZJAAIJB.js} +4 -4
  107. package/dist/{chunk-3LJF7ECP.js.map → chunk-CZJAAIJB.js.map} +1 -1
  108. package/dist/{chunk-ME4UKH7Y.js → chunk-DOWFJOQD.js} +4 -4
  109. package/dist/{chunk-ME4UKH7Y.js.map → chunk-DOWFJOQD.js.map} +1 -1
  110. package/dist/{chunk-VI2WHQDR.js → chunk-DYRZ7JXQ.js} +3 -3
  111. package/dist/{chunk-VI2WHQDR.js.map → chunk-DYRZ7JXQ.js.map} +1 -1
  112. package/dist/{chunk-XMFVSBEO.js → chunk-E6HKDJQU.js} +3 -3
  113. package/dist/{chunk-XMFVSBEO.js.map → chunk-E6HKDJQU.js.map} +1 -1
  114. package/dist/{chunk-EFT442TN.js → chunk-EBISPK5W.js} +3 -3
  115. package/dist/{chunk-EFT442TN.js.map → chunk-EBISPK5W.js.map} +1 -1
  116. package/dist/{chunk-D2RUSG36.js → chunk-F4KI6OHA.js} +4 -4
  117. package/dist/{chunk-D2RUSG36.js.map → chunk-F4KI6OHA.js.map} +1 -1
  118. package/dist/{chunk-PFAPRJVF.js → chunk-GMQK6UHZ.js} +13 -4
  119. package/dist/chunk-GMQK6UHZ.js.map +1 -0
  120. package/dist/{chunk-UMTMIMH7.js → chunk-GMR6IV4N.js} +3 -3
  121. package/dist/{chunk-UMTMIMH7.js.map → chunk-GMR6IV4N.js.map} +1 -1
  122. package/dist/{chunk-T23HXVW5.js → chunk-H52RC2CC.js} +3 -3
  123. package/dist/{chunk-T23HXVW5.js.map → chunk-H52RC2CC.js.map} +1 -1
  124. package/dist/{chunk-3WGZZD2Y.js → chunk-I4DX2ETY.js} +4 -4
  125. package/dist/{chunk-3WGZZD2Y.js.map → chunk-I4DX2ETY.js.map} +1 -1
  126. package/dist/{chunk-XM22O2B2.js → chunk-I4JJJWQH.js} +3 -3
  127. package/dist/{chunk-XM22O2B2.js.map → chunk-I4JJJWQH.js.map} +1 -1
  128. package/dist/{chunk-GEGB34LB.js → chunk-K35YWUL5.js} +4 -4
  129. package/dist/{chunk-GEGB34LB.js.map → chunk-K35YWUL5.js.map} +1 -1
  130. package/dist/{chunk-JHTTTXTI.js → chunk-NJQPMELJ.js} +4 -4
  131. package/dist/{chunk-JHTTTXTI.js.map → chunk-NJQPMELJ.js.map} +1 -1
  132. package/dist/{chunk-AVW4CLTB.js → chunk-NSTH6ZQQ.js} +3 -3
  133. package/dist/{chunk-AVW4CLTB.js.map → chunk-NSTH6ZQQ.js.map} +1 -1
  134. package/dist/{chunk-RVPC4AYT.js → chunk-OGPRFIYJ.js} +3 -3
  135. package/dist/{chunk-RVPC4AYT.js.map → chunk-OGPRFIYJ.js.map} +1 -1
  136. package/dist/{chunk-VT6FE3CB.js → chunk-ONYYMIHL.js} +3 -3
  137. package/dist/{chunk-VT6FE3CB.js.map → chunk-ONYYMIHL.js.map} +1 -1
  138. package/dist/{chunk-R5TTR2G7.js → chunk-PM5W3ZXP.js} +15 -20
  139. package/dist/chunk-PM5W3ZXP.js.map +1 -0
  140. package/dist/{chunk-PRA6E6SQ.js → chunk-QGXFNKVO.js} +4 -4
  141. package/dist/{chunk-PRA6E6SQ.js.map → chunk-QGXFNKVO.js.map} +1 -1
  142. package/dist/{chunk-5CKTQAFX.js → chunk-QQKVRJVR.js} +3 -3
  143. package/dist/{chunk-5CKTQAFX.js.map → chunk-QQKVRJVR.js.map} +1 -1
  144. package/dist/{chunk-EFCIK5NI.js → chunk-RE7D6VLE.js} +3 -3
  145. package/dist/{chunk-EFCIK5NI.js.map → chunk-RE7D6VLE.js.map} +1 -1
  146. package/dist/{chunk-E552K72T.js → chunk-RL7CGNSG.js} +3 -3
  147. package/dist/{chunk-E552K72T.js.map → chunk-RL7CGNSG.js.map} +1 -1
  148. package/dist/{chunk-NU2LPGNB.js → chunk-S67SWBZK.js} +3 -3
  149. package/dist/{chunk-NU2LPGNB.js.map → chunk-S67SWBZK.js.map} +1 -1
  150. package/dist/{chunk-IRQJBRKV.js → chunk-T2UNJOAM.js} +3 -3
  151. package/dist/{chunk-IRQJBRKV.js.map → chunk-T2UNJOAM.js.map} +1 -1
  152. package/dist/{chunk-EQ7I4AFL.js → chunk-V3WF5VX4.js} +5 -5
  153. package/dist/{chunk-EQ7I4AFL.js.map → chunk-V3WF5VX4.js.map} +1 -1
  154. package/dist/{chunk-I46KQSZH.js → chunk-VAOQ3WQ3.js} +6 -6
  155. package/dist/{chunk-I46KQSZH.js.map → chunk-VAOQ3WQ3.js.map} +1 -1
  156. package/dist/{chunk-S4VVTUCI.js → chunk-W6JJZYUY.js} +7 -7
  157. package/dist/{chunk-S4VVTUCI.js.map → chunk-W6JJZYUY.js.map} +1 -1
  158. package/dist/{chunk-Y36VLQGV.js → chunk-XNEH22HY.js} +10 -10
  159. package/dist/{chunk-Y36VLQGV.js.map → chunk-XNEH22HY.js.map} +1 -1
  160. package/dist/{chunk-B6JTC5R6.js → chunk-YB6M74XT.js} +4 -4
  161. package/dist/{chunk-B6JTC5R6.js.map → chunk-YB6M74XT.js.map} +1 -1
  162. package/dist/{chunk-VSK2WS4G.js → chunk-YOOCN2ZQ.js} +3 -3
  163. package/dist/{chunk-VSK2WS4G.js.map → chunk-YOOCN2ZQ.js.map} +1 -1
  164. package/dist/{chunk-W6NQM4FQ.js → chunk-ZDHYST5S.js} +3 -3
  165. package/dist/{chunk-W6NQM4FQ.js.map → chunk-ZDHYST5S.js.map} +1 -1
  166. package/dist/components/cart/index.js +1 -1
  167. package/dist/components/common/index.js +1 -1
  168. package/dist/components/drawer/index.js +12 -12
  169. package/dist/components/home/index.js +16 -16
  170. package/dist/components/layout/index.js +4 -4
  171. package/dist/components/product/index.js +13 -13
  172. package/dist/components/store/index.js +13 -13
  173. package/dist/dev/editor/index.js +1 -1
  174. package/dist/dev/index.js +1 -1
  175. package/dist/{document-class-TSDZIVXW.js → document-class-5D33WMFO.js} +11 -11
  176. package/dist/{document-class-TSDZIVXW.js.map → document-class-5D33WMFO.js.map} +1 -1
  177. package/dist/hooks/index.js +12 -12
  178. package/dist/hooks/useGtm.js +12 -12
  179. package/dist/hooks/useMoney.js +12 -12
  180. package/dist/hooks/useStore.js +12 -12
  181. package/dist/hooks/useUser.js +3 -3
  182. package/dist/index.js +12 -12
  183. package/dist/{navigation-LRBZCNKS.js → navigation-N2LSXPNF.js} +4 -4
  184. package/dist/{navigation-LRBZCNKS.js.map → navigation-N2LSXPNF.js.map} +1 -1
  185. package/dist/{navigation-2V7R2ANX.js → navigation-VLZWFWOE.js} +5 -5
  186. package/dist/{navigation-2V7R2ANX.js.map → navigation-VLZWFWOE.js.map} +1 -1
  187. package/dist/{not-found-5DFPFQ4B.js → not-found-AEXB5SXN.js} +15 -15
  188. package/dist/{not-found-5DFPFQ4B.js.map → not-found-AEXB5SXN.js.map} +1 -1
  189. package/dist/providers/index.js +12 -12
  190. package/dist/routes/account/orders.js +4 -4
  191. package/dist/routes/account.js +13 -13
  192. package/dist/routes/blog.js +8 -8
  193. package/dist/routes/brands.js +4 -4
  194. package/dist/routes/cart.js +20 -20
  195. package/dist/routes/home.js +17 -17
  196. package/dist/routes/index.js +3 -3
  197. package/dist/routes/loyalty.js +5 -5
  198. package/dist/routes/page.js +4 -4
  199. package/dist/routes/product-listing.js +18 -18
  200. package/dist/routes/product.js +16 -16
  201. package/dist/routes/seo-redirects.js +3 -3
  202. package/dist/routes/testimonials.js +2 -2
  203. package/dist/routes/thank-you.js +4 -4
  204. package/dist/skeleton.js +17 -17
  205. package/dist/{store-lookup-YUA66JS6.js → store-lookup-NKWMTTIE.js} +8 -8
  206. package/dist/{store-lookup-YUA66JS6.js.map → store-lookup-NKWMTTIE.js.map} +1 -1
  207. package/dist/tanstack.js +11 -11
  208. package/dist/utils/fast-checkout.d.ts +1 -1
  209. package/dist/utils/fast-checkout.d.ts.map +1 -1
  210. package/dist/utils/index.js +2 -2
  211. package/package.json +1 -1
  212. package/dist/chunk-PFAPRJVF.js.map +0 -1
  213. package/dist/chunk-R5TTR2G7.js.map +0 -1
  214. package/dist/chunk-UI625G7U.js +0 -14
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/cart/CartSummary.tsx"],"names":[],"mappings":"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","file":"CartSummary-FVM26G2M.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 // Twig's cart.js: a submit with an empty required option fails and the SDK resets the cart.\n const forms = document.querySelectorAll<HTMLFormElement>('form[id^=\"item-\"]');\n if (![...forms].every((form) => form.reportValidity())) {\n window.salla?.notify.error(window.salla.lang.get('common.messages.required_fields'));\n return;\n }\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
+ {"version":3,"sources":["../src/components/cart/CartSummary.tsx"],"names":[],"mappings":"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","file":"CartSummary-V72EGJAH.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 // Twig's cart.js: a submit with an empty required option fails and the SDK resets the cart.\n const forms = document.querySelectorAll<HTMLFormElement>('form[id^=\"item-\"]');\n if (![...forms].every((form) => form.reportValidity())) {\n window.salla?.notify.error(window.salla.lang.get('common.messages.required_fields'));\n return;\n }\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,5 +1,5 @@
1
1
  import { useTranslation } from './chunk-TYNZ5B2B.js';
2
- import './chunk-AVW4CLTB.js';
2
+ import './chunk-NSTH6ZQQ.js';
3
3
  import { Link } from './chunk-AXW67SY7.js';
4
4
  import './chunk-BYMOPN2S.js';
5
5
  import './chunk-SKLEJJ6M.js';
@@ -21,5 +21,5 @@ function Copyright({ storeName = "" }) {
21
21
  }
22
22
 
23
23
  export { Copyright };
24
- //# sourceMappingURL=Copyright-JCBJN5YN.js.map
25
- //# sourceMappingURL=Copyright-JCBJN5YN.js.map
24
+ //# sourceMappingURL=Copyright-4LUGL7KS.js.map
25
+ //# sourceMappingURL=Copyright-4LUGL7KS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/layout/Copyright.tsx"],"names":[],"mappings":";;;;;;;;;AAUO,SAAS,SAAA,CAAU,EAAE,SAAA,GAAY,EAAA,EAAG,EAAmB;AAC5D,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,IAAA,GAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAEpC,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,CAAA,CAAE,2BAA2B,WAAW,CAAA;AAAA,IAAE,KAAA;AAAA,IAAI,IAAA;AAAA,IAAM,GAAA;AAAA,wBACpD,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,SAAA,EAAU,sBACpB,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,IAAQ;AAAA,GAAA,EACV,CAAA;AAEJ","file":"Copyright-JCBJN5YN.js","sourcesContent":["import { useTranslation } from '../../providers/I18nProvider';\nimport { Link } from '../common';\n\nexport interface CopyrightProps {\n storeName?: string;\n}\n\n/**\n * Simple copyright component - shows \"Copyright | Year StoreName | Powered by Salla\"\n */\nexport function Copyright({ storeName = '' }: CopyrightProps) {\n const { t } = useTranslation();\n const year = new Date().getFullYear();\n\n return (\n <>\n {t('blocks.footer.copyright', 'Copyright')} | {year}{' '}\n <Link to=\"/\" className=\"hover:text-primary\">\n {storeName}\n </Link>{' '}\n </>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/layout/Copyright.tsx"],"names":[],"mappings":";;;;;;;;;AAUO,SAAS,SAAA,CAAU,EAAE,SAAA,GAAY,EAAA,EAAG,EAAmB;AAC5D,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,IAAA,GAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAEpC,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,CAAA,CAAE,2BAA2B,WAAW,CAAA;AAAA,IAAE,KAAA;AAAA,IAAI,IAAA;AAAA,IAAM,GAAA;AAAA,wBACpD,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,SAAA,EAAU,sBACpB,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,IAAQ;AAAA,GAAA,EACV,CAAA;AAEJ","file":"Copyright-4LUGL7KS.js","sourcesContent":["import { useTranslation } from '../../providers/I18nProvider';\nimport { Link } from '../common';\n\nexport interface CopyrightProps {\n storeName?: string;\n}\n\n/**\n * Simple copyright component - shows \"Copyright | Year StoreName | Powered by Salla\"\n */\nexport function Copyright({ storeName = '' }: CopyrightProps) {\n const { t } = useTranslation();\n const year = new Date().getFullYear();\n\n return (\n <>\n {t('blocks.footer.copyright', 'Copyright')} | {year}{' '}\n <Link to=\"/\" className=\"hover:text-primary\">\n {storeName}\n </Link>{' '}\n </>\n );\n}\n"]}
@@ -1,21 +1,21 @@
1
- import './chunk-R5TTR2G7.js';
2
- import './chunk-QWGSGNM7.js';
3
- import './chunk-XM22O2B2.js';
1
+ import './chunk-PM5W3ZXP.js';
2
+ import './chunk-3Q2SY5EH.js';
3
+ import './chunk-I4JJJWQH.js';
4
4
  import './chunk-D6XHL6VQ.js';
5
5
  import './chunk-JYV25VNZ.js';
6
- import './chunk-XMFVSBEO.js';
6
+ import './chunk-E6HKDJQU.js';
7
7
  import './chunk-OXMUPNMH.js';
8
- import './chunk-UMTMIMH7.js';
8
+ import './chunk-GMR6IV4N.js';
9
9
  import './chunk-VVZNW5CB.js';
10
10
  import './chunk-5FJFN3IW.js';
11
11
  import './chunk-GD26FI4J.js';
12
12
  import './chunk-OM2GRPDH.js';
13
- import { useLocation } from './chunk-T23HXVW5.js';
13
+ import { useLocation } from './chunk-H52RC2CC.js';
14
14
  import { RouteId } from './chunk-OUW6WESU.js';
15
15
  import './chunk-BK5TBUGG.js';
16
16
  import './chunk-HI5V5X3S.js';
17
- import { useUser } from './chunk-VT6FE3CB.js';
18
- import './chunk-RVPC4AYT.js';
17
+ import { useUser } from './chunk-ONYYMIHL.js';
18
+ import './chunk-OGPRFIYJ.js';
19
19
  import './chunk-MVT5AF2A.js';
20
20
  import './chunk-Z653O7MX.js';
21
21
  import './chunk-ZCH7W7DZ.js';
@@ -26,15 +26,15 @@ import './chunk-7V36I5GT.js';
26
26
  import './chunk-6WI7R2BD.js';
27
27
  import './chunk-JGVEGQHJ.js';
28
28
  import './chunk-OAMIDZKW.js';
29
- import './chunk-EFT442TN.js';
29
+ import './chunk-EBISPK5W.js';
30
30
  import './chunk-OQIIJRAS.js';
31
31
  import './chunk-V2ZDTY6H.js';
32
- import './chunk-VI2WHQDR.js';
32
+ import './chunk-DYRZ7JXQ.js';
33
33
  import './chunk-5XDPAKF5.js';
34
34
  import './chunk-GCPEMNSU.js';
35
- import './chunk-PFAPRJVF.js';
35
+ import './chunk-GMQK6UHZ.js';
36
36
  import { useTranslation } from './chunk-TYNZ5B2B.js';
37
- import { LazyBreadcrumb } from './chunk-AVW4CLTB.js';
37
+ import { LazyBreadcrumb } from './chunk-NSTH6ZQQ.js';
38
38
  import './chunk-AXW67SY7.js';
39
39
  import './chunk-BYMOPN2S.js';
40
40
  import './chunk-SKLEJJ6M.js';
@@ -96,5 +96,5 @@ function CustomerLayout({ children, page }) {
96
96
  }
97
97
 
98
98
  export { CustomerLayout };
99
- //# sourceMappingURL=CustomerLayout-B3W377Y4.js.map
100
- //# sourceMappingURL=CustomerLayout-B3W377Y4.js.map
99
+ //# sourceMappingURL=CustomerLayout-BLQZM3GR.js.map
100
+ //# sourceMappingURL=CustomerLayout-BLQZM3GR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/layout/CustomerLayout.tsx"],"names":[],"mappings":"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","file":"CustomerLayout-B3W377Y4.js","sourcesContent":["import { useMemo } from 'react';\nimport { useUser } from '../../hooks';\nimport { useDocumentClass } from '../../hooks/useDocumentClass';\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 { useTranslation } from '../../providers/I18nProvider';\nimport { useLocation } from '../../providers/NavigationProvider';\nimport type { Page } from '../../types';\nimport { RouteId } from '../../router/route-ids';\n\ninterface CustomerLayoutProps extends LayoutProps {\n page?: Page;\n}\n\nexport function CustomerLayout({ children, page }: CustomerLayoutProps) {\n const { data: user } = useUser();\n const { t } = useTranslation();\n const { pathname } = useLocation();\n\n // Twig's salla-breadcrumb puts \"My account\" before every customer page but these two.\n const crumbPage = useMemo(() => {\n if (\n !page ||\n page.breadcrumbs?.length ||\n ([RouteId.CUSTOMER_PROFILE, RouteId.CUSTOMER_WISHLIST] as string[]).includes(page.slug)\n ) {\n return page;\n }\n return {\n ...page,\n breadcrumbs: [\n { name: t('common.titles.home'), url: '/' },\n { name: t('common.titles.profile'), url: '/account/profile' },\n { name: page.title, url: pathname },\n ],\n };\n }, [page, pathname, t]);\n\n // Marks every customer/account page so a theme can scope styles to them\n // (route classes vary per page; this one is shared).\n useDocumentClass({ body: { class: 'customer' } });\n\n return (\n <>\n <div className=\"profile-header gradient-bg\">\n <div className=\"container relative flex justify-between h-full items-center\">\n {crumbPage && (\n <Breadcrumb page={crumbPage} className=\"breadcrumbs w-full py-5 self-start\" />\n )}\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 === RouteId.CUSTOMER_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
+ {"version":3,"sources":["../src/components/layout/CustomerLayout.tsx"],"names":[],"mappings":"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","file":"CustomerLayout-BLQZM3GR.js","sourcesContent":["import { useMemo } from 'react';\nimport { useUser } from '../../hooks';\nimport { useDocumentClass } from '../../hooks/useDocumentClass';\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 { useTranslation } from '../../providers/I18nProvider';\nimport { useLocation } from '../../providers/NavigationProvider';\nimport type { Page } from '../../types';\nimport { RouteId } from '../../router/route-ids';\n\ninterface CustomerLayoutProps extends LayoutProps {\n page?: Page;\n}\n\nexport function CustomerLayout({ children, page }: CustomerLayoutProps) {\n const { data: user } = useUser();\n const { t } = useTranslation();\n const { pathname } = useLocation();\n\n // Twig's salla-breadcrumb puts \"My account\" before every customer page but these two.\n const crumbPage = useMemo(() => {\n if (\n !page ||\n page.breadcrumbs?.length ||\n ([RouteId.CUSTOMER_PROFILE, RouteId.CUSTOMER_WISHLIST] as string[]).includes(page.slug)\n ) {\n return page;\n }\n return {\n ...page,\n breadcrumbs: [\n { name: t('common.titles.home'), url: '/' },\n { name: t('common.titles.profile'), url: '/account/profile' },\n { name: page.title, url: pathname },\n ],\n };\n }, [page, pathname, t]);\n\n // Marks every customer/account page so a theme can scope styles to them\n // (route classes vary per page; this one is shared).\n useDocumentClass({ body: { class: 'customer' } });\n\n return (\n <>\n <div className=\"profile-header gradient-bg\">\n <div className=\"container relative flex justify-between h-full items-center\">\n {crumbPage && (\n <Breadcrumb page={crumbPage} className=\"breadcrumbs w-full py-5 self-start\" />\n )}\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 === RouteId.CUSTOMER_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,9 +1,9 @@
1
- export { Footer } from './chunk-XM22O2B2.js';
1
+ export { Footer } from './chunk-I4JJJWQH.js';
2
2
  import './chunk-OQIIJRAS.js';
3
3
  import './chunk-5XDPAKF5.js';
4
4
  import './chunk-GCPEMNSU.js';
5
5
  import './chunk-TYNZ5B2B.js';
6
- import './chunk-AVW4CLTB.js';
6
+ import './chunk-NSTH6ZQQ.js';
7
7
  import './chunk-AXW67SY7.js';
8
8
  import './chunk-BYMOPN2S.js';
9
9
  import './chunk-SKLEJJ6M.js';
@@ -12,5 +12,5 @@ import './chunk-YA6ABQB7.js';
12
12
  import './chunk-T72DAX7R.js';
13
13
  import './chunk-DF6FBKDN.js';
14
14
  import './chunk-DGUM43GV.js';
15
- //# sourceMappingURL=Footer-JYJDPUSD.js.map
16
- //# sourceMappingURL=Footer-JYJDPUSD.js.map
15
+ //# sourceMappingURL=Footer-KBU7XIM5.js.map
16
+ //# sourceMappingURL=Footer-KBU7XIM5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Footer-JYJDPUSD.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Footer-KBU7XIM5.js"}
@@ -1,13 +1,13 @@
1
- export { Header } from './chunk-QWGSGNM7.js';
2
- import './chunk-T23HXVW5.js';
1
+ export { Header } from './chunk-3Q2SY5EH.js';
2
+ import './chunk-H52RC2CC.js';
3
3
  import './chunk-OUW6WESU.js';
4
- import './chunk-EFT442TN.js';
5
- import './chunk-VI2WHQDR.js';
4
+ import './chunk-EBISPK5W.js';
5
+ import './chunk-DYRZ7JXQ.js';
6
6
  import './chunk-5XDPAKF5.js';
7
7
  import './chunk-GCPEMNSU.js';
8
- import './chunk-PFAPRJVF.js';
8
+ import './chunk-GMQK6UHZ.js';
9
9
  import './chunk-TYNZ5B2B.js';
10
- import './chunk-AVW4CLTB.js';
10
+ import './chunk-NSTH6ZQQ.js';
11
11
  import './chunk-AXW67SY7.js';
12
12
  import './chunk-BYMOPN2S.js';
13
13
  import './chunk-SKLEJJ6M.js';
@@ -18,5 +18,5 @@ import './chunk-7VNVCHID.js';
18
18
  import './chunk-T72DAX7R.js';
19
19
  import './chunk-DF6FBKDN.js';
20
20
  import './chunk-DGUM43GV.js';
21
- //# sourceMappingURL=Header-DETRFG6N.js.map
22
- //# sourceMappingURL=Header-DETRFG6N.js.map
21
+ //# sourceMappingURL=Header-I6N5ULUM.js.map
22
+ //# sourceMappingURL=Header-I6N5ULUM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"Header-DETRFG6N.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"Header-I6N5ULUM.js"}
@@ -1,21 +1,21 @@
1
- import './chunk-R5TTR2G7.js';
2
- import './chunk-QWGSGNM7.js';
3
- import './chunk-XM22O2B2.js';
1
+ import './chunk-PM5W3ZXP.js';
2
+ import './chunk-3Q2SY5EH.js';
3
+ import './chunk-I4JJJWQH.js';
4
4
  import './chunk-D6XHL6VQ.js';
5
5
  import './chunk-JYV25VNZ.js';
6
- import './chunk-XMFVSBEO.js';
6
+ import './chunk-E6HKDJQU.js';
7
7
  import './chunk-OXMUPNMH.js';
8
- import './chunk-UMTMIMH7.js';
8
+ import './chunk-GMR6IV4N.js';
9
9
  import './chunk-VVZNW5CB.js';
10
10
  import './chunk-5FJFN3IW.js';
11
11
  import './chunk-GD26FI4J.js';
12
12
  import './chunk-OM2GRPDH.js';
13
- import './chunk-T23HXVW5.js';
13
+ import './chunk-H52RC2CC.js';
14
14
  import './chunk-OUW6WESU.js';
15
15
  import './chunk-BK5TBUGG.js';
16
16
  import './chunk-HI5V5X3S.js';
17
- import './chunk-VT6FE3CB.js';
18
- import './chunk-RVPC4AYT.js';
17
+ import './chunk-ONYYMIHL.js';
18
+ import './chunk-OGPRFIYJ.js';
19
19
  import './chunk-MVT5AF2A.js';
20
20
  import './chunk-Z653O7MX.js';
21
21
  import './chunk-ZCH7W7DZ.js';
@@ -26,15 +26,15 @@ import './chunk-7V36I5GT.js';
26
26
  import './chunk-6WI7R2BD.js';
27
27
  import './chunk-JGVEGQHJ.js';
28
28
  import './chunk-OAMIDZKW.js';
29
- import './chunk-EFT442TN.js';
29
+ import './chunk-EBISPK5W.js';
30
30
  import './chunk-OQIIJRAS.js';
31
31
  import './chunk-V2ZDTY6H.js';
32
- import './chunk-VI2WHQDR.js';
32
+ import './chunk-DYRZ7JXQ.js';
33
33
  import { HookSlot } from './chunk-5XDPAKF5.js';
34
34
  import './chunk-GCPEMNSU.js';
35
- import './chunk-PFAPRJVF.js';
35
+ import './chunk-GMQK6UHZ.js';
36
36
  import './chunk-TYNZ5B2B.js';
37
- import { LazyBreadcrumb } from './chunk-AVW4CLTB.js';
37
+ import { LazyBreadcrumb } from './chunk-NSTH6ZQQ.js';
38
38
  import './chunk-AXW67SY7.js';
39
39
  import './chunk-BYMOPN2S.js';
40
40
  import './chunk-SKLEJJ6M.js';
@@ -65,5 +65,5 @@ function LoyaltyPage({ page }) {
65
65
  }
66
66
 
67
67
  export { LoyaltyPage };
68
- //# sourceMappingURL=LoyaltyPage-UBYNGW6Z.js.map
69
- //# sourceMappingURL=LoyaltyPage-UBYNGW6Z.js.map
68
+ //# sourceMappingURL=LoyaltyPage-CTKA57XO.js.map
69
+ //# sourceMappingURL=LoyaltyPage-CTKA57XO.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/loyalty/LoyaltyPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAK,EAAqB;AACtD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,eAAA,EAAgB,CAAA;AAAA,oBAC/B,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,kBAAW,IAAA,EAAY,CAAA;AAAA,0BACvB,mBAAA,EAAA,EAAoB;AAAA,KAAA,EACvB,CAAA;AAAA,oBACA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,aAAA,EAAc;AAAA,GAAA,EAC/B,CAAA;AAEJ","file":"LoyaltyPage-UBYNGW6Z.js","sourcesContent":["import { SallaLoyaltyProgram } from '@salla.sa/twilight-components-react/loyalty-program';\nimport type { LoyaltyPageProps } from './types';\nimport { Breadcrumb } from '../../components/common';\nimport { HookSlot } from '../../hooks';\n\nexport function LoyaltyPage({ page }: LoyaltyPageProps) {\n return (\n <>\n <HookSlot name=\"loyalty:start\" />\n <div className=\"container mb-20\">\n <Breadcrumb page={page} />\n <SallaLoyaltyProgram />\n </div>\n <HookSlot name=\"loyalty:end\" />\n </>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/routes/loyalty/LoyaltyPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAK,EAAqB;AACtD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,eAAA,EAAgB,CAAA;AAAA,oBAC/B,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,kBAAW,IAAA,EAAY,CAAA;AAAA,0BACvB,mBAAA,EAAA,EAAoB;AAAA,KAAA,EACvB,CAAA;AAAA,oBACA,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,aAAA,EAAc;AAAA,GAAA,EAC/B,CAAA;AAEJ","file":"LoyaltyPage-CTKA57XO.js","sourcesContent":["import { SallaLoyaltyProgram } from '@salla.sa/twilight-components-react/loyalty-program';\nimport type { LoyaltyPageProps } from './types';\nimport { Breadcrumb } from '../../components/common';\nimport { HookSlot } from '../../hooks';\n\nexport function LoyaltyPage({ page }: LoyaltyPageProps) {\n return (\n <>\n <HookSlot name=\"loyalty:start\" />\n <div className=\"container mb-20\">\n <Breadcrumb page={page} />\n <SallaLoyaltyProgram />\n </div>\n <HookSlot name=\"loyalty:end\" />\n </>\n );\n}\n"]}
@@ -1,11 +1,11 @@
1
- import { LazyCustomerLayout } from './chunk-S4VVTUCI.js';
2
- import './chunk-EFT442TN.js';
1
+ import { LazyCustomerLayout } from './chunk-W6JJZYUY.js';
2
+ import './chunk-EBISPK5W.js';
3
3
  import './chunk-OQIIJRAS.js';
4
4
  import './chunk-V2ZDTY6H.js';
5
- import './chunk-VI2WHQDR.js';
5
+ import './chunk-DYRZ7JXQ.js';
6
6
  import './chunk-5XDPAKF5.js';
7
7
  import './chunk-GCPEMNSU.js';
8
- import './chunk-PFAPRJVF.js';
8
+ import './chunk-GMQK6UHZ.js';
9
9
  import './chunk-TYNZ5B2B.js';
10
10
  import './chunk-GYXUYHKO.js';
11
11
  import './chunk-FHU2MXZA.js';
@@ -21,5 +21,5 @@ function LoyaltyPointsPage({ page }) {
21
21
  }
22
22
 
23
23
  export { LoyaltyPointsPage };
24
- //# sourceMappingURL=LoyaltyPointsPage-OMCCDBLI.js.map
25
- //# sourceMappingURL=LoyaltyPointsPage-OMCCDBLI.js.map
24
+ //# sourceMappingURL=LoyaltyPointsPage-7LHAL3KB.js.map
25
+ //# sourceMappingURL=LoyaltyPointsPage-7LHAL3KB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/loyalty/LoyaltyPointsPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAIO,SAAS,iBAAA,CAAkB,EAAE,IAAA,EAAK,EAA2B;AAClE,EAAA,uBACE,GAAA,CAAC,kBAAA,EAAA,EAAe,IAAA,EACd,QAAA,kBAAA,GAAA,CAAC,6BAA0B,CAAA,EAC7B,CAAA;AAEJ","file":"LoyaltyPointsPage-OMCCDBLI.js","sourcesContent":["import { SallaLoyaltyPointsHistory } from '@salla.sa/twilight-components-react/loyalty-points-history';\nimport type { LoyaltyPointsPageProps } from './types';\nimport { CustomerLayout } from '../../components/layout';\n\nexport function LoyaltyPointsPage({ page }: LoyaltyPointsPageProps) {\n return (\n <CustomerLayout page={page}>\n <SallaLoyaltyPointsHistory />\n </CustomerLayout>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/routes/loyalty/LoyaltyPointsPage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAIO,SAAS,iBAAA,CAAkB,EAAE,IAAA,EAAK,EAA2B;AAClE,EAAA,uBACE,GAAA,CAAC,kBAAA,EAAA,EAAe,IAAA,EACd,QAAA,kBAAA,GAAA,CAAC,6BAA0B,CAAA,EAC7B,CAAA;AAEJ","file":"LoyaltyPointsPage-7LHAL3KB.js","sourcesContent":["import { SallaLoyaltyPointsHistory } from '@salla.sa/twilight-components-react/loyalty-points-history';\nimport type { LoyaltyPointsPageProps } from './types';\nimport { CustomerLayout } from '../../components/layout';\n\nexport function LoyaltyPointsPage({ page }: LoyaltyPointsPageProps) {\n return (\n <CustomerLayout page={page}>\n <SallaLoyaltyPointsHistory />\n </CustomerLayout>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { menu } from './chunk-VSK2WS4G.js';
2
- import './chunk-PFAPRJVF.js';
1
+ import { menu } from './chunk-YOOCN2ZQ.js';
2
+ import './chunk-GMQK6UHZ.js';
3
3
  import { useTranslation } from './chunk-TYNZ5B2B.js';
4
- import './chunk-AVW4CLTB.js';
4
+ import './chunk-NSTH6ZQQ.js';
5
5
  import { Link } from './chunk-AXW67SY7.js';
6
6
  import './chunk-BYMOPN2S.js';
7
7
  import './chunk-SKLEJJ6M.js';
@@ -68,5 +68,5 @@ function MainMenu() {
68
68
  }
69
69
 
70
70
  export { MainMenu };
71
- //# sourceMappingURL=MainMenu-BNVH3EVF.js.map
72
- //# sourceMappingURL=MainMenu-BNVH3EVF.js.map
71
+ //# sourceMappingURL=MainMenu-46I757B7.js.map
72
+ //# sourceMappingURL=MainMenu-46I757B7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/navigation/MainMenu.tsx"],"names":["MainMenuSkeleton"],"mappings":";;;;;;;;;;;;;;;;;AAQA,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,MAAA,EAAO;AAAA,EAC7B,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,MAAA,EAAO;AAAA,EAC9B,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,MAAA,EAAO;AAAA,EAC7B,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,MAAA,EAAO;AAAA,EAC9B,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,MAAA;AACxB,CAAA;AAEA,IAAM,gBAAA,GAAmB,IAAA,CAAK,SAASA,iBAAAA,GAAmB;AACxD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,WAAU,WAAA,EACX,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,EAAE,EAAA,EAAI,KAAA,EAAM,yBAC9B,IAAA,EAAA,EAAY,SAAA,EAAU,8BAAA,EACrB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EACP,QAAA,kBAAA,GAAA,CAAC,UAAK,SAAA,EAAW,CAAA,mDAAA,EAAsD,KAAK,CAAA,CAAA,EAAI,CAAA,EAClF,CAAA,EAAA,EAHO,EAIT,CACD,GACH,CAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAEM,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,GAAQ,EAAC,EAAG,SAAA,EAAU,GAAI,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA;AACtE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,MAAM,EAAE,YAAA,EAAc,WAAA,EAAY,GAAI,QAAQ,MAAM;AAClD,IAAA,MAAM,UAAA,GAAa,OAAO,QAAA,EAAU,sBAAA;AACpC,IAAA,MAAM,YAAA,GAAe,CAAA;AAErB,IAAA,IAAI,UAAA,IAAc,KAAA,CAAM,MAAA,GAAS,YAAA,EAAc;AAC7C,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA;AAAA,QACzC,WAAA,EAAa,KAAA,CAAM,KAAA,CAAM,YAAY;AAAA,OACvC;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAC,EAAE;AAAA,EAChD,CAAA,EAAG,CAAC,KAAA,EAAO,KAAA,EAAO,UAAU,gBAAA,EAAkB,KAAA,EAAO,QAAA,EAAU,sBAAsB,CAAC,CAAA;AAEtF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,2BAAQ,gBAAA,EAAA,EAAiB,CAAA;AAAA,EAC3B;AAEA,EAAA,MAAM,aAAa,CAAC,IAAA,EAAgB,OAAA,GAAU,KAAA,EAAO,aAAa,KAAA,KAAU;AAC1E,IAAA,MAAM,cAAc,IAAA,CAAK,YAAA,IAAgB,KAAK,QAAA,IAAY,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AACjF,IAAA,MAAM,YAAA,GAAe,eAAe,CAAC,UAAA;AAErC,IAAA,uBACE,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAW,GAAG,OAAA,GAAU,UAAA,GAAa,8BAA8B,CAAA,CAAA,EAAI,WAAA,GAAc,iBAAiB,EAAE,CAAA,CAAA;AAAA,QAExG,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAI,IAAA,CAAK,GAAA,EACb,8BAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,OAAM,CAAA,EACpB,CAAA;AAAA,UACC,gCACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,8BAAC,IAAA,EAAA,EAAI,QAAA,EAAA,IAAA,EAAM,QAAA,EAAU,GAAA,CAAI,CAAC,KAAA,KAAoB,UAAA,CAAW,OAAO,IAAI,CAAC,GAAE,CAAA,EACzE;AAAA;AAAA,OAAA;AAAA,MATG,IAAA,CAAK;AAAA,KAWZ;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,WAAU,WAAA,EACX,QAAA,EAAA;AAAA,IAAA,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAS,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,IAC3C,WAAA,CAAY,SAAS,CAAA,oBACpB,IAAA,CAAC,QAAG,EAAA,EAAG,oBAAA,EAAqB,WAAU,2CAAA,EACpC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAG,GAAA,EACP,QAAA,kBAAA,GAAA,CAAC,UAAM,QAAA,EAAA,CAAA,CAAE,oBAAA,EAAsB,MAAM,CAAA,EAAE,CAAA,EACzC,CAAA;AAAA,0BACC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,kBAAA,GAAA,CAAC,QAAI,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS,WAAW,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,GAAE,CAAA,EAC/D;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ","file":"MainMenu-BNVH3EVF.js","sourcesContent":["import { useMemo, memo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { Link } from '../common';\nimport { menu } from '../../api/menu';\nimport type { MenuItem } from '../../types';\n\nconst SKELETON_ITEMS = [\n { id: 'first', width: 'w-16' },\n { id: 'second', width: 'w-20' },\n { id: 'third', width: 'w-24' },\n { id: 'fourth', width: 'w-16' },\n { id: 'fifth', width: 'w-20' },\n];\n\nconst MainMenuSkeleton = memo(function MainMenuSkeleton() {\n return (\n <nav>\n <ul className=\"main-menu\">\n {SKELETON_ITEMS.map(({ id, width }) => (\n <li key={id} className=\"!hidden lg:!block root-level\">\n <Link to=\"#\">\n <span className={`inline-block animate-pulse rounded bg-gray-200 h-4 ${width}`} />\n </Link>\n </li>\n ))}\n </ul>\n </nav>\n );\n});\n\nexport function MainMenu() {\n const { theme } = useTwilight();\n const { data: menus = [], isLoading } = useQuery(menu.queries.header());\n const { t } = useTranslation();\n\n const { visibleMenus, hiddenMenus } = useMemo(() => {\n const enableMore = theme?.settings?.is_more_button_enabled;\n const visibleCount = 7;\n\n if (enableMore && menus.length > visibleCount) {\n return {\n visibleMenus: menus.slice(0, visibleCount),\n hiddenMenus: menus.slice(visibleCount),\n };\n }\n\n return { visibleMenus: menus, hiddenMenus: [] };\n }, [menus, theme?.settings?.enable_more_menu, theme?.settings?.is_more_button_enabled]);\n\n if (isLoading) {\n return <MainMenuSkeleton />;\n }\n\n const renderItem = (item: MenuItem, isChild = false, inMoreMenu = false) => {\n const hasChildren = item.has_children && item.children && item.children.length > 0;\n const showDropdown = hasChildren && !inMoreMenu;\n\n return (\n <li\n key={item.id}\n className={`${isChild ? 'relative' : '!hidden lg:!block root-level'} ${hasChildren ? 'has-children' : ''}`}\n >\n <Link to={item.url}>\n <span>{item.title}</span>\n </Link>\n {showDropdown && (\n <div className=\"sub-menu w-56\">\n <ul>{item?.children?.map((child: MenuItem) => renderItem(child, true))}</ul>\n </div>\n )}\n </li>\n );\n };\n\n return (\n <nav>\n <ul className=\"main-menu\">\n {visibleMenus.map((item) => renderItem(item))}\n {hiddenMenus.length > 0 && (\n <li id=\"more-menu-dropdown\" className=\"!hidden lg:!block root-level has-children\">\n <Link to=\"#\">\n <span>{t('common.titles.more', 'More')}</span>\n </Link>\n <div className=\"sub-menu w-56\">\n <ul>{hiddenMenus.map((item) => renderItem(item, true, true))}</ul>\n </div>\n </li>\n )}\n </ul>\n </nav>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/navigation/MainMenu.tsx"],"names":["MainMenuSkeleton"],"mappings":";;;;;;;;;;;;;;;;;AAQA,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,MAAA,EAAO;AAAA,EAC7B,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,MAAA,EAAO;AAAA,EAC9B,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,MAAA,EAAO;AAAA,EAC7B,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,MAAA,EAAO;AAAA,EAC9B,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,MAAA;AACxB,CAAA;AAEA,IAAM,gBAAA,GAAmB,IAAA,CAAK,SAASA,iBAAAA,GAAmB;AACxD,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,WAAU,WAAA,EACX,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,EAAE,EAAA,EAAI,KAAA,EAAM,yBAC9B,IAAA,EAAA,EAAY,SAAA,EAAU,8BAAA,EACrB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EACP,QAAA,kBAAA,GAAA,CAAC,UAAK,SAAA,EAAW,CAAA,mDAAA,EAAsD,KAAK,CAAA,CAAA,EAAI,CAAA,EAClF,CAAA,EAAA,EAHO,EAIT,CACD,GACH,CAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAEM,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,GAAQ,EAAC,EAAG,SAAA,EAAU,GAAI,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA;AACtE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,MAAM,EAAE,YAAA,EAAc,WAAA,EAAY,GAAI,QAAQ,MAAM;AAClD,IAAA,MAAM,UAAA,GAAa,OAAO,QAAA,EAAU,sBAAA;AACpC,IAAA,MAAM,YAAA,GAAe,CAAA;AAErB,IAAA,IAAI,UAAA,IAAc,KAAA,CAAM,MAAA,GAAS,YAAA,EAAc;AAC7C,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA;AAAA,QACzC,WAAA,EAAa,KAAA,CAAM,KAAA,CAAM,YAAY;AAAA,OACvC;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,YAAA,EAAc,KAAA,EAAO,WAAA,EAAa,EAAC,EAAE;AAAA,EAChD,CAAA,EAAG,CAAC,KAAA,EAAO,KAAA,EAAO,UAAU,gBAAA,EAAkB,KAAA,EAAO,QAAA,EAAU,sBAAsB,CAAC,CAAA;AAEtF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,2BAAQ,gBAAA,EAAA,EAAiB,CAAA;AAAA,EAC3B;AAEA,EAAA,MAAM,aAAa,CAAC,IAAA,EAAgB,OAAA,GAAU,KAAA,EAAO,aAAa,KAAA,KAAU;AAC1E,IAAA,MAAM,cAAc,IAAA,CAAK,YAAA,IAAgB,KAAK,QAAA,IAAY,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AACjF,IAAA,MAAM,YAAA,GAAe,eAAe,CAAC,UAAA;AAErC,IAAA,uBACE,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAW,GAAG,OAAA,GAAU,UAAA,GAAa,8BAA8B,CAAA,CAAA,EAAI,WAAA,GAAc,iBAAiB,EAAE,CAAA,CAAA;AAAA,QAExG,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAI,IAAA,CAAK,GAAA,EACb,8BAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,OAAM,CAAA,EACpB,CAAA;AAAA,UACC,gCACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,8BAAC,IAAA,EAAA,EAAI,QAAA,EAAA,IAAA,EAAM,QAAA,EAAU,GAAA,CAAI,CAAC,KAAA,KAAoB,UAAA,CAAW,OAAO,IAAI,CAAC,GAAE,CAAA,EACzE;AAAA;AAAA,OAAA;AAAA,MATG,IAAA,CAAK;AAAA,KAWZ;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,WAAU,WAAA,EACX,QAAA,EAAA;AAAA,IAAA,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAS,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,IAC3C,WAAA,CAAY,SAAS,CAAA,oBACpB,IAAA,CAAC,QAAG,EAAA,EAAG,oBAAA,EAAqB,WAAU,2CAAA,EACpC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAG,GAAA,EACP,QAAA,kBAAA,GAAA,CAAC,UAAM,QAAA,EAAA,CAAA,CAAE,oBAAA,EAAsB,MAAM,CAAA,EAAE,CAAA,EACzC,CAAA;AAAA,0BACC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,kBAAA,GAAA,CAAC,QAAI,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS,WAAW,IAAA,EAAM,IAAA,EAAM,IAAI,CAAC,GAAE,CAAA,EAC/D;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ","file":"MainMenu-46I757B7.js","sourcesContent":["import { useMemo, memo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { Link } from '../common';\nimport { menu } from '../../api/menu';\nimport type { MenuItem } from '../../types';\n\nconst SKELETON_ITEMS = [\n { id: 'first', width: 'w-16' },\n { id: 'second', width: 'w-20' },\n { id: 'third', width: 'w-24' },\n { id: 'fourth', width: 'w-16' },\n { id: 'fifth', width: 'w-20' },\n];\n\nconst MainMenuSkeleton = memo(function MainMenuSkeleton() {\n return (\n <nav>\n <ul className=\"main-menu\">\n {SKELETON_ITEMS.map(({ id, width }) => (\n <li key={id} className=\"!hidden lg:!block root-level\">\n <Link to=\"#\">\n <span className={`inline-block animate-pulse rounded bg-gray-200 h-4 ${width}`} />\n </Link>\n </li>\n ))}\n </ul>\n </nav>\n );\n});\n\nexport function MainMenu() {\n const { theme } = useTwilight();\n const { data: menus = [], isLoading } = useQuery(menu.queries.header());\n const { t } = useTranslation();\n\n const { visibleMenus, hiddenMenus } = useMemo(() => {\n const enableMore = theme?.settings?.is_more_button_enabled;\n const visibleCount = 7;\n\n if (enableMore && menus.length > visibleCount) {\n return {\n visibleMenus: menus.slice(0, visibleCount),\n hiddenMenus: menus.slice(visibleCount),\n };\n }\n\n return { visibleMenus: menus, hiddenMenus: [] };\n }, [menus, theme?.settings?.enable_more_menu, theme?.settings?.is_more_button_enabled]);\n\n if (isLoading) {\n return <MainMenuSkeleton />;\n }\n\n const renderItem = (item: MenuItem, isChild = false, inMoreMenu = false) => {\n const hasChildren = item.has_children && item.children && item.children.length > 0;\n const showDropdown = hasChildren && !inMoreMenu;\n\n return (\n <li\n key={item.id}\n className={`${isChild ? 'relative' : '!hidden lg:!block root-level'} ${hasChildren ? 'has-children' : ''}`}\n >\n <Link to={item.url}>\n <span>{item.title}</span>\n </Link>\n {showDropdown && (\n <div className=\"sub-menu w-56\">\n <ul>{item?.children?.map((child: MenuItem) => renderItem(child, true))}</ul>\n </div>\n )}\n </li>\n );\n };\n\n return (\n <nav>\n <ul className=\"main-menu\">\n {visibleMenus.map((item) => renderItem(item))}\n {hiddenMenus.length > 0 && (\n <li id=\"more-menu-dropdown\" className=\"!hidden lg:!block root-level has-children\">\n <Link to=\"#\">\n <span>{t('common.titles.more', 'More')}</span>\n </Link>\n <div className=\"sub-menu w-56\">\n <ul>{hiddenMenus.map((item) => renderItem(item, true, true))}</ul>\n </div>\n </li>\n )}\n </ul>\n </nav>\n );\n}\n"]}
@@ -1,21 +1,21 @@
1
- export { MasterLayout } from './chunk-R5TTR2G7.js';
2
- import './chunk-QWGSGNM7.js';
3
- import './chunk-XM22O2B2.js';
1
+ export { MasterLayout } from './chunk-PM5W3ZXP.js';
2
+ import './chunk-3Q2SY5EH.js';
3
+ import './chunk-I4JJJWQH.js';
4
4
  import './chunk-D6XHL6VQ.js';
5
5
  import './chunk-JYV25VNZ.js';
6
- import './chunk-XMFVSBEO.js';
6
+ import './chunk-E6HKDJQU.js';
7
7
  import './chunk-OXMUPNMH.js';
8
- import './chunk-UMTMIMH7.js';
8
+ import './chunk-GMR6IV4N.js';
9
9
  import './chunk-VVZNW5CB.js';
10
10
  import './chunk-5FJFN3IW.js';
11
11
  import './chunk-GD26FI4J.js';
12
12
  import './chunk-OM2GRPDH.js';
13
- import './chunk-T23HXVW5.js';
13
+ import './chunk-H52RC2CC.js';
14
14
  import './chunk-OUW6WESU.js';
15
15
  import './chunk-BK5TBUGG.js';
16
16
  import './chunk-HI5V5X3S.js';
17
- import './chunk-VT6FE3CB.js';
18
- import './chunk-RVPC4AYT.js';
17
+ import './chunk-ONYYMIHL.js';
18
+ import './chunk-OGPRFIYJ.js';
19
19
  import './chunk-MVT5AF2A.js';
20
20
  import './chunk-Z653O7MX.js';
21
21
  import './chunk-ZCH7W7DZ.js';
@@ -26,15 +26,15 @@ import './chunk-7V36I5GT.js';
26
26
  import './chunk-6WI7R2BD.js';
27
27
  import './chunk-JGVEGQHJ.js';
28
28
  import './chunk-OAMIDZKW.js';
29
- import './chunk-EFT442TN.js';
29
+ import './chunk-EBISPK5W.js';
30
30
  import './chunk-OQIIJRAS.js';
31
31
  import './chunk-V2ZDTY6H.js';
32
- import './chunk-VI2WHQDR.js';
32
+ import './chunk-DYRZ7JXQ.js';
33
33
  import './chunk-5XDPAKF5.js';
34
34
  import './chunk-GCPEMNSU.js';
35
- import './chunk-PFAPRJVF.js';
35
+ import './chunk-GMQK6UHZ.js';
36
36
  import './chunk-TYNZ5B2B.js';
37
- import './chunk-AVW4CLTB.js';
37
+ import './chunk-NSTH6ZQQ.js';
38
38
  import './chunk-AXW67SY7.js';
39
39
  import './chunk-BYMOPN2S.js';
40
40
  import './chunk-SKLEJJ6M.js';
@@ -50,5 +50,5 @@ import './chunk-7VNVCHID.js';
50
50
  import './chunk-T72DAX7R.js';
51
51
  import './chunk-DF6FBKDN.js';
52
52
  import './chunk-DGUM43GV.js';
53
- //# sourceMappingURL=MasterLayout-OLB2JUUR.js.map
54
- //# sourceMappingURL=MasterLayout-OLB2JUUR.js.map
53
+ //# sourceMappingURL=MasterLayout-UJCD626U.js.map
54
+ //# sourceMappingURL=MasterLayout-UJCD626U.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"MasterLayout-OLB2JUUR.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"MasterLayout-UJCD626U.js"}
@@ -1,23 +1,23 @@
1
- import { menu } from './chunk-VSK2WS4G.js';
1
+ import { menu } from './chunk-YOOCN2ZQ.js';
2
2
  import { Drawer } from './chunk-6TKIUG5C.js';
3
- import './chunk-R5TTR2G7.js';
4
- import './chunk-QWGSGNM7.js';
5
- import './chunk-XM22O2B2.js';
3
+ import './chunk-PM5W3ZXP.js';
4
+ import './chunk-3Q2SY5EH.js';
5
+ import './chunk-I4JJJWQH.js';
6
6
  import './chunk-D6XHL6VQ.js';
7
7
  import './chunk-JYV25VNZ.js';
8
- import './chunk-XMFVSBEO.js';
8
+ import './chunk-E6HKDJQU.js';
9
9
  import './chunk-OXMUPNMH.js';
10
- import './chunk-UMTMIMH7.js';
10
+ import './chunk-GMR6IV4N.js';
11
11
  import './chunk-VVZNW5CB.js';
12
12
  import './chunk-5FJFN3IW.js';
13
13
  import './chunk-GD26FI4J.js';
14
14
  import './chunk-OM2GRPDH.js';
15
- import './chunk-T23HXVW5.js';
15
+ import './chunk-H52RC2CC.js';
16
16
  import './chunk-OUW6WESU.js';
17
17
  import './chunk-BK5TBUGG.js';
18
18
  import './chunk-HI5V5X3S.js';
19
- import './chunk-VT6FE3CB.js';
20
- import './chunk-RVPC4AYT.js';
19
+ import './chunk-ONYYMIHL.js';
20
+ import './chunk-OGPRFIYJ.js';
21
21
  import './chunk-MVT5AF2A.js';
22
22
  import './chunk-Z653O7MX.js';
23
23
  import './chunk-ZCH7W7DZ.js';
@@ -28,15 +28,15 @@ import './chunk-7V36I5GT.js';
28
28
  import './chunk-6WI7R2BD.js';
29
29
  import './chunk-JGVEGQHJ.js';
30
30
  import './chunk-OAMIDZKW.js';
31
- import './chunk-EFT442TN.js';
31
+ import './chunk-EBISPK5W.js';
32
32
  import './chunk-OQIIJRAS.js';
33
33
  import './chunk-V2ZDTY6H.js';
34
- import './chunk-VI2WHQDR.js';
34
+ import './chunk-DYRZ7JXQ.js';
35
35
  import './chunk-5XDPAKF5.js';
36
36
  import './chunk-GCPEMNSU.js';
37
- import './chunk-PFAPRJVF.js';
37
+ import './chunk-GMQK6UHZ.js';
38
38
  import { useTranslation } from './chunk-TYNZ5B2B.js';
39
- import './chunk-AVW4CLTB.js';
39
+ import './chunk-NSTH6ZQQ.js';
40
40
  import { Link } from './chunk-AXW67SY7.js';
41
41
  import './chunk-BYMOPN2S.js';
42
42
  import './chunk-SKLEJJ6M.js';
@@ -172,5 +172,5 @@ function MobileMenuContent({ onClose }) {
172
172
  }
173
173
 
174
174
  export { MobileMenu };
175
- //# sourceMappingURL=MobileMenu-2EAPAHX5.js.map
176
- //# sourceMappingURL=MobileMenu-2EAPAHX5.js.map
175
+ //# sourceMappingURL=MobileMenu-E6KNAN6W.js.map
176
+ //# sourceMappingURL=MobileMenu-E6KNAN6W.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/navigation/MobileMenu.tsx"],"names":["MobileMenuSkeleton"],"mappings":"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","file":"MobileMenu-2EAPAHX5.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
+ {"version":3,"sources":["../src/components/navigation/MobileMenu.tsx"],"names":["MobileMenuSkeleton"],"mappings":"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","file":"MobileMenu-E6KNAN6W.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"]}