@salla.sa/twilight-theme-engine 1.0.37 → 1.0.38

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 (143) hide show
  1. package/dist/{AddToCartForm-BAXWUVBW.js → AddToCartForm-NS4UB73S.js} +3 -3
  2. package/dist/{AddToCartForm-BAXWUVBW.js.map → AddToCartForm-NS4UB73S.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-C7ENIUKC.js → BlogAuthorPage-Z7VWPXE5.js} +7 -7
  4. package/dist/{BlogAuthorPage-C7ENIUKC.js.map → BlogAuthorPage-Z7VWPXE5.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-QODJTKFE.js → BlogCategoryPage-ZB5IQAHL.js} +7 -7
  6. package/dist/{BlogCategoryPage-QODJTKFE.js.map → BlogCategoryPage-ZB5IQAHL.js.map} +1 -1
  7. package/dist/{BlogPage-N5BKRIWD.js → BlogPage-IQQWDW4A.js} +6 -6
  8. package/dist/{BlogPage-N5BKRIWD.js.map → BlogPage-IQQWDW4A.js.map} +1 -1
  9. package/dist/{BlogSinglePage-HVSCXCCV.js → BlogSinglePage-YXMOWFET.js} +6 -6
  10. package/dist/{BlogSinglePage-HVSCXCCV.js.map → BlogSinglePage-YXMOWFET.js.map} +1 -1
  11. package/dist/{BlogTagPage-YXYYHD5S.js → BlogTagPage-6ZNUK36E.js} +7 -7
  12. package/dist/{BlogTagPage-YXYYHD5S.js.map → BlogTagPage-6ZNUK36E.js.map} +1 -1
  13. package/dist/{BrandsPage-UP3HKHGR.js → BrandsPage-SRSDK6DP.js} +6 -6
  14. package/dist/{BrandsPage-UP3HKHGR.js.map → BrandsPage-SRSDK6DP.js.map} +1 -1
  15. package/dist/{Breadcrumb-5464BOGG.js → Breadcrumb-DNLZTRKM.js} +6 -6
  16. package/dist/{Breadcrumb-5464BOGG.js.map → Breadcrumb-DNLZTRKM.js.map} +1 -1
  17. package/dist/{CartItem-TARZW35A.js → CartItem-RVA2ZQGR.js} +6 -6
  18. package/dist/{CartItem-TARZW35A.js.map → CartItem-RVA2ZQGR.js.map} +1 -1
  19. package/dist/{CartSummary-2KSBKQM7.js → CartSummary-EDCVRCEG.js} +6 -6
  20. package/dist/{CartSummary-2KSBKQM7.js.map → CartSummary-EDCVRCEG.js.map} +1 -1
  21. package/dist/{Copyright-2D7W6OS4.js → Copyright-E3L2IWRR.js} +3 -3
  22. package/dist/{Copyright-2D7W6OS4.js.map → Copyright-E3L2IWRR.js.map} +1 -1
  23. package/dist/{CustomerLayout-Z3JGXMO7.js → CustomerLayout-4MWXBPRF.js} +6 -6
  24. package/dist/{CustomerLayout-Z3JGXMO7.js.map → CustomerLayout-4MWXBPRF.js.map} +1 -1
  25. package/dist/{Footer-DFZFOH5E.js → Footer-6CAS63OH.js} +6 -6
  26. package/dist/{Footer-DFZFOH5E.js.map → Footer-6CAS63OH.js.map} +1 -1
  27. package/dist/{Header-CF5TQMWR.js → Header-DNTX6HW4.js} +4 -4
  28. package/dist/{Header-CF5TQMWR.js.map → Header-DNTX6HW4.js.map} +1 -1
  29. package/dist/{LoyaltyPage-TOXOPXEU.js → LoyaltyPage-NRKL6GTJ.js} +6 -6
  30. package/dist/{LoyaltyPage-TOXOPXEU.js.map → LoyaltyPage-NRKL6GTJ.js.map} +1 -1
  31. package/dist/{MainMenu-6VTPCMMJ.js → MainMenu-P5BQYKOA.js} +3 -3
  32. package/dist/{MainMenu-6VTPCMMJ.js.map → MainMenu-P5BQYKOA.js.map} +1 -1
  33. package/dist/{MasterLayout-PQ2XGL6A.js → MasterLayout-YHPOUKFI.js} +6 -6
  34. package/dist/{MasterLayout-PQ2XGL6A.js.map → MasterLayout-YHPOUKFI.js.map} +1 -1
  35. package/dist/{MobileMenu-UWDB2BHQ.js → MobileMenu-EC7EBF5I.js} +6 -6
  36. package/dist/{MobileMenu-UWDB2BHQ.js.map → MobileMenu-EC7EBF5I.js.map} +1 -1
  37. package/dist/{NotificationsPage-3WUAFRTU.js → NotificationsPage-G2Z6UV6J.js} +6 -6
  38. package/dist/{NotificationsPage-3WUAFRTU.js.map → NotificationsPage-G2Z6UV6J.js.map} +1 -1
  39. package/dist/{OrderSinglePage-T2UE2EJI.js → OrderSinglePage-BULRAABK.js} +6 -6
  40. package/dist/{OrderSinglePage-T2UE2EJI.js.map → OrderSinglePage-BULRAABK.js.map} +1 -1
  41. package/dist/{OrdersPage-762O24YK.js → OrdersPage-YFNYQREC.js} +6 -6
  42. package/dist/{OrdersPage-762O24YK.js.map → OrdersPage-YFNYQREC.js.map} +1 -1
  43. package/dist/{PageSingle-Y6IVAY3E.js → PageSingle-EQPKQGNU.js} +3 -3
  44. package/dist/{PageSingle-Y6IVAY3E.js.map → PageSingle-EQPKQGNU.js.map} +1 -1
  45. package/dist/{ProductDetails-7G7QOLTB.js → ProductDetails-GR5PQOHW.js} +3 -3
  46. package/dist/{ProductDetails-7G7QOLTB.js.map → ProductDetails-GR5PQOHW.js.map} +1 -1
  47. package/dist/{ProfilePage-H2JWTJJY.js → ProfilePage-YMLTVERJ.js} +6 -6
  48. package/dist/{ProfilePage-H2JWTJJY.js.map → ProfilePage-YMLTVERJ.js.map} +1 -1
  49. package/dist/{SeoCartWidget-XYWATIV3.js → SeoCartWidget-PZXSPNZI.js} +6 -6
  50. package/dist/{SeoCartWidget-XYWATIV3.js.map → SeoCartWidget-PZXSPNZI.js.map} +1 -1
  51. package/dist/{SettingsPage-WQX22FTS.js → SettingsPage-4T6VLWRX.js} +6 -6
  52. package/dist/{SettingsPage-WQX22FTS.js.map → SettingsPage-4T6VLWRX.js.map} +1 -1
  53. package/dist/{StoreClosedNotification-TL4XY6OS.js → StoreClosedNotification-JK4VNQJJ.js} +7 -7
  54. package/dist/{StoreClosedNotification-TL4XY6OS.js.map → StoreClosedNotification-JK4VNQJJ.js.map} +1 -1
  55. package/dist/{TestimonialsPage-PWVTHBOS.js → TestimonialsPage-NMHIF3RD.js} +3 -3
  56. package/dist/{TestimonialsPage-PWVTHBOS.js.map → TestimonialsPage-NMHIF3RD.js.map} +1 -1
  57. package/dist/{ThankYouPage-C573J2KJ.js → ThankYouPage-UYWL3TLE.js} +6 -6
  58. package/dist/{ThankYouPage-C573J2KJ.js.map → ThankYouPage-UYWL3TLE.js.map} +1 -1
  59. package/dist/{WalletPage-7JE6PELL.js → WalletPage-SE7QXD2E.js} +6 -6
  60. package/dist/{WalletPage-7JE6PELL.js.map → WalletPage-SE7QXD2E.js.map} +1 -1
  61. package/dist/{WishlistPage-XTQ6IRG7.js → WishlistPage-KIXGHGO3.js} +8 -7
  62. package/dist/WishlistPage-KIXGHGO3.js.map +1 -0
  63. package/dist/api/product.d.ts +40 -12
  64. package/dist/api/product.d.ts.map +1 -1
  65. package/dist/api/product.js +1 -1
  66. package/dist/api/wishlist.d.ts +10 -4
  67. package/dist/api/wishlist.d.ts.map +1 -1
  68. package/dist/api/wishlist.js +5 -1
  69. package/dist/{chunk-SSRNIBVV.js → chunk-3U26OMNO.js} +4 -4
  70. package/dist/chunk-3U26OMNO.js.map +1 -0
  71. package/dist/{chunk-XLVAVCUV.js → chunk-46W6R5ZI.js} +5 -5
  72. package/dist/{chunk-XLVAVCUV.js.map → chunk-46W6R5ZI.js.map} +1 -1
  73. package/dist/{chunk-FKOBOGLQ.js → chunk-4F6BCPN4.js} +4 -4
  74. package/dist/{chunk-FKOBOGLQ.js.map → chunk-4F6BCPN4.js.map} +1 -1
  75. package/dist/{chunk-5R5IGGI3.js → chunk-5N5YKYIY.js} +3 -3
  76. package/dist/{chunk-5R5IGGI3.js.map → chunk-5N5YKYIY.js.map} +1 -1
  77. package/dist/{chunk-63WNORBK.js → chunk-IXDDHM7D.js} +5 -5
  78. package/dist/{chunk-63WNORBK.js.map → chunk-IXDDHM7D.js.map} +1 -1
  79. package/dist/{chunk-KLTQ2UST.js → chunk-KOZYZQH4.js} +8 -5
  80. package/dist/chunk-KOZYZQH4.js.map +1 -0
  81. package/dist/{chunk-4PLGRQAS.js → chunk-QTBH2A72.js} +3 -3
  82. package/dist/{chunk-4PLGRQAS.js.map → chunk-QTBH2A72.js.map} +1 -1
  83. package/dist/chunk-SR6GZ6DD.js +14 -0
  84. package/dist/{chunk-BK4VEUF3.js.map → chunk-SR6GZ6DD.js.map} +1 -1
  85. package/dist/{chunk-CZS4ZHQK.js → chunk-TDPAK42O.js} +3 -3
  86. package/dist/{chunk-CZS4ZHQK.js.map → chunk-TDPAK42O.js.map} +1 -1
  87. package/dist/{chunk-EFHSAWDQ.js → chunk-W47EYBH2.js} +7 -7
  88. package/dist/{chunk-EFHSAWDQ.js.map → chunk-W47EYBH2.js.map} +1 -1
  89. package/dist/chunk-XLJPUFN4.js +141 -0
  90. package/dist/chunk-XLJPUFN4.js.map +1 -0
  91. package/dist/{chunk-YOA3UVDE.js → chunk-XOJDJW3H.js} +4 -4
  92. package/dist/{chunk-YOA3UVDE.js.map → chunk-XOJDJW3H.js.map} +1 -1
  93. package/dist/{chunk-ZZA7L3RI.js → chunk-XXWH2MUF.js} +6 -6
  94. package/dist/{chunk-ZZA7L3RI.js.map → chunk-XXWH2MUF.js.map} +1 -1
  95. package/dist/{chunk-5FH6E2FQ.js → chunk-Y7AHVMVQ.js} +7 -3
  96. package/dist/chunk-Y7AHVMVQ.js.map +1 -0
  97. package/dist/components/cart/index.js +1 -1
  98. package/dist/components/common/index.js +1 -1
  99. package/dist/components/drawer/index.js +4 -4
  100. package/dist/components/home/index.js +7 -7
  101. package/dist/components/layout/index.js +5 -5
  102. package/dist/components/product/index.js +5 -5
  103. package/dist/components/store/index.js +6 -6
  104. package/dist/{document-class-5BBGX5LN.js → document-class-N2TRN7J5.js} +4 -3
  105. package/dist/{document-class-5BBGX5LN.js.map → document-class-N2TRN7J5.js.map} +1 -1
  106. package/dist/hooks/index.d.ts +1 -1
  107. package/dist/hooks/index.d.ts.map +1 -1
  108. package/dist/hooks/index.js +4 -4
  109. package/dist/hooks/useGtm.js +4 -4
  110. package/dist/hooks/useMoney.js +4 -4
  111. package/dist/hooks/useProduct.d.ts +12 -2
  112. package/dist/hooks/useProduct.d.ts.map +1 -1
  113. package/dist/hooks/useProduct.js +1 -1
  114. package/dist/hooks/useStore.js +4 -4
  115. package/dist/index.js +4 -4
  116. package/dist/{not-found-QM2L2D7P.js → not-found-SMNPMHRL.js} +6 -6
  117. package/dist/{not-found-QM2L2D7P.js.map → not-found-SMNPMHRL.js.map} +1 -1
  118. package/dist/providers/index.js +4 -4
  119. package/dist/routes/account/orders.js +1 -1
  120. package/dist/routes/account.js +8 -7
  121. package/dist/routes/account.js.map +1 -1
  122. package/dist/routes/blog.js +5 -5
  123. package/dist/routes/brands.js +1 -1
  124. package/dist/routes/cart.js +9 -9
  125. package/dist/routes/home.js +8 -8
  126. package/dist/routes/loyalty.js +1 -1
  127. package/dist/routes/page.js +1 -1
  128. package/dist/routes/product-listing.js +7 -7
  129. package/dist/routes/product.js +7 -7
  130. package/dist/routes/testimonials.js +1 -1
  131. package/dist/routes/thank-you.js +1 -1
  132. package/dist/skeleton.js +8 -8
  133. package/dist/tanstack/router.d.ts.map +1 -1
  134. package/dist/tanstack.js +3 -2
  135. package/dist/tanstack.js.map +1 -1
  136. package/package.json +1 -1
  137. package/dist/WishlistPage-XTQ6IRG7.js.map +0 -1
  138. package/dist/chunk-5FH6E2FQ.js.map +0 -1
  139. package/dist/chunk-BK4VEUF3.js +0 -14
  140. package/dist/chunk-KLTQ2UST.js.map +0 -1
  141. package/dist/chunk-SSRNIBVV.js.map +0 -1
  142. package/dist/chunk-VZHYSYKG.js +0 -67
  143. package/dist/chunk-VZHYSYKG.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/not-found.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,SAAS,YAAA,CAAa,KAAA,GAA2B,EAAC,EAAG;AAC1D,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,MAAM;AAAA,IACJ,KAAA,GAAQ,CAAA,CAAE,mBAAmB,CAAA,IAAK,gBAAA;AAAA,IAClC,OAAA,GAAU,CAAA,CAAE,8BAA8B,CAAA,IACxC,gEAAA;AAAA,IACF,YAAA,GAAe,IAAA;AAAA,IACf,YAAA,GAAe,CAAA,CAAE,2BAA2B,CAAA,IAAK,cAAA;AAAA,IACjD;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,uBACE,IAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,GAAA;AAAA,MACN,KAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA,EAAY,YAAA;AAAA,MACZ,UAAA,EAAY,YAAA;AAAA,MACZ,aAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,gBAAA,EAAiB,CAAA;AAAA,wBAChC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,kBAAA,EAAmB,CAAA;AAAA,wBAClC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,cAAA,EAAe;AAAA;AAAA;AAAA,GAChC;AAEJ","file":"not-found-QM2L2D7P.js","sourcesContent":["import type { ComponentType, ReactNode } from 'react';\nimport { HookSlot } from '../hooks';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { ErrorPage } from '../components/common';\n\nexport interface NotFoundPageProps {\n title?: string;\n message?: string;\n showHomeLink?: boolean;\n homeLinkText?: string;\n LinkComponent?: ComponentType<{\n to: string;\n className?: string;\n style?: React.CSSProperties;\n children: ReactNode;\n }>;\n}\n\nexport function NotFoundPage(props: NotFoundPageProps = {}) {\n const { t } = useTranslation();\n\n const {\n title = t('common.errors.404') || 'Page Not Found',\n message = t('common.errors.error_occurred') ||\n 'The page you are looking for does not exist or has been moved.',\n showHomeLink = true,\n homeLinkText = t('common.elements.back_home') || 'Back to Home',\n LinkComponent,\n } = props;\n\n return (\n <ErrorPage\n code={404}\n title={title}\n message={message}\n showAction={showHomeLink}\n actionText={homeLinkText}\n LinkComponent={LinkComponent}\n >\n <HookSlot name=\"notfound:start\" />\n <HookSlot name=\"notfound:content\" />\n <HookSlot name=\"notfound:end\" />\n </ErrorPage>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/routes/not-found.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,SAAS,YAAA,CAAa,KAAA,GAA2B,EAAC,EAAG;AAC1D,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,MAAM;AAAA,IACJ,KAAA,GAAQ,CAAA,CAAE,mBAAmB,CAAA,IAAK,gBAAA;AAAA,IAClC,OAAA,GAAU,CAAA,CAAE,8BAA8B,CAAA,IACxC,gEAAA;AAAA,IACF,YAAA,GAAe,IAAA;AAAA,IACf,YAAA,GAAe,CAAA,CAAE,2BAA2B,CAAA,IAAK,cAAA;AAAA,IACjD;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,uBACE,IAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,GAAA;AAAA,MACN,KAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA,EAAY,YAAA;AAAA,MACZ,UAAA,EAAY,YAAA;AAAA,MACZ,aAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,gBAAA,EAAiB,CAAA;AAAA,wBAChC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,kBAAA,EAAmB,CAAA;AAAA,wBAClC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,cAAA,EAAe;AAAA;AAAA;AAAA,GAChC;AAEJ","file":"not-found-SMNPMHRL.js","sourcesContent":["import type { ComponentType, ReactNode } from 'react';\nimport { HookSlot } from '../hooks';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { ErrorPage } from '../components/common';\n\nexport interface NotFoundPageProps {\n title?: string;\n message?: string;\n showHomeLink?: boolean;\n homeLinkText?: string;\n LinkComponent?: ComponentType<{\n to: string;\n className?: string;\n style?: React.CSSProperties;\n children: ReactNode;\n }>;\n}\n\nexport function NotFoundPage(props: NotFoundPageProps = {}) {\n const { t } = useTranslation();\n\n const {\n title = t('common.errors.404') || 'Page Not Found',\n message = t('common.errors.error_occurred') ||\n 'The page you are looking for does not exist or has been moved.',\n showHomeLink = true,\n homeLinkText = t('common.elements.back_home') || 'Back to Home',\n LinkComponent,\n } = props;\n\n return (\n <ErrorPage\n code={404}\n title={title}\n message={message}\n showAction={showHomeLink}\n actionText={homeLinkText}\n LinkComponent={LinkComponent}\n >\n <HookSlot name=\"notfound:start\" />\n <HookSlot name=\"notfound:content\" />\n <HookSlot name=\"notfound:end\" />\n </ErrorPage>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
- export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-EFHSAWDQ.js';
2
- import '../chunk-63WNORBK.js';
1
+ export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-W47EYBH2.js';
2
+ import '../chunk-IXDDHM7D.js';
3
3
  import '../chunk-JKIRRMBU.js';
4
4
  import '../chunk-2JV6WZ6O.js';
5
5
  import '../chunk-6IATCGID.js';
@@ -17,7 +17,7 @@ export { SettingsError } from '../chunk-6XWMNQ52.js';
17
17
  import '../chunk-TP3LCGE7.js';
18
18
  import '../chunk-Z653O7MX.js';
19
19
  import '../chunk-ZCH7W7DZ.js';
20
- import '../chunk-SSRNIBVV.js';
20
+ import '../chunk-3U26OMNO.js';
21
21
  export { DocumentClassProvider, useDocumentClassContext, useDocumentClassOutput } from '../chunk-JWXJPJBO.js';
22
22
  import '../chunk-CW625T2E.js';
23
23
  import '../chunk-BVSJPBJ6.js';
@@ -29,7 +29,7 @@ import '../chunk-YMVLYYLU.js';
29
29
  import '../chunk-RJPPO3ET.js';
30
30
  import '../chunk-Q7VWURUR.js';
31
31
  import '../chunk-GU2KUQVD.js';
32
- import '../chunk-CZS4ZHQK.js';
32
+ import '../chunk-TDPAK42O.js';
33
33
  import '../chunk-AXW67SY7.js';
34
34
  export { LinkProvider, LinkProviderError, createLinkWithAdapter, useLinkAdapter } from '../chunk-BYMOPN2S.js';
35
35
  import '../chunk-6BZ5TKEV.js';
@@ -1,4 +1,4 @@
1
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-FKOBOGLQ.js';
1
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-4F6BCPN4.js';
2
2
  import '../../chunk-MCYEMXFY.js';
3
3
  import '../../chunk-TZ3E5BN4.js';
4
4
  import '../../chunk-XLGVT7QF.js';
@@ -1,9 +1,10 @@
1
1
  import { wallet } from '../chunk-OGGWNPF3.js';
2
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-FKOBOGLQ.js';
2
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-4F6BCPN4.js';
3
3
  import '../chunk-MCYEMXFY.js';
4
4
  import { notification } from '../chunk-CCCKRNO4.js';
5
- import { wishlist } from '../chunk-KLTQ2UST.js';
5
+ import { wishlist } from '../chunk-KOZYZQH4.js';
6
6
  import { buildHreflangAlternates } from '../chunk-TZ3E5BN4.js';
7
+ import '../chunk-XLJPUFN4.js';
7
8
  import { unauthorized, orUnauthorized } from '../chunk-XLGVT7QF.js';
8
9
  import { RouteId } from '../chunk-MTONGOJD.js';
9
10
  import '../chunk-AZ5HAIYQ.js';
@@ -28,7 +29,7 @@ async function profileLoader(_ctx) {
28
29
 
29
30
  // src/routes/account/profile/index.tsx
30
31
  var LazyProfilePage = lazy(
31
- () => import('../ProfilePage-H2JWTJJY.js').then((m) => ({ default: m.ProfilePage }))
32
+ () => import('../ProfilePage-YMLTVERJ.js').then((m) => ({ default: m.ProfilePage }))
32
33
  );
33
34
  var ProfilePage = LazyProfilePage;
34
35
  var Profile = {
@@ -69,7 +70,7 @@ async function wishlistLoader(ctx) {
69
70
 
70
71
  // src/routes/account/wishlist/index.tsx
71
72
  var LazyWishlistPage = lazy(
72
- () => import('../WishlistPage-XTQ6IRG7.js').then((m) => ({ default: m.WishlistPage }))
73
+ () => import('../WishlistPage-KIXGHGO3.js').then((m) => ({ default: m.WishlistPage }))
73
74
  );
74
75
  var WishlistPage = LazyWishlistPage;
75
76
  var Wishlist = {
@@ -110,7 +111,7 @@ async function walletLoader(ctx) {
110
111
  }
111
112
 
112
113
  // src/routes/account/wallet/index.tsx
113
- var LazyWalletPage = lazy(() => import('../WalletPage-7JE6PELL.js').then((m) => ({ default: m.WalletPage })));
114
+ var LazyWalletPage = lazy(() => import('../WalletPage-SE7QXD2E.js').then((m) => ({ default: m.WalletPage })));
114
115
  var WalletPage = LazyWalletPage;
115
116
  var Wallet = {
116
117
  id: RouteId.CUSTOMER_WALLET,
@@ -145,7 +146,7 @@ async function notificationsLoader(_ctx) {
145
146
 
146
147
  // src/routes/account/notifications/index.tsx
147
148
  var LazyNotificationsPage = lazy(
148
- () => import('../NotificationsPage-3WUAFRTU.js').then((m) => ({ default: m.NotificationsPage }))
149
+ () => import('../NotificationsPage-G2Z6UV6J.js').then((m) => ({ default: m.NotificationsPage }))
149
150
  );
150
151
  var NotificationsPage = LazyNotificationsPage;
151
152
  var Notifications = {
@@ -177,7 +178,7 @@ async function settingsLoader(_ctx) {
177
178
 
178
179
  // src/routes/account/settings/index.tsx
179
180
  var LazySettingsPage = lazy(
180
- () => import('../SettingsPage-WQX22FTS.js').then((m) => ({ default: m.SettingsPage }))
181
+ () => import('../SettingsPage-4T6VLWRX.js').then((m) => ({ default: m.SettingsPage }))
181
182
  );
182
183
  var SettingsPage = LazySettingsPage;
183
184
  var Settings = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/routes/account/profile/loader.ts","../../src/routes/account/profile/index.tsx","../../src/routes/account/wishlist/loader.ts","../../src/routes/account/wishlist/index.tsx","../../src/routes/account/wallet/loader.ts","../../src/routes/account/wallet/index.tsx","../../src/routes/account/notifications/loader.ts","../../src/routes/account/notifications/index.tsx","../../src/routes/account/settings/loader.ts","../../src/routes/account/settings/index.tsx"],"names":["lazy"],"mappings":"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","file":"account.js","sourcesContent":["import type { ProfilePageProps } from './types';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { unauthorized } from '../../../providers/NavigationProvider';\n\nexport async function profileLoader(_ctx: { locale: string }): Promise<ProfilePageProps> {\n const { authToken, i18n } = getTwilightContext();\n if (!authToken) throw unauthorized();\n return {\n page: {\n title: i18n.t('common.titles.profile') || 'Profile',\n slug: 'profile',\n },\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { profileLoader } from './loader';\nimport type { ProfilePageProps } from './types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazyProfilePage = lazy(() =>\n import('./ProfilePage').then((m) => ({ default: m.ProfilePage }))\n);\n\nexport const ProfilePage = LazyProfilePage;\nexport { profileLoader } from './loader';\nexport type { ProfilePageProps } from './types';\n\nexport const Profile = {\n id: RouteId.CUSTOMER_PROFILE,\n loader: async (\n _ctx: { locale?: string },\n extend?: (\n data: ProfilePageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<ProfilePageProps> => {\n const data = await profileLoader({ locale: _ctx.locale ?? 'ar' });\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as ProfilePageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: ProfilePageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyProfilePage,\n} as const;\n","import type { WishlistPageProps } from './types';\nimport type { LoaderContext } from '../../types';\nimport { wishlist } from '../../../api/wishlist';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { orUnauthorized } from '../../../providers/NavigationProvider';\n\nexport async function wishlistLoader(ctx: LoaderContext): Promise<WishlistPageProps> {\n const pageNum = Number(ctx.search?.page) || 1;\n const data = await orUnauthorized(wishlist.list({ page: pageNum }));\n\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n title: i18n.t('common.titles.wishlist') || 'Wishlist',\n slug: 'wishlist',\n },\n query: { page: pageNum },\n products: data.items,\n pagination: {\n next: data.next,\n },\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { wishlistLoader } from './loader';\nimport type { WishlistPageProps } from './types';\nimport type { LoaderContext } from '../../types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazyWishlistPage = lazy(() =>\n import('./WishlistPage').then((m) => ({ default: m.WishlistPage }))\n);\n\nexport const WishlistPage = LazyWishlistPage;\nexport { wishlistLoader } from './loader';\nexport type { WishlistPageProps } from './types';\n\nexport const Wishlist = {\n id: RouteId.CUSTOMER_WISHLIST,\n loader: async (\n ctx: LoaderContext,\n extend?: (\n data: WishlistPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<WishlistPageProps> => {\n const data = await wishlistLoader(ctx);\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as WishlistPageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: WishlistPageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyWishlistPage,\n} as const;\n","import type { WalletPageProps } from './types';\nimport type { LoaderContext } from '../../types';\nimport { wallet } from '../../../api/wallet';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { orUnauthorized } from '../../../providers/NavigationProvider';\n\nexport async function walletLoader(ctx: LoaderContext): Promise<WalletPageProps> {\n const pageNum = Number(ctx.search?.page) || 1;\n const data = await orUnauthorized(wallet.list({ page: pageNum }));\n\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n title: i18n.t('common.titles.wallet') || 'Wallet',\n slug: 'wallet',\n },\n query: { page: pageNum },\n transactions: data.items,\n balance: data.balance,\n pagination: {\n next: data.next,\n },\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { walletLoader } from './loader';\nimport type { WalletPageProps } from './types';\nimport type { LoaderContext } from '../../types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazyWalletPage = lazy(() => import('./WalletPage').then((m) => ({ default: m.WalletPage })));\n\nexport const WalletPage = LazyWalletPage;\nexport { walletLoader } from './loader';\nexport type { WalletPageProps } from './types';\n\nexport const Wallet = {\n id: RouteId.CUSTOMER_WALLET,\n loader: async (\n ctx: LoaderContext,\n extend?: (\n data: WalletPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<WalletPageProps> => {\n const data = await walletLoader(ctx);\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as WalletPageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: WalletPageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyWalletPage,\n} as const;\n","import { notification } from '../../../api/notification';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { orUnauthorized } from '../../../providers/NavigationProvider';\nimport type { NotificationsPageProps } from './types';\n\nexport async function notificationsLoader(_ctx: {\n locale: string;\n}): Promise<NotificationsPageProps> {\n const i18n = getTwilightContext().i18n;\n const response = await orUnauthorized(notification.list());\n\n return {\n page: {\n title: i18n.t('common.titles.notifications') || 'Notifications',\n slug: 'notifications',\n },\n notifications: response.data,\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { notificationsLoader } from './loader';\nimport type { NotificationsPageProps } from './types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazyNotificationsPage = lazy(() =>\n import('./NotificationsPage').then((m) => ({ default: m.NotificationsPage }))\n);\n\nexport const NotificationsPage = LazyNotificationsPage;\nexport { notificationsLoader } from './loader';\nexport type { NotificationsPageProps, Notification } from './types';\n\nexport const Notifications = {\n id: RouteId.CUSTOMER_NOTIFICATIONS,\n loader: async (\n _ctx: { locale?: string },\n extend?: (\n data: NotificationsPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<NotificationsPageProps> => {\n const data = await notificationsLoader({ locale: _ctx.locale ?? 'ar' });\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as NotificationsPageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: NotificationsPageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyNotificationsPage,\n} as const;\n","import type { SettingsPageProps } from './types';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { unauthorized } from '../../../providers/NavigationProvider';\n\nexport async function settingsLoader(_ctx: { locale: string }): Promise<SettingsPageProps> {\n const { authToken, i18n } = getTwilightContext();\n if (!authToken) throw unauthorized();\n return {\n page: { title: i18n.t('common.titles.settings') || 'Settings', slug: 'settings' },\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { settingsLoader } from './loader';\nimport type { SettingsPageProps } from './types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazySettingsPage = lazy(() =>\n import('./SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\n\nexport const SettingsPage = LazySettingsPage;\nexport { settingsLoader } from './loader';\nexport type { SettingsPageProps } from './types';\n\nexport const Settings = {\n id: RouteId.CUSTOMER_SETTINGS,\n loader: async (\n _ctx: { locale?: string },\n extend?: (\n data: SettingsPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<SettingsPageProps> => {\n const data = await settingsLoader({ locale: _ctx.locale ?? 'ar' });\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as SettingsPageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: SettingsPageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazySettingsPage,\n} as const;\n"]}
1
+ {"version":3,"sources":["../../src/routes/account/profile/loader.ts","../../src/routes/account/profile/index.tsx","../../src/routes/account/wishlist/loader.ts","../../src/routes/account/wishlist/index.tsx","../../src/routes/account/wallet/loader.ts","../../src/routes/account/wallet/index.tsx","../../src/routes/account/notifications/loader.ts","../../src/routes/account/notifications/index.tsx","../../src/routes/account/settings/loader.ts","../../src/routes/account/settings/index.tsx"],"names":["lazy"],"mappings":"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","file":"account.js","sourcesContent":["import type { ProfilePageProps } from './types';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { unauthorized } from '../../../providers/NavigationProvider';\n\nexport async function profileLoader(_ctx: { locale: string }): Promise<ProfilePageProps> {\n const { authToken, i18n } = getTwilightContext();\n if (!authToken) throw unauthorized();\n return {\n page: {\n title: i18n.t('common.titles.profile') || 'Profile',\n slug: 'profile',\n },\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { profileLoader } from './loader';\nimport type { ProfilePageProps } from './types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazyProfilePage = lazy(() =>\n import('./ProfilePage').then((m) => ({ default: m.ProfilePage }))\n);\n\nexport const ProfilePage = LazyProfilePage;\nexport { profileLoader } from './loader';\nexport type { ProfilePageProps } from './types';\n\nexport const Profile = {\n id: RouteId.CUSTOMER_PROFILE,\n loader: async (\n _ctx: { locale?: string },\n extend?: (\n data: ProfilePageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<ProfilePageProps> => {\n const data = await profileLoader({ locale: _ctx.locale ?? 'ar' });\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as ProfilePageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: ProfilePageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyProfilePage,\n} as const;\n","import type { WishlistPageProps } from './types';\nimport type { LoaderContext } from '../../types';\nimport { wishlist } from '../../../api/wishlist';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { orUnauthorized } from '../../../providers/NavigationProvider';\n\nexport async function wishlistLoader(ctx: LoaderContext): Promise<WishlistPageProps> {\n const pageNum = Number(ctx.search?.page) || 1;\n const data = await orUnauthorized(wishlist.list({ page: pageNum }));\n\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n title: i18n.t('common.titles.wishlist') || 'Wishlist',\n slug: 'wishlist',\n },\n query: { page: pageNum },\n products: data.items,\n pagination: {\n next: data.next,\n },\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { wishlistLoader } from './loader';\nimport type { WishlistPageProps } from './types';\nimport type { LoaderContext } from '../../types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazyWishlistPage = lazy(() =>\n import('./WishlistPage').then((m) => ({ default: m.WishlistPage }))\n);\n\nexport const WishlistPage = LazyWishlistPage;\nexport { wishlistLoader } from './loader';\nexport type { WishlistPageProps } from './types';\n\nexport const Wishlist = {\n id: RouteId.CUSTOMER_WISHLIST,\n loader: async (\n ctx: LoaderContext,\n extend?: (\n data: WishlistPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<WishlistPageProps> => {\n const data = await wishlistLoader(ctx);\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as WishlistPageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: WishlistPageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyWishlistPage,\n} as const;\n","import type { WalletPageProps } from './types';\nimport type { LoaderContext } from '../../types';\nimport { wallet } from '../../../api/wallet';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { orUnauthorized } from '../../../providers/NavigationProvider';\n\nexport async function walletLoader(ctx: LoaderContext): Promise<WalletPageProps> {\n const pageNum = Number(ctx.search?.page) || 1;\n const data = await orUnauthorized(wallet.list({ page: pageNum }));\n\n const i18n = getTwilightContext().i18n;\n return {\n page: {\n title: i18n.t('common.titles.wallet') || 'Wallet',\n slug: 'wallet',\n },\n query: { page: pageNum },\n transactions: data.items,\n balance: data.balance,\n pagination: {\n next: data.next,\n },\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { walletLoader } from './loader';\nimport type { WalletPageProps } from './types';\nimport type { LoaderContext } from '../../types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazyWalletPage = lazy(() => import('./WalletPage').then((m) => ({ default: m.WalletPage })));\n\nexport const WalletPage = LazyWalletPage;\nexport { walletLoader } from './loader';\nexport type { WalletPageProps } from './types';\n\nexport const Wallet = {\n id: RouteId.CUSTOMER_WALLET,\n loader: async (\n ctx: LoaderContext,\n extend?: (\n data: WalletPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<WalletPageProps> => {\n const data = await walletLoader(ctx);\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as WalletPageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: WalletPageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyWalletPage,\n} as const;\n","import { notification } from '../../../api/notification';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { orUnauthorized } from '../../../providers/NavigationProvider';\nimport type { NotificationsPageProps } from './types';\n\nexport async function notificationsLoader(_ctx: {\n locale: string;\n}): Promise<NotificationsPageProps> {\n const i18n = getTwilightContext().i18n;\n const response = await orUnauthorized(notification.list());\n\n return {\n page: {\n title: i18n.t('common.titles.notifications') || 'Notifications',\n slug: 'notifications',\n },\n notifications: response.data,\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { notificationsLoader } from './loader';\nimport type { NotificationsPageProps } from './types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazyNotificationsPage = lazy(() =>\n import('./NotificationsPage').then((m) => ({ default: m.NotificationsPage }))\n);\n\nexport const NotificationsPage = LazyNotificationsPage;\nexport { notificationsLoader } from './loader';\nexport type { NotificationsPageProps, Notification } from './types';\n\nexport const Notifications = {\n id: RouteId.CUSTOMER_NOTIFICATIONS,\n loader: async (\n _ctx: { locale?: string },\n extend?: (\n data: NotificationsPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<NotificationsPageProps> => {\n const data = await notificationsLoader({ locale: _ctx.locale ?? 'ar' });\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as NotificationsPageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: NotificationsPageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazyNotificationsPage,\n} as const;\n","import type { SettingsPageProps } from './types';\nimport { getTwilightContext } from '../../../twilight/context';\nimport { unauthorized } from '../../../providers/NavigationProvider';\n\nexport async function settingsLoader(_ctx: { locale: string }): Promise<SettingsPageProps> {\n const { authToken, i18n } = getTwilightContext();\n if (!authToken) throw unauthorized();\n return {\n page: { title: i18n.t('common.titles.settings') || 'Settings', slug: 'settings' },\n };\n}\n","import type { HeadDescriptor } from '../../../utils/head';\nimport { buildHreflangAlternates } from '../../../utils/baseHead';\nimport { lazy } from 'react';\nimport { settingsLoader } from './loader';\nimport type { SettingsPageProps } from './types';\nimport type { TwilightContext } from '../../../twilight/context';\nimport { RouteId } from '../../../router/route-ids';\n\nconst LazySettingsPage = lazy(() =>\n import('./SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\n\nexport const SettingsPage = LazySettingsPage;\nexport { settingsLoader } from './loader';\nexport type { SettingsPageProps } from './types';\n\nexport const Settings = {\n id: RouteId.CUSTOMER_SETTINGS,\n loader: async (\n _ctx: { locale?: string },\n extend?: (\n data: SettingsPageProps,\n ctx: { params: Record<string, never> }\n ) => Promise<Record<string, unknown>> | Record<string, unknown>\n ): Promise<SettingsPageProps> => {\n const data = await settingsLoader({ locale: _ctx.locale ?? 'ar' });\n if (extend) {\n const extra = await extend(data, { params: {} });\n return { ...data, ...extra } as SettingsPageProps;\n }\n return data;\n },\n head: (ctx: TwilightContext, data: SettingsPageProps): HeadDescriptor => ({\n title: data.page.title,\n description: data.page.description,\n alternateLanguages: buildHreflangAlternates(ctx.settings, ctx.location.pathname),\n }),\n Component: LazySettingsPage,\n} as const;\n"]}
@@ -133,18 +133,18 @@ async function blogTagLoader({
133
133
  }
134
134
 
135
135
  // src/routes/blog/index.tsx
136
- var LazyBlogPage = lazy(() => import('../BlogPage-N5BKRIWD.js').then((m) => ({ default: m.BlogPage })));
136
+ var LazyBlogPage = lazy(() => import('../BlogPage-IQQWDW4A.js').then((m) => ({ default: m.BlogPage })));
137
137
  var LazyBlogSinglePage = lazy(
138
- () => import('../BlogSinglePage-HVSCXCCV.js').then((m) => ({ default: m.BlogSinglePage }))
138
+ () => import('../BlogSinglePage-YXMOWFET.js').then((m) => ({ default: m.BlogSinglePage }))
139
139
  );
140
140
  var LazyBlogAuthorPage = lazy(
141
- () => import('../BlogAuthorPage-C7ENIUKC.js').then((m) => ({ default: m.BlogAuthorPage }))
141
+ () => import('../BlogAuthorPage-Z7VWPXE5.js').then((m) => ({ default: m.BlogAuthorPage }))
142
142
  );
143
143
  var LazyBlogCategoryPage = lazy(
144
- () => import('../BlogCategoryPage-QODJTKFE.js').then((m) => ({ default: m.BlogCategoryPage }))
144
+ () => import('../BlogCategoryPage-ZB5IQAHL.js').then((m) => ({ default: m.BlogCategoryPage }))
145
145
  );
146
146
  var LazyBlogTagPage = lazy(
147
- () => import('../BlogTagPage-YXYYHD5S.js').then((m) => ({ default: m.BlogTagPage }))
147
+ () => import('../BlogTagPage-6ZNUK36E.js').then((m) => ({ default: m.BlogTagPage }))
148
148
  );
149
149
  var BlogPage = LazyBlogPage;
150
150
  var BlogSinglePage = LazyBlogSinglePage;
@@ -33,7 +33,7 @@ async function brandsLoader() {
33
33
  }
34
34
 
35
35
  // src/routes/brands/index.tsx
36
- var LazyBrandsPage = lazy(() => import('../BrandsPage-UP3HKHGR.js').then((m) => ({ default: m.BrandsPage })));
36
+ var LazyBrandsPage = lazy(() => import('../BrandsPage-SRSDK6DP.js').then((m) => ({ default: m.BrandsPage })));
37
37
  var BrandsPage = LazyBrandsPage;
38
38
  async function brandsLoaderWithExtend(_ctx, extend) {
39
39
  const data = await brandsLoader();
@@ -1,16 +1,16 @@
1
1
  import { cart } from '../chunk-KFH3OBFW.js';
2
2
  import { loyalty } from '../chunk-ZNWNJZSM.js';
3
3
  import { CartSkeleton } from '../chunk-N7CCSGZF.js';
4
- import '../chunk-5R5IGGI3.js';
4
+ import '../chunk-5N5YKYIY.js';
5
5
  import '../chunk-QG2Q6HB5.js';
6
6
  import { buildHreflangAlternates } from '../chunk-TZ3E5BN4.js';
7
- import '../chunk-XLVAVCUV.js';
8
- import '../chunk-VZHYSYKG.js';
9
- import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-BK4VEUF3.js';
10
- import '../chunk-ZZA7L3RI.js';
7
+ import '../chunk-46W6R5ZI.js';
8
+ import '../chunk-XLJPUFN4.js';
9
+ import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-SR6GZ6DD.js';
10
+ import '../chunk-XXWH2MUF.js';
11
11
  import '../chunk-342EPVXN.js';
12
- import '../chunk-EFHSAWDQ.js';
13
- import '../chunk-63WNORBK.js';
12
+ import '../chunk-W47EYBH2.js';
13
+ import '../chunk-IXDDHM7D.js';
14
14
  import '../chunk-JKIRRMBU.js';
15
15
  import '../chunk-2JV6WZ6O.js';
16
16
  import '../chunk-6IATCGID.js';
@@ -28,7 +28,7 @@ import { getTwilightContext } from '../chunk-6XWMNQ52.js';
28
28
  import '../chunk-TP3LCGE7.js';
29
29
  import '../chunk-Z653O7MX.js';
30
30
  import '../chunk-ZCH7W7DZ.js';
31
- import '../chunk-SSRNIBVV.js';
31
+ import '../chunk-3U26OMNO.js';
32
32
  import '../chunk-JWXJPJBO.js';
33
33
  import '../chunk-CW625T2E.js';
34
34
  import '../chunk-BVSJPBJ6.js';
@@ -40,7 +40,7 @@ import '../chunk-YMVLYYLU.js';
40
40
  import '../chunk-RJPPO3ET.js';
41
41
  import { HookSlot } from '../chunk-Q7VWURUR.js';
42
42
  import '../chunk-GU2KUQVD.js';
43
- import { LazyBreadcrumb, LazyNoContent } from '../chunk-CZS4ZHQK.js';
43
+ import { LazyBreadcrumb, LazyNoContent } from '../chunk-TDPAK42O.js';
44
44
  import '../chunk-AXW67SY7.js';
45
45
  import '../chunk-BYMOPN2S.js';
46
46
  import '../chunk-6BZ5TKEV.js';
@@ -1,12 +1,12 @@
1
- export { Home, HomeSkeleton, homeLoader } from '../chunk-5R5IGGI3.js';
1
+ export { Home, HomeSkeleton, homeLoader } from '../chunk-5N5YKYIY.js';
2
2
  import '../chunk-QG2Q6HB5.js';
3
3
  import '../chunk-TZ3E5BN4.js';
4
- export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-XLVAVCUV.js';
5
- import '../chunk-VZHYSYKG.js';
6
- import '../chunk-ZZA7L3RI.js';
4
+ export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-46W6R5ZI.js';
5
+ import '../chunk-XLJPUFN4.js';
6
+ import '../chunk-XXWH2MUF.js';
7
7
  import '../chunk-342EPVXN.js';
8
- import '../chunk-EFHSAWDQ.js';
9
- import '../chunk-63WNORBK.js';
8
+ import '../chunk-W47EYBH2.js';
9
+ import '../chunk-IXDDHM7D.js';
10
10
  import '../chunk-JKIRRMBU.js';
11
11
  import '../chunk-2JV6WZ6O.js';
12
12
  import '../chunk-6IATCGID.js';
@@ -24,7 +24,7 @@ import '../chunk-6XWMNQ52.js';
24
24
  import '../chunk-TP3LCGE7.js';
25
25
  import '../chunk-Z653O7MX.js';
26
26
  import '../chunk-ZCH7W7DZ.js';
27
- import '../chunk-SSRNIBVV.js';
27
+ import '../chunk-3U26OMNO.js';
28
28
  import '../chunk-JWXJPJBO.js';
29
29
  import '../chunk-CW625T2E.js';
30
30
  import '../chunk-BVSJPBJ6.js';
@@ -36,7 +36,7 @@ import '../chunk-YMVLYYLU.js';
36
36
  import '../chunk-RJPPO3ET.js';
37
37
  import '../chunk-Q7VWURUR.js';
38
38
  import '../chunk-GU2KUQVD.js';
39
- import '../chunk-CZS4ZHQK.js';
39
+ import '../chunk-TDPAK42O.js';
40
40
  import '../chunk-AXW67SY7.js';
41
41
  import '../chunk-BYMOPN2S.js';
42
42
  import '../chunk-6BZ5TKEV.js';
@@ -18,7 +18,7 @@ async function loyaltyLoader() {
18
18
 
19
19
  // src/routes/loyalty/index.tsx
20
20
  var LazyLoyaltyPage = lazy(
21
- () => import('../LoyaltyPage-TOXOPXEU.js').then((m) => ({ default: m.LoyaltyPage }))
21
+ () => import('../LoyaltyPage-NRKL6GTJ.js').then((m) => ({ default: m.LoyaltyPage }))
22
22
  );
23
23
  var LoyaltyPage = LazyLoyaltyPage;
24
24
  async function loader(_ctx, extend) {
@@ -27,7 +27,7 @@ async function pageSingleLoader({ params }) {
27
27
  }
28
28
 
29
29
  // src/routes/page/index.tsx
30
- var LazyPageSingle = lazy(() => import('../PageSingle-Y6IVAY3E.js').then((m) => ({ default: m.PageSingle })));
30
+ var LazyPageSingle = lazy(() => import('../PageSingle-EQPKQGNU.js').then((m) => ({ default: m.PageSingle })));
31
31
  var PageSingleLazy = LazyPageSingle;
32
32
  async function loader(ctx, extend) {
33
33
  const data = await pageSingleLoader({ params: ctx.params });
@@ -2,13 +2,13 @@ import { sortOptions } from '../chunk-6Z4MOC4S.js';
2
2
  import { category } from '../chunk-ULQMJUO2.js';
3
3
  import { brand } from '../chunk-2AGMXJVP.js';
4
4
  import { buildHreflangAlternates } from '../chunk-TZ3E5BN4.js';
5
- import { LazyTestimonials } from '../chunk-XLVAVCUV.js';
6
- import { product } from '../chunk-VZHYSYKG.js';
5
+ import { LazyTestimonials } from '../chunk-46W6R5ZI.js';
6
+ import { product } from '../chunk-XLJPUFN4.js';
7
7
  import { Drawer } from '../chunk-6TKIUG5C.js';
8
- import { ProductCard } from '../chunk-ZZA7L3RI.js';
8
+ import { ProductCard } from '../chunk-XXWH2MUF.js';
9
9
  import '../chunk-342EPVXN.js';
10
- import { useStore } from '../chunk-EFHSAWDQ.js';
11
- import '../chunk-63WNORBK.js';
10
+ import { useStore } from '../chunk-W47EYBH2.js';
11
+ import '../chunk-IXDDHM7D.js';
12
12
  import '../chunk-JKIRRMBU.js';
13
13
  import '../chunk-2JV6WZ6O.js';
14
14
  import '../chunk-6IATCGID.js';
@@ -26,7 +26,7 @@ import { getTwilightContext } from '../chunk-6XWMNQ52.js';
26
26
  import '../chunk-TP3LCGE7.js';
27
27
  import '../chunk-Z653O7MX.js';
28
28
  import '../chunk-ZCH7W7DZ.js';
29
- import '../chunk-SSRNIBVV.js';
29
+ import '../chunk-3U26OMNO.js';
30
30
  import '../chunk-JWXJPJBO.js';
31
31
  import '../chunk-CW625T2E.js';
32
32
  import '../chunk-BVSJPBJ6.js';
@@ -38,7 +38,7 @@ import '../chunk-YMVLYYLU.js';
38
38
  import '../chunk-RJPPO3ET.js';
39
39
  import { HookSlot } from '../chunk-Q7VWURUR.js';
40
40
  import '../chunk-GU2KUQVD.js';
41
- import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-CZS4ZHQK.js';
41
+ import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-TDPAK42O.js';
42
42
  import '../chunk-AXW67SY7.js';
43
43
  import '../chunk-BYMOPN2S.js';
44
44
  import '../chunk-6BZ5TKEV.js';
@@ -1,10 +1,10 @@
1
1
  import { buildHreflangAlternates } from '../chunk-TZ3E5BN4.js';
2
- import { ProductsSlider, LazyTestimonials } from '../chunk-XLVAVCUV.js';
3
- import { product } from '../chunk-VZHYSYKG.js';
4
- import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-ZZA7L3RI.js';
2
+ import { ProductsSlider, LazyTestimonials } from '../chunk-46W6R5ZI.js';
3
+ import { product } from '../chunk-XLJPUFN4.js';
4
+ import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-XXWH2MUF.js';
5
5
  import '../chunk-342EPVXN.js';
6
- import '../chunk-EFHSAWDQ.js';
7
- import '../chunk-63WNORBK.js';
6
+ import '../chunk-W47EYBH2.js';
7
+ import '../chunk-IXDDHM7D.js';
8
8
  import '../chunk-JKIRRMBU.js';
9
9
  import '../chunk-2JV6WZ6O.js';
10
10
  import '../chunk-6IATCGID.js';
@@ -22,7 +22,7 @@ import { getTwilightContext } from '../chunk-6XWMNQ52.js';
22
22
  import '../chunk-TP3LCGE7.js';
23
23
  import '../chunk-Z653O7MX.js';
24
24
  import '../chunk-ZCH7W7DZ.js';
25
- import { useProduct } from '../chunk-SSRNIBVV.js';
25
+ import { useProduct } from '../chunk-3U26OMNO.js';
26
26
  import '../chunk-JWXJPJBO.js';
27
27
  import '../chunk-CW625T2E.js';
28
28
  import '../chunk-BVSJPBJ6.js';
@@ -34,7 +34,7 @@ import { useComments } from '../chunk-YMVLYYLU.js';
34
34
  import '../chunk-RJPPO3ET.js';
35
35
  import { HookSlot } from '../chunk-Q7VWURUR.js';
36
36
  import '../chunk-GU2KUQVD.js';
37
- import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-CZS4ZHQK.js';
37
+ import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-TDPAK42O.js';
38
38
  import '../chunk-AXW67SY7.js';
39
39
  import '../chunk-BYMOPN2S.js';
40
40
  import '../chunk-6BZ5TKEV.js';
@@ -18,7 +18,7 @@ async function testimonialsLoader(_ctx) {
18
18
 
19
19
  // src/routes/testimonials/index.tsx
20
20
  var LazyTestimonialsPage = lazy(
21
- () => import('../TestimonialsPage-PWVTHBOS.js').then((m) => ({ default: m.TestimonialsPage }))
21
+ () => import('../TestimonialsPage-NMHIF3RD.js').then((m) => ({ default: m.TestimonialsPage }))
22
22
  );
23
23
  var TestimonialsPage = LazyTestimonialsPage;
24
24
  async function loader(ctx, extend) {
@@ -38,7 +38,7 @@ async function thankYouLoader({
38
38
 
39
39
  // src/routes/thank-you/index.tsx
40
40
  var LazyThankYouPage = lazy(
41
- () => import('../ThankYouPage-C573J2KJ.js').then((m) => ({ default: m.ThankYouPage }))
41
+ () => import('../ThankYouPage-UYWL3TLE.js').then((m) => ({ default: m.ThankYouPage }))
42
42
  );
43
43
  var ThankYouPage = LazyThankYouPage;
44
44
  async function loader(ctx, extend) {
package/dist/skeleton.js CHANGED
@@ -1,13 +1,13 @@
1
1
  export { BlogSkeleton, BreadcrumbSkeleton, CartSkeleton, CustomerLayoutSkeleton, CustomerPageSkeleton, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, SkeletonPulse } from './chunk-N7CCSGZF.js';
2
- export { HomeSkeleton } from './chunk-5R5IGGI3.js';
2
+ export { HomeSkeleton } from './chunk-5N5YKYIY.js';
3
3
  import './chunk-QG2Q6HB5.js';
4
4
  import './chunk-TZ3E5BN4.js';
5
- import './chunk-XLVAVCUV.js';
6
- import './chunk-VZHYSYKG.js';
7
- import './chunk-ZZA7L3RI.js';
5
+ import './chunk-46W6R5ZI.js';
6
+ import './chunk-XLJPUFN4.js';
7
+ import './chunk-XXWH2MUF.js';
8
8
  import './chunk-342EPVXN.js';
9
- import './chunk-EFHSAWDQ.js';
10
- import './chunk-63WNORBK.js';
9
+ import './chunk-W47EYBH2.js';
10
+ import './chunk-IXDDHM7D.js';
11
11
  import './chunk-JKIRRMBU.js';
12
12
  import './chunk-2JV6WZ6O.js';
13
13
  import './chunk-6IATCGID.js';
@@ -25,7 +25,7 @@ import './chunk-6XWMNQ52.js';
25
25
  import './chunk-TP3LCGE7.js';
26
26
  import './chunk-Z653O7MX.js';
27
27
  import './chunk-ZCH7W7DZ.js';
28
- import './chunk-SSRNIBVV.js';
28
+ import './chunk-3U26OMNO.js';
29
29
  import './chunk-JWXJPJBO.js';
30
30
  import './chunk-CW625T2E.js';
31
31
  import './chunk-BVSJPBJ6.js';
@@ -37,7 +37,7 @@ import './chunk-YMVLYYLU.js';
37
37
  import './chunk-RJPPO3ET.js';
38
38
  import './chunk-Q7VWURUR.js';
39
39
  import './chunk-GU2KUQVD.js';
40
- import './chunk-CZS4ZHQK.js';
40
+ import './chunk-TDPAK42O.js';
41
41
  import './chunk-AXW67SY7.js';
42
42
  import './chunk-BYMOPN2S.js';
43
43
  import './chunk-6BZ5TKEV.js';
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/tanstack/router.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAMnF,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQhE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAqC7D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAoED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,KAG7B,SAAS,GAAG,kRAOrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,sCAkBhE;AAoHD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,CAAC,EAAE,CAAC,MAAM,SAAS,CAAC,GAAG,KAAK,CAAC;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,uGA6HzE;AAED,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,QAAQ;QAChB,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;KACzC;IAED,UAAU,aAAc,SAAQ,oBAAoB;KAAG;CACxD"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/tanstack/router.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAMnF,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQhE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAqC7D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAoED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,KAG7B,SAAS,GAAG,kRAOrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,sCAkBhE;AAmHD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,CAAC,EAAE,CAAC,MAAM,SAAS,CAAC,GAAG,KAAK,CAAC;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,mBAAmB,uGAgIzE;AAED,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,QAAQ;QAChB,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;KACzC;IAED,UAAU,aAAc,SAAQ,oBAAoB;KAAG;CACxD"}
package/dist/tanstack.js CHANGED
@@ -1,5 +1,5 @@
1
- import { rootHead } from './chunk-5FH6E2FQ.js';
2
- export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-5FH6E2FQ.js';
1
+ import { rootHead } from './chunk-Y7AHVMVQ.js';
2
+ export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-Y7AHVMVQ.js';
3
3
  export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-BWIESZJK.js';
4
4
  import './chunk-Z4Y55HWX.js';
5
5
  export { tanstackHeadAdapter as head, withHead } from './chunk-5TRRUV7N.js';
@@ -8,6 +8,7 @@ import './chunk-B3EFOE57.js';
8
8
  import './chunk-2KZORZZN.js';
9
9
  import './chunk-XTOXFAP7.js';
10
10
  import './chunk-TZ3E5BN4.js';
11
+ import './chunk-XLJPUFN4.js';
11
12
  import './chunk-6IATCGID.js';
12
13
  import './chunk-E5EH32L7.js';
13
14
  import './chunk-6KI2QCPL.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/request-host.ts","../src/tanstack/middleware/twilight.ts","../src/tanstack/middleware/earlyHints.ts"],"names":["createMiddleware"],"mappings":"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","file":"tanstack.js","sourcesContent":["/**\n * What the request itself is enough to describe: its host.\n *\n * Small, and deliberately its own module rather than a helper inside the\n * middleware. This value decides two things — which store a live storefront is,\n * and whether the request is allowed to name a store at all — so it is worth\n * testing directly instead of only through the wiring that calls it.\n */\n\n/** The part of a `Request` this needs, so a test does not have to build a whole one. */\nexport interface HostSource {\n url: string;\n headers: { get(name: string): string | null };\n}\n\n/**\n * The host this request arrived on, with its port when it has one.\n *\n * Taken from the request URL, which in a Worker is the address the platform\n * actually routed on, and from the `Host` header only when that fails.\n *\n * **`X-Forwarded-Host` is deliberately not consulted.** A client can set it, and\n * this value gates `allowsRequestStoreId` — so honouring it would be a way to\n * talk a merchant's own domain into behaving like the preview host, and from\n * there into serving a stranger's shop. The dispatcher strips that header today;\n * a theme must not be one edit to another repository's allowlist away from a\n * spoofable identity.\n */\nexport function requestHostOf(request: HostSource): string | null {\n try {\n const fromUrl = new URL(request.url).host;\n if (fromUrl) return fromUrl;\n } catch {\n /* an unparseable URL falls through to the header */\n }\n\n return request.headers.get('Host')?.trim() || null;\n}\n","import type { AnyRequestMiddleware } from '@tanstack/react-start';\nimport { createMiddleware } from '@tanstack/react-start';\nimport {\n extractTokenFromCookies,\n extractScopeFromCookies,\n resolveRequestStoreId,\n resolveRequestVersionId,\n AUTH_TOKEN_COOKIE_NAME,\n} from '../../utils/cookies';\nimport { runWithTwilightContext } from '../../twilight/context';\nimport { requestHostOf } from '../../utils/request-host';\n\ninterface TwilightMiddlewareOptions {\n cookieName?: string;\n}\n\nexport const twilightMiddleware = (options?: TwilightMiddlewareOptions): AnyRequestMiddleware => {\n const cookieName = options?.cookieName ?? AUTH_TOKEN_COOKIE_NAME;\n\n return createMiddleware().server(({ request, next }) => {\n const cookieHeader = request.headers.get('Cookie');\n const authToken = extractTokenFromCookies(cookieHeader, cookieName);\n const scope = extractScopeFromCookies(cookieHeader);\n const requestHost = requestHostOf(request);\n // Read here and nowhere else: a deployed theme worker has no vars and no\n // bindings, so the request is the only thing that knows which store it is\n // serving. Everything downstream reads it off the context rather than\n // reaching for a build-time constant that is not there in production.\n //\n // The host goes in because it decides whether the request is allowed to name\n // a store at all. On a merchant's own domain it is not: the hostname is the\n // store, and `?storeId=` there would serve a stranger's shop from a domain\n // its owner controls.\n const storeId = resolveRequestStoreId(request.url, cookieHeader, requestHost);\n // The version is read here for the same reason and behind the same gate. A\n // theme editor previews a draft version of a merchant's settings before it is\n // published, and a partner running the theme locally renders against one —\n // both open the storefront in an iframe and say which version in the URL.\n const versionId = resolveRequestVersionId(request.url, cookieHeader, requestHost);\n\n return runWithTwilightContext({ authToken, scope, storeId, versionId, requestHost }, () =>\n next({ context: { authToken } })\n );\n });\n};\n","import type { AnyRequestMiddleware } from '@tanstack/react-start';\nimport { createMiddleware } from '@tanstack/react-start';\nimport { tsrStartManifest } from 'tanstack-start-manifest:v';\nimport { rootHead } from '../../routes/root/head';\n\n/** Known critical assets that should always be preloaded */\nconst CRITICAL_ASSETS = [\n { rel: 'modulepreload', href: 'https://cdn.assets.salla.network/static/lit/3.3.3/lit.js' },\n { rel: 'preconnect', href: 'https://api.salla.dev' },\n { rel: 'preconnect', href: 'https://cdn.salla.sa' },\n { rel: 'preconnect', href: 'https://cdn.assets.salla.network', crossOrigin: 'anonymous' },\n { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossOrigin: 'anonymous' },\n] as const;\n\n/** Extract locale from URL path (e.g., /ar/products → 'ar') */\nfunction extractLocale(url: string): string | undefined {\n const match = url.match(/^\\/([a-z]{2})(\\/|$)/);\n return match?.[1];\n}\n\n/** Build Link header value from a link descriptor */\nfunction buildLinkHeader(link: Record<string, unknown>): string | null {\n const href = link.href as string | undefined;\n const rel = link.rel as string | undefined;\n if (!href || !rel) return null;\n\n // Skip print-media stylesheets (already non-blocking)\n if (rel === 'stylesheet') {\n const media = link.media as string | undefined;\n if (media === 'print') return null;\n return `<${href}>; rel=preload; as=style`;\n }\n\n if (rel === 'preload') {\n const asType = link.as as string | undefined;\n if (!asType) return null;\n const parts = [`<${href}>`, 'rel=preload', `as=${asType}`];\n if (asType === 'font' || link.crossOrigin) {\n parts.push('crossorigin');\n }\n return parts.join('; ');\n }\n\n if (rel === 'modulepreload') {\n return `<${href}>; rel=modulepreload`;\n }\n\n return null;\n}\n\nexport const earlyHintsMiddleware = (): AnyRequestMiddleware => {\n let cachedManifestPaths: string[] | null = null;\n\n return createMiddleware().server(async ({ request, next }) => {\n const response = await next();\n\n const accept = request.headers.get('Accept') ?? '';\n if (!accept.includes('text/html') && accept !== '*/*') return response;\n if (!(response instanceof Response)) return response;\n\n const linkHeaders: string[] = [];\n\n // 1. Add critical assets from rootHead (fonts, icons, SDK, etc.)\n try {\n const url = new URL(request.url);\n const locale = extractLocale(url.pathname);\n if (locale) {\n const headResult = rootHead({ params: { locale } });\n const links = (headResult.links as Record<string, unknown>[]) ?? [];\n for (const link of links) {\n const header = buildLinkHeader(link);\n if (header) linkHeaders.push(header);\n }\n }\n } catch (e) {\n // rootHead failed — log why, then fall back to known critical assets\n console.warn('[earlyHints] rootHead failed:', e instanceof Error ? e.message : e);\n for (const asset of CRITICAL_ASSETS) {\n const co = 'crossOrigin' in asset ? asset.crossOrigin : undefined;\n linkHeaders.push(`<${asset.href}>; rel=${asset.rel}${co ? '; crossorigin' : ''}`);\n }\n }\n\n // 2. Add CSS from TanStack Start manifest (bundled theme CSS)\n if (!cachedManifestPaths) {\n try {\n const manifest = tsrStartManifest();\n const rootAssets = manifest.routes['__root__']?.assets ?? [];\n const seen = new Set<string>();\n cachedManifestPaths = [];\n for (const asset of rootAssets) {\n if (asset.tag === 'link' && asset.attrs?.href?.endsWith('.css')) {\n if (!seen.has(asset.attrs.href)) {\n seen.add(asset.attrs.href);\n cachedManifestPaths.push(asset.attrs.href);\n }\n }\n }\n } catch (e) {\n // manifest not available — skip\n console.warn('[earlyHints] tsrStartManifest failed:', e instanceof Error ? e.message : e);\n }\n }\n\n if (cachedManifestPaths) {\n for (const href of cachedManifestPaths) {\n linkHeaders.push(`<${href}>; rel=preload; as=style`);\n }\n }\n\n // Apply Link headers if we have any\n if (linkHeaders.length === 0) {\n console.warn('[earlyHints] no critical assets found — no Link headers added');\n return response;\n }\n\n const headers = new Headers(response.headers);\n for (const linkHeader of linkHeaders) {\n headers.append('Link', linkHeader);\n }\n\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n });\n};\n"]}
1
+ {"version":3,"sources":["../src/utils/request-host.ts","../src/tanstack/middleware/twilight.ts","../src/tanstack/middleware/earlyHints.ts"],"names":["createMiddleware"],"mappings":"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","file":"tanstack.js","sourcesContent":["/**\n * What the request itself is enough to describe: its host.\n *\n * Small, and deliberately its own module rather than a helper inside the\n * middleware. This value decides two things — which store a live storefront is,\n * and whether the request is allowed to name a store at all — so it is worth\n * testing directly instead of only through the wiring that calls it.\n */\n\n/** The part of a `Request` this needs, so a test does not have to build a whole one. */\nexport interface HostSource {\n url: string;\n headers: { get(name: string): string | null };\n}\n\n/**\n * The host this request arrived on, with its port when it has one.\n *\n * Taken from the request URL, which in a Worker is the address the platform\n * actually routed on, and from the `Host` header only when that fails.\n *\n * **`X-Forwarded-Host` is deliberately not consulted.** A client can set it, and\n * this value gates `allowsRequestStoreId` — so honouring it would be a way to\n * talk a merchant's own domain into behaving like the preview host, and from\n * there into serving a stranger's shop. The dispatcher strips that header today;\n * a theme must not be one edit to another repository's allowlist away from a\n * spoofable identity.\n */\nexport function requestHostOf(request: HostSource): string | null {\n try {\n const fromUrl = new URL(request.url).host;\n if (fromUrl) return fromUrl;\n } catch {\n /* an unparseable URL falls through to the header */\n }\n\n return request.headers.get('Host')?.trim() || null;\n}\n","import type { AnyRequestMiddleware } from '@tanstack/react-start';\nimport { createMiddleware } from '@tanstack/react-start';\nimport {\n extractTokenFromCookies,\n extractScopeFromCookies,\n resolveRequestStoreId,\n resolveRequestVersionId,\n AUTH_TOKEN_COOKIE_NAME,\n} from '../../utils/cookies';\nimport { runWithTwilightContext } from '../../twilight/context';\nimport { requestHostOf } from '../../utils/request-host';\n\ninterface TwilightMiddlewareOptions {\n cookieName?: string;\n}\n\nexport const twilightMiddleware = (options?: TwilightMiddlewareOptions): AnyRequestMiddleware => {\n const cookieName = options?.cookieName ?? AUTH_TOKEN_COOKIE_NAME;\n\n return createMiddleware().server(({ request, next }) => {\n const cookieHeader = request.headers.get('Cookie');\n const authToken = extractTokenFromCookies(cookieHeader, cookieName);\n const scope = extractScopeFromCookies(cookieHeader);\n const requestHost = requestHostOf(request);\n // Read here and nowhere else: a deployed theme worker has no vars and no\n // bindings, so the request is the only thing that knows which store it is\n // serving. Everything downstream reads it off the context rather than\n // reaching for a build-time constant that is not there in production.\n //\n // The host goes in because it decides whether the request is allowed to name\n // a store at all. On a merchant's own domain it is not: the hostname is the\n // store, and `?storeId=` there would serve a stranger's shop from a domain\n // its owner controls.\n const storeId = resolveRequestStoreId(request.url, cookieHeader, requestHost);\n // The version is read here for the same reason and behind the same gate. A\n // theme editor previews a draft version of a merchant's settings before it is\n // published, and a partner running the theme locally renders against one —\n // both open the storefront in an iframe and say which version in the URL.\n const versionId = resolveRequestVersionId(request.url, cookieHeader, requestHost);\n\n return runWithTwilightContext({ authToken, scope, storeId, versionId, requestHost }, () =>\n next({ context: { authToken } })\n );\n });\n};\n","import type { AnyRequestMiddleware } from '@tanstack/react-start';\nimport { createMiddleware } from '@tanstack/react-start';\nimport { tsrStartManifest } from 'tanstack-start-manifest:v';\nimport { rootHead } from '../../routes/root/head';\n\n/** Known critical assets that should always be preloaded */\nconst CRITICAL_ASSETS = [\n { rel: 'modulepreload', href: 'https://cdn.assets.salla.network/static/lit/3.3.3/lit.js' },\n { rel: 'preconnect', href: 'https://api.salla.dev' },\n { rel: 'preconnect', href: 'https://cdn.salla.sa' },\n { rel: 'preconnect', href: 'https://cdn.assets.salla.network', crossOrigin: 'anonymous' },\n { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossOrigin: 'anonymous' },\n] as const;\n\n/** Extract locale from URL path (e.g., /ar/products → 'ar') */\nfunction extractLocale(url: string): string | undefined {\n const match = url.match(/^\\/([a-z]{2})(\\/|$)/);\n return match?.[1];\n}\n\n/** Build Link header value from a link descriptor */\nfunction buildLinkHeader(link: Record<string, unknown>): string | null {\n const href = link.href as string | undefined;\n const rel = link.rel as string | undefined;\n if (!href || !rel) return null;\n\n // Skip print-media stylesheets (already non-blocking)\n if (rel === 'stylesheet') {\n const media = link.media as string | undefined;\n if (media === 'print') return null;\n return `<${href}>; rel=preload; as=style`;\n }\n\n if (rel === 'preload') {\n const asType = link.as as string | undefined;\n if (!asType) return null;\n const parts = [`<${href}>`, 'rel=preload', `as=${asType}`];\n if (asType === 'font' || link.crossOrigin) {\n parts.push('crossorigin');\n }\n return parts.join('; ');\n }\n\n if (rel === 'modulepreload') {\n return `<${href}>; rel=modulepreload`;\n }\n\n return null;\n}\n\nexport const earlyHintsMiddleware = (): AnyRequestMiddleware => {\n let cachedManifestPaths: string[] | null = null;\n\n return createMiddleware().server(async ({ request, next }) => {\n const response = await next();\n\n const accept = request.headers.get('Accept') ?? '';\n if (!accept.includes('text/html') && accept !== '*/*') return response;\n if (!(response instanceof Response)) return response;\n\n const linkHeaders: string[] = [];\n\n // 1. Add critical assets from rootHead (fonts, icons, SDK, etc.)\n try {\n const url = new URL(request.url);\n const locale = extractLocale(url.pathname);\n if (locale) {\n const headResult = rootHead({ params: { locale } });\n const links = (headResult.links as Record<string, unknown>[]) ?? [];\n for (const link of links) {\n const header = buildLinkHeader(link);\n if (header) linkHeaders.push(header);\n }\n }\n } catch (e) {\n // rootHead failed — log why, then fall back to known critical assets\n console.warn('[earlyHints] rootHead failed:', e instanceof Error ? e.message : e);\n for (const asset of CRITICAL_ASSETS) {\n const co = 'crossOrigin' in asset ? asset.crossOrigin : undefined;\n linkHeaders.push(`<${asset.href}>; rel=${asset.rel}${co ? '; crossorigin' : ''}`);\n }\n }\n\n // 2. Add CSS from TanStack Start manifest (bundled theme CSS)\n if (!cachedManifestPaths) {\n try {\n const manifest = tsrStartManifest();\n const rootAssets = manifest.routes['__root__']?.assets ?? [];\n const seen = new Set<string>();\n cachedManifestPaths = [];\n for (const asset of rootAssets) {\n if (asset.tag === 'link' && asset.attrs?.href?.endsWith('.css')) {\n if (!seen.has(asset.attrs.href)) {\n seen.add(asset.attrs.href);\n cachedManifestPaths.push(asset.attrs.href);\n }\n }\n }\n } catch (e) {\n // manifest not available — skip\n console.warn('[earlyHints] tsrStartManifest failed:', e instanceof Error ? e.message : e);\n }\n }\n\n if (cachedManifestPaths) {\n for (const href of cachedManifestPaths) {\n linkHeaders.push(`<${href}>; rel=preload; as=style`);\n }\n }\n\n // Apply Link headers if we have any\n if (linkHeaders.length === 0) {\n console.warn('[earlyHints] no critical assets found — no Link headers added');\n return response;\n }\n\n const headers = new Headers(response.headers);\n for (const linkHeader of linkHeaders) {\n headers.append('Link', linkHeader);\n }\n\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n });\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salla.sa/twilight-theme-engine",
3
- "version": "1.0.37",
3
+ "version": "1.0.38",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/routes/account/wishlist/WishlistPage.tsx"],"names":[],"mappings":"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","file":"WishlistPage-XTQ6IRG7.js","sourcesContent":["import { useRef } from 'react';\nimport { ItemsList } from '@salla.sa/twilight-components-react';\nimport { SallaAddProductButton } from '@salla.sa/twilight-components-react/add-product-button';\nimport { SallaButton } from '@salla.sa/twilight-components-react/button';\nimport { wishlist } from '../../../api/wishlist';\nimport type { Product } from '../../../types';\nimport { HookSlot, useWishlist, useMoney } from '../../../hooks';\nimport { useTranslation } from '../../../providers/I18nProvider';\nimport type { WishlistPageProps } from './types';\nimport { NoContent, Image } from '../../../components/common';\nimport { useLocation } from '../../../providers/NavigationProvider';\n\nfunction WishlistCard({ product: prod }: { product: Product }) {\n const { remove } = useWishlist();\n const { format } = useMoney();\n\n const handleRemove = () => {\n if (prod.id) {\n remove(Number(prod.id));\n }\n };\n\n const displayPrice = prod.sale_price ?? prod.price;\n const regularPrice = prod.regular_price;\n\n return (\n <div id={`wishlist-product-${prod.id}`} className=\"product-entry product-entry--wishlist\">\n <div className=\"flex items-center mb-4 sm:mb-0\">\n <a href={prod.url} className=\"product-entry__image\">\n <Image\n className=\"object-cover w-full h-full\"\n src={prod.image?.url}\n alt={prod.image?.alt ?? prod.name}\n aspectRatio=\"1/1\"\n />\n </a>\n <div className=\"flex-1 rtl:pr-5 ltr:pl-5\">\n <h3 className=\"text-sm text-gray-800 leading-6 mb-1.5 rtl:pl-5 ltr:pr-5 rtl:md:pl-8 ltr:md:pr-8 line-clamp-1\">\n <a href={prod.url}>{prod.name}</a>\n </h3>\n <div className=\"w-full center-between\">\n {prod.is_on_sale && regularPrice ? (\n <div className=\"space-x-1 rtl:space-x-reverse\">\n <h4 className=\"inline-block text-sm font-bold text-red-400\">\n {format(displayPrice)}\n </h4>\n <span className=\"text-sm text-gray-500 line-through\">{format(regularPrice)}</span>\n </div>\n ) : (\n <h4 className=\"text-sm font-bold\">{format(displayPrice)}</h4>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex items-center space-x-4 rtl:space-x-reverse\">\n <SallaAddProductButton\n productStatus={prod.status}\n productId={prod.id}\n productType={prod.type}\n loaderPosition=\"center\"\n fill=\"outline\"\n className=\"flex-grow w-full sm:grow-0 md:w-40\"\n />\n <SallaButton\n loaderPosition=\"center\"\n shape=\"icon\"\n size=\"small\"\n color=\"danger\"\n className=\"btn--delete\"\n onClick={handleRemove}\n >\n <i className=\"sicon-cancel\" />\n </SallaButton>\n </div>\n </div>\n );\n}\n\nexport function WishlistPage({ query, products, pagination }: WishlistPageProps) {\n const { t } = useTranslation();\n const { pathname, searchStr } = useLocation();\n\n // Track the next page to load (starts at page 2 since page 1 is SSR)\n const nextPageRef = useRef(query.page + 1);\n\n const loader = async () => {\n const pageToLoad = nextPageRef.current;\n const result = await wishlist.list({ page: pageToLoad });\n\n nextPageRef.current = pageToLoad + 1;\n\n return {\n items: result.items,\n next: result.next,\n };\n };\n\n return (\n <div className=\"space-y-5\" id=\"wishlist\">\n <HookSlot name=\"customer:wishlist.items.start\" />\n <ItemsList<Product>\n items={products}\n loader={loader}\n mode={pagination?.next ? 'infinite' : 'static'}\n pageUrl={pathname + searchStr}\n className=\"s-products-list\"\n itemsClassName=\"s-products-list-wrapper s-products-list-row-cards\"\n empty={\n <div className=\"text-center py-16\">\n <NoContent\n icon=\"sicon-heart\"\n message={t('common.errors.no_wishlist', \"You don't have any wishes\")}\n actionLabel={t('pages.offer.continue_shopping', 'Continue shopping')}\n actionUrl=\"/\"\n />\n </div>\n }\n t={(key, fallback) => t(key, fallback || key)}\n >\n {(items) => items.map((prod) => <WishlistCard key={prod.id} product={prod} />)}\n </ItemsList>\n <HookSlot name=\"customer:wishlist.items.end\" />\n </div>\n );\n}\n"]}