@salla.sa/twilight-theme-engine 1.0.93 → 1.0.94

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 (128) hide show
  1. package/dist/{AddToCartForm-S74M3KJH.js → AddToCartForm-MASXVJOI.js} +3 -3
  2. package/dist/{AddToCartForm-S74M3KJH.js.map → AddToCartForm-MASXVJOI.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-IYNLHM3D.js → BlogAuthorPage-KRT7MRTC.js} +7 -7
  4. package/dist/{BlogAuthorPage-IYNLHM3D.js.map → BlogAuthorPage-KRT7MRTC.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-WHJLTBFR.js → BlogCategoryPage-OP3ETAMT.js} +7 -7
  6. package/dist/{BlogCategoryPage-WHJLTBFR.js.map → BlogCategoryPage-OP3ETAMT.js.map} +1 -1
  7. package/dist/{BlogPage-QFJHI6P4.js → BlogPage-RGAQVUDI.js} +6 -6
  8. package/dist/{BlogPage-QFJHI6P4.js.map → BlogPage-RGAQVUDI.js.map} +1 -1
  9. package/dist/{BlogSinglePage-ROXUFVN7.js → BlogSinglePage-VG4UXBTL.js} +6 -6
  10. package/dist/{BlogSinglePage-ROXUFVN7.js.map → BlogSinglePage-VG4UXBTL.js.map} +1 -1
  11. package/dist/{BlogTagPage-QOQYJAZK.js → BlogTagPage-G4IVHJD5.js} +7 -7
  12. package/dist/{BlogTagPage-QOQYJAZK.js.map → BlogTagPage-G4IVHJD5.js.map} +1 -1
  13. package/dist/{BrandsPage-Q5KIKCS6.js → BrandsPage-2JMPPOOU.js} +6 -6
  14. package/dist/{BrandsPage-Q5KIKCS6.js.map → BrandsPage-2JMPPOOU.js.map} +1 -1
  15. package/dist/{Breadcrumb-AE4O67KU.js → Breadcrumb-I3ZOGG2Y.js} +6 -6
  16. package/dist/{Breadcrumb-AE4O67KU.js.map → Breadcrumb-I3ZOGG2Y.js.map} +1 -1
  17. package/dist/{CartItem-OIJ3U3HJ.js → CartItem-YTPYETW6.js} +6 -6
  18. package/dist/{CartItem-OIJ3U3HJ.js.map → CartItem-YTPYETW6.js.map} +1 -1
  19. package/dist/{CartSummary-FZEH2QD3.js → CartSummary-DND7BO26.js} +6 -6
  20. package/dist/{CartSummary-FZEH2QD3.js.map → CartSummary-DND7BO26.js.map} +1 -1
  21. package/dist/{Copyright-N2UG6NNX.js → Copyright-RWML3BQV.js} +3 -3
  22. package/dist/{Copyright-N2UG6NNX.js.map → Copyright-RWML3BQV.js.map} +1 -1
  23. package/dist/{CustomerLayout-WWI6V56Q.js → CustomerLayout-HCYVBODI.js} +6 -6
  24. package/dist/{CustomerLayout-WWI6V56Q.js.map → CustomerLayout-HCYVBODI.js.map} +1 -1
  25. package/dist/{Footer-BILG7UOY.js → Footer-3GEKWEQD.js} +4 -4
  26. package/dist/{Footer-BILG7UOY.js.map → Footer-3GEKWEQD.js.map} +1 -1
  27. package/dist/{Header-ODLQT5I6.js → Header-QG4UO3MF.js} +4 -4
  28. package/dist/{Header-ODLQT5I6.js.map → Header-QG4UO3MF.js.map} +1 -1
  29. package/dist/{LoyaltyPage-UVWC5UIH.js → LoyaltyPage-ZMFYQMQY.js} +6 -6
  30. package/dist/{LoyaltyPage-UVWC5UIH.js.map → LoyaltyPage-ZMFYQMQY.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-2NFWJMFC.js → LoyaltyPointsPage-5PB6IFLY.js} +3 -3
  32. package/dist/{LoyaltyPointsPage-2NFWJMFC.js.map → LoyaltyPointsPage-5PB6IFLY.js.map} +1 -1
  33. package/dist/{MainMenu-3RVCNA4E.js → MainMenu-SAUMNMBF.js} +3 -3
  34. package/dist/{MainMenu-3RVCNA4E.js.map → MainMenu-SAUMNMBF.js.map} +1 -1
  35. package/dist/{MasterLayout-SI4JKGRR.js → MasterLayout-TY223YR7.js} +6 -6
  36. package/dist/{MasterLayout-SI4JKGRR.js.map → MasterLayout-TY223YR7.js.map} +1 -1
  37. package/dist/{MobileMenu-QROSE4PJ.js → MobileMenu-2WOWOFQB.js} +6 -6
  38. package/dist/{MobileMenu-QROSE4PJ.js.map → MobileMenu-2WOWOFQB.js.map} +1 -1
  39. package/dist/{NotificationsPage-V5OC6UIT.js → NotificationsPage-6FX4SOZU.js} +6 -6
  40. package/dist/{NotificationsPage-V5OC6UIT.js.map → NotificationsPage-6FX4SOZU.js.map} +1 -1
  41. package/dist/{OrderSinglePage-GUA5GH3N.js → OrderSinglePage-RUMSJIFD.js} +6 -6
  42. package/dist/{OrderSinglePage-GUA5GH3N.js.map → OrderSinglePage-RUMSJIFD.js.map} +1 -1
  43. package/dist/{OrdersPage-W23QNIRH.js → OrdersPage-B4Q4QIEM.js} +6 -6
  44. package/dist/{OrdersPage-W23QNIRH.js.map → OrdersPage-B4Q4QIEM.js.map} +1 -1
  45. package/dist/{PageSingle-HOQXGN3U.js → PageSingle-F4TDNKUM.js} +3 -3
  46. package/dist/{PageSingle-HOQXGN3U.js.map → PageSingle-F4TDNKUM.js.map} +1 -1
  47. package/dist/{ProductDetails-6BRTZY7H.js → ProductDetails-BNVVUDBH.js} +3 -3
  48. package/dist/{ProductDetails-6BRTZY7H.js.map → ProductDetails-BNVVUDBH.js.map} +1 -1
  49. package/dist/{ProfilePage-Q5FVFGWG.js → ProfilePage-OJSAXSC2.js} +6 -6
  50. package/dist/{ProfilePage-Q5FVFGWG.js.map → ProfilePage-OJSAXSC2.js.map} +1 -1
  51. package/dist/{ReviewsPage-LOUU4WD6.js → ReviewsPage-3IJKJKTY.js} +3 -3
  52. package/dist/{ReviewsPage-LOUU4WD6.js.map → ReviewsPage-3IJKJKTY.js.map} +1 -1
  53. package/dist/{SeoCartWidget-LWFHKRRO.js → SeoCartWidget-4PN2DW54.js} +6 -6
  54. package/dist/{SeoCartWidget-LWFHKRRO.js.map → SeoCartWidget-4PN2DW54.js.map} +1 -1
  55. package/dist/{SettingsPage-44QZUHLI.js → SettingsPage-BCRNV4GU.js} +6 -6
  56. package/dist/{SettingsPage-44QZUHLI.js.map → SettingsPage-BCRNV4GU.js.map} +1 -1
  57. package/dist/{StoreClosedNotification-EEIU2YWM.js → StoreClosedNotification-IRUTRLIH.js} +7 -7
  58. package/dist/{StoreClosedNotification-EEIU2YWM.js.map → StoreClosedNotification-IRUTRLIH.js.map} +1 -1
  59. package/dist/{TestimonialsPage-YI4FC5E5.js → TestimonialsPage-YU4PLOLR.js} +3 -3
  60. package/dist/{TestimonialsPage-YI4FC5E5.js.map → TestimonialsPage-YU4PLOLR.js.map} +1 -1
  61. package/dist/{ThankYouPage-4C2GGIO7.js → ThankYouPage-MUDELEIQ.js} +6 -6
  62. package/dist/{ThankYouPage-4C2GGIO7.js.map → ThankYouPage-MUDELEIQ.js.map} +1 -1
  63. package/dist/{WalletPage-5NGE6GQX.js → WalletPage-2I4KTR5E.js} +6 -6
  64. package/dist/{WalletPage-5NGE6GQX.js.map → WalletPage-2I4KTR5E.js.map} +1 -1
  65. package/dist/{WishlistPage-AVLNE2CB.js → WishlistPage-7AYL3RUD.js} +6 -6
  66. package/dist/{WishlistPage-AVLNE2CB.js.map → WishlistPage-7AYL3RUD.js.map} +1 -1
  67. package/dist/{chunk-AG5KE4WD.js → chunk-AV6AAVNU.js} +4 -4
  68. package/dist/{chunk-AG5KE4WD.js.map → chunk-AV6AAVNU.js.map} +1 -1
  69. package/dist/{chunk-NQUZ3IME.js → chunk-H7CVJFTK.js} +7 -7
  70. package/dist/{chunk-NQUZ3IME.js.map → chunk-H7CVJFTK.js.map} +1 -1
  71. package/dist/{chunk-T5U73NRX.js → chunk-HR3QJ3LW.js} +3 -3
  72. package/dist/{chunk-T5U73NRX.js.map → chunk-HR3QJ3LW.js.map} +1 -1
  73. package/dist/chunk-KZM7HXJ3.js +14 -0
  74. package/dist/{chunk-QHE3C4NU.js.map → chunk-KZM7HXJ3.js.map} +1 -1
  75. package/dist/{chunk-XCI2KDMK.js → chunk-LA7KZ2XY.js} +6 -6
  76. package/dist/{chunk-XCI2KDMK.js.map → chunk-LA7KZ2XY.js.map} +1 -1
  77. package/dist/{chunk-GOQZVW5O.js → chunk-OM26SAHA.js} +4 -4
  78. package/dist/{chunk-GOQZVW5O.js.map → chunk-OM26SAHA.js.map} +1 -1
  79. package/dist/{chunk-KCXOYLFK.js → chunk-OMKLPCBA.js} +3 -3
  80. package/dist/{chunk-KCXOYLFK.js.map → chunk-OMKLPCBA.js.map} +1 -1
  81. package/dist/{chunk-VPFBG3HF.js → chunk-RPDMNNRW.js} +7 -7
  82. package/dist/{chunk-VPFBG3HF.js.map → chunk-RPDMNNRW.js.map} +1 -1
  83. package/dist/{chunk-B373WMX6.js → chunk-TJF6YZ5I.js} +4 -4
  84. package/dist/{chunk-B373WMX6.js.map → chunk-TJF6YZ5I.js.map} +1 -1
  85. package/dist/{chunk-OZC7HYOU.js → chunk-WHJZP3QJ.js} +5 -5
  86. package/dist/{chunk-OZC7HYOU.js.map → chunk-WHJZP3QJ.js.map} +1 -1
  87. package/dist/{chunk-YKLDXH5S.js → chunk-Y357MBJI.js} +3 -3
  88. package/dist/{chunk-YKLDXH5S.js.map → chunk-Y357MBJI.js.map} +1 -1
  89. package/dist/{chunk-IT74HLW3.js → chunk-YDFOJBEY.js} +19 -3
  90. package/dist/chunk-YDFOJBEY.js.map +1 -0
  91. package/dist/{chunk-6TZ3SO3Y.js → chunk-ZFNLX3F7.js} +3 -3
  92. package/dist/{chunk-6TZ3SO3Y.js.map → chunk-ZFNLX3F7.js.map} +1 -1
  93. package/dist/components/cart/index.js +1 -1
  94. package/dist/components/common/index.js +1 -1
  95. package/dist/components/drawer/index.js +4 -4
  96. package/dist/components/home/index.js +6 -6
  97. package/dist/components/layout/Footer.d.ts.map +1 -1
  98. package/dist/components/layout/index.js +1 -1
  99. package/dist/components/product/index.js +5 -5
  100. package/dist/components/store/index.js +6 -6
  101. package/dist/{document-class-FIGA7FZI.js → document-class-AJGI7GKJ.js} +3 -3
  102. package/dist/{document-class-FIGA7FZI.js.map → document-class-AJGI7GKJ.js.map} +1 -1
  103. package/dist/hooks/index.js +4 -4
  104. package/dist/hooks/useGtm.js +4 -4
  105. package/dist/hooks/useMoney.js +4 -4
  106. package/dist/hooks/useStore.js +4 -4
  107. package/dist/index.js +4 -4
  108. package/dist/{not-found-EIWVYG7Z.js → not-found-NK6ZFJ7H.js} +6 -6
  109. package/dist/{not-found-EIWVYG7Z.js.map → not-found-NK6ZFJ7H.js.map} +1 -1
  110. package/dist/providers/index.js +4 -4
  111. package/dist/routes/account/orders.js +1 -1
  112. package/dist/routes/account.js +6 -6
  113. package/dist/routes/blog.js +5 -5
  114. package/dist/routes/brands.js +1 -1
  115. package/dist/routes/cart.js +8 -8
  116. package/dist/routes/home.js +7 -7
  117. package/dist/routes/loyalty.js +2 -2
  118. package/dist/routes/page.js +1 -1
  119. package/dist/routes/product-listing.js +6 -6
  120. package/dist/routes/product.js +6 -6
  121. package/dist/routes/testimonials.js +2 -2
  122. package/dist/routes/thank-you.js +1 -1
  123. package/dist/skeleton.js +7 -7
  124. package/dist/tanstack.js +1 -1
  125. package/package.json +1 -1
  126. package/tailwind/components/layout/Footer.tsx.txt +24 -3
  127. package/dist/chunk-IT74HLW3.js.map +0 -1
  128. package/dist/chunk-QHE3C4NU.js +0 -14
@@ -1,4 +1,4 @@
1
- export { RouteDocumentSync, TanStackDocumentSync, tanstackDocumentAdapter, useTanstackDocumentAttrs } from './chunk-6TZ3SO3Y.js';
1
+ export { RouteDocumentSync, TanStackDocumentSync, tanstackDocumentAdapter, useTanstackDocumentAttrs } from './chunk-ZFNLX3F7.js';
2
2
  import './chunk-Z4Y55HWX.js';
3
3
  import './chunk-N2A72R2I.js';
4
4
  import './chunk-MKVCFBVF.js';
@@ -24,5 +24,5 @@ import './chunk-N2S25NXP.js';
24
24
  import './chunk-T72DAX7R.js';
25
25
  import './chunk-DF6FBKDN.js';
26
26
  import './chunk-DGUM43GV.js';
27
- //# sourceMappingURL=document-class-FIGA7FZI.js.map
28
- //# sourceMappingURL=document-class-FIGA7FZI.js.map
27
+ //# sourceMappingURL=document-class-AJGI7GKJ.js.map
28
+ //# sourceMappingURL=document-class-AJGI7GKJ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-FIGA7FZI.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-AJGI7GKJ.js"}
@@ -1,6 +1,6 @@
1
- export { registerDefaultHooks, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore } from '../chunk-VPFBG3HF.js';
2
- import '../chunk-OZC7HYOU.js';
3
- import '../chunk-IT74HLW3.js';
1
+ export { registerDefaultHooks, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore } from '../chunk-RPDMNNRW.js';
2
+ import '../chunk-WHJZP3QJ.js';
3
+ import '../chunk-YDFOJBEY.js';
4
4
  import '../chunk-SFZ7IIWL.js';
5
5
  import '../chunk-2JV6WZ6O.js';
6
6
  import '../chunk-RV54D2D7.js';
@@ -32,7 +32,7 @@ export { HookSlot, useIsClient } from '../chunk-5XDPAKF5.js';
32
32
  export { HookRegistry, defineHooks, hookRegistry } from '../chunk-GCPEMNSU.js';
33
33
  import '../chunk-QGOPTVV5.js';
34
34
  import '../chunk-TYNZ5B2B.js';
35
- import '../chunk-KCXOYLFK.js';
35
+ import '../chunk-OMKLPCBA.js';
36
36
  import '../chunk-AXW67SY7.js';
37
37
  import '../chunk-BYMOPN2S.js';
38
38
  import '../chunk-SKLEJJ6M.js';
@@ -1,6 +1,6 @@
1
- export { useGtm } from '../chunk-VPFBG3HF.js';
2
- import '../chunk-OZC7HYOU.js';
3
- import '../chunk-IT74HLW3.js';
1
+ export { useGtm } from '../chunk-RPDMNNRW.js';
2
+ import '../chunk-WHJZP3QJ.js';
3
+ import '../chunk-YDFOJBEY.js';
4
4
  import '../chunk-SFZ7IIWL.js';
5
5
  import '../chunk-2JV6WZ6O.js';
6
6
  import '../chunk-RV54D2D7.js';
@@ -32,7 +32,7 @@ import '../chunk-5XDPAKF5.js';
32
32
  import '../chunk-GCPEMNSU.js';
33
33
  import '../chunk-QGOPTVV5.js';
34
34
  import '../chunk-TYNZ5B2B.js';
35
- import '../chunk-KCXOYLFK.js';
35
+ import '../chunk-OMKLPCBA.js';
36
36
  import '../chunk-AXW67SY7.js';
37
37
  import '../chunk-BYMOPN2S.js';
38
38
  import '../chunk-SKLEJJ6M.js';
@@ -1,6 +1,6 @@
1
- export { useMoney } from '../chunk-VPFBG3HF.js';
2
- import '../chunk-OZC7HYOU.js';
3
- import '../chunk-IT74HLW3.js';
1
+ export { useMoney } from '../chunk-RPDMNNRW.js';
2
+ import '../chunk-WHJZP3QJ.js';
3
+ import '../chunk-YDFOJBEY.js';
4
4
  import '../chunk-SFZ7IIWL.js';
5
5
  import '../chunk-2JV6WZ6O.js';
6
6
  import '../chunk-RV54D2D7.js';
@@ -32,7 +32,7 @@ import '../chunk-5XDPAKF5.js';
32
32
  import '../chunk-GCPEMNSU.js';
33
33
  import '../chunk-QGOPTVV5.js';
34
34
  import '../chunk-TYNZ5B2B.js';
35
- import '../chunk-KCXOYLFK.js';
35
+ import '../chunk-OMKLPCBA.js';
36
36
  import '../chunk-AXW67SY7.js';
37
37
  import '../chunk-BYMOPN2S.js';
38
38
  import '../chunk-SKLEJJ6M.js';
@@ -1,6 +1,6 @@
1
- export { useStore } from '../chunk-VPFBG3HF.js';
2
- import '../chunk-OZC7HYOU.js';
3
- import '../chunk-IT74HLW3.js';
1
+ export { useStore } from '../chunk-RPDMNNRW.js';
2
+ import '../chunk-WHJZP3QJ.js';
3
+ import '../chunk-YDFOJBEY.js';
4
4
  import '../chunk-SFZ7IIWL.js';
5
5
  import '../chunk-2JV6WZ6O.js';
6
6
  import '../chunk-RV54D2D7.js';
@@ -32,7 +32,7 @@ import '../chunk-5XDPAKF5.js';
32
32
  import '../chunk-GCPEMNSU.js';
33
33
  import '../chunk-QGOPTVV5.js';
34
34
  import '../chunk-TYNZ5B2B.js';
35
- import '../chunk-KCXOYLFK.js';
35
+ import '../chunk-OMKLPCBA.js';
36
36
  import '../chunk-AXW67SY7.js';
37
37
  import '../chunk-BYMOPN2S.js';
38
38
  import '../chunk-SKLEJJ6M.js';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { registry } from './chunk-Y32RHCOH.js';
2
2
  export { ComponentRegistry, registry } from './chunk-Y32RHCOH.js';
3
- export { TwilightProvider } from './chunk-VPFBG3HF.js';
4
- import './chunk-OZC7HYOU.js';
5
- import './chunk-IT74HLW3.js';
3
+ export { TwilightProvider } from './chunk-RPDMNNRW.js';
4
+ import './chunk-WHJZP3QJ.js';
5
+ import './chunk-YDFOJBEY.js';
6
6
  import './chunk-SFZ7IIWL.js';
7
7
  import './chunk-2JV6WZ6O.js';
8
8
  import './chunk-RV54D2D7.js';
@@ -34,7 +34,7 @@ import './chunk-5XDPAKF5.js';
34
34
  import './chunk-GCPEMNSU.js';
35
35
  import './chunk-QGOPTVV5.js';
36
36
  import './chunk-TYNZ5B2B.js';
37
- import './chunk-KCXOYLFK.js';
37
+ import './chunk-OMKLPCBA.js';
38
38
  import './chunk-AXW67SY7.js';
39
39
  import './chunk-BYMOPN2S.js';
40
40
  import './chunk-SKLEJJ6M.js';
@@ -1,7 +1,7 @@
1
1
  import { product } from './chunk-CEYT3JER.js';
2
- import './chunk-VPFBG3HF.js';
3
- import './chunk-OZC7HYOU.js';
4
- import './chunk-IT74HLW3.js';
2
+ import './chunk-RPDMNNRW.js';
3
+ import './chunk-WHJZP3QJ.js';
4
+ import './chunk-YDFOJBEY.js';
5
5
  import './chunk-SFZ7IIWL.js';
6
6
  import './chunk-2JV6WZ6O.js';
7
7
  import './chunk-RV54D2D7.js';
@@ -33,7 +33,7 @@ import { HookSlot } from './chunk-5XDPAKF5.js';
33
33
  import './chunk-GCPEMNSU.js';
34
34
  import './chunk-QGOPTVV5.js';
35
35
  import { useTranslation } from './chunk-TYNZ5B2B.js';
36
- import { LazyErrorPage } from './chunk-KCXOYLFK.js';
36
+ import { LazyErrorPage } from './chunk-OMKLPCBA.js';
37
37
  import './chunk-AXW67SY7.js';
38
38
  import './chunk-BYMOPN2S.js';
39
39
  import './chunk-SKLEJJ6M.js';
@@ -149,5 +149,5 @@ function NotFoundPage(props = {}) {
149
149
  }
150
150
 
151
151
  export { NotFoundPage };
152
- //# sourceMappingURL=not-found-EIWVYG7Z.js.map
153
- //# sourceMappingURL=not-found-EIWVYG7Z.js.map
152
+ //# sourceMappingURL=not-found-NK6ZFJ7H.js.map
153
+ //# sourceMappingURL=not-found-NK6ZFJ7H.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/product-short-link.ts","../src/routes/not-found.tsx"],"names":[],"mappings":"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","file":"not-found-EIWVYG7Z.js","sourcesContent":["import { useEffect, useState } from 'react';\nimport { product } from '../api/product';\nimport { isLocale } from '../providers/locale-constants';\nimport { useLocation, useNavigate } from '../providers/NavigationProvider';\n\n/** Short codes are 5-10 letters/digits (e.g. `lvXvzln`). */\nconst SHORT_CODE = /^[A-Za-z0-9]{5,10}$/;\n\n/**\n * The product short code in a path shaped `/{locale}/{code}` or `/{code}` (the\n * store base is already stripped from the router's location), plus the locale\n * segment to keep when redirecting. `null` for any other path.\n */\nexport function parseShortLinkPath(pathname: string): { code: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n if (segments.length === 2 && isLocale(segments[0]) && SHORT_CODE.test(segments[1])) {\n return { code: segments[1], locale: segments[0] };\n }\n if (segments.length === 1 && !isLocale(segments[0]) && SHORT_CODE.test(segments[0])) {\n return { code: segments[0] };\n }\n return null;\n}\n\n/** A product URL in the stores' \"new URLs\" format: `{sku}-{name}`, or `p{id}-{name}` without a SKU. */\nconst PRODUCT_KEY = /^([0-9A-Za-z]+)-./;\n\n/** The `{sku}` or `p{id}` key of `/{locale}/{sku}-{name}` or `/{sku}-{name}`, with that locale. */\nexport function parseProductKeyPath(pathname: string): { key: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n const hasLocale = segments.length === 2 && isLocale(segments[0]);\n if (!hasLocale && (segments.length !== 1 || isLocale(segments[0]))) return null;\n const key = segments[segments.length - 1].match(PRODUCT_KEY)?.[1];\n if (!key) return null;\n return hasLocale ? { key, locale: segments[0] } : { key };\n}\n\nfunction productKeyOf(url: string | undefined): string | undefined {\n try {\n const last = new URL(url ?? '').pathname.split('/').filter(Boolean).pop() ?? '';\n return last.match(PRODUCT_KEY)?.[1];\n } catch {\n return undefined;\n }\n}\n\n/** Like Laravel: `p{id}` is the id; anything else is a SKU, which only search can find. */\nasync function findByProductKey(key: string): Promise<number | null> {\n const id = key.match(/^p(\\d+)$/)?.[1];\n if (id) return Number(id);\n const { items } = await product.list({ source: 'search', keyword: key, perPage: 50 });\n const found = items.find((item) => productKeyOf(item.url) === key);\n return found ? Number(found.id) : null;\n}\n\n/** The SEO slug from a product URL (`…/{slug}/p{id}`), `-` when it has none. */\nexport function slugFromProductUrl(url: string | undefined): string {\n try {\n const segments = new URL(url ?? '').pathname.split('/').filter(Boolean);\n const last = segments[segments.length - 1] ?? '';\n return /^p\\d+$/.test(last) && segments.length > 1 ? segments[segments.length - 2] : '-';\n } catch {\n return '-';\n }\n}\n\n/**\n * Resolves a product URL that matched no route, a short link (`/ar/lvXvzln`) or\n * a \"new URLs\" one (`/ar/1213asa-chocolate`), and replaces the URL with the\n * product's page. Returns `true` while a lookup is in flight (so the 404 isn't\n * flashed); settles to `false` when the path is neither or doesn't resolve.\n */\nexport function useProductShortLink(): boolean {\n const { pathname } = useLocation();\n const navigate = useNavigate();\n const shortLink = parseShortLinkPath(pathname);\n const productKey = parseProductKeyPath(pathname);\n const lookup = shortLink?.code ?? productKey?.key;\n const locale = shortLink?.locale ?? productKey?.locale;\n const isShortLink = !!shortLink;\n const [failed, setFailed] = useState<string | null>(null);\n\n useEffect(() => {\n if (!lookup) return;\n let cancelled = false;\n const productPath = isShortLink\n ? product\n .find(lookup)\n .then((found) => (found?.id ? `${slugFromProductUrl(found.url)}/p${found.id}` : null))\n : findByProductKey(lookup).then((id) => (id ? `-/p${id}` : null));\n productPath\n .then((path) => {\n if (cancelled) return;\n if (!path) return setFailed(lookup);\n navigate(`${locale ? `/${locale}` : ''}/${path}`, { replace: true });\n })\n .catch(() => !cancelled && setFailed(lookup));\n return () => {\n cancelled = true;\n };\n }, [lookup, isShortLink, locale, navigate]);\n\n return !!lookup && failed !== lookup;\n}\n","import type { ComponentType, ReactNode } from 'react';\nimport { HookSlot } from '../hooks';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { ErrorPage } from '../components/common';\nimport { useProductShortLink } from './product-short-link';\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 // A product short link (`/ar/lvXvzln`) or \"new URLs\" link (`/ar/1213asa-name`) matches no route; resolve it instead of 404ing.\n const resolvingShortLink = useProductShortLink();\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 if (resolvingShortLink) return null;\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/product-short-link.ts","../src/routes/not-found.tsx"],"names":[],"mappings":"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","file":"not-found-NK6ZFJ7H.js","sourcesContent":["import { useEffect, useState } from 'react';\nimport { product } from '../api/product';\nimport { isLocale } from '../providers/locale-constants';\nimport { useLocation, useNavigate } from '../providers/NavigationProvider';\n\n/** Short codes are 5-10 letters/digits (e.g. `lvXvzln`). */\nconst SHORT_CODE = /^[A-Za-z0-9]{5,10}$/;\n\n/**\n * The product short code in a path shaped `/{locale}/{code}` or `/{code}` (the\n * store base is already stripped from the router's location), plus the locale\n * segment to keep when redirecting. `null` for any other path.\n */\nexport function parseShortLinkPath(pathname: string): { code: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n if (segments.length === 2 && isLocale(segments[0]) && SHORT_CODE.test(segments[1])) {\n return { code: segments[1], locale: segments[0] };\n }\n if (segments.length === 1 && !isLocale(segments[0]) && SHORT_CODE.test(segments[0])) {\n return { code: segments[0] };\n }\n return null;\n}\n\n/** A product URL in the stores' \"new URLs\" format: `{sku}-{name}`, or `p{id}-{name}` without a SKU. */\nconst PRODUCT_KEY = /^([0-9A-Za-z]+)-./;\n\n/** The `{sku}` or `p{id}` key of `/{locale}/{sku}-{name}` or `/{sku}-{name}`, with that locale. */\nexport function parseProductKeyPath(pathname: string): { key: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n const hasLocale = segments.length === 2 && isLocale(segments[0]);\n if (!hasLocale && (segments.length !== 1 || isLocale(segments[0]))) return null;\n const key = segments[segments.length - 1].match(PRODUCT_KEY)?.[1];\n if (!key) return null;\n return hasLocale ? { key, locale: segments[0] } : { key };\n}\n\nfunction productKeyOf(url: string | undefined): string | undefined {\n try {\n const last = new URL(url ?? '').pathname.split('/').filter(Boolean).pop() ?? '';\n return last.match(PRODUCT_KEY)?.[1];\n } catch {\n return undefined;\n }\n}\n\n/** Like Laravel: `p{id}` is the id; anything else is a SKU, which only search can find. */\nasync function findByProductKey(key: string): Promise<number | null> {\n const id = key.match(/^p(\\d+)$/)?.[1];\n if (id) return Number(id);\n const { items } = await product.list({ source: 'search', keyword: key, perPage: 50 });\n const found = items.find((item) => productKeyOf(item.url) === key);\n return found ? Number(found.id) : null;\n}\n\n/** The SEO slug from a product URL (`…/{slug}/p{id}`), `-` when it has none. */\nexport function slugFromProductUrl(url: string | undefined): string {\n try {\n const segments = new URL(url ?? '').pathname.split('/').filter(Boolean);\n const last = segments[segments.length - 1] ?? '';\n return /^p\\d+$/.test(last) && segments.length > 1 ? segments[segments.length - 2] : '-';\n } catch {\n return '-';\n }\n}\n\n/**\n * Resolves a product URL that matched no route, a short link (`/ar/lvXvzln`) or\n * a \"new URLs\" one (`/ar/1213asa-chocolate`), and replaces the URL with the\n * product's page. Returns `true` while a lookup is in flight (so the 404 isn't\n * flashed); settles to `false` when the path is neither or doesn't resolve.\n */\nexport function useProductShortLink(): boolean {\n const { pathname } = useLocation();\n const navigate = useNavigate();\n const shortLink = parseShortLinkPath(pathname);\n const productKey = parseProductKeyPath(pathname);\n const lookup = shortLink?.code ?? productKey?.key;\n const locale = shortLink?.locale ?? productKey?.locale;\n const isShortLink = !!shortLink;\n const [failed, setFailed] = useState<string | null>(null);\n\n useEffect(() => {\n if (!lookup) return;\n let cancelled = false;\n const productPath = isShortLink\n ? product\n .find(lookup)\n .then((found) => (found?.id ? `${slugFromProductUrl(found.url)}/p${found.id}` : null))\n : findByProductKey(lookup).then((id) => (id ? `-/p${id}` : null));\n productPath\n .then((path) => {\n if (cancelled) return;\n if (!path) return setFailed(lookup);\n navigate(`${locale ? `/${locale}` : ''}/${path}`, { replace: true });\n })\n .catch(() => !cancelled && setFailed(lookup));\n return () => {\n cancelled = true;\n };\n }, [lookup, isShortLink, locale, navigate]);\n\n return !!lookup && failed !== lookup;\n}\n","import type { ComponentType, ReactNode } from 'react';\nimport { HookSlot } from '../hooks';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { ErrorPage } from '../components/common';\nimport { useProductShortLink } from './product-short-link';\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 // A product short link (`/ar/lvXvzln`) or \"new URLs\" link (`/ar/1213asa-name`) matches no route; resolve it instead of 404ing.\n const resolvingShortLink = useProductShortLink();\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 if (resolvingShortLink) return null;\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,6 +1,6 @@
1
- export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-VPFBG3HF.js';
2
- import '../chunk-OZC7HYOU.js';
3
- import '../chunk-IT74HLW3.js';
1
+ export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-RPDMNNRW.js';
2
+ import '../chunk-WHJZP3QJ.js';
3
+ import '../chunk-YDFOJBEY.js';
4
4
  import '../chunk-SFZ7IIWL.js';
5
5
  import '../chunk-2JV6WZ6O.js';
6
6
  import '../chunk-RV54D2D7.js';
@@ -32,7 +32,7 @@ import '../chunk-5XDPAKF5.js';
32
32
  import '../chunk-GCPEMNSU.js';
33
33
  import '../chunk-QGOPTVV5.js';
34
34
  import '../chunk-TYNZ5B2B.js';
35
- import '../chunk-KCXOYLFK.js';
35
+ import '../chunk-OMKLPCBA.js';
36
36
  import '../chunk-AXW67SY7.js';
37
37
  export { LinkProvider, LinkProviderError, createLinkWithAdapter, useLinkAdapter } from '../chunk-BYMOPN2S.js';
38
38
  import '../chunk-SKLEJJ6M.js';
@@ -1,4 +1,4 @@
1
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-AG5KE4WD.js';
1
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-AV6AAVNU.js';
2
2
  import '../../chunk-TEOVJ6WU.js';
3
3
  import '../../chunk-4SZZPXM2.js';
4
4
  import '../../chunk-JTOVO3ZU.js';
@@ -1,5 +1,5 @@
1
1
  import { wallet } from '../chunk-HQAFPDJK.js';
2
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-AG5KE4WD.js';
2
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-AV6AAVNU.js';
3
3
  import '../chunk-TEOVJ6WU.js';
4
4
  import { notification } from '../chunk-6OOTDFC7.js';
5
5
  import { wishlist } from '../chunk-UURVAJ42.js';
@@ -30,7 +30,7 @@ async function profileLoader(_ctx) {
30
30
 
31
31
  // src/routes/account/profile/index.tsx
32
32
  var LazyProfilePage = lazy(
33
- () => import('../ProfilePage-Q5FVFGWG.js').then((m) => ({ default: m.ProfilePage }))
33
+ () => import('../ProfilePage-OJSAXSC2.js').then((m) => ({ default: m.ProfilePage }))
34
34
  );
35
35
  var ProfilePage = LazyProfilePage;
36
36
  var Profile = {
@@ -72,7 +72,7 @@ async function wishlistLoader(ctx) {
72
72
 
73
73
  // src/routes/account/wishlist/index.tsx
74
74
  var LazyWishlistPage = lazy(
75
- () => import('../WishlistPage-AVLNE2CB.js').then((m) => ({ default: m.WishlistPage }))
75
+ () => import('../WishlistPage-7AYL3RUD.js').then((m) => ({ default: m.WishlistPage }))
76
76
  );
77
77
  var WishlistPage = LazyWishlistPage;
78
78
  var Wishlist = {
@@ -114,7 +114,7 @@ async function walletLoader(ctx) {
114
114
  }
115
115
 
116
116
  // src/routes/account/wallet/index.tsx
117
- var LazyWalletPage = lazy(() => import('../WalletPage-5NGE6GQX.js').then((m) => ({ default: m.WalletPage })));
117
+ var LazyWalletPage = lazy(() => import('../WalletPage-2I4KTR5E.js').then((m) => ({ default: m.WalletPage })));
118
118
  var WalletPage = LazyWalletPage;
119
119
  var Wallet = {
120
120
  id: RouteId.CUSTOMER_WALLET,
@@ -150,7 +150,7 @@ async function notificationsLoader(_ctx) {
150
150
 
151
151
  // src/routes/account/notifications/index.tsx
152
152
  var LazyNotificationsPage = lazy(
153
- () => import('../NotificationsPage-V5OC6UIT.js').then((m) => ({ default: m.NotificationsPage }))
153
+ () => import('../NotificationsPage-6FX4SOZU.js').then((m) => ({ default: m.NotificationsPage }))
154
154
  );
155
155
  var NotificationsPage = LazyNotificationsPage;
156
156
  var Notifications = {
@@ -183,7 +183,7 @@ async function settingsLoader(_ctx) {
183
183
 
184
184
  // src/routes/account/settings/index.tsx
185
185
  var LazySettingsPage = lazy(
186
- () => import('../SettingsPage-44QZUHLI.js').then((m) => ({ default: m.SettingsPage }))
186
+ () => import('../SettingsPage-BCRNV4GU.js').then((m) => ({ default: m.SettingsPage }))
187
187
  );
188
188
  var SettingsPage = LazySettingsPage;
189
189
  var Settings = {
@@ -144,18 +144,18 @@ async function blogTagLoader({
144
144
  }
145
145
 
146
146
  // src/routes/blog/index.tsx
147
- var LazyBlogPage = lazy(() => import('../BlogPage-QFJHI6P4.js').then((m) => ({ default: m.BlogPage })));
147
+ var LazyBlogPage = lazy(() => import('../BlogPage-RGAQVUDI.js').then((m) => ({ default: m.BlogPage })));
148
148
  var LazyBlogSinglePage = lazy(
149
- () => import('../BlogSinglePage-ROXUFVN7.js').then((m) => ({ default: m.BlogSinglePage }))
149
+ () => import('../BlogSinglePage-VG4UXBTL.js').then((m) => ({ default: m.BlogSinglePage }))
150
150
  );
151
151
  var LazyBlogAuthorPage = lazy(
152
- () => import('../BlogAuthorPage-IYNLHM3D.js').then((m) => ({ default: m.BlogAuthorPage }))
152
+ () => import('../BlogAuthorPage-KRT7MRTC.js').then((m) => ({ default: m.BlogAuthorPage }))
153
153
  );
154
154
  var LazyBlogCategoryPage = lazy(
155
- () => import('../BlogCategoryPage-WHJLTBFR.js').then((m) => ({ default: m.BlogCategoryPage }))
155
+ () => import('../BlogCategoryPage-OP3ETAMT.js').then((m) => ({ default: m.BlogCategoryPage }))
156
156
  );
157
157
  var LazyBlogTagPage = lazy(
158
- () => import('../BlogTagPage-QOQYJAZK.js').then((m) => ({ default: m.BlogTagPage }))
158
+ () => import('../BlogTagPage-G4IVHJD5.js').then((m) => ({ default: m.BlogTagPage }))
159
159
  );
160
160
  var BlogPage = LazyBlogPage;
161
161
  var BlogSinglePage = LazyBlogSinglePage;
@@ -23,7 +23,7 @@ async function brandsLoader() {
23
23
  }
24
24
 
25
25
  // src/routes/brands/index.tsx
26
- var LazyBrandsPage = lazy(() => import('../BrandsPage-Q5KIKCS6.js').then((m) => ({ default: m.BrandsPage })));
26
+ var LazyBrandsPage = lazy(() => import('../BrandsPage-2JMPPOOU.js').then((m) => ({ default: m.BrandsPage })));
27
27
  var BrandsPage = LazyBrandsPage;
28
28
  async function brandsLoaderWithExtend(_ctx, extend) {
29
29
  const data = await brandsLoader();
@@ -1,16 +1,16 @@
1
1
  import { cart } from '../chunk-HCA2TE4G.js';
2
2
  import { loyalty } from '../chunk-3MIFT4VQ.js';
3
3
  import { CartSkeleton } from '../chunk-N7CCSGZF.js';
4
- import '../chunk-YKLDXH5S.js';
5
- import '../chunk-B373WMX6.js';
4
+ import '../chunk-Y357MBJI.js';
5
+ import '../chunk-TJF6YZ5I.js';
6
6
  import '../chunk-FZYR4BA2.js';
7
7
  import '../chunk-CEYT3JER.js';
8
- import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-QHE3C4NU.js';
9
- import '../chunk-XCI2KDMK.js';
8
+ import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-KZM7HXJ3.js';
9
+ import '../chunk-LA7KZ2XY.js';
10
10
  import '../chunk-Y32RHCOH.js';
11
- import '../chunk-VPFBG3HF.js';
12
- import '../chunk-OZC7HYOU.js';
13
- import '../chunk-IT74HLW3.js';
11
+ import '../chunk-RPDMNNRW.js';
12
+ import '../chunk-WHJZP3QJ.js';
13
+ import '../chunk-YDFOJBEY.js';
14
14
  import '../chunk-SFZ7IIWL.js';
15
15
  import '../chunk-2JV6WZ6O.js';
16
16
  import '../chunk-RV54D2D7.js';
@@ -42,7 +42,7 @@ import { HookSlot } from '../chunk-5XDPAKF5.js';
42
42
  import '../chunk-GCPEMNSU.js';
43
43
  import '../chunk-QGOPTVV5.js';
44
44
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
45
- import { LazyBreadcrumb, LazyNoContent } from '../chunk-KCXOYLFK.js';
45
+ import { LazyBreadcrumb, LazyNoContent } from '../chunk-OMKLPCBA.js';
46
46
  import '../chunk-AXW67SY7.js';
47
47
  import '../chunk-BYMOPN2S.js';
48
48
  import '../chunk-SKLEJJ6M.js';
@@ -1,12 +1,12 @@
1
- export { Home, HomeSkeleton, homeLoader } from '../chunk-YKLDXH5S.js';
2
- export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-B373WMX6.js';
1
+ export { Home, HomeSkeleton, homeLoader } from '../chunk-Y357MBJI.js';
2
+ export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-TJF6YZ5I.js';
3
3
  import '../chunk-FZYR4BA2.js';
4
4
  import '../chunk-CEYT3JER.js';
5
- import '../chunk-XCI2KDMK.js';
5
+ import '../chunk-LA7KZ2XY.js';
6
6
  import '../chunk-Y32RHCOH.js';
7
- import '../chunk-VPFBG3HF.js';
8
- import '../chunk-OZC7HYOU.js';
9
- import '../chunk-IT74HLW3.js';
7
+ import '../chunk-RPDMNNRW.js';
8
+ import '../chunk-WHJZP3QJ.js';
9
+ import '../chunk-YDFOJBEY.js';
10
10
  import '../chunk-SFZ7IIWL.js';
11
11
  import '../chunk-2JV6WZ6O.js';
12
12
  import '../chunk-RV54D2D7.js';
@@ -38,7 +38,7 @@ import '../chunk-5XDPAKF5.js';
38
38
  import '../chunk-GCPEMNSU.js';
39
39
  import '../chunk-QGOPTVV5.js';
40
40
  import '../chunk-TYNZ5B2B.js';
41
- import '../chunk-KCXOYLFK.js';
41
+ import '../chunk-OMKLPCBA.js';
42
42
  import '../chunk-AXW67SY7.js';
43
43
  import '../chunk-BYMOPN2S.js';
44
44
  import '../chunk-SKLEJJ6M.js';
@@ -57,10 +57,10 @@ async function loyaltyPointsLoader(locale) {
57
57
 
58
58
  // src/routes/loyalty/index.tsx
59
59
  var LazyLoyaltyPage = lazy(
60
- () => import('../LoyaltyPage-UVWC5UIH.js').then((m) => ({ default: m.LoyaltyPage }))
60
+ () => import('../LoyaltyPage-ZMFYQMQY.js').then((m) => ({ default: m.LoyaltyPage }))
61
61
  );
62
62
  var LazyLoyaltyPointsPage = lazy(
63
- () => import('../LoyaltyPointsPage-2NFWJMFC.js').then((m) => ({ default: m.LoyaltyPointsPage }))
63
+ () => import('../LoyaltyPointsPage-5PB6IFLY.js').then((m) => ({ default: m.LoyaltyPointsPage }))
64
64
  );
65
65
  var LoyaltyPage = LazyLoyaltyPage;
66
66
  var LoyaltyPointsPage = LazyLoyaltyPointsPage;
@@ -28,7 +28,7 @@ async function pageSingleLoader({ params }) {
28
28
  }
29
29
 
30
30
  // src/routes/page/index.tsx
31
- var LazyPageSingle = lazy(() => import('../PageSingle-HOQXGN3U.js').then((m) => ({ default: m.PageSingle })));
31
+ var LazyPageSingle = lazy(() => import('../PageSingle-F4TDNKUM.js').then((m) => ({ default: m.PageSingle })));
32
32
  var PageSingleLazy = LazyPageSingle;
33
33
  async function loader(ctx, extend) {
34
34
  const data = await pageSingleLoader({ params: ctx.params });
@@ -1,15 +1,15 @@
1
1
  import { SORT_IDS, availableSortIds, sortOptions } from '../chunk-3LZJXKVO.js';
2
2
  import { category } from '../chunk-43D2CG4F.js';
3
3
  import { brand } from '../chunk-LPQ5FUMJ.js';
4
- import { useReorderButtons, LazyTestimonials } from '../chunk-B373WMX6.js';
4
+ import { useReorderButtons, LazyTestimonials } from '../chunk-TJF6YZ5I.js';
5
5
  import '../chunk-FZYR4BA2.js';
6
6
  import { product, parseNextPageToken } from '../chunk-CEYT3JER.js';
7
7
  import { Drawer } from '../chunk-6TKIUG5C.js';
8
- import { ProductCard } from '../chunk-XCI2KDMK.js';
8
+ import { ProductCard } from '../chunk-LA7KZ2XY.js';
9
9
  import { registry, COMPONENT_KEYS } from '../chunk-Y32RHCOH.js';
10
- import { useStore } from '../chunk-VPFBG3HF.js';
11
- import '../chunk-OZC7HYOU.js';
12
- import '../chunk-IT74HLW3.js';
10
+ import { useStore } from '../chunk-RPDMNNRW.js';
11
+ import '../chunk-WHJZP3QJ.js';
12
+ import '../chunk-YDFOJBEY.js';
13
13
  import '../chunk-SFZ7IIWL.js';
14
14
  import '../chunk-2JV6WZ6O.js';
15
15
  import '../chunk-RV54D2D7.js';
@@ -41,7 +41,7 @@ import { HookSlot } from '../chunk-5XDPAKF5.js';
41
41
  import '../chunk-GCPEMNSU.js';
42
42
  import { getAuthToken } from '../chunk-QGOPTVV5.js';
43
43
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
44
- import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-KCXOYLFK.js';
44
+ import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-OMKLPCBA.js';
45
45
  import '../chunk-AXW67SY7.js';
46
46
  import '../chunk-BYMOPN2S.js';
47
47
  import '../chunk-SKLEJJ6M.js';
@@ -1,11 +1,11 @@
1
- import { ProductsSlider, LazyTestimonials } from '../chunk-B373WMX6.js';
1
+ import { ProductsSlider, LazyTestimonials } from '../chunk-TJF6YZ5I.js';
2
2
  import '../chunk-FZYR4BA2.js';
3
3
  import { product } from '../chunk-CEYT3JER.js';
4
- import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-XCI2KDMK.js';
4
+ import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-LA7KZ2XY.js';
5
5
  import '../chunk-Y32RHCOH.js';
6
- import { fastCheckoutScript } from '../chunk-VPFBG3HF.js';
7
- import '../chunk-OZC7HYOU.js';
8
- import '../chunk-IT74HLW3.js';
6
+ import { fastCheckoutScript } from '../chunk-RPDMNNRW.js';
7
+ import '../chunk-WHJZP3QJ.js';
8
+ import '../chunk-YDFOJBEY.js';
9
9
  import '../chunk-SFZ7IIWL.js';
10
10
  import '../chunk-2JV6WZ6O.js';
11
11
  import '../chunk-RV54D2D7.js';
@@ -37,7 +37,7 @@ import { HookSlot } from '../chunk-5XDPAKF5.js';
37
37
  import '../chunk-GCPEMNSU.js';
38
38
  import { getActiveCurrency } from '../chunk-QGOPTVV5.js';
39
39
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
40
- import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-KCXOYLFK.js';
40
+ import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-OMKLPCBA.js';
41
41
  import '../chunk-AXW67SY7.js';
42
42
  import '../chunk-BYMOPN2S.js';
43
43
  import '../chunk-SKLEJJ6M.js';
@@ -32,10 +32,10 @@ async function reviewsLoader() {
32
32
 
33
33
  // src/routes/testimonials/index.tsx
34
34
  var LazyTestimonialsPage = lazy(
35
- () => import('../TestimonialsPage-YI4FC5E5.js').then((m) => ({ default: m.TestimonialsPage }))
35
+ () => import('../TestimonialsPage-YU4PLOLR.js').then((m) => ({ default: m.TestimonialsPage }))
36
36
  );
37
37
  var LazyReviewsPage = lazy(
38
- () => import('../ReviewsPage-LOUU4WD6.js').then((m) => ({ default: m.ReviewsPage }))
38
+ () => import('../ReviewsPage-3IJKJKTY.js').then((m) => ({ default: m.ReviewsPage }))
39
39
  );
40
40
  var TestimonialsPage = LazyTestimonialsPage;
41
41
  var ReviewsPage = LazyReviewsPage;
@@ -39,7 +39,7 @@ async function thankYouLoader({
39
39
 
40
40
  // src/routes/thank-you/index.tsx
41
41
  var LazyThankYouPage = lazy(
42
- () => import('../ThankYouPage-4C2GGIO7.js').then((m) => ({ default: m.ThankYouPage }))
42
+ () => import('../ThankYouPage-MUDELEIQ.js').then((m) => ({ default: m.ThankYouPage }))
43
43
  );
44
44
  var ThankYouPage = LazyThankYouPage;
45
45
  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-YKLDXH5S.js';
3
- import './chunk-B373WMX6.js';
2
+ export { HomeSkeleton } from './chunk-Y357MBJI.js';
3
+ import './chunk-TJF6YZ5I.js';
4
4
  import './chunk-FZYR4BA2.js';
5
5
  import './chunk-CEYT3JER.js';
6
- import './chunk-XCI2KDMK.js';
6
+ import './chunk-LA7KZ2XY.js';
7
7
  import './chunk-Y32RHCOH.js';
8
- import './chunk-VPFBG3HF.js';
9
- import './chunk-OZC7HYOU.js';
10
- import './chunk-IT74HLW3.js';
8
+ import './chunk-RPDMNNRW.js';
9
+ import './chunk-WHJZP3QJ.js';
10
+ import './chunk-YDFOJBEY.js';
11
11
  import './chunk-SFZ7IIWL.js';
12
12
  import './chunk-2JV6WZ6O.js';
13
13
  import './chunk-RV54D2D7.js';
@@ -39,7 +39,7 @@ import './chunk-5XDPAKF5.js';
39
39
  import './chunk-GCPEMNSU.js';
40
40
  import './chunk-QGOPTVV5.js';
41
41
  import './chunk-TYNZ5B2B.js';
42
- import './chunk-KCXOYLFK.js';
42
+ import './chunk-OMKLPCBA.js';
43
43
  import './chunk-AXW67SY7.js';
44
44
  import './chunk-BYMOPN2S.js';
45
45
  import './chunk-SKLEJJ6M.js';
package/dist/tanstack.js CHANGED
@@ -1,4 +1,4 @@
1
- export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-6TZ3SO3Y.js';
1
+ export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-ZFNLX3F7.js';
2
2
  import { requestHostOf } from './chunk-C4RXPVDF.js';
3
3
  export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-C4RXPVDF.js';
4
4
  import './chunk-Z4Y55HWX.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salla.sa/twilight-theme-engine",
3
- "version": "1.0.93",
3
+ "version": "1.0.94",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,5 +1,6 @@
1
1
  import { useState } from 'react';
2
2
  import { SallaAppsIcons } from '@salla.sa/twilight-components-react/apps-icons';
3
+ import { SallaContacts } from '@salla.sa/twilight-components-react/contacts';
3
4
  import { SallaSocial } from '@salla.sa/twilight-components-react/social';
4
5
  import { SallaMenu } from '@salla.sa/twilight-components-react/menu';
5
6
  import { SallaTrustBadges } from '@salla.sa/twilight-components-react/trust-badges';
@@ -217,13 +218,32 @@ function FooterDescription({ className }: { className: string }) {
217
218
  );
218
219
  }
219
220
 
220
- /** Centered layout: logo, description, social, footer menu, trust badges and
221
- * app buttons stacked as one centered column. */
221
+ /** The store's phone and email as one "Contact us: …" row under the description
222
+ * (`<salla-contacts>`'s compact `isHeader` layout, which shows only those two).
223
+ * Renders nothing when the store has neither. */
224
+ function FooterContacts({ className }: { className: string }) {
225
+ const { store } = useTwilight();
226
+ const { t } = useTranslation();
227
+ if (!store.contacts?.phone && !store.contacts?.email) return null;
228
+ return (
229
+ <div className={`store-footer__contacts ${className}`}>
230
+ <SallaContacts
231
+ contacts={store.contacts}
232
+ contactsTitle={t('blocks.footer.social', 'Contact us')}
233
+ isHeader
234
+ />
235
+ </div>
236
+ );
237
+ }
238
+
239
+ /** Centered layout: logo, description, contacts, social, footer menu, trust
240
+ * badges and app buttons stacked as one centered column. */
222
241
  function FooterCenteredBody({ inSheet, isDark }: { inSheet: boolean; isDark: boolean }) {
223
242
  return (
224
243
  <div className="container mx-auto flex max-w-2xl flex-col items-center gap-6 text-center">
225
244
  <FooterLogo className="" />
226
245
  <FooterDescription className="" />
246
+ <FooterContacts className="" />
227
247
  <SallaSocial />
228
248
 
229
249
  <FooterLinksMenu
@@ -239,7 +259,7 @@ function FooterCenteredBody({ inSheet, isDark }: { inSheet: boolean; isDark: boo
239
259
  );
240
260
  }
241
261
 
242
- /** Columns layout: brand (logo / description / social / trust) and app
262
+ /** Columns layout: brand (logo / description / contacts / social / trust) and app
243
263
  * buttons side by side, with the footer menu as its own labeled column. */
244
264
  function FooterColumnsBody({ inSheet, isDark }: { inSheet: boolean; isDark: boolean }) {
245
265
  const { t } = useTranslation();
@@ -249,6 +269,7 @@ function FooterColumnsBody({ inSheet, isDark }: { inSheet: boolean; isDark: bool
249
269
  <div className="store-footer__brand rtl:lg:pl-16 ltr:lg:pr-16 sm:col-span-2">
250
270
  <FooterLogo className="mb-5" />
251
271
  <FooterDescription className="max-w-sm leading-6 my-5" />
272
+ <FooterContacts className="mb-6" />
252
273
  <SallaSocial className="block mb-6" />
253
274
  <FooterTrust dark={isDark} centered={false} />
254
275
  </div>