@salla.sa/twilight-theme-engine 1.0.0-beta.9 → 1.0.1

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 (461) hide show
  1. package/dist/{AddToCartForm-VS67AFNL.js → AddToCartForm-E6LDRNGM.js} +24 -25
  2. package/dist/AddToCartForm-E6LDRNGM.js.map +1 -0
  3. package/dist/{BlogAuthorPage-276K2KQS.js → BlogAuthorPage-SK7ZTUPN.js} +30 -27
  4. package/dist/BlogAuthorPage-SK7ZTUPN.js.map +1 -0
  5. package/dist/{BlogCategoryPage-GF5PLRG7.js → BlogCategoryPage-XEUUE3H2.js} +30 -27
  6. package/dist/BlogCategoryPage-XEUUE3H2.js.map +1 -0
  7. package/dist/{BlogPage-BU672BXD.js → BlogPage-67ZEZTMY.js} +33 -24
  8. package/dist/BlogPage-67ZEZTMY.js.map +1 -0
  9. package/dist/{BlogSinglePage-ELV4S5EV.js → BlogSinglePage-H5NWL37R.js} +25 -23
  10. package/dist/BlogSinglePage-H5NWL37R.js.map +1 -0
  11. package/dist/{BlogTagPage-TXQP6ZOI.js → BlogTagPage-I6YXVDTH.js} +30 -27
  12. package/dist/BlogTagPage-I6YXVDTH.js.map +1 -0
  13. package/dist/{BrandsPage-C6ZHC4KC.js → BrandsPage-RVK36ZAV.js} +24 -23
  14. package/dist/BrandsPage-RVK36ZAV.js.map +1 -0
  15. package/dist/{Breadcrumb-TG4UTNRM.js → Breadcrumb-KINELHN4.js} +24 -23
  16. package/dist/Breadcrumb-KINELHN4.js.map +1 -0
  17. package/dist/{CartItem-55JV6HDS.js → CartItem-YPIGZYJX.js} +27 -26
  18. package/dist/CartItem-YPIGZYJX.js.map +1 -0
  19. package/dist/{CartSummary-CUWMHHMD.js → CartSummary-FHG4IR4S.js} +24 -23
  20. package/dist/CartSummary-FHG4IR4S.js.map +1 -0
  21. package/dist/Copyright-TWAHRC7V.js +9 -0
  22. package/dist/{Copyright-PG76AVV6.js.map → Copyright-TWAHRC7V.js.map} +1 -1
  23. package/dist/{CustomerLayout-SLNVCNZ6.js → CustomerLayout-NI3HBOZB.js} +24 -23
  24. package/dist/CustomerLayout-NI3HBOZB.js.map +1 -0
  25. package/dist/ErrorPage-XGBROULF.js +6 -0
  26. package/dist/{ErrorPage-TK4U3ENF.js.map → ErrorPage-XGBROULF.js.map} +1 -1
  27. package/dist/Footer-6XXLPWRH.js +40 -0
  28. package/dist/{Footer-MZDSEK57.js.map → Footer-6XXLPWRH.js.map} +1 -1
  29. package/dist/Header-56YZL6PB.js +15 -0
  30. package/dist/{Header-CXFKDTOA.js.map → Header-56YZL6PB.js.map} +1 -1
  31. package/dist/ImageModal-LHFSYPSU.js +32 -0
  32. package/dist/ImageModal-LHFSYPSU.js.map +1 -0
  33. package/dist/{LoyaltyPage-AIA3CUYI.js → LoyaltyPage-3QLMFVWD.js} +29 -28
  34. package/dist/LoyaltyPage-3QLMFVWD.js.map +1 -0
  35. package/dist/{MainMenu-T3M5RB7L.js → MainMenu-TDLQET2Y.js} +16 -37
  36. package/dist/MainMenu-TDLQET2Y.js.map +1 -0
  37. package/dist/MasterLayout-4IYMFDYJ.js +40 -0
  38. package/dist/{MasterLayout-QUBHRA32.js.map → MasterLayout-4IYMFDYJ.js.map} +1 -1
  39. package/dist/{MobileMenu-6D52JOQA.js → MobileMenu-GVXPV5HQ.js} +47 -60
  40. package/dist/MobileMenu-GVXPV5HQ.js.map +1 -0
  41. package/dist/{NotificationsPage-6H45SAS7.js → NotificationsPage-AOZRDULT.js} +24 -23
  42. package/dist/NotificationsPage-AOZRDULT.js.map +1 -0
  43. package/dist/{OrderSinglePage-GP2M3YVH.js → OrderSinglePage-M6GBDZPD.js} +73 -61
  44. package/dist/OrderSinglePage-M6GBDZPD.js.map +1 -0
  45. package/dist/{OrdersPage-OQGJLTQP.js → OrdersPage-DJMOQVJP.js} +25 -24
  46. package/dist/OrdersPage-DJMOQVJP.js.map +1 -0
  47. package/dist/{PageSingle-44NVAUIT.js → PageSingle-TQC47BEK.js} +3 -3
  48. package/dist/{PageSingle-44NVAUIT.js.map → PageSingle-TQC47BEK.js.map} +1 -1
  49. package/dist/{PreOrderNotification-ZVTGNV7K.js → PreOrderNotification-OP57EA6F.js} +3 -3
  50. package/dist/PreOrderNotification-OP57EA6F.js.map +1 -0
  51. package/dist/{PriceQuoteButton-RAAPL4N4.js → PriceQuoteButton-CGRNHY3E.js} +6 -6
  52. package/dist/PriceQuoteButton-CGRNHY3E.js.map +1 -0
  53. package/dist/{ProductDetails-2JUCRU4W.js → ProductDetails-4YZW7CKN.js} +11 -10
  54. package/dist/ProductDetails-4YZW7CKN.js.map +1 -0
  55. package/dist/{ProfilePage-XGZ2HCQH.js → ProfilePage-KFR7PX6Z.js} +24 -23
  56. package/dist/ProfilePage-KFR7PX6Z.js.map +1 -0
  57. package/dist/{SeoCartWidget-PDK6IQ2H.js → SeoCartWidget-N6KHTRZA.js} +24 -23
  58. package/dist/SeoCartWidget-N6KHTRZA.js.map +1 -0
  59. package/dist/{SettingsPage-VCQNV2PP.js → SettingsPage-7VCOR3YR.js} +24 -23
  60. package/dist/SettingsPage-7VCOR3YR.js.map +1 -0
  61. package/dist/StoreClosedNotification-7XSPEVKM.js +41 -0
  62. package/dist/{StoreClosedNotification-3JRNBNQK.js.map → StoreClosedNotification-7XSPEVKM.js.map} +1 -1
  63. package/dist/{TestimonialsPage-ENMVJ4QG.js → TestimonialsPage-YWWIGHDX.js} +4 -4
  64. package/dist/TestimonialsPage-YWWIGHDX.js.map +1 -0
  65. package/dist/{ThankYouPage-4FTP6E2Y.js → ThankYouPage-O6NMGVNQ.js} +32 -26
  66. package/dist/ThankYouPage-O6NMGVNQ.js.map +1 -0
  67. package/dist/{WalletPage-VKV44EEG.js → WalletPage-TGFDG6JQ.js} +25 -24
  68. package/dist/WalletPage-TGFDG6JQ.js.map +1 -0
  69. package/dist/WidgetHead-RWL7D3CT.js +7 -0
  70. package/dist/{WidgetHead-FXEPCB23.js.map → WidgetHead-RWL7D3CT.js.map} +1 -1
  71. package/dist/{WishlistPage-GJZCXQUY.js → WishlistPage-XDXSQXME.js} +25 -24
  72. package/dist/WishlistPage-XDXSQXME.js.map +1 -0
  73. package/dist/ambient/virtual-modules.d.ts +28 -0
  74. package/dist/api/apps.js +2 -2
  75. package/dist/api/brands.js +5 -34
  76. package/dist/api/cart.js +5 -34
  77. package/dist/api/category.js +5 -34
  78. package/dist/api/client.d.ts.map +1 -1
  79. package/dist/api/client.js +2 -2
  80. package/dist/api/home.js +3 -3
  81. package/dist/api/loyalty.js +5 -34
  82. package/dist/api/menu.js +3 -3
  83. package/dist/api/notification.js +3 -3
  84. package/dist/api/order.js +5 -34
  85. package/dist/api/page.js +5 -34
  86. package/dist/api/product.js +5 -34
  87. package/dist/api/profile.js +2 -2
  88. package/dist/api/store.js +3 -3
  89. package/dist/api/translations.d.ts +1 -1
  90. package/dist/api/translations.d.ts.map +1 -1
  91. package/dist/api/translations.js +3 -3
  92. package/dist/api/user.js +3 -3
  93. package/dist/api/wishlist.js +3 -3
  94. package/dist/{chunk-THXWAZX2.js → chunk-2FG3NNIK.js} +12 -17
  95. package/dist/chunk-2FG3NNIK.js.map +1 -0
  96. package/dist/chunk-2JV6WZ6O.js +136 -0
  97. package/dist/chunk-2JV6WZ6O.js.map +1 -0
  98. package/dist/{chunk-TQUHDSKQ.js → chunk-2TB2LTL2.js} +3 -11
  99. package/dist/chunk-2TB2LTL2.js.map +1 -0
  100. package/dist/{chunk-JIJOXZPF.js → chunk-2ZRLSZ4V.js} +6 -12
  101. package/dist/chunk-2ZRLSZ4V.js.map +1 -0
  102. package/dist/{chunk-HL3HSO4R.js → chunk-4UG4W72N.js} +5 -5
  103. package/dist/chunk-4UG4W72N.js.map +1 -0
  104. package/dist/{chunk-GFMVML6I.js → chunk-6D7SF3YR.js} +3 -3
  105. package/dist/{chunk-GFMVML6I.js.map → chunk-6D7SF3YR.js.map} +1 -1
  106. package/dist/{chunk-FCZRF6DB.js → chunk-6NBBXERE.js} +3 -3
  107. package/dist/{chunk-FCZRF6DB.js.map → chunk-6NBBXERE.js.map} +1 -1
  108. package/dist/{chunk-5DZ7HLSO.js → chunk-6Q5BFHFA.js} +3 -3
  109. package/dist/{chunk-5DZ7HLSO.js.map → chunk-6Q5BFHFA.js.map} +1 -1
  110. package/dist/{chunk-XHGF75TM.js → chunk-6TKIUG5C.js} +11 -4
  111. package/dist/chunk-6TKIUG5C.js.map +1 -0
  112. package/dist/{chunk-TQLEQSXE.js → chunk-6Z4MOC4S.js} +3 -19
  113. package/dist/chunk-6Z4MOC4S.js.map +1 -0
  114. package/dist/{chunk-SUFCEN4T.js → chunk-7LP7D75V.js} +3 -3
  115. package/dist/{chunk-SUFCEN4T.js.map → chunk-7LP7D75V.js.map} +1 -1
  116. package/dist/{chunk-GS3G4O2R.js → chunk-7O5DYSLX.js} +4 -4
  117. package/dist/chunk-7O5DYSLX.js.map +1 -0
  118. package/dist/{chunk-EB7X4YMZ.js → chunk-7UZEHQEQ.js} +4 -4
  119. package/dist/{chunk-EB7X4YMZ.js.map → chunk-7UZEHQEQ.js.map} +1 -1
  120. package/dist/{chunk-REQC7YOE.js → chunk-A4HWQ5PP.js} +9 -14
  121. package/dist/chunk-A4HWQ5PP.js.map +1 -0
  122. package/dist/{chunk-D4SRWUMH.js → chunk-B2NXQJEO.js} +4 -4
  123. package/dist/{chunk-D4SRWUMH.js.map → chunk-B2NXQJEO.js.map} +1 -1
  124. package/dist/{chunk-2FU6CVSB.js → chunk-C5X6CVXC.js} +3 -3
  125. package/dist/{chunk-2FU6CVSB.js.map → chunk-C5X6CVXC.js.map} +1 -1
  126. package/dist/{chunk-S6AVEFCN.js → chunk-CJEBLY6D.js} +19 -12
  127. package/dist/chunk-CJEBLY6D.js.map +1 -0
  128. package/dist/chunk-CUG6VOLM.js +10 -0
  129. package/dist/{chunk-3DCZJDDK.js.map → chunk-CUG6VOLM.js.map} +1 -1
  130. package/dist/{chunk-BWFBVXT3.js → chunk-DF6FBKDN.js} +2 -2
  131. package/dist/chunk-DF6FBKDN.js.map +1 -0
  132. package/dist/{chunk-SAZBQNQK.js → chunk-DHXE3JE6.js} +7 -7
  133. package/dist/chunk-DHXE3JE6.js.map +1 -0
  134. package/dist/{chunk-YRKMHN7W.js → chunk-EHKTHLXK.js} +3 -3
  135. package/dist/{chunk-YRKMHN7W.js.map → chunk-EHKTHLXK.js.map} +1 -1
  136. package/dist/{chunk-U33UQAWO.js → chunk-FH5YDZFQ.js} +10 -9
  137. package/dist/chunk-FH5YDZFQ.js.map +1 -0
  138. package/dist/{chunk-UE3BUFZI.js → chunk-FZKRSGLP.js} +3 -3
  139. package/dist/{chunk-UE3BUFZI.js.map → chunk-FZKRSGLP.js.map} +1 -1
  140. package/dist/{chunk-C5GWTTB6.js → chunk-GQG4KE5Z.js} +4 -4
  141. package/dist/chunk-GQG4KE5Z.js.map +1 -0
  142. package/dist/{chunk-J37AYLWL.js → chunk-GU2KUQVD.js} +4 -3
  143. package/dist/chunk-GU2KUQVD.js.map +1 -0
  144. package/dist/{chunk-SVZOWI7E.js → chunk-HTGBIA7K.js} +3 -6
  145. package/dist/chunk-HTGBIA7K.js.map +1 -0
  146. package/dist/{chunk-ZZ7Q5LEG.js → chunk-HWVEOUG4.js} +3 -3
  147. package/dist/{chunk-ZZ7Q5LEG.js.map → chunk-HWVEOUG4.js.map} +1 -1
  148. package/dist/{chunk-3UHSMGPY.js → chunk-HX3YKS5W.js} +9 -3
  149. package/dist/chunk-HX3YKS5W.js.map +1 -0
  150. package/dist/{chunk-WA5QBFRU.js → chunk-I5Z4NJBB.js} +4 -4
  151. package/dist/{chunk-WA5QBFRU.js.map → chunk-I5Z4NJBB.js.map} +1 -1
  152. package/dist/{chunk-TWAHYRKI.js → chunk-IWMGDYNN.js} +4 -4
  153. package/dist/chunk-IWMGDYNN.js.map +1 -0
  154. package/dist/{chunk-TFZ2RT6P.js → chunk-JKIRRMBU.js} +3 -3
  155. package/dist/chunk-JKIRRMBU.js.map +1 -0
  156. package/dist/{chunk-YU36GBMB.js → chunk-KCKHA75V.js} +3 -3
  157. package/dist/{chunk-YU36GBMB.js.map → chunk-KCKHA75V.js.map} +1 -1
  158. package/dist/{chunk-W4CSWDEH.js → chunk-KIPZQN3Y.js} +2 -7
  159. package/dist/chunk-KIPZQN3Y.js.map +1 -0
  160. package/dist/{chunk-2SUOZEX2.js → chunk-KJRALAYM.js} +3 -3
  161. package/dist/chunk-KJRALAYM.js.map +1 -0
  162. package/dist/{chunk-O7Z6BIPP.js → chunk-LSDIFHXZ.js} +4 -4
  163. package/dist/{chunk-O7Z6BIPP.js.map → chunk-LSDIFHXZ.js.map} +1 -1
  164. package/dist/{chunk-7RVUSB5C.js → chunk-NBHI5X36.js} +4 -4
  165. package/dist/{chunk-7RVUSB5C.js.map → chunk-NBHI5X36.js.map} +1 -1
  166. package/dist/{chunk-UIX3W2PN.js → chunk-OAMIDZKW.js} +3 -3
  167. package/dist/chunk-OAMIDZKW.js.map +1 -0
  168. package/dist/{chunk-MXQCE3KA.js → chunk-OBSAH7K6.js} +4 -45
  169. package/dist/chunk-OBSAH7K6.js.map +1 -0
  170. package/dist/chunk-P4M64WVZ.js +14 -0
  171. package/dist/{chunk-ZOCDYJPX.js.map → chunk-P4M64WVZ.js.map} +1 -1
  172. package/dist/{chunk-25SSLQAJ.js → chunk-Q7VWURUR.js} +5 -12
  173. package/dist/chunk-Q7VWURUR.js.map +1 -0
  174. package/dist/{chunk-SSQ75CKA.js → chunk-RINZVHVS.js} +4 -4
  175. package/dist/chunk-RINZVHVS.js.map +1 -0
  176. package/dist/{chunk-RYBA3JDM.js → chunk-RJPPO3ET.js} +4 -4
  177. package/dist/{chunk-RYBA3JDM.js.map → chunk-RJPPO3ET.js.map} +1 -1
  178. package/dist/{chunk-433EFDBW.js → chunk-SM7VMQZY.js} +4 -4
  179. package/dist/chunk-SM7VMQZY.js.map +1 -0
  180. package/dist/{chunk-GTM2GV2N.js → chunk-SSZR6JBK.js} +65 -43
  181. package/dist/chunk-SSZR6JBK.js.map +1 -0
  182. package/dist/{chunk-Q6MQLAYL.js → chunk-TCSNNCRH.js} +3 -3
  183. package/dist/{chunk-Q6MQLAYL.js.map → chunk-TCSNNCRH.js.map} +1 -1
  184. package/dist/{chunk-IILTG4A6.js → chunk-THMQ2Z3N.js} +84 -63
  185. package/dist/chunk-THMQ2Z3N.js.map +1 -0
  186. package/dist/{chunk-GOYYO4NI.js → chunk-TP3LCGE7.js} +2 -2
  187. package/dist/{chunk-GOYYO4NI.js.map → chunk-TP3LCGE7.js.map} +1 -1
  188. package/dist/{chunk-VVRYP6IL.js → chunk-TYNZ5B2B.js} +2 -2
  189. package/dist/chunk-TYNZ5B2B.js.map +1 -0
  190. package/dist/{chunk-CI4HKXVH.js → chunk-W6HFR7YA.js} +4 -4
  191. package/dist/chunk-W6HFR7YA.js.map +1 -0
  192. package/dist/{chunk-P43TLDS6.js → chunk-XECKVHG7.js} +6 -6
  193. package/dist/chunk-XECKVHG7.js.map +1 -0
  194. package/dist/{chunk-4AYOFKHU.js → chunk-XK42WXU5.js} +3 -3
  195. package/dist/chunk-XK42WXU5.js.map +1 -0
  196. package/dist/{chunk-FBFPH5BB.js → chunk-Z4Y55HWX.js} +8 -8
  197. package/dist/chunk-Z4Y55HWX.js.map +1 -0
  198. package/dist/{chunk-6LQFMCWK.js → chunk-ZNOJPVX3.js} +4 -4
  199. package/dist/chunk-ZNOJPVX3.js.map +1 -0
  200. package/dist/components/cart/CartItem.d.ts.map +1 -1
  201. package/dist/components/cart/PriceQuoteButton.d.ts.map +1 -1
  202. package/dist/components/cart/index.js +1 -1
  203. package/dist/components/collapse/Collapse.d.ts +2 -2
  204. package/dist/components/collapse/Collapse.d.ts.map +1 -1
  205. package/dist/components/collapse/index.js +3 -3
  206. package/dist/components/collapse/index.js.map +1 -1
  207. package/dist/components/common/DeferredData.d.ts +0 -1
  208. package/dist/components/common/DeferredData.d.ts.map +1 -1
  209. package/dist/components/common/ErrorPage.d.ts.map +1 -1
  210. package/dist/components/common/index.js +1 -1
  211. package/dist/components/drawer/Drawer.d.ts.map +1 -1
  212. package/dist/components/drawer/index.js +23 -22
  213. package/dist/components/dropdown/Dropdown.d.ts.map +1 -1
  214. package/dist/components/dropdown/index.js +17 -1
  215. package/dist/components/dropdown/index.js.map +1 -1
  216. package/dist/components/home/ComponentErrorBoundary.d.ts +1 -1
  217. package/dist/components/home/ComponentErrorBoundary.d.ts.map +1 -1
  218. package/dist/components/home/PhotosSlider.d.ts +1 -0
  219. package/dist/components/home/PhotosSlider.d.ts.map +1 -1
  220. package/dist/components/home/SquarePhotos.d.ts +1 -0
  221. package/dist/components/home/SquarePhotos.d.ts.map +1 -1
  222. package/dist/components/home/StoreFeatures.d.ts.map +1 -1
  223. package/dist/components/home/index.js +25 -24
  224. package/dist/components/layout/Header.d.ts.map +1 -1
  225. package/dist/components/layout/index.js +10 -10
  226. package/dist/components/modal/ImageModal.d.ts.map +1 -1
  227. package/dist/components/modal/Modal.d.ts.map +1 -1
  228. package/dist/components/modal/index.js +2 -2
  229. package/dist/components/navigation/MainMenu.d.ts.map +1 -1
  230. package/dist/components/navigation/MobileMenu.d.ts +1 -1
  231. package/dist/components/navigation/MobileMenu.d.ts.map +1 -1
  232. package/dist/components/product/AddToCartForm.d.ts +1 -1
  233. package/dist/components/product/AddToCartForm.d.ts.map +1 -1
  234. package/dist/components/product/ProductGallery.d.ts.map +1 -1
  235. package/dist/components/product/index.js +23 -22
  236. package/dist/components/store/index.js +24 -23
  237. package/dist/components/store/index.js.map +1 -1
  238. package/dist/components/toast/index.js +47 -2
  239. package/dist/components/toast/index.js.map +1 -1
  240. package/dist/dev/DevSettingsWidget.d.ts +19 -0
  241. package/dist/dev/DevSettingsWidget.d.ts.map +1 -0
  242. package/dist/dev/dev-settings-store.d.ts +62 -0
  243. package/dist/dev/dev-settings-store.d.ts.map +1 -0
  244. package/dist/dev/index.d.ts +9 -0
  245. package/dist/dev/index.d.ts.map +1 -0
  246. package/dist/dev/index.js +330 -0
  247. package/dist/dev/index.js.map +1 -0
  248. package/dist/dev/schema-types.d.ts +43 -0
  249. package/dist/dev/schema-types.d.ts.map +1 -0
  250. package/dist/document-class-4EILSNLT.js +21 -0
  251. package/dist/{document-class-V5XSWLMX.js.map → document-class-4EILSNLT.js.map} +1 -1
  252. package/dist/hooks/HookRegistry.d.ts +1 -0
  253. package/dist/hooks/HookRegistry.d.ts.map +1 -1
  254. package/dist/hooks/HookRegistry.js +1 -1
  255. package/dist/hooks/HookSlot.d.ts +1 -1
  256. package/dist/hooks/HookSlot.d.ts.map +1 -1
  257. package/dist/hooks/HookSlot.js +3 -3
  258. package/dist/hooks/index.d.ts +0 -1
  259. package/dist/hooks/index.d.ts.map +1 -1
  260. package/dist/hooks/index.js +22 -21
  261. package/dist/hooks/useBlogLike.js +2 -2
  262. package/dist/hooks/useGtm.js +22 -21
  263. package/dist/hooks/useHook.js +2 -2
  264. package/dist/hooks/useMoney.d.ts.map +1 -1
  265. package/dist/hooks/useMoney.js +22 -21
  266. package/dist/hooks/useNumber.d.ts.map +1 -1
  267. package/dist/hooks/useStore.js +22 -21
  268. package/dist/hooks/useTheme.js +2 -2
  269. package/dist/hooks/useUser.js +4 -4
  270. package/dist/i18n.d.ts +1 -1
  271. package/dist/i18n.js +1 -1
  272. package/dist/index.d.ts +1 -3
  273. package/dist/index.d.ts.map +1 -1
  274. package/dist/index.js +22 -21
  275. package/dist/index.js.map +1 -1
  276. package/dist/navigation-ZCEGLIHD.js +10 -0
  277. package/dist/{navigation-77T2NTFS.js.map → navigation-ZCEGLIHD.js.map} +1 -1
  278. package/dist/{navigation-JPUI67XY.js → navigation-ZIULIDFF.js} +6 -6
  279. package/dist/{navigation-JPUI67XY.js.map → navigation-ZIULIDFF.js.map} +1 -1
  280. package/dist/nextjs/index.d.ts +1 -2
  281. package/dist/nextjs/index.d.ts.map +1 -1
  282. package/dist/nextjs/link.d.ts +0 -4
  283. package/dist/nextjs/link.d.ts.map +1 -1
  284. package/dist/nextjs/router.d.ts +0 -6
  285. package/dist/nextjs/router.d.ts.map +1 -1
  286. package/dist/nextjs.js +2 -7
  287. package/dist/nextjs.js.map +1 -1
  288. package/dist/{not-found-73ZVE5QO.js → not-found-MGLRWOWH.js} +24 -23
  289. package/dist/not-found-MGLRWOWH.js.map +1 -0
  290. package/dist/providers/{i18n.d.ts → I18nProvider.d.ts} +1 -1
  291. package/dist/providers/I18nProvider.d.ts.map +1 -0
  292. package/dist/providers/NavigationProvider.d.ts +1 -4
  293. package/dist/providers/NavigationProvider.d.ts.map +1 -1
  294. package/dist/providers/TwilightProvider.d.ts +1 -1
  295. package/dist/providers/TwilightProvider.d.ts.map +1 -1
  296. package/dist/providers/index.js +22 -21
  297. package/dist/providers/navigation-setups.d.ts +5 -0
  298. package/dist/providers/navigation-setups.d.ts.map +1 -0
  299. package/dist/providers/twilight-context.d.ts +1 -1
  300. package/dist/providers/twilight-context.d.ts.map +1 -1
  301. package/dist/providers/twilight-init.d.ts +1 -2
  302. package/dist/providers/twilight-init.d.ts.map +1 -1
  303. package/dist/routes/account/orders/OrderSinglePage.d.ts.map +1 -1
  304. package/dist/routes/account/orders.js +6 -35
  305. package/dist/routes/account.js +14 -43
  306. package/dist/routes/account.js.map +1 -1
  307. package/dist/routes/blog/BlogAuthorPage.d.ts.map +1 -1
  308. package/dist/routes/blog/BlogCategoryPage.d.ts.map +1 -1
  309. package/dist/routes/blog/BlogPage.d.ts +1 -1
  310. package/dist/routes/blog/BlogPage.d.ts.map +1 -1
  311. package/dist/routes/blog/BlogSinglePage.d.ts.map +1 -1
  312. package/dist/routes/blog/BlogTagPage.d.ts.map +1 -1
  313. package/dist/routes/blog.js +10 -39
  314. package/dist/routes/blog.js.map +1 -1
  315. package/dist/routes/brands.js +6 -35
  316. package/dist/routes/brands.js.map +1 -1
  317. package/dist/routes/cart.js +30 -29
  318. package/dist/routes/cart.js.map +1 -1
  319. package/dist/routes/home/HomePage.d.ts.map +1 -1
  320. package/dist/routes/home.js +27 -26
  321. package/dist/routes/index.d.ts +2 -2
  322. package/dist/routes/index.d.ts.map +1 -1
  323. package/dist/routes/index.js +5 -35
  324. package/dist/routes/loyalty.js +6 -35
  325. package/dist/routes/loyalty.js.map +1 -1
  326. package/dist/routes/page.js +6 -35
  327. package/dist/routes/page.js.map +1 -1
  328. package/dist/routes/product-listing/ProductListPage.d.ts.map +1 -1
  329. package/dist/routes/product-listing.js +30 -32
  330. package/dist/routes/product-listing.js.map +1 -1
  331. package/dist/routes/product.js +25 -24
  332. package/dist/routes/product.js.map +1 -1
  333. package/dist/routes/root/beforeLoad.d.ts +0 -2
  334. package/dist/routes/root/beforeLoad.d.ts.map +1 -1
  335. package/dist/routes/seo-redirects.js +4 -35
  336. package/dist/routes/testimonials.js +2 -2
  337. package/dist/routes/thank-you/ThankYouPage.d.ts +1 -1
  338. package/dist/routes/thank-you/ThankYouPage.d.ts.map +1 -1
  339. package/dist/routes/thank-you.js +6 -35
  340. package/dist/routes/thank-you.js.map +1 -1
  341. package/dist/skeleton.js +27 -26
  342. package/dist/tanstack/middleware/twilight.d.ts.map +1 -1
  343. package/dist/tanstack/router.d.ts +0 -3
  344. package/dist/tanstack/router.d.ts.map +1 -1
  345. package/dist/tanstack.js +16 -31
  346. package/dist/tanstack.js.map +1 -1
  347. package/dist/twilight/context.d.ts +0 -1
  348. package/dist/twilight/context.d.ts.map +1 -1
  349. package/dist/types/hooks.d.ts +1 -0
  350. package/dist/types/hooks.d.ts.map +1 -1
  351. package/dist/types/hooks.js +1 -1
  352. package/dist/types/index.js +1 -1
  353. package/dist/{providers/salla-sdk.types.d.ts → types/salla-sdk.d.ts} +3 -1
  354. package/dist/types/salla-sdk.d.ts.map +1 -0
  355. package/dist/{providers/twilight.types.d.ts → types/twilight.d.ts} +4 -5
  356. package/dist/types/twilight.d.ts.map +1 -0
  357. package/dist/utils/breadcrumb.d.ts +0 -1
  358. package/dist/utils/breadcrumb.d.ts.map +1 -1
  359. package/dist/utils/engine-version.d.ts +10 -0
  360. package/dist/utils/engine-version.d.ts.map +1 -0
  361. package/dist/utils/index.js +21 -3
  362. package/dist/utils/index.js.map +1 -1
  363. package/dist/vite/adapters/tanstack.adapter.d.ts.map +1 -1
  364. package/dist/vite/index.js +174 -4
  365. package/dist/vite/index.js.map +1 -1
  366. package/dist/vite/plugins/twilight-schema.d.ts +18 -0
  367. package/dist/vite/plugins/twilight-schema.d.ts.map +1 -0
  368. package/dist/vite/plugins/twilight-schema.plugin.d.ts +20 -0
  369. package/dist/vite/plugins/twilight-schema.plugin.d.ts.map +1 -0
  370. package/dist/vite/types.d.ts +7 -0
  371. package/dist/vite/types.d.ts.map +1 -1
  372. package/package.json +10 -3
  373. package/dist/AddToCartForm-VS67AFNL.js.map +0 -1
  374. package/dist/BlogAuthorPage-276K2KQS.js.map +0 -1
  375. package/dist/BlogCategoryPage-GF5PLRG7.js.map +0 -1
  376. package/dist/BlogPage-BU672BXD.js.map +0 -1
  377. package/dist/BlogSinglePage-ELV4S5EV.js.map +0 -1
  378. package/dist/BlogTagPage-TXQP6ZOI.js.map +0 -1
  379. package/dist/BrandsPage-C6ZHC4KC.js.map +0 -1
  380. package/dist/Breadcrumb-TG4UTNRM.js.map +0 -1
  381. package/dist/CartItem-55JV6HDS.js.map +0 -1
  382. package/dist/CartSummary-CUWMHHMD.js.map +0 -1
  383. package/dist/Copyright-PG76AVV6.js +0 -9
  384. package/dist/CustomerLayout-SLNVCNZ6.js.map +0 -1
  385. package/dist/ErrorPage-TK4U3ENF.js +0 -6
  386. package/dist/Footer-MZDSEK57.js +0 -39
  387. package/dist/Header-CXFKDTOA.js +0 -15
  388. package/dist/ImageModal-WLJM3WIE.js +0 -41
  389. package/dist/ImageModal-WLJM3WIE.js.map +0 -1
  390. package/dist/LoyaltyPage-AIA3CUYI.js.map +0 -1
  391. package/dist/MainMenu-T3M5RB7L.js.map +0 -1
  392. package/dist/MasterLayout-QUBHRA32.js +0 -39
  393. package/dist/MobileMenu-6D52JOQA.js.map +0 -1
  394. package/dist/NotificationsPage-6H45SAS7.js.map +0 -1
  395. package/dist/OrderSinglePage-GP2M3YVH.js.map +0 -1
  396. package/dist/OrdersPage-OQGJLTQP.js.map +0 -1
  397. package/dist/PreOrderNotification-ZVTGNV7K.js.map +0 -1
  398. package/dist/PriceQuoteButton-RAAPL4N4.js.map +0 -1
  399. package/dist/ProductDetails-2JUCRU4W.js.map +0 -1
  400. package/dist/ProfilePage-XGZ2HCQH.js.map +0 -1
  401. package/dist/SeoCartWidget-PDK6IQ2H.js.map +0 -1
  402. package/dist/SettingsPage-VCQNV2PP.js.map +0 -1
  403. package/dist/StoreClosedNotification-3JRNBNQK.js +0 -40
  404. package/dist/TestimonialsPage-ENMVJ4QG.js.map +0 -1
  405. package/dist/ThankYouPage-4FTP6E2Y.js.map +0 -1
  406. package/dist/WalletPage-VKV44EEG.js.map +0 -1
  407. package/dist/WidgetHead-FXEPCB23.js +0 -7
  408. package/dist/WishlistPage-GJZCXQUY.js.map +0 -1
  409. package/dist/chunk-25SSLQAJ.js.map +0 -1
  410. package/dist/chunk-2SUOZEX2.js.map +0 -1
  411. package/dist/chunk-3DCZJDDK.js +0 -10
  412. package/dist/chunk-3UHSMGPY.js.map +0 -1
  413. package/dist/chunk-433EFDBW.js.map +0 -1
  414. package/dist/chunk-4AYOFKHU.js.map +0 -1
  415. package/dist/chunk-6LQFMCWK.js.map +0 -1
  416. package/dist/chunk-BWFBVXT3.js.map +0 -1
  417. package/dist/chunk-C5GWTTB6.js.map +0 -1
  418. package/dist/chunk-CI4HKXVH.js.map +0 -1
  419. package/dist/chunk-FBFPH5BB.js.map +0 -1
  420. package/dist/chunk-GS3G4O2R.js.map +0 -1
  421. package/dist/chunk-GTM2GV2N.js.map +0 -1
  422. package/dist/chunk-HL3HSO4R.js.map +0 -1
  423. package/dist/chunk-IILTG4A6.js.map +0 -1
  424. package/dist/chunk-J37AYLWL.js.map +0 -1
  425. package/dist/chunk-JIJOXZPF.js.map +0 -1
  426. package/dist/chunk-MXQCE3KA.js.map +0 -1
  427. package/dist/chunk-P43TLDS6.js.map +0 -1
  428. package/dist/chunk-REQC7YOE.js.map +0 -1
  429. package/dist/chunk-S6AVEFCN.js.map +0 -1
  430. package/dist/chunk-SAZBQNQK.js.map +0 -1
  431. package/dist/chunk-SSQ75CKA.js.map +0 -1
  432. package/dist/chunk-SVZOWI7E.js.map +0 -1
  433. package/dist/chunk-TFZ2RT6P.js.map +0 -1
  434. package/dist/chunk-THXWAZX2.js.map +0 -1
  435. package/dist/chunk-TQLEQSXE.js.map +0 -1
  436. package/dist/chunk-TQUHDSKQ.js.map +0 -1
  437. package/dist/chunk-TWAHYRKI.js.map +0 -1
  438. package/dist/chunk-U33UQAWO.js.map +0 -1
  439. package/dist/chunk-UIX3W2PN.js.map +0 -1
  440. package/dist/chunk-VVRYP6IL.js.map +0 -1
  441. package/dist/chunk-W4CSWDEH.js.map +0 -1
  442. package/dist/chunk-XHGF75TM.js.map +0 -1
  443. package/dist/chunk-ZOCDYJPX.js +0 -14
  444. package/dist/components/common/types.d.ts +0 -7
  445. package/dist/components/common/types.d.ts.map +0 -1
  446. package/dist/document-class-V5XSWLMX.js +0 -21
  447. package/dist/hooks/useIsMobile.d.ts +0 -2
  448. package/dist/hooks/useIsMobile.d.ts.map +0 -1
  449. package/dist/lib/services/index.d.ts +0 -1
  450. package/dist/lib/services/index.d.ts.map +0 -1
  451. package/dist/navigation-77T2NTFS.js +0 -10
  452. package/dist/not-found-73ZVE5QO.js.map +0 -1
  453. package/dist/providers/i18n.d.ts.map +0 -1
  454. package/dist/providers/salla-sdk.types.d.ts.map +0 -1
  455. package/dist/providers/twilight.types.d.ts.map +0 -1
  456. package/dist/router/context.d.ts +0 -3
  457. package/dist/router/context.d.ts.map +0 -1
  458. package/dist/router/index.d.ts +0 -4
  459. package/dist/router/index.d.ts.map +0 -1
  460. package/dist/twilight/index.d.ts +0 -3
  461. package/dist/twilight/index.d.ts.map +0 -1
@@ -1,8 +1,8 @@
1
- import { order } from './chunk-C5GWTTB6.js';
1
+ import { order } from './chunk-GQG4KE5Z.js';
2
2
  import { buildHreflangAlternates } from './chunk-TZ3E5BN4.js';
3
- import { orUnauthorized } from './chunk-JIJOXZPF.js';
3
+ import { orUnauthorized } from './chunk-2ZRLSZ4V.js';
4
4
  import { RouteId } from './chunk-MTONGOJD.js';
5
- import { getTwilightContext } from './chunk-W4CSWDEH.js';
5
+ import { getTwilightContext } from './chunk-KIPZQN3Y.js';
6
6
  import { lazy } from 'react';
7
7
 
8
8
  // src/routes/account/orders/loader.ts
@@ -47,9 +47,9 @@ async function orderSingleLoader({
47
47
  }
48
48
 
49
49
  // src/routes/account/orders/index.tsx
50
- var LazyOrdersPage = lazy(() => import('./OrdersPage-OQGJLTQP.js').then((m) => ({ default: m.OrdersPage })));
50
+ var LazyOrdersPage = lazy(() => import('./OrdersPage-DJMOQVJP.js').then((m) => ({ default: m.OrdersPage })));
51
51
  var LazyOrderSinglePage = lazy(
52
- () => import('./OrderSinglePage-GP2M3YVH.js').then((m) => ({ default: m.OrderSinglePage }))
52
+ () => import('./OrderSinglePage-M6GBDZPD.js').then((m) => ({ default: m.OrderSinglePage }))
53
53
  );
54
54
  var OrdersPage = LazyOrdersPage;
55
55
  var OrderSinglePage = LazyOrderSinglePage;
@@ -101,5 +101,5 @@ var OrderSingle = {
101
101
  };
102
102
 
103
103
  export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader };
104
- //# sourceMappingURL=chunk-SAZBQNQK.js.map
105
- //# sourceMappingURL=chunk-SAZBQNQK.js.map
104
+ //# sourceMappingURL=chunk-DHXE3JE6.js.map
105
+ //# sourceMappingURL=chunk-DHXE3JE6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/routes/account/orders/loader.ts","../src/routes/account/orders/index.tsx"],"names":[],"mappings":"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","file":"chunk-DHXE3JE6.js","sourcesContent":["import { order } from '../../../api/order';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\nimport { orUnauthorized } from '../../../providers/NavigationProvider';\nimport type { OrdersPageProps, OrderSinglePageProps, OrdersQuery } from './types';\nimport type { IdParams } from '../../types';\n\nexport async function ordersLoader(\n ctx: { query?: OrdersQuery },\n extend?: (\n data: OrdersPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrdersPageProps> {\n const query = ctx.query;\n const isPending = query?.status === 'pending';\n const response = await orUnauthorized(\n order.list({\n status: query?.status,\n feedback_status: query?.feedback_status,\n })\n );\n const i18n = getTwilightContext().i18n;\n const pageData: OrdersPageProps = {\n page: {\n title: isPending\n ? i18n.t('common.titles.pending_orders') || 'Pending Orders'\n : i18n.t('common.titles.orders') || 'Orders',\n slug: 'orders',\n },\n orders: response.data,\n cursor: response.cursor,\n query,\n };\n\n if (extend) {\n const extra = await extend(pageData, { params: {} });\n return { ...pageData, ...extra } as OrdersPageProps;\n }\n return pageData;\n}\n\nexport async function orderSingleLoader({\n params,\n}: {\n params: IdParams;\n}): Promise<OrderSinglePageProps> {\n const data = await order.findOrThrow(params.id);\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n slug: RouteId.CUSTOMER_ORDERS_SINGLE,\n id: String(params.id),\n title: (i18n.t('pages.orders.order_details') || 'Order Details').replace(':id', params.id),\n },\n order: data.order,\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { ordersLoader, orderSingleLoader } from './loader';\nimport type { OrdersPageProps, OrderSinglePageProps, OrdersSearchParams } from './types';\nimport type { IdParams } from '../../types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\n// Lazy-load components for code-splitting\nconst LazyOrdersPage = lazy(() => import('./OrdersPage').then((m) => ({ default: m.OrdersPage })));\nconst LazyOrderSinglePage = lazy(() =>\n import('./OrderSinglePage').then((m) => ({ default: m.OrderSinglePage }))\n);\n\nexport const OrdersPage = LazyOrdersPage;\nexport const OrderSinglePage = LazyOrderSinglePage;\nexport { ordersLoader, orderSingleLoader } from './loader';\nexport type {\n OrdersPageProps,\n OrderSinglePageProps,\n OrdersSearchParams,\n OrdersQuery,\n} from './types';\n\nasync function ordersLoaderWithExtend(\n ctx: { search?: OrdersSearchParams; locale?: string },\n extend?: (\n data: OrdersPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrdersPageProps> {\n const query = ctx.search;\n const data = await ordersLoader({ query }, extend);\n\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as OrdersPageProps;\n }\n return data;\n}\n\nfunction ordersHead(ctx: TwilightContext, data: OrdersPageProps): HeadDescriptor {\n const isPending = ctx.location.search?.status === 'pending';\n const base: HeadDescriptor = {\n title: ctx.i18n.t(isPending ? 'common.titles.pending_orders' : 'common.titles.orders'),\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n\n return base;\n}\n\nasync function orderSingleLoaderWithExtend(\n ctx: { params: IdParams; locale?: string },\n extend?: (\n data: OrderSinglePageProps,\n ctx: { params: IdParams }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n): Promise<OrderSinglePageProps> {\n const data = await orderSingleLoader({ params: ctx.params });\n\n if (extend) {\n const extra = await extend(data, ctx);\n return { ...data, ...extra } as OrderSinglePageProps;\n }\n return data;\n}\n\nfunction orderSingleHead(ctx: TwilightContext, data: OrderSinglePageProps): HeadDescriptor {\n const base: HeadDescriptor = {\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n };\n\n return base;\n}\n\nexport const Orders = {\n id: RouteId.CUSTOMER_ORDERS_INDEX,\n loader: ordersLoaderWithExtend,\n head: ordersHead,\n Component: LazyOrdersPage,\n} as const;\nexport const OrderSingle = {\n id: RouteId.CUSTOMER_ORDERS_SINGLE,\n loader: orderSingleLoaderWithExtend,\n head: orderSingleHead,\n Component: LazyOrderSinglePage,\n} as const;\n"]}
@@ -1,4 +1,4 @@
1
- import { api } from './chunk-TQUHDSKQ.js';
1
+ import { api } from './chunk-2TB2LTL2.js';
2
2
  import { queryOptions } from '@tanstack/react-query';
3
3
 
4
4
  var wishlist = {
@@ -28,5 +28,5 @@ var wishlist = {
28
28
  };
29
29
 
30
30
  export { wishlist };
31
- //# sourceMappingURL=chunk-YRKMHN7W.js.map
32
- //# sourceMappingURL=chunk-YRKMHN7W.js.map
31
+ //# sourceMappingURL=chunk-EHKTHLXK.js.map
32
+ //# sourceMappingURL=chunk-EHKTHLXK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/wishlist.ts"],"names":[],"mappings":";;;AAeO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAA,EAAM,OAAO,MAAA,GAA6B,EAAC,KAAmC;AAC5E,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,UAAU,EAAA,EAAI,UAAA,EAAY,QAAO,GAAI,MAAA;AAEvD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAU,UAAU,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAE5C,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,UAAA,GAAa,GAAA,GAAM,GAAG,CAAA;AAAA,IACvD;AAEA,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,SAAA,EAAY,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CACzD,IAAA,EAA2B;AAE9B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,QAAA,CAAS,IAAA,IAAQ,EAAC;AAAA,MACzB,IAAA,EAAM,QAAA,CAAS,MAAA,EAAQ,IAAA,IAAQ;AAAA,KACjC;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,KACL,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,UAAA,EAAY,MAAA,EAAQ,MAAM,CAAA;AAAA,MACrC,OAAA,EAAS,CAAC,EAAE,MAAA,EAAO,KAAM,QAAA,CAAS,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ;AAAA,KAC7D;AAAA;AAEP","file":"chunk-YRKMHN7W.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { ProductsListResult, ProductsListResponse } from './product';\n\nexport interface WishlistListParams {\n page?: number;\n perPage?: number;\n filterable?: boolean;\n signal?: AbortSignal;\n}\n\n/**\n * Wishlist API — page-based pagination only.\n * Kept separate from product.list to avoid mixing cursor and page pagination strategies.\n */\nexport const wishlist = {\n list: async (params: WishlistListParams = {}): Promise<ProductsListResult> => {\n const { page = 1, perPage = 15, filterable, signal } = params;\n\n const searchParams = new URLSearchParams();\n searchParams.set('source', 'wishlist');\n searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n if (filterable !== undefined) {\n searchParams.set('filterable', filterable ? '1' : '0');\n }\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`products?${searchParams.toString()}`, options as any)\n .json<ProductsListResponse>();\n\n return {\n items: response.data ?? [],\n next: response.cursor?.next ?? null,\n };\n },\n\n queries: {\n list: (params: Omit<WishlistListParams, 'signal'>) =>\n queryOptions({\n queryKey: ['wishlist', 'list', params],\n queryFn: ({ signal }) => wishlist.list({ ...params, signal }),\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/wishlist.ts"],"names":[],"mappings":";;;AAeO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAA,EAAM,OAAO,MAAA,GAA6B,EAAC,KAAmC;AAC5E,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,UAAU,EAAA,EAAI,UAAA,EAAY,QAAO,GAAI,MAAA;AAEvD,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAU,UAAU,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AACrC,IAAA,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,OAAO,CAAC,CAAA;AAE5C,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,YAAA,CAAa,GAAA,CAAI,YAAA,EAAc,UAAA,GAAa,GAAA,GAAM,GAAG,CAAA;AAAA,IACvD;AAEA,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,UAAgB,MAAA,GAAS,MAAA;AAE7B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CACpB,GAAA,CAAI,CAAA,SAAA,EAAY,YAAA,CAAa,QAAA,EAAU,CAAA,CAAA,EAAI,OAAc,CAAA,CACzD,IAAA,EAA2B;AAE9B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,QAAA,CAAS,IAAA,IAAQ,EAAC;AAAA,MACzB,IAAA,EAAM,QAAA,CAAS,MAAA,EAAQ,IAAA,IAAQ;AAAA,KACjC;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,CAAC,MAAA,KACL,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,UAAA,EAAY,MAAA,EAAQ,MAAM,CAAA;AAAA,MACrC,OAAA,EAAS,CAAC,EAAE,MAAA,EAAO,KAAM,QAAA,CAAS,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ;AAAA,KAC7D;AAAA;AAEP","file":"chunk-EHKTHLXK.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { ProductsListResult, ProductsListResponse } from './product';\n\nexport interface WishlistListParams {\n page?: number;\n perPage?: number;\n filterable?: boolean;\n signal?: AbortSignal;\n}\n\n/**\n * Wishlist API — page-based pagination only.\n * Kept separate from product.list to avoid mixing cursor and page pagination strategies.\n */\nexport const wishlist = {\n list: async (params: WishlistListParams = {}): Promise<ProductsListResult> => {\n const { page = 1, perPage = 15, filterable, signal } = params;\n\n const searchParams = new URLSearchParams();\n searchParams.set('source', 'wishlist');\n searchParams.set('page', String(page));\n searchParams.set('per_page', String(perPage));\n\n if (filterable !== undefined) {\n searchParams.set('filterable', filterable ? '1' : '0');\n }\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`products?${searchParams.toString()}`, options as any)\n .json<ProductsListResponse>();\n\n return {\n items: response.data ?? [],\n next: response.cursor?.next ?? null,\n };\n },\n\n queries: {\n list: (params: Omit<WishlistListParams, 'signal'>) =>\n queryOptions({\n queryKey: ['wishlist', 'list', params],\n queryFn: ({ signal }) => wishlist.list({ ...params, signal }),\n }),\n },\n};\n"]}
@@ -1,8 +1,8 @@
1
- import { useIsHome } from './chunk-JIJOXZPF.js';
2
- import { useTranslation } from './chunk-VVRYP6IL.js';
3
- import { HookSlot } from './chunk-25SSLQAJ.js';
4
- import { Image } from './chunk-433EFDBW.js';
5
- import { useTwilight } from './chunk-BWFBVXT3.js';
1
+ import { useIsHome } from './chunk-2ZRLSZ4V.js';
2
+ import { useTranslation } from './chunk-TYNZ5B2B.js';
3
+ import { HookSlot } from './chunk-Q7VWURUR.js';
4
+ import { Image } from './chunk-SM7VMQZY.js';
5
+ import { useTwilight } from './chunk-DF6FBKDN.js';
6
6
  import { lazy, useState } from 'react';
7
7
  import { SallaAdvertisement } from '@salla.sa/twilight-components-react/advertisement';
8
8
  import { SallaCartSummary } from '@salla.sa/twilight-components-react/cart-summary';
@@ -13,9 +13,9 @@ import { SallaSearch } from '@salla.sa/twilight-components-react/search';
13
13
  import { SallaUserMenu } from '@salla.sa/twilight-components-react/user-menu';
14
14
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
15
15
 
16
- var LazyMainMenu = lazy(() => import('./MainMenu-T3M5RB7L.js').then((m) => ({ default: m.MainMenu })));
16
+ var LazyMainMenu = lazy(() => import('./MainMenu-TDLQET2Y.js').then((m) => ({ default: m.MainMenu })));
17
17
  var LazyMobileMenu = lazy(
18
- () => import('./MobileMenu-6D52JOQA.js').then((m) => ({ default: m.MobileMenu }))
18
+ () => import('./MobileMenu-GVXPV5HQ.js').then((m) => ({ default: m.MobileMenu }))
19
19
  );
20
20
  function Header(_props) {
21
21
  const { currency, theme, store } = useTwilight();
@@ -57,6 +57,7 @@ function Header(_props) {
57
57
  store?.scope && /* @__PURE__ */ jsxs(
58
58
  "button",
59
59
  {
60
+ type: "button",
60
61
  className: "btn--rounded-gray",
61
62
  onClick: () => window.salla?.event.dispatch("scopes::open", {
62
63
  mode: "default"
@@ -119,5 +120,5 @@ function Header(_props) {
119
120
  }
120
121
 
121
122
  export { Header };
122
- //# sourceMappingURL=chunk-U33UQAWO.js.map
123
- //# sourceMappingURL=chunk-U33UQAWO.js.map
123
+ //# sourceMappingURL=chunk-FH5YDZFQ.js.map
124
+ //# sourceMappingURL=chunk-FH5YDZFQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/navigation/lazy.ts","../src/components/layout/Header.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAMO,IAAM,YAAA,GAAe,IAAA,CAAK,MAAM,OAAO,wBAAY,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,QAAA,GAAW,CAAC,CAAA;AAE3F,IAAM,cAAA,GAAiB,IAAA;AAAA,EAAK,MACjC,OAAO,0BAAc,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,MAAO,EAAE,OAAA,EAAS,CAAA,CAAE,UAAA,EAAW,CAAE;AAChE,CAAA;ACUO,SAAS,OAAO,MAAA,EAAqB;AAC1C,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,KAAA,KAAU,WAAA,EAAY;AAC/C,EAAA,MAAM,EAAE,MAAA,EAAQ,YAAA,EAAa,GAAI,cAAA,EAAe;AAChD,EAAA,MAAM,QAAA,GAAW,KAAA,EAAO,QAAA,IAAY,EAAC;AACrC,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,KAAK,CAAA;AAG9D,EAAA,MAAM,aAAa,SAAA,EAAU;AAE7B,EAAA,MAAM,UAAA,GAAa,aAAa,IAAA,GAAO,MAAA;AAEvC,EAAA,uBACE,IAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,cAAA,EAAe,0BAAwB,IAAA,EACvD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,cAAA,EAAe,CAAA;AAAA,wBAC7B,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,kBAAA,GAAA,CAAC,sBAAmB,CAAA,EACtB,CAAA;AAAA,oBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,UAAA,EAAa,QAAA,CAAS,cAAA,GAAiB,mBAAA,GAAsB,EAAE,CAAA,CAAA,EAC7E,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EAEZ,QAAA,EAAA;AAAA,QAAA,QAAA,CAAS,mCAAmB,GAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAO,QAAA,EAAS,QAAM,IAAA,EAAC,CAAA;AAAA,wBAG/D,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACX,QAAA,EAAA,CAAA,KAAA,EAAO,UAAU,eAAA,IAAmB,KAAA,EAAO,QAAA,EAAU,kBAAA,qBACrD,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAS,MAAM,MAAA,CAAO,KAAA,EAAO,KAAA,CAAM,SAAS,oBAAoB,CAAA;AAAA,cAChE,SAAA,EAAU,2BAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,UAAM,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,gCACpB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,gCAC1B,GAAA,CAAC,UAAK,SAAA,EAAW,CAAA,qBAAA,EAAwB,OAAO,OAAA,CAAQ,WAAA,EAAa,CAAA,CAAA,EAAI,CAAA;AAAA,oCAExE,MAAA,EAAA,EACE,QAAA,EAAA,KAAA,EAAO,QAAA,EAAU,cAAA,IAAkB,UAAU,IAAA,KAAS,KAAA,mBACrD,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,WAAA,EAAY,CAAA,mBAEzB,GAAA,CAAA,QAAA,EAAA,EAAG,QAAA,EAAA,QAAA,EAAU,QAAO,CAAA,EAExB;AAAA;AAAA;AAAA,WACF;AAAA,0BAGA,GAAA;AAAA,YAAC,sBAAA;AAAA,YAAA;AAAA,cACC,QAAA,EAAU,MAAA;AAAA,cACV,QAAA,EAAU,UAAU,IAAA,IAAQ,KAAA;AAAA,cAC5B,wBAAA,EAAwB;AAAA;AAAA;AAC1B,SAAA,EACF,CAAA,EAEJ,CAAA;AAAA,QAGC,OAAO,KAAA,oBACN,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAU,mBAAA;AAAA,YACV,SAAS,MACP,MAAA,CAAO,KAAA,EAAO,KAAA,CAAM,SAAS,cAAA,EAAgB;AAAA,cAC3C,IAAA,EAAM;AAAA,aACP,CAAA;AAAA,YAGH,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,kCAAA,EAAmC,CAAA;AAAA,cAC/C,MAAM,KAAA,CAAM;AAAA;AAAA;AAAA,SACf;AAAA,wBAIF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAEb,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAM,IAAA,EAAC,IAAA,EAAI,IAAA,EAAC,MAAA,EAAQ,EAAA,EAAI,CAAA,EACvC;AAAA,OAAA,EACF,CAAA;AAAA,sBAEA,GAAA,CAAC,iBAAc,QAAA,EAAU,KAAA,EAAO,UAAU,aAAA,EAAc,KAAA,EAAM,UAAQ,IAAA,EAAC;AAAA,KAAA,EACzE,CAAA,EACF,CAAA;AAAA,oBAGA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,SAAA;AAAA,QACH,SAAA,EAAW,CAAA,0EAAA,EAA6E,QAAA,CAAS,gBAAA,GAAmB,kBAAkB,EAAE,CAAA,CAAA;AAAA,QAExI,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACb,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,oEAAA;AAAA,gBACV,IAAA,EAAK,cAAA;AAAA,gBACL,YAAA,EAAW,WAAA;AAAA,gBACX,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,kBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,kBAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,gBAC1B,CAAA;AAAA,gBAEA,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAA,EAAmC;AAAA;AAAA,aAClD;AAAA,iCACC,GAAA,EAAA,EAAE,SAAA,EAAU,gBAAe,IAAA,EAAM,KAAA,EAAO,OAAO,GAAA,EAC9C,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,cAAA,EACb,QAAA,kBAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,KAAK,KAAA,EAAO,IAAA;AAAA,kBACZ,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,IAAA,IAAQ,OAAO,CAAA,KAAA,CAAA;AAAA,kBAC9B,QAAA,EAAQ,IAAA;AAAA,kBACR,KAAA,EAAO,GAAA;AAAA,kBACP,MAAA,EAAQ;AAAA;AAAA,eACV,EACF,CAAA;AAAA,kCACC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAO,QAAQ,OAAA,EAAQ;AAAA,aAAA,EAC1D,CAAA;AAAA,gCACC,YAAA,EAAA,EAAS;AAAA,WAAA,EACZ,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,iBAAc,UAAA,EAAU,IAAA,EAAC,UAAA,EAAU,IAAA,EAAC,WAAU,YAAA,EAAa,CAAA;AAAA,4BAC5D,GAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,8BAAA,EAC1B,QAAA,kBAAA,GAAA,CAAC,OAAE,IAAA,EAAK,MAAA,EAAO,SAAA,EAAU,0CAAA,EAA2C,CAAA,EACtE;AAAA,WAAA,EACF;AAAA,SAAA,EACF,GACF,CAAA,EACF;AAAA;AAAA,KACF;AAAA,oBAGA,GAAA,CAAC,kBAAW,MAAA,EAAQ,gBAAA,EAAkB,SAAS,MAAM,mBAAA,CAAoB,KAAK,CAAA,EAAG,CAAA;AAAA,oBACjF,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,YAAA,EAAa;AAAA,GAAA,EAC9B,CAAA;AAEJ","file":"chunk-FH5YDZFQ.js","sourcesContent":["import { lazy } from 'react';\n\n/**\n * Lazy-loaded navigation components\n * Use these for code-splitting navigation sections\n */\nexport const LazyMainMenu = lazy(() => import('./MainMenu').then((m) => ({ default: m.MainMenu })));\n\nexport const LazyMobileMenu = lazy(() =>\n import('./MobileMenu').then((m) => ({ default: m.MobileMenu }))\n);\n","import { useState } from 'react';\nimport { useIsHome } from '../../providers/NavigationProvider';\nimport { SallaAdvertisement } from '@salla.sa/twilight-components-react/advertisement';\nimport { SallaCartSummary } from '@salla.sa/twilight-components-react/cart-summary';\nimport { SallaContacts } from '@salla.sa/twilight-components-react/contacts';\nimport { SallaLocalizationModal } from '@salla.sa/twilight-components-react/localization-modal';\nimport { SallaMenu } from '@salla.sa/twilight-components-react/menu';\nimport { SallaSearch } from '@salla.sa/twilight-components-react/search';\nimport { SallaUserMenu } from '@salla.sa/twilight-components-react/user-menu';\nimport { useTwilight } from '../../providers/twilight-context';\nimport { useTranslation } from '../../providers/I18nProvider';\nimport { HookSlot } from '../../hooks/HookSlot';\nimport { MainMenu, MobileMenu } from '../navigation';\nimport { Image } from '../common';\nimport type { Cart } from '../../types';\n\ninterface HeaderProps {\n cart?: Cart;\n}\n\nexport function Header(_props: HeaderProps) {\n const { currency, theme, store } = useTwilight();\n const { locale, languageName } = useTranslation();\n const settings = theme?.settings || {};\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n\n // Check if we're on homepage\n const isHomepage = useIsHome();\n\n const StoreTitle = isHomepage ? 'h1' : 'span';\n\n return (\n <header className=\"store-header\" suppressHydrationWarning>\n <HookSlot name=\"header:start\" />\n <div className=\"advertisement-slot\">\n <SallaAdvertisement />\n </div>\n {/* Top Nav */}\n <div className={`top-navbar${settings.topnav_is_dark ? ' top-navbar--dark' : ''}`}>\n <div className=\"container flex justify-between\">\n <div className=\"flex-1 flex items-center gap-2\">\n {/* Footer Menu */}\n {settings.important_links && <SallaMenu source=\"footer\" topnav />}\n\n {/* Language & Currency */}\n <div className=\"header-buttons\">\n {(store?.settings?.is_multilingual || store?.settings?.currencies_enabled) && (\n <>\n <button\n type=\"button\"\n onClick={() => window.salla?.event.dispatch('localization::open')}\n className=\"btn--rounded-gray basis-0\"\n >\n <span>{languageName}</span>\n <span className=\"mx-1.5\">|</span>\n <span className={`flag iti__flag iti__${store?.country.toLowerCase()}`}></span>\n\n <span>\n {store?.settings?.use_sar_symbol && currency?.code === 'SAR' ? (\n <i className=\"sicon-sar\"></i>\n ) : (\n <>{currency?.symbol}</>\n )}\n </span>\n </button>\n {/* TODO:: support switch the lang without hit the web API, by set it in the sdk and local storage */}\n {/* TODO:: Support switch the curency without hit the web API, by set it in the sdk and local storage */}\n <SallaLocalizationModal\n language={locale}\n currency={currency?.code || 'SAR'}\n suppressHydrationWarning\n />\n </>\n )}\n </div>\n\n {/* Scopes / Branches */}\n {store?.scope && (\n <button\n type=\"button\"\n className=\"btn--rounded-gray\"\n onClick={() =>\n window.salla?.event.dispatch('scopes::open', {\n mode: 'default',\n })\n }\n >\n <i className=\"sicon-location rtl:ml-1 ltr:mr-1\"></i>\n {store.scope.name}\n </button>\n )}\n\n {/* Search bar */}\n <div className=\"header-search flex-1\">\n {/* todo:: use a search icon insted with open the search popup */}\n <SallaSearch inline oval height={36} />\n </div>\n </div>\n\n <SallaContacts contacts={store?.contacts} contactsTitle=\"N/A\" isHeader />\n </div>\n </div>\n\n {/* Main Nav */}\n <div\n id=\"mainnav\"\n className={`main-nav-container shadow-default bg-white flex items-center relative z-50${settings.header_is_sticky ? ' sticky top-0' : ''}`}\n >\n <div className=\"inner bg-inherit w-full\">\n <div className=\"container\">\n <div className=\"flex items-stretch justify-between relative\">\n <div className=\"flex items-center\">\n <a\n className=\"lg:hidden mburger mburger--collapse leading-none rtl:ml-4 ltr:mr-4\"\n href=\"#mobile-menu\"\n aria-label=\"Open-menu\"\n onClick={(e) => {\n e.preventDefault();\n setIsMobileMenuOpen(true);\n }}\n >\n <i className=\"sicon-menu text-primary text-2xl\"></i>\n </a>\n <a className=\"navbar-brand\" href={store?.url || '/'}>\n <div className=\"logo-wrapper\">\n <Image\n src={store?.logo}\n alt={`${store?.name || 'Store'} logo`}\n priority\n width={120}\n height={48}\n />\n </div>\n <StoreTitle className=\"sr-only\">{store?.name || 'Store'}</StoreTitle>\n </a>\n <MainMenu />\n </div>\n <div className=\"flex items-center justify-end my-2.5\">\n <SallaUserMenu avatarOnly showHeader className=\"header-btn\" />\n <SallaCartSummary className=\"ml-4 rtl:ml-[unset] rtl:mr-4\">\n <i slot=\"icon\" className=\"header-btn__icon icon sicon-shopping-bag\"></i>\n </SallaCartSummary>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Mobile Menu */}\n <MobileMenu isOpen={isMobileMenuOpen} onClose={() => setIsMobileMenuOpen(false)} />\n <HookSlot name=\"header:end\" />\n </header>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { useTwilight } from './chunk-BWFBVXT3.js';
1
+ import { useTwilight } from './chunk-DF6FBKDN.js';
2
2
 
3
3
  // src/hooks/useTheme.ts
4
4
  function useTheme() {
@@ -12,5 +12,5 @@ function useTheme() {
12
12
  }
13
13
 
14
14
  export { useTheme };
15
- //# sourceMappingURL=chunk-UE3BUFZI.js.map
16
- //# sourceMappingURL=chunk-UE3BUFZI.js.map
15
+ //# sourceMappingURL=chunk-FZKRSGLP.js.map
16
+ //# sourceMappingURL=chunk-FZKRSGLP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useTheme.ts"],"names":[],"mappings":";;;AA0CO,SAAS,QAAA,GAA2B;AACzC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAE9B,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,OAAO,KAAA,CAAM;AAAA,GACf;AACF","file":"chunk-UE3BUFZI.js","sourcesContent":["import { useTwilight } from '../providers/twilight-context';\nimport type { ThemeColor, ThemeFont, ThemeSettings } from '../types';\n\n/**\n * UseThemeResult - Return type for useTheme hook\n *\n * @property color - Theme color configuration (primary, reverse_text, etc.)\n * @property font - Theme font configuration (family and weights)\n * @property settings - Theme settings (checkout options, RTL, etc.)\n * @property isRTL - Boolean indicating if the current theme uses RTL layout\n */\nexport interface UseThemeResult {\n color: ThemeColor;\n font: ThemeFont | undefined;\n settings: ThemeSettings;\n isRTL: boolean;\n}\n\n/**\n * useTheme - Hook for accessing theme configuration\n *\n * Provides access to the current theme's colors, fonts, settings,\n * and RTL direction. This hook is SSR-safe and works with the\n * TwilightProvider to deliver theme data to components.\n *\n * @returns Theme configuration object\n *\n * @example\n * ```tsx\n * function ThemedButton() {\n * const { color, isRTL } = useTheme();\n *\n * const styles = {\n * backgroundColor: color.primary,\n * color: color.reverse_text || '#fff',\n * direction: isRTL ? 'rtl' : 'ltr',\n * };\n *\n * return <button style={styles}>Click me</button>;\n * }\n * ```\n */\nexport function useTheme(): UseThemeResult {\n const { theme } = useTwilight();\n\n return {\n color: theme.color,\n font: theme.font,\n settings: theme.settings,\n isRTL: theme.is_rtl,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/hooks/useTheme.ts"],"names":[],"mappings":";;;AA0CO,SAAS,QAAA,GAA2B;AACzC,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,WAAA,EAAY;AAE9B,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,OAAO,KAAA,CAAM;AAAA,GACf;AACF","file":"chunk-FZKRSGLP.js","sourcesContent":["import { useTwilight } from '../providers/twilight-context';\nimport type { ThemeColor, ThemeFont, ThemeSettings } from '../types';\n\n/**\n * UseThemeResult - Return type for useTheme hook\n *\n * @property color - Theme color configuration (primary, reverse_text, etc.)\n * @property font - Theme font configuration (family and weights)\n * @property settings - Theme settings (checkout options, RTL, etc.)\n * @property isRTL - Boolean indicating if the current theme uses RTL layout\n */\nexport interface UseThemeResult {\n color: ThemeColor;\n font: ThemeFont | undefined;\n settings: ThemeSettings;\n isRTL: boolean;\n}\n\n/**\n * useTheme - Hook for accessing theme configuration\n *\n * Provides access to the current theme's colors, fonts, settings,\n * and RTL direction. This hook is SSR-safe and works with the\n * TwilightProvider to deliver theme data to components.\n *\n * @returns Theme configuration object\n *\n * @example\n * ```tsx\n * function ThemedButton() {\n * const { color, isRTL } = useTheme();\n *\n * const styles = {\n * backgroundColor: color.primary,\n * color: color.reverse_text || '#fff',\n * direction: isRTL ? 'rtl' : 'ltr',\n * };\n *\n * return <button style={styles}>Click me</button>;\n * }\n * ```\n */\nexport function useTheme(): UseThemeResult {\n const { theme } = useTwilight();\n\n return {\n color: theme.color,\n font: theme.font,\n settings: theme.settings,\n isRTL: theme.is_rtl,\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { orThrow, orUnauthorized } from './chunk-JIJOXZPF.js';
2
- import { api } from './chunk-TQUHDSKQ.js';
1
+ import { orThrow, orUnauthorized } from './chunk-2ZRLSZ4V.js';
2
+ import { api } from './chunk-2TB2LTL2.js';
3
3
  import { queryOptions } from '@tanstack/react-query';
4
4
 
5
5
  var order = {
@@ -61,5 +61,5 @@ var order = {
61
61
  };
62
62
 
63
63
  export { order };
64
- //# sourceMappingURL=chunk-C5GWTTB6.js.map
65
- //# sourceMappingURL=chunk-C5GWTTB6.js.map
64
+ //# sourceMappingURL=chunk-GQG4KE5Z.js.map
65
+ //# sourceMappingURL=chunk-GQG4KE5Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/order.ts"],"names":[],"mappings":"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","file":"chunk-GQG4KE5Z.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type {\n Order,\n OrderListItem,\n OrderShipmentItem,\n OrderRatingItem,\n} from '../routes/account/types';\nimport type { Pagination } from './types';\nimport { orThrow, orUnauthorized } from '../providers/NavigationProvider';\n\nexport interface OrderDetailResponse {\n order: Order;\n}\n\nexport interface CheckoutThankYouData {\n thank_you_title?: string;\n messages?: string[];\n share_message?: string;\n short_share_message?: string;\n}\n\nexport interface OrdersListResponse {\n data: OrderListItem[];\n cursor?: Pagination;\n}\n\nexport interface OrdersListParams {\n page?: number;\n cursor?: string | null;\n status?: string;\n feedback_status?: string;\n signal?: AbortSignal;\n}\n\nexport const order = {\n list: async (params?: OrdersListParams): Promise<OrdersListResponse> => {\n const { page, cursor, status, feedback_status: feedbackStatus, signal } = params ?? {};\n\n const searchParams = new URLSearchParams();\n if (page !== undefined) searchParams.set('page', String(page));\n if (cursor) searchParams.set('cursor', cursor);\n if (status) searchParams.set('status', status);\n if (feedbackStatus) searchParams.set('feedback_status', feedbackStatus);\n\n const options: Record<string, unknown> = {};\n if (signal) options.signal = signal;\n\n const response = await api\n .get(`orders?${searchParams.toString()}`, options as any)\n .json<{ data: OrderListItem[] | null; cursor?: Pagination }>();\n\n return {\n data: response.data ?? [],\n cursor: response.cursor,\n };\n },\n\n find: async (id: string): Promise<OrderDetailResponse> => {\n const response = await api.get(`orders/${id}`).json<{ data: Order }>();\n\n return { order: response.data };\n },\n\n shipments: async (orderId: string): Promise<OrderShipmentItem[]> => {\n const response = await api\n .get(`orders/${orderId}/shipments`)\n .json<{ data: OrderShipmentItem[] }>();\n return response.data ?? [];\n },\n\n ratings: async (orderId: string): Promise<OrderRatingItem[]> => {\n const response = await api.get(`orders/${orderId}/ratings`).json<{ data: OrderRatingItem[] }>();\n return response.data ?? [];\n },\n\n findOrThrow: (id: string): Promise<OrderDetailResponse> => orUnauthorized(order.find(id)),\n\n thankYou: async (orderId: string): Promise<CheckoutThankYouData> => {\n const { data } = await api\n .get(`checkout/thank-you/${orderId}`)\n .json<{ data: CheckoutThankYouData }>();\n return data;\n },\n\n thankYouOrThrow: (orderId: string): Promise<CheckoutThankYouData> =>\n orThrow(order.thankYou(orderId)),\n\n queries: {\n list: (params?: Omit<OrdersListParams, 'signal'>) =>\n queryOptions({\n queryKey: ['orders', 'list', params],\n queryFn: ({ signal }) => order.list({ ...params, signal }),\n }),\n find: (id: string) =>\n queryOptions({\n queryKey: ['orders', 'detail', id],\n queryFn: () => order.find(id),\n }),\n shipments: (orderId: string) =>\n queryOptions({\n queryKey: ['orders', 'shipments', orderId],\n queryFn: () => order.shipments(orderId),\n }),\n ratings: (orderId: string) =>\n queryOptions({\n queryKey: ['orders', 'ratings', orderId],\n queryFn: () => order.ratings(orderId),\n }),\n thankYou: (orderId: string) =>\n queryOptions({\n queryKey: ['orders', 'thankYou', orderId],\n queryFn: () => order.thankYou(orderId),\n }),\n },\n};\n"]}
@@ -3,11 +3,12 @@ var HookRegistry = class {
3
3
  constructor() {
4
4
  this.hooks = /* @__PURE__ */ new Map();
5
5
  this.subscribers = /* @__PURE__ */ new Map();
6
+ this.nextId = 0;
6
7
  }
7
8
  register(name, handler, priority = 50) {
8
9
  const hookName = typeof name === "string" ? name : name;
9
10
  const handlers = this.hooks.get(hookName) || [];
10
- handlers.push({ handler, priority });
11
+ handlers.push({ id: this.nextId++, handler, priority });
11
12
  handlers.sort((a, b) => b.priority - a.priority);
12
13
  this.hooks.set(hookName, handlers);
13
14
  this.notify(hookName);
@@ -62,5 +63,5 @@ function defineHooks(hooks) {
62
63
  }
63
64
 
64
65
  export { HookRegistry, defineHooks, hookRegistry };
65
- //# sourceMappingURL=chunk-J37AYLWL.js.map
66
- //# sourceMappingURL=chunk-J37AYLWL.js.map
66
+ //# sourceMappingURL=chunk-GU2KUQVD.js.map
67
+ //# sourceMappingURL=chunk-GU2KUQVD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/HookRegistry.ts"],"names":[],"mappings":"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","file":"chunk-GU2KUQVD.js","sourcesContent":["import type { HookHandler, HookDefinition, HookHandlers, HookName } from '../types';\n\n/**\n * HookRegistry - Manages hook handlers for the extension system\n *\n * Provides a central registry for registering, storing, and retrieving hook\n * handlers with priority-based execution order. Hooks allow extending functionality\n * without modifying core code.\n *\n * @example\n * ```ts\n * import { hookRegistry, defineHooks } from './hooks';\n *\n * // Register single hook\n * hookRegistry.register('header.before', ({ context }) => {\n * return <CustomHeader />;\n * }, 100);\n *\n * // Register multiple hooks at once\n * defineHooks({\n * 'header.before': {\n * handler: () => <Logo />,\n * priority: 50\n * },\n * 'header.after': [\n * { handler: () => <Search />, priority: 10 },\n * { handler: () => <CartIcon />, priority: 20 }\n * ]\n * });\n * ```\n */\nclass HookRegistry {\n private hooks = new Map<string, HookDefinition[]>();\n private subscribers = new Map<string, Set<() => void>>();\n private nextId = 0;\n\n register<T = Record<string, unknown>>(\n name: HookName | string,\n handler: HookHandler<T>,\n priority = 50\n ): void {\n const hookName = typeof name === 'string' ? name : name;\n const handlers = this.hooks.get(hookName) || [];\n handlers.push({ id: this.nextId++, handler: handler as HookHandler, priority });\n handlers.sort((a, b) => b.priority - a.priority);\n this.hooks.set(hookName, handlers);\n this.notify(hookName);\n }\n\n subscribe(name: HookName | string, callback: () => void): () => void {\n const hookName = typeof name === 'string' ? name : name;\n if (!this.subscribers.has(hookName)) {\n this.subscribers.set(hookName, new Set());\n }\n this.subscribers.get(hookName)!.add(callback);\n return () => this.unsubscribe(hookName, callback);\n }\n\n unsubscribe(name: HookName | string, callback: () => void): void {\n const hookName = typeof name === 'string' ? name : name;\n this.subscribers.get(hookName)?.delete(callback);\n }\n\n private notify(name: string): void {\n this.subscribers.get(name)?.forEach((cb) => cb());\n }\n\n getHandlers(name: HookName | string): HookDefinition[] {\n const hookName = typeof name === 'string' ? name : name;\n return this.hooks.get(hookName) || [];\n }\n\n has(name: HookName | string): boolean {\n const hookName = typeof name === 'string' ? name : name;\n return this.hooks.has(hookName) && this.hooks.get(hookName)!.length > 0;\n }\n\n clear(name: HookName | string): void {\n const hookName = typeof name === 'string' ? name : name;\n this.hooks.delete(hookName);\n this.notify(hookName);\n }\n\n clearAll(): void {\n this.hooks.clear();\n Array.from(this.subscribers.keys()).forEach((name) => this.notify(name));\n }\n\n list(): string[] {\n return Array.from(this.hooks.keys());\n }\n}\n\nexport const hookRegistry = new HookRegistry();\n\nexport function defineHooks(hooks: HookHandlers): void {\n for (const [name, definition] of Object.entries(hooks)) {\n if (Array.isArray(definition)) {\n definition.forEach(({ handler, priority }) => {\n hookRegistry.register(name, handler, priority);\n });\n } else {\n hookRegistry.register(name, definition);\n }\n }\n}\n\nexport { HookRegistry };\n"]}
@@ -42,10 +42,7 @@ var NextJsLinkAdapter = forwardRef(
42
42
  }
43
43
  );
44
44
  NextJsLinkAdapter.displayName = "NextJsLinkAdapter";
45
- function createNextJsLinkAdapter() {
46
- return NextJsLinkAdapter;
47
- }
48
45
 
49
- export { NextJsLinkAdapter, createNextJsLinkAdapter };
50
- //# sourceMappingURL=chunk-SVZOWI7E.js.map
51
- //# sourceMappingURL=chunk-SVZOWI7E.js.map
46
+ export { NextJsLinkAdapter };
47
+ //# sourceMappingURL=chunk-HTGBIA7K.js.map
48
+ //# sourceMappingURL=chunk-HTGBIA7K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nextjs/link.tsx"],"names":[],"mappings":";;;AAUO,IAAM,iBAAA,GAAoB,UAAA;AAAA,EAC/B,CACE;AAAA,IACE,EAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA,EAAS,CAAA;AAAA,IACT,OAAA;AAAA,IACA,YAAA,EAAc,SAAA;AAAA,IACd,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,IAAQ,GAAA;AAKlC,IAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAA2C;AAC9D,MAAA,IAAI,OAAA,IAAW,OAAO,MAAA,KAAW,WAAA,EAAa;AAC5C,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,IAAA,EAAM,EAAA,EAAI,WAAW,CAAA;AACjD,QAAA,MAAA,CAAO,aAAA,CAAc,IAAI,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,MACpD;AACA,MAAA,OAAA,GAAU,CAAC,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,OAAO,cAAc,GAAA,EAAK;AAAA,MACxB,GAAA;AAAA,MACA,IAAA,EAAM,WAAA;AAAA,MACN,SAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,YAAA,EAAc,SAAA;AAAA,MACd,GAAI,IAAA;AAAA,MACJ;AAAA,KACD,CAAA;AAAA,EACH;AACF;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA","file":"chunk-HTGBIA7K.js","sourcesContent":["import { forwardRef, createElement } from 'react';\nimport type { BaseLinkProps } from '../components/common/Link.types';\n\n/**\n * Next.js Link adapter.\n * Translates framework-agnostic props to Next.js Link props.\n *\n * Note: This adapter expects Next.js Link to be available via dynamic import\n * or provided by the consuming app.\n */\nexport const NextJsLinkAdapter = forwardRef<HTMLAnchorElement, BaseLinkProps>(\n (\n {\n to,\n href,\n children,\n className,\n style,\n title,\n target,\n rel,\n onClick,\n preload: _,\n replace,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n ) => {\n const destination = to ?? href ?? '/';\n\n // For Next.js, we use a simple anchor when running outside Next.js context\n // The actual Next.js Link would be used in a Next.js app\n // This provides a fallback that works everywhere\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (replace && typeof window !== 'undefined') {\n e.preventDefault();\n window.history.replaceState(null, '', destination);\n window.dispatchEvent(new PopStateEvent('popstate'));\n }\n onClick?.(e);\n };\n\n return createElement('a', {\n ref,\n href: destination,\n className,\n style,\n title,\n target,\n rel,\n onClick: handleClick,\n 'aria-label': ariaLabel,\n ...(rest as Record<string, unknown>),\n children,\n });\n }\n);\n\nNextJsLinkAdapter.displayName = 'NextJsLinkAdapter';\n\n/*\nexport function createNextJsLinkAdapter() {\n return NextJsLinkAdapter;\n}\n*/\n"]}
@@ -1,4 +1,4 @@
1
- import { configureNavigation, UnauthorizedError, NavigationProvider } from './chunk-JIJOXZPF.js';
1
+ import { configureNavigation, UnauthorizedError, NavigationProvider } from './chunk-2ZRLSZ4V.js';
2
2
  import { isLocale } from './chunk-T72DAX7R.js';
3
3
  import { LinkProvider } from './chunk-BYMOPN2S.js';
4
4
  import { useParams, Link, redirect, notFound, useNavigate } from '@tanstack/react-router';
@@ -85,5 +85,5 @@ function TanStackNavigationProvider({ children }) {
85
85
  }
86
86
 
87
87
  export { NavigationSetup, TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter };
88
- //# sourceMappingURL=chunk-ZZ7Q5LEG.js.map
89
- //# sourceMappingURL=chunk-ZZ7Q5LEG.js.map
88
+ //# sourceMappingURL=chunk-HWVEOUG4.js.map
89
+ //# sourceMappingURL=chunk-HWVEOUG4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tanstack/link.tsx","../src/tanstack/navigation.tsx"],"names":["TanStackLink","tanstackNotFound","tanstackRedirect","useParams"],"mappings":"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","file":"chunk-ZZ7Q5LEG.js","sourcesContent":["import { forwardRef, createElement } from 'react';\nimport { Link as TanStackLink, useParams } from '@tanstack/react-router';\nimport { isLocale } from '../providers/locale-constants';\nimport type { BaseLinkProps } from '../components/common/Link.types';\n\n/**\n * Routes live under an optional `/{-$locale}` param, so a bare `to=\"/brands\"`\n * resolves with the locale omitted and the $locale loader bounces the user to\n * the fallback locale. Prefix the current locale onto internal paths that\n * don't already carry one.\n */\nexport function localizeDestination(destination: string, locale?: string) {\n if (!locale || !destination.startsWith('/') || destination.startsWith('//')) return destination;\n const firstSegment = destination.split('/')[1]?.split(/[?#]/)[0];\n if (isLocale(firstSegment)) return destination;\n return destination === '/' ? `/${locale}` : `/${locale}${destination}`;\n}\n\n/**\n * TanStack Router Link adapter.\n * Translates framework-agnostic props to TanStack Router Link props.\n */\nexport const TanStackLinkAdapter = forwardRef<HTMLAnchorElement, BaseLinkProps>(\n (\n {\n to,\n href,\n children,\n className,\n style,\n title,\n target,\n rel,\n onClick,\n preload,\n replace,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n ) => {\n const { locale } = useParams({ strict: false }) as { locale?: string };\n const destination = localizeDestination(to ?? href ?? '/', locale);\n\n return createElement(\n TanStackLink,\n {\n ref,\n to: destination,\n className,\n style,\n title,\n target,\n rel,\n onClick,\n preload: preload === 'intent' ? 'intent' : undefined,\n replace,\n 'aria-label': ariaLabel,\n ...(rest as Record<string, unknown>),\n },\n children\n );\n }\n);\n\nTanStackLinkAdapter.displayName = 'TanStackLinkAdapter';\n\n/**\n * Create a TanStack Router Link adapter component.\n */\nexport function createTanStackLinkAdapter() {\n return TanStackLinkAdapter;\n}\n","import {\n useNavigate,\n useParams,\n redirect as tanstackRedirect,\n notFound as tanstackNotFound,\n} from '@tanstack/react-router';\nimport {\n NavigationProvider,\n configureNavigation,\n type NavigateOptions,\n} from '../providers/NavigationProvider';\nimport { LinkProvider } from '../providers/LinkProvider';\nimport { TanStackLinkAdapter, localizeDestination } from './link';\nimport { useCallback, type ReactNode } from 'react';\nimport { UnauthorizedError } from '../providers/NavigationProvider';\n\nconfigureNavigation({\n notFound: (message?: string) => {\n throw tanstackNotFound({ data: message });\n },\n redirect: (path: string, opts?: { replace?: boolean }) => {\n throw tanstackRedirect({ to: path, replace: opts?.replace });\n },\n unauthorized: (message?: string) => {\n throw new UnauthorizedError(message);\n },\n});\n\n/**\n * TanStack navigation setup - wraps children with NavigationProvider and LinkProvider.\n * Called by TwilightProvider when client.framework === 'tanstack'.\n */\nexport function NavigationSetup({ children }: { children: ReactNode }) {\n const navigate = useNavigate();\n const { locale } = useParams({ strict: false }) as { locale?: string };\n const navigateFn = useCallback(\n (to: string, opts?: NavigateOptions) =>\n navigate({ to: localizeDestination(to, locale), replace: opts?.replace }),\n [navigate, locale]\n );\n\n return (\n <NavigationProvider navigate={navigateFn}>\n <LinkProvider adapter={TanStackLinkAdapter}>{children}</LinkProvider>\n </NavigationProvider>\n );\n}\n\n/** @deprecated Use NavigationSetup instead */\nexport function TanStackNavigationProvider({ children }: { children: ReactNode }) {\n const navigate = useNavigate();\n return (\n <NavigationProvider\n navigate={(to: string, opts?: NavigateOptions) => navigate({ to, replace: opts?.replace })}\n >\n <LinkProvider adapter={TanStackLinkAdapter}>{children}</LinkProvider>\n </NavigationProvider>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/tanstack/link.tsx","../src/tanstack/navigation.tsx"],"names":["TanStackLink","tanstackNotFound","tanstackRedirect","useParams"],"mappings":"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","file":"chunk-HWVEOUG4.js","sourcesContent":["import { forwardRef, createElement } from 'react';\nimport { Link as TanStackLink, useParams } from '@tanstack/react-router';\nimport { isLocale } from '../providers/locale-constants';\nimport type { BaseLinkProps } from '../components/common/Link.types';\n\n/**\n * Routes live under an optional `/{-$locale}` param, so a bare `to=\"/brands\"`\n * resolves with the locale omitted and the $locale loader bounces the user to\n * the fallback locale. Prefix the current locale onto internal paths that\n * don't already carry one.\n */\nexport function localizeDestination(destination: string, locale?: string) {\n if (!locale || !destination.startsWith('/') || destination.startsWith('//')) return destination;\n const firstSegment = destination.split('/')[1]?.split(/[?#]/)[0];\n if (isLocale(firstSegment)) return destination;\n return destination === '/' ? `/${locale}` : `/${locale}${destination}`;\n}\n\n/**\n * TanStack Router Link adapter.\n * Translates framework-agnostic props to TanStack Router Link props.\n */\nexport const TanStackLinkAdapter = forwardRef<HTMLAnchorElement, BaseLinkProps>(\n (\n {\n to,\n href,\n children,\n className,\n style,\n title,\n target,\n rel,\n onClick,\n preload,\n replace,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n ) => {\n const { locale } = useParams({ strict: false }) as { locale?: string };\n const destination = localizeDestination(to ?? href ?? '/', locale);\n\n return createElement(\n TanStackLink,\n {\n ref,\n to: destination,\n className,\n style,\n title,\n target,\n rel,\n onClick,\n preload: preload === 'intent' ? 'intent' : undefined,\n replace,\n 'aria-label': ariaLabel,\n ...(rest as Record<string, unknown>),\n },\n children\n );\n }\n);\n\nTanStackLinkAdapter.displayName = 'TanStackLinkAdapter';\n\n/**\n * Create a TanStack Router Link adapter component.\n */\nexport function createTanStackLinkAdapter() {\n return TanStackLinkAdapter;\n}\n","import {\n useNavigate,\n useParams,\n redirect as tanstackRedirect,\n notFound as tanstackNotFound,\n} from '@tanstack/react-router';\nimport {\n NavigationProvider,\n configureNavigation,\n type NavigateOptions,\n} from '../providers/NavigationProvider';\nimport { LinkProvider } from '../providers/LinkProvider';\nimport { TanStackLinkAdapter, localizeDestination } from './link';\nimport { useCallback, type ReactNode } from 'react';\nimport { UnauthorizedError } from '../providers/NavigationProvider';\n\nconfigureNavigation({\n notFound: (message?: string) => {\n throw tanstackNotFound({ data: message });\n },\n redirect: (path: string, opts?: { replace?: boolean }) => {\n throw tanstackRedirect({ to: path, replace: opts?.replace });\n },\n unauthorized: (message?: string) => {\n throw new UnauthorizedError(message);\n },\n});\n\n/**\n * TanStack navigation setup - wraps children with NavigationProvider and LinkProvider.\n * Called by TwilightProvider when client.framework === 'tanstack'.\n */\nexport function NavigationSetup({ children }: { children: ReactNode }) {\n const navigate = useNavigate();\n const { locale } = useParams({ strict: false }) as { locale?: string };\n const navigateFn = useCallback(\n (to: string, opts?: NavigateOptions) =>\n navigate({ to: localizeDestination(to, locale), replace: opts?.replace }),\n [navigate, locale]\n );\n\n return (\n <NavigationProvider navigate={navigateFn}>\n <LinkProvider adapter={TanStackLinkAdapter}>{children}</LinkProvider>\n </NavigationProvider>\n );\n}\n\n/** @deprecated Use NavigationSetup instead */\nexport function TanStackNavigationProvider({ children }: { children: ReactNode }) {\n const navigate = useNavigate();\n return (\n <NavigationProvider\n navigate={(to: string, opts?: NavigateOptions) => navigate({ to, replace: opts?.replace })}\n >\n <LinkProvider adapter={TanStackLinkAdapter}>{children}</LinkProvider>\n </NavigationProvider>\n );\n}\n"]}
@@ -69,10 +69,16 @@ function Modal({
69
69
  {
70
70
  className: `fixed inset-0 z-50 flex justify-center ${positionClasses[position]}`,
71
71
  onClick: handleBackdropClick,
72
+ onKeyDown: (e) => {
73
+ if ((e.key === "Enter" || e.key === " ") && closeOnBackdropClick) {
74
+ e.preventDefault();
75
+ onClose();
76
+ }
77
+ },
72
78
  "aria-modal": "true",
73
79
  role: "dialog",
74
80
  children: [
75
- /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-black/50 transition-opacity" }),
81
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-black/50 transition-opacity", role: "presentation" }),
76
82
  /* @__PURE__ */ jsx(
77
83
  "div",
78
84
  {
@@ -141,5 +147,5 @@ Modal.Footer = function ModalFooter({ children, className, ...props }) {
141
147
  };
142
148
 
143
149
  export { Modal };
144
- //# sourceMappingURL=chunk-3UHSMGPY.js.map
145
- //# sourceMappingURL=chunk-3UHSMGPY.js.map
150
+ //# sourceMappingURL=chunk-HX3YKS5W.js.map
151
+ //# sourceMappingURL=chunk-HX3YKS5W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/modal/Modal.tsx"],"names":[],"mappings":"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","file":"chunk-HX3YKS5W.js","sourcesContent":["/**\n * Modal Component\n *\n * A controlled modal dialog with backdrop, close button, and keyboard support.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const [isOpen, setIsOpen] = useState(false);\n *\n * return (\n * <>\n * <button onClick={() => setIsOpen(true)}>Open Modal</button>\n * <Modal isOpen={isOpen} onClose={() => setIsOpen(false)}>\n * <Modal.Header>Modal Title</Modal.Header>\n * <Modal.Body>Modal content here</Modal.Body>\n * <Modal.Footer>\n * <Button onClick={() => setIsOpen(false)}>Close</Button>\n * </Modal.Footer>\n * </Modal>\n * </>\n * );\n * }\n * ```\n */\n\nimport React, { useEffect, useCallback, useRef, type ReactNode, type HTMLAttributes } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n children: ReactNode;\n /**\n * Close modal when clicking backdrop\n * @default true\n */\n closeOnBackdropClick?: boolean;\n /**\n * Close modal on Escape key\n * @default true\n */\n closeOnEscape?: boolean;\n /**\n * Prevent body scroll when modal is open\n * @default true\n */\n preventBodyScroll?: boolean;\n /**\n * Size of the modal\n * @default 'md'\n */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /**\n * Position of the modal\n * @default 'center'\n */\n position?: 'center' | 'top';\n /**\n * Additional className for the modal content\n */\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n full: 'max-w-full mx-4',\n};\n\nconst positionClasses = {\n center: 'items-center',\n top: 'items-start pt-10',\n};\n\nexport function Modal({\n isOpen,\n onClose,\n children,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n preventBodyScroll = true,\n size = 'md',\n position = 'center',\n className,\n}: ModalProps) {\n const modalRef = useRef<HTMLDivElement>(null);\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n // Handle Escape key\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape' && closeOnEscape) {\n onClose();\n }\n },\n [closeOnEscape, onClose]\n );\n\n // Handle backdrop click\n const handleBackdropClick = useCallback(\n (event: React.MouseEvent) => {\n if (closeOnBackdropClick && event.target === event.currentTarget) {\n onClose();\n }\n },\n [closeOnBackdropClick, onClose]\n );\n\n // Focus management and body scroll\n useEffect(() => {\n if (isOpen) {\n // Store the previously focused element\n previousActiveElement.current = document.activeElement as HTMLElement;\n\n // Focus the modal\n modalRef.current?.focus();\n\n // Prevent body scroll\n if (preventBodyScroll) {\n document.body.classList.add('menu-opened');\n }\n\n // Add keyboard listener\n document.addEventListener('keydown', handleKeyDown);\n }\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n\n // Restore body scroll\n if (preventBodyScroll) {\n document.body.classList.remove('menu-opened');\n }\n\n // Restore focus\n previousActiveElement.current?.focus();\n };\n }, [isOpen, handleKeyDown, preventBodyScroll]);\n\n if (!isOpen || typeof document === 'undefined') {\n return null;\n }\n\n return createPortal(\n <div\n className={`fixed inset-0 z-50 flex justify-center ${positionClasses[position]}`}\n onClick={handleBackdropClick}\n onKeyDown={(e) => {\n if ((e.key === 'Enter' || e.key === ' ') && closeOnBackdropClick) {\n e.preventDefault();\n onClose();\n }\n }}\n aria-modal=\"true\"\n role=\"dialog\"\n >\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-black/50 transition-opacity\" role=\"presentation\" />\n\n {/* Modal Content */}\n <div\n ref={modalRef}\n tabIndex={-1}\n className={`relative z-10 w-full rounded-lg bg-white shadow-xl transform transition-all duration-200 ease-out ${sizeClasses[size]} ${isOpen ? 'scale-100 opacity-100' : 'scale-95 opacity-0'} ${className || ''}`}\n >\n {children}\n </div>\n </div>,\n document.body\n );\n}\n\n// Modal Sub-components\nexport interface ModalHeaderProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n showCloseButton?: boolean;\n onClose?: () => void;\n}\n\nModal.Header = function ModalHeader({\n children,\n showCloseButton = true,\n onClose,\n className,\n ...props\n}: ModalHeaderProps) {\n return (\n <div\n className={`flex items-center justify-between border-b border-gray-200 px-6 py-4 ${className || ''}`}\n {...props}\n >\n <h2 className=\"text-lg font-semibold text-gray-900\">{children}</h2>\n {showCloseButton && onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"rounded-md text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-gray-500\"\n >\n <span className=\"sr-only\">Close</span>\n <svg className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n};\n\nexport interface ModalBodyProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nModal.Body = function ModalBody({ children, className, ...props }: ModalBodyProps) {\n return (\n <div className={`px-6 py-4 ${className || ''}`} {...props}>\n {children}\n </div>\n );\n};\n\nexport interface ModalFooterProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nModal.Footer = function ModalFooter({ children, className, ...props }: ModalFooterProps) {\n return (\n <div\n className={`flex items-center justify-end gap-3 border-t border-gray-200 px-6 py-4 ${className || ''}`}\n {...props}\n >\n {children}\n </div>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { user } from './chunk-Q6MQLAYL.js';
2
- import { getTwilightContext } from './chunk-W4CSWDEH.js';
1
+ import { user } from './chunk-TCSNNCRH.js';
2
+ import { getTwilightContext } from './chunk-KIPZQN3Y.js';
3
3
  import { useQuery } from '@tanstack/react-query';
4
4
 
5
5
  function useUser() {
@@ -13,5 +13,5 @@ function useUser() {
13
13
  }
14
14
 
15
15
  export { useUser };
16
- //# sourceMappingURL=chunk-WA5QBFRU.js.map
17
- //# sourceMappingURL=chunk-WA5QBFRU.js.map
16
+ //# sourceMappingURL=chunk-I5Z4NJBB.js.map
17
+ //# sourceMappingURL=chunk-I5Z4NJBB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useUser.ts"],"names":[],"mappings":";;;;AAUO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,KAAA,GAAQ,oBAAmB,CAAE,SAAA;AAEnC,EAAA,MAAM,QAAQ,QAAA,CAAS;AAAA,IACrB,GAAG,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAQ;AAAA,IACxB,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,IACX,eAAA,EAAiB;AAAA,GAClB,CAAA;AAED,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAC,CAAC,KAAA,EAAM;AACzC","file":"chunk-WA5QBFRU.js","sourcesContent":["import { useQuery, type UseQueryResult } from '@tanstack/react-query';\nimport { getTwilightContext } from '../twilight/context';\nimport { user } from '../api/user';\nimport type { User } from '../types';\n\nexport type UseUserReturn = UseQueryResult<User | null> & {\n /** True when an auth token exists (regardless of query state). */\n isLoggedIn: boolean;\n};\n\nexport function useUser(): UseUserReturn {\n const token = getTwilightContext().authToken;\n\n const query = useQuery({\n ...user.queries.current(),\n enabled: !!token,\n placeholderData: null,\n });\n\n return { ...query, isLoggedIn: !!token };\n}\n"]}
1
+ {"version":3,"sources":["../src/hooks/useUser.ts"],"names":[],"mappings":";;;;AAUO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,KAAA,GAAQ,oBAAmB,CAAE,SAAA;AAEnC,EAAA,MAAM,QAAQ,QAAA,CAAS;AAAA,IACrB,GAAG,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAQ;AAAA,IACxB,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,IACX,eAAA,EAAiB;AAAA,GAClB,CAAA;AAED,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,CAAC,CAAC,KAAA,EAAM;AACzC","file":"chunk-I5Z4NJBB.js","sourcesContent":["import { useQuery, type UseQueryResult } from '@tanstack/react-query';\nimport { getTwilightContext } from '../twilight/context';\nimport { user } from '../api/user';\nimport type { User } from '../types';\n\nexport type UseUserReturn = UseQueryResult<User | null> & {\n /** True when an auth token exists (regardless of query state). */\n isLoggedIn: boolean;\n};\n\nexport function useUser(): UseUserReturn {\n const token = getTwilightContext().authToken;\n\n const query = useQuery({\n ...user.queries.current(),\n enabled: !!token,\n placeholderData: null,\n });\n\n return { ...query, isLoggedIn: !!token };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { orThrow } from './chunk-JIJOXZPF.js';
2
- import { getActiveScopeId, api } from './chunk-TQUHDSKQ.js';
1
+ import { orThrow } from './chunk-2ZRLSZ4V.js';
2
+ import { getActiveScopeId, api } from './chunk-2TB2LTL2.js';
3
3
  import { queryOptions } from '@tanstack/react-query';
4
4
 
5
5
  var category = {
@@ -26,5 +26,5 @@ var category = {
26
26
  };
27
27
 
28
28
  export { category };
29
- //# sourceMappingURL=chunk-TWAHYRKI.js.map
30
- //# sourceMappingURL=chunk-TWAHYRKI.js.map
29
+ //# sourceMappingURL=chunk-IWMGDYNN.js.map
30
+ //# sourceMappingURL=chunk-IWMGDYNN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/category.ts"],"names":[],"mappings":";;;;AAKO,IAAM,QAAA,GAAW;AAAA,EACtB,IAAA,EAAM,OAAO,EAAA,KAAkC;AAC7C,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAI,CAAA,WAAA,EAAc,EAAE,CAAA,CAAE,CAAA,CAAE,IAAA,EAAyB;AAC5E,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAAA,EAEA,aAAa,CAAC,EAAA,KAAkC,QAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,EAEzE,MAAM,YAAiC;AACrC,IAAA,MAAM,EAAE,MAAK,GAAI,MAAM,IAAI,GAAA,CAAI,YAAY,EAAE,IAAA,EAA2B;AACxE,IAAA,OAAO,QAAQ,EAAC;AAAA,EAClB,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,EAAA,KACP,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,YAAA,EAAc,QAAA,EAAU,EAAE,CAAA;AAAA,MACrC,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,EAAE;AAAA,KAChC,CAAA;AAAA,IAEH,IAAA,EAAM,MACJ,YAAA,CAAa;AAAA;AAAA,MAEX,QAAA,EAAU,CAAC,YAAA,EAAc,MAAA,EAAQ,EAAE,KAAA,EAAO,gBAAA,IAAoB,CAAA;AAAA,MAC9D,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA;AAAK,KAC9B;AAAA;AAEP","file":"chunk-IWMGDYNN.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api, getActiveScopeId } from './client';\nimport type { Category } from '../types';\nimport { orThrow } from '../providers/NavigationProvider';\n\nexport const category = {\n find: async (id: string): Promise<Category> => {\n const { data } = await api.get(`categories/${id}`).json<{ data: Category }>();\n return data;\n },\n\n findOrThrow: (id: string): Promise<Category> => orThrow(category.find(id)),\n\n list: async (): Promise<Category[]> => {\n const { data } = await api.get('categories').json<{ data: Category[] }>();\n return data ?? [];\n },\n\n queries: {\n detail: (id: string) =>\n queryOptions({\n queryKey: ['categories', 'detail', id],\n queryFn: () => category.find(id),\n }),\n\n list: () =>\n queryOptions({\n // Scope (branch) varies the API response — key must include it.\n queryKey: ['categories', 'list', { scope: getActiveScopeId() }],\n queryFn: () => category.list(),\n }),\n },\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { useTranslation } from './chunk-VVRYP6IL.js';
1
+ import { useTranslation } from './chunk-TYNZ5B2B.js';
2
2
  import { Link } from './chunk-AXW67SY7.js';
3
3
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
4
4
 
@@ -16,5 +16,5 @@ function Copyright({ storeName = "" }) {
16
16
  }
17
17
 
18
18
  export { Copyright };
19
- //# sourceMappingURL=chunk-TFZ2RT6P.js.map
20
- //# sourceMappingURL=chunk-TFZ2RT6P.js.map
19
+ //# sourceMappingURL=chunk-JKIRRMBU.js.map
20
+ //# sourceMappingURL=chunk-JKIRRMBU.js.map
@@ -0,0 +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":"chunk-JKIRRMBU.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,4 +1,4 @@
1
- import { api } from './chunk-TQUHDSKQ.js';
1
+ import { api } from './chunk-2TB2LTL2.js';
2
2
  import { queryOptions } from '@tanstack/react-query';
3
3
 
4
4
  var home = {
@@ -15,5 +15,5 @@ var home = {
15
15
  };
16
16
 
17
17
  export { home };
18
- //# sourceMappingURL=chunk-YU36GBMB.js.map
19
- //# sourceMappingURL=chunk-YU36GBMB.js.map
18
+ //# sourceMappingURL=chunk-KCKHA75V.js.map
19
+ //# sourceMappingURL=chunk-KCKHA75V.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/home.ts"],"names":[],"mappings":";;;AAIO,IAAM,IAAA,GAAO;AAAA,EAClB,YAAY,YAA0C;AACpD,IAAA,MAAM,EAAE,MAAK,GAAI,MAAM,IAAI,GAAA,CAAI,gBAAgB,EAAE,IAAA,EAAoC;AACrF,IAAA,OAAO,QAAQ,EAAC;AAAA,EAClB,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,MACV,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA;AAAW,KAChC;AAAA;AAEP","file":"chunk-YU36GBMB.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { HomeComponentData } from '../types';\n\nexport const home = {\n components: async (): Promise<HomeComponentData[]> => {\n const { data } = await api.get('component/list').json<{ data: HomeComponentData[] }>();\n return data ?? [];\n },\n\n queries: {\n components: () =>\n queryOptions({\n queryKey: ['home', 'components'],\n queryFn: () => home.components(),\n }),\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/api/home.ts"],"names":[],"mappings":";;;AAIO,IAAM,IAAA,GAAO;AAAA,EAClB,YAAY,YAA0C;AACpD,IAAA,MAAM,EAAE,MAAK,GAAI,MAAM,IAAI,GAAA,CAAI,gBAAgB,EAAE,IAAA,EAAoC;AACrF,IAAA,OAAO,QAAQ,EAAC;AAAA,EAClB,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,MACV,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA;AAAW,KAChC;AAAA;AAEP","file":"chunk-KCKHA75V.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { api } from './client';\nimport type { HomeComponentData } from '../types';\n\nexport const home = {\n components: async (): Promise<HomeComponentData[]> => {\n const { data } = await api.get('component/list').json<{ data: HomeComponentData[] }>();\n return data ?? [];\n },\n\n queries: {\n components: () =>\n queryOptions({\n queryKey: ['home', 'components'],\n queryFn: () => home.components(),\n }),\n },\n};\n"]}
@@ -49,7 +49,6 @@ var DEFAULT_DATA = {
49
49
  routeId: "",
50
50
  location: { ...DEFAULT_LOCATION },
51
51
  authToken: null,
52
- isMobile: false,
53
52
  scopeId: null,
54
53
  i18n: void 0,
55
54
  page: void 0
@@ -82,7 +81,6 @@ function mergeIntoStore(store, partial) {
82
81
  store.location = { ...store.location, ...partial.location };
83
82
  if ("authToken" in partial && partial.authToken !== void 0)
84
83
  store.authToken = partial.authToken ?? null;
85
- if ("isMobile" in partial) store.isMobile = partial.isMobile ?? false;
86
84
  if ("scopeId" in partial && partial.scopeId !== void 0)
87
85
  store.scopeId = partial.scopeId ?? null;
88
86
  if ("i18n" in partial && partial.i18n != null) store.i18n = partial.i18n;
@@ -133,9 +131,6 @@ function getTwilightContext() {
133
131
  get authToken() {
134
132
  return data.authToken;
135
133
  },
136
- get isMobile() {
137
- return data.isMobile;
138
- },
139
134
  get scopeId() {
140
135
  return data.scopeId;
141
136
  },
@@ -159,5 +154,5 @@ function getTwilightContext() {
159
154
  }
160
155
 
161
156
  export { SettingsError, createI18nInstance, getTwilightContext, runWithTwilightContext, subscribeTwilight, updateTwilightContext };
162
- //# sourceMappingURL=chunk-W4CSWDEH.js.map
163
- //# sourceMappingURL=chunk-W4CSWDEH.js.map
157
+ //# sourceMappingURL=chunk-KIPZQN3Y.js.map
158
+ //# sourceMappingURL=chunk-KIPZQN3Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/errors.ts","../src/providers/i18n-factory.ts","../src/twilight/context.ts"],"names":[],"mappings":"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","file":"chunk-KIPZQN3Y.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 { 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';\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 scopeId: string | null;\n i18n: i18n;\n dir: 'ltr' | 'rtl';\n page?: PageContext;\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 scopeId: string | null;\n i18n?: i18n;\n page?: PageContext;\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 scopeId: 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 ('scopeId' in partial && partial.scopeId !== undefined)\n store.scopeId = partial.scopeId ?? null;\n if ('i18n' in partial && partial.i18n != null) store.i18n = partial.i18n;\n if ('page' in partial) store.page = partial.page;\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\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 scopeId() {\n return data.scopeId;\n },\n get i18n() {\n if (!data.i18n) {\n const translations = data.queryClient?.getQueryData(['translations']) as\n | TranslationMessages\n | 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 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"]}
@@ -1,4 +1,4 @@
1
- import { cdn } from './chunk-TQUHDSKQ.js';
1
+ import { cdn } from './chunk-2TB2LTL2.js';
2
2
  import { queryOptions } from '@tanstack/react-query';
3
3
 
4
4
  var TRANSLATIONS_CDN_FALLBACK = "js/translations.json";
@@ -21,5 +21,5 @@ var translations = {
21
21
  };
22
22
 
23
23
  export { translations };
24
- //# sourceMappingURL=chunk-2SUOZEX2.js.map
25
- //# sourceMappingURL=chunk-2SUOZEX2.js.map
24
+ //# sourceMappingURL=chunk-KJRALAYM.js.map
25
+ //# sourceMappingURL=chunk-KJRALAYM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/translations.ts"],"names":[],"mappings":";;;AAIA,IAAM,yBAAA,GAA4B,sBAAA;AAC3B,IAAM,YAAA,GAAe;AAAA,EAC1B,KAAK,YAAiD;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAChB,GAAA,CAAI,yBAAA,EAA2B,EAAE,OAAA,EAAS,GAAA,EAAM,CAAA,CAChD,IAAA,EAA0B;AAC7B,MAAA,OAAO,IAAA,IAAQ,IAAA;AAAA,IACjB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,KAAK,gDAAgD,CAAA;AAC7D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU,MACR,YAAA,CAAa;AAAA,MACX,QAAA,EAAU,CAAC,cAAc,CAAA;AAAA,MACzB,OAAA,EAAS,MAAM,YAAA,CAAa,GAAA;AAAI,KACjC;AAAA;AAEP","file":"chunk-KJRALAYM.js","sourcesContent":["import { queryOptions } from '@tanstack/react-query';\nimport { cdn } from './client';\nimport type { TranslationMessages } from '../providers/I18nProvider';\n\nconst TRANSLATIONS_CDN_FALLBACK = 'js/translations.json';\nexport const translations = {\n get: async (): Promise<TranslationMessages | null> => {\n try {\n const data = await cdn\n .get(TRANSLATIONS_CDN_FALLBACK, { timeout: 5000 })\n .json<TranslationMessages>();\n return data ?? null;\n } catch {\n console.warn('[translations.get] Failed to load translations');\n return null;\n }\n },\n\n queries: {\n byLocale: () =>\n queryOptions({\n queryKey: ['translations'],\n queryFn: () => translations.get(),\n }),\n },\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { getActiveScopeId, api } from './chunk-TQUHDSKQ.js';
2
- import { getTwilightContext } from './chunk-W4CSWDEH.js';
1
+ import { getActiveScopeId, api } from './chunk-2TB2LTL2.js';
2
+ import { getTwilightContext } from './chunk-KIPZQN3Y.js';
3
3
  import { queryOptions } from '@tanstack/react-query';
4
4
 
5
5
  var DEFAULT_INCLUDE_ITEMS = [
@@ -76,5 +76,5 @@ var store = {
76
76
  };
77
77
 
78
78
  export { resolveStoreIdentifier, store };
79
- //# sourceMappingURL=chunk-O7Z6BIPP.js.map
80
- //# sourceMappingURL=chunk-O7Z6BIPP.js.map
79
+ //# sourceMappingURL=chunk-LSDIFHXZ.js.map
80
+ //# sourceMappingURL=chunk-LSDIFHXZ.js.map