@salla.sa/twilight-theme-engine 1.0.105 → 1.0.106

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 (138) hide show
  1. package/dist/{AddToCartForm-LWSRJJSF.js → AddToCartForm-DQ3VNTFE.js} +3 -3
  2. package/dist/{AddToCartForm-LWSRJJSF.js.map → AddToCartForm-DQ3VNTFE.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-E2BONAKB.js → BlogAuthorPage-DSFZ6OLA.js} +7 -7
  4. package/dist/{BlogAuthorPage-E2BONAKB.js.map → BlogAuthorPage-DSFZ6OLA.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-F5G35XQE.js → BlogCategoryPage-AD5LV4R3.js} +7 -7
  6. package/dist/{BlogCategoryPage-F5G35XQE.js.map → BlogCategoryPage-AD5LV4R3.js.map} +1 -1
  7. package/dist/{BlogPage-W4NDWE5Q.js → BlogPage-GXGSY6ET.js} +6 -6
  8. package/dist/{BlogPage-W4NDWE5Q.js.map → BlogPage-GXGSY6ET.js.map} +1 -1
  9. package/dist/{BlogSinglePage-543VMKSI.js → BlogSinglePage-KHF37HSX.js} +6 -6
  10. package/dist/{BlogSinglePage-543VMKSI.js.map → BlogSinglePage-KHF37HSX.js.map} +1 -1
  11. package/dist/{BlogTagPage-KDQVHQ65.js → BlogTagPage-OSWZDEND.js} +7 -7
  12. package/dist/{BlogTagPage-KDQVHQ65.js.map → BlogTagPage-OSWZDEND.js.map} +1 -1
  13. package/dist/{BrandsPage-ABKUKE5J.js → BrandsPage-T2AVCDET.js} +6 -6
  14. package/dist/{BrandsPage-ABKUKE5J.js.map → BrandsPage-T2AVCDET.js.map} +1 -1
  15. package/dist/{Breadcrumb-WBTLVXYF.js → Breadcrumb-6CMWBRFH.js} +6 -6
  16. package/dist/{Breadcrumb-WBTLVXYF.js.map → Breadcrumb-6CMWBRFH.js.map} +1 -1
  17. package/dist/{CartItem-KNFR7K7Z.js → CartItem-SVR5WS4N.js} +6 -6
  18. package/dist/{CartItem-KNFR7K7Z.js.map → CartItem-SVR5WS4N.js.map} +1 -1
  19. package/dist/{CartSummary-EQ4GTR4Y.js → CartSummary-RCX2NAF5.js} +6 -6
  20. package/dist/{CartSummary-EQ4GTR4Y.js.map → CartSummary-RCX2NAF5.js.map} +1 -1
  21. package/dist/{Copyright-NYKF6LY5.js → Copyright-N2V5LBLG.js} +3 -3
  22. package/dist/{Copyright-NYKF6LY5.js.map → Copyright-N2V5LBLG.js.map} +1 -1
  23. package/dist/{CustomerLayout-NY4LOV3Y.js → CustomerLayout-WHXOXK46.js} +6 -6
  24. package/dist/{CustomerLayout-NY4LOV3Y.js.map → CustomerLayout-WHXOXK46.js.map} +1 -1
  25. package/dist/{Footer-DRKA2MI6.js → Footer-WWPE5TZT.js} +4 -4
  26. package/dist/{Footer-DRKA2MI6.js.map → Footer-WWPE5TZT.js.map} +1 -1
  27. package/dist/{Header-JBZRD2WU.js → Header-NXUFMN3V.js} +4 -4
  28. package/dist/{Header-JBZRD2WU.js.map → Header-NXUFMN3V.js.map} +1 -1
  29. package/dist/{LoyaltyPage-VOAUC2CY.js → LoyaltyPage-DORPKRUO.js} +6 -6
  30. package/dist/{LoyaltyPage-VOAUC2CY.js.map → LoyaltyPage-DORPKRUO.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-I5U5NFK3.js → LoyaltyPointsPage-QFK6SI23.js} +3 -3
  32. package/dist/{LoyaltyPointsPage-I5U5NFK3.js.map → LoyaltyPointsPage-QFK6SI23.js.map} +1 -1
  33. package/dist/{MainMenu-SWP46RPJ.js → MainMenu-VV7XR3W3.js} +3 -3
  34. package/dist/{MainMenu-SWP46RPJ.js.map → MainMenu-VV7XR3W3.js.map} +1 -1
  35. package/dist/MaintenancePage-IKWAGFKU.js +7 -0
  36. package/dist/{MaintenancePage-MGWJYB2O.js.map → MaintenancePage-IKWAGFKU.js.map} +1 -1
  37. package/dist/{MasterLayout-BF2E47SE.js → MasterLayout-BCIRVCX5.js} +6 -6
  38. package/dist/{MasterLayout-BF2E47SE.js.map → MasterLayout-BCIRVCX5.js.map} +1 -1
  39. package/dist/{MobileMenu-LBOVOA6D.js → MobileMenu-PYCT6V4P.js} +6 -6
  40. package/dist/{MobileMenu-LBOVOA6D.js.map → MobileMenu-PYCT6V4P.js.map} +1 -1
  41. package/dist/{NotificationsPage-FNFKEOX3.js → NotificationsPage-6WNYAZOR.js} +6 -6
  42. package/dist/{NotificationsPage-FNFKEOX3.js.map → NotificationsPage-6WNYAZOR.js.map} +1 -1
  43. package/dist/{OrderSinglePage-EGCPZ25S.js → OrderSinglePage-YV3LBB7I.js} +6 -6
  44. package/dist/{OrderSinglePage-EGCPZ25S.js.map → OrderSinglePage-YV3LBB7I.js.map} +1 -1
  45. package/dist/{OrdersPage-DOK3AE37.js → OrdersPage-PPTYNBK2.js} +6 -6
  46. package/dist/{OrdersPage-DOK3AE37.js.map → OrdersPage-PPTYNBK2.js.map} +1 -1
  47. package/dist/{PageSingle-4NYB7VCI.js → PageSingle-JBRR5X3B.js} +3 -3
  48. package/dist/{PageSingle-4NYB7VCI.js.map → PageSingle-JBRR5X3B.js.map} +1 -1
  49. package/dist/{ProductDetails-EJ6WKSLO.js → ProductDetails-EGIMNYEY.js} +3 -3
  50. package/dist/{ProductDetails-EJ6WKSLO.js.map → ProductDetails-EGIMNYEY.js.map} +1 -1
  51. package/dist/{ProfilePage-RQJNJFAV.js → ProfilePage-4NDLJCST.js} +6 -6
  52. package/dist/{ProfilePage-RQJNJFAV.js.map → ProfilePage-4NDLJCST.js.map} +1 -1
  53. package/dist/{ReviewsPage-SSVTW76R.js → ReviewsPage-IB3HTSSY.js} +3 -3
  54. package/dist/{ReviewsPage-SSVTW76R.js.map → ReviewsPage-IB3HTSSY.js.map} +1 -1
  55. package/dist/{SeoCartWidget-I3T6MEYN.js → SeoCartWidget-TZQUVTS7.js} +6 -6
  56. package/dist/{SeoCartWidget-I3T6MEYN.js.map → SeoCartWidget-TZQUVTS7.js.map} +1 -1
  57. package/dist/{SettingsPage-F2PHWF6M.js → SettingsPage-ZSN2P2XD.js} +6 -6
  58. package/dist/{SettingsPage-F2PHWF6M.js.map → SettingsPage-ZSN2P2XD.js.map} +1 -1
  59. package/dist/{StoreClosedNotification-A55JL5ZF.js → StoreClosedNotification-WJGHUXGJ.js} +7 -7
  60. package/dist/{StoreClosedNotification-A55JL5ZF.js.map → StoreClosedNotification-WJGHUXGJ.js.map} +1 -1
  61. package/dist/{TestimonialsPage-P3NQ4MD6.js → TestimonialsPage-AF7EIJMK.js} +3 -3
  62. package/dist/{TestimonialsPage-P3NQ4MD6.js.map → TestimonialsPage-AF7EIJMK.js.map} +1 -1
  63. package/dist/{ThankYouPage-NGQHYJV5.js → ThankYouPage-NPUUJ4M6.js} +6 -6
  64. package/dist/{ThankYouPage-NGQHYJV5.js.map → ThankYouPage-NPUUJ4M6.js.map} +1 -1
  65. package/dist/{WalletPage-QKMWV2NA.js → WalletPage-5T7UBXH4.js} +6 -6
  66. package/dist/{WalletPage-QKMWV2NA.js.map → WalletPage-5T7UBXH4.js.map} +1 -1
  67. package/dist/{WishlistPage-HOR22EBU.js → WishlistPage-IYKIDZT2.js} +6 -6
  68. package/dist/{WishlistPage-HOR22EBU.js.map → WishlistPage-IYKIDZT2.js.map} +1 -1
  69. package/dist/{chunk-MHDOK7GH.js → chunk-4H7HB3HQ.js} +4 -4
  70. package/dist/{chunk-MHDOK7GH.js.map → chunk-4H7HB3HQ.js.map} +1 -1
  71. package/dist/{chunk-D6IJYZ7U.js → chunk-5Q3SDXVC.js} +5 -5
  72. package/dist/{chunk-D6IJYZ7U.js.map → chunk-5Q3SDXVC.js.map} +1 -1
  73. package/dist/{chunk-PLW6MTSL.js → chunk-6W4J6ZDX.js} +4 -4
  74. package/dist/{chunk-PLW6MTSL.js.map → chunk-6W4J6ZDX.js.map} +1 -1
  75. package/dist/{chunk-BHNY4T4O.js → chunk-BHV2RZWY.js} +4 -4
  76. package/dist/{chunk-BHNY4T4O.js.map → chunk-BHV2RZWY.js.map} +1 -1
  77. package/dist/{chunk-42RKFHJG.js → chunk-EL2IPQLA.js} +3 -3
  78. package/dist/{chunk-42RKFHJG.js.map → chunk-EL2IPQLA.js.map} +1 -1
  79. package/dist/chunk-JJIXGYVN.js +14 -0
  80. package/dist/{chunk-TCTKM34I.js.map → chunk-JJIXGYVN.js.map} +1 -1
  81. package/dist/{chunk-3PSJH6Q4.js → chunk-RCRE66QK.js} +4 -4
  82. package/dist/chunk-RCRE66QK.js.map +1 -0
  83. package/dist/{chunk-YMHL73TL.js → chunk-TYLJMWSI.js} +3 -3
  84. package/dist/{chunk-YMHL73TL.js.map → chunk-TYLJMWSI.js.map} +1 -1
  85. package/dist/{chunk-PXM3FBPO.js → chunk-U5TBXUQT.js} +3 -3
  86. package/dist/{chunk-PXM3FBPO.js.map → chunk-U5TBXUQT.js.map} +1 -1
  87. package/dist/{chunk-JP5XQJKO.js → chunk-UAKYRNUV.js} +3 -3
  88. package/dist/{chunk-JP5XQJKO.js.map → chunk-UAKYRNUV.js.map} +1 -1
  89. package/dist/{chunk-TYTYD6AK.js → chunk-W2FFROOO.js} +3 -3
  90. package/dist/{chunk-TYTYD6AK.js.map → chunk-W2FFROOO.js.map} +1 -1
  91. package/dist/{chunk-6SXIAFXW.js → chunk-WLGTF3V4.js} +7 -7
  92. package/dist/{chunk-6SXIAFXW.js.map → chunk-WLGTF3V4.js.map} +1 -1
  93. package/dist/{chunk-YXCJBX6X.js → chunk-YD4TVUA4.js} +6 -6
  94. package/dist/{chunk-YXCJBX6X.js.map → chunk-YD4TVUA4.js.map} +1 -1
  95. package/dist/{chunk-P7N3TZFE.js → chunk-ZTH65CJY.js} +55 -10
  96. package/dist/chunk-ZTH65CJY.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 +6 -6
  101. package/dist/components/layout/index.js +1 -1
  102. package/dist/components/product/index.js +5 -5
  103. package/dist/components/store/MaintenanceDevBar.d.ts +9 -0
  104. package/dist/components/store/MaintenanceDevBar.d.ts.map +1 -0
  105. package/dist/components/store/MaintenancePage.d.ts.map +1 -1
  106. package/dist/components/store/index.js +6 -6
  107. package/dist/{document-class-AQ7FGLPE.js → document-class-JTMWALK3.js} +3 -3
  108. package/dist/{document-class-AQ7FGLPE.js.map → document-class-JTMWALK3.js.map} +1 -1
  109. package/dist/hooks/index.js +4 -4
  110. package/dist/hooks/useGtm.js +4 -4
  111. package/dist/hooks/useMoney.js +4 -4
  112. package/dist/hooks/useStore.js +4 -4
  113. package/dist/index.js +4 -4
  114. package/dist/{not-found-RBWKACRW.js → not-found-RLM7SV7P.js} +6 -6
  115. package/dist/{not-found-RBWKACRW.js.map → not-found-RLM7SV7P.js.map} +1 -1
  116. package/dist/providers/TwilightProvider.d.ts.map +1 -1
  117. package/dist/providers/index.js +4 -4
  118. package/dist/routes/account/orders.js +1 -1
  119. package/dist/routes/account.js +6 -6
  120. package/dist/routes/blog.js +5 -5
  121. package/dist/routes/brands.js +1 -1
  122. package/dist/routes/cart.js +8 -8
  123. package/dist/routes/home.js +7 -7
  124. package/dist/routes/loyalty.js +2 -2
  125. package/dist/routes/page.js +1 -1
  126. package/dist/routes/product-listing.js +6 -6
  127. package/dist/routes/product.js +6 -6
  128. package/dist/routes/testimonials.js +2 -2
  129. package/dist/routes/thank-you.js +1 -1
  130. package/dist/skeleton.js +7 -7
  131. package/dist/tanstack.js +1 -1
  132. package/package.json +1 -1
  133. package/tailwind/components/store/MaintenanceDevBar.tsx.txt +57 -0
  134. package/tailwind/components/store/MaintenancePage.tsx.txt +7 -2
  135. package/dist/MaintenancePage-MGWJYB2O.js +0 -7
  136. package/dist/chunk-3PSJH6Q4.js.map +0 -1
  137. package/dist/chunk-P7N3TZFE.js.map +0 -1
  138. package/dist/chunk-TCTKM34I.js +0 -14
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-AQ7FGLPE.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-JTMWALK3.js"}
@@ -1,6 +1,6 @@
1
- export { registerDefaultHooks, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore } from '../chunk-P7N3TZFE.js';
2
- import '../chunk-D6IJYZ7U.js';
3
- import '../chunk-PXM3FBPO.js';
1
+ export { registerDefaultHooks, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore } from '../chunk-ZTH65CJY.js';
2
+ import '../chunk-5Q3SDXVC.js';
3
+ import '../chunk-U5TBXUQT.js';
4
4
  import '../chunk-D2VMJV3L.js';
5
5
  import '../chunk-S6SP272Z.js';
6
6
  import '../chunk-LPAWMUJR.js';
@@ -33,7 +33,7 @@ export { HookSlot, useIsClient } from '../chunk-5XDPAKF5.js';
33
33
  export { HookRegistry, defineHooks, hookRegistry } from '../chunk-GCPEMNSU.js';
34
34
  import '../chunk-KTLQV4Q4.js';
35
35
  import '../chunk-TYNZ5B2B.js';
36
- import '../chunk-TYTYD6AK.js';
36
+ import '../chunk-W2FFROOO.js';
37
37
  import '../chunk-AXW67SY7.js';
38
38
  import '../chunk-BYMOPN2S.js';
39
39
  import '../chunk-SKLEJJ6M.js';
@@ -1,6 +1,6 @@
1
- export { useGtm } from '../chunk-P7N3TZFE.js';
2
- import '../chunk-D6IJYZ7U.js';
3
- import '../chunk-PXM3FBPO.js';
1
+ export { useGtm } from '../chunk-ZTH65CJY.js';
2
+ import '../chunk-5Q3SDXVC.js';
3
+ import '../chunk-U5TBXUQT.js';
4
4
  import '../chunk-D2VMJV3L.js';
5
5
  import '../chunk-S6SP272Z.js';
6
6
  import '../chunk-LPAWMUJR.js';
@@ -33,7 +33,7 @@ import '../chunk-5XDPAKF5.js';
33
33
  import '../chunk-GCPEMNSU.js';
34
34
  import '../chunk-KTLQV4Q4.js';
35
35
  import '../chunk-TYNZ5B2B.js';
36
- import '../chunk-TYTYD6AK.js';
36
+ import '../chunk-W2FFROOO.js';
37
37
  import '../chunk-AXW67SY7.js';
38
38
  import '../chunk-BYMOPN2S.js';
39
39
  import '../chunk-SKLEJJ6M.js';
@@ -1,6 +1,6 @@
1
- export { useMoney } from '../chunk-P7N3TZFE.js';
2
- import '../chunk-D6IJYZ7U.js';
3
- import '../chunk-PXM3FBPO.js';
1
+ export { useMoney } from '../chunk-ZTH65CJY.js';
2
+ import '../chunk-5Q3SDXVC.js';
3
+ import '../chunk-U5TBXUQT.js';
4
4
  import '../chunk-D2VMJV3L.js';
5
5
  import '../chunk-S6SP272Z.js';
6
6
  import '../chunk-LPAWMUJR.js';
@@ -33,7 +33,7 @@ import '../chunk-5XDPAKF5.js';
33
33
  import '../chunk-GCPEMNSU.js';
34
34
  import '../chunk-KTLQV4Q4.js';
35
35
  import '../chunk-TYNZ5B2B.js';
36
- import '../chunk-TYTYD6AK.js';
36
+ import '../chunk-W2FFROOO.js';
37
37
  import '../chunk-AXW67SY7.js';
38
38
  import '../chunk-BYMOPN2S.js';
39
39
  import '../chunk-SKLEJJ6M.js';
@@ -1,6 +1,6 @@
1
- export { useStore } from '../chunk-P7N3TZFE.js';
2
- import '../chunk-D6IJYZ7U.js';
3
- import '../chunk-PXM3FBPO.js';
1
+ export { useStore } from '../chunk-ZTH65CJY.js';
2
+ import '../chunk-5Q3SDXVC.js';
3
+ import '../chunk-U5TBXUQT.js';
4
4
  import '../chunk-D2VMJV3L.js';
5
5
  import '../chunk-S6SP272Z.js';
6
6
  import '../chunk-LPAWMUJR.js';
@@ -33,7 +33,7 @@ import '../chunk-5XDPAKF5.js';
33
33
  import '../chunk-GCPEMNSU.js';
34
34
  import '../chunk-KTLQV4Q4.js';
35
35
  import '../chunk-TYNZ5B2B.js';
36
- import '../chunk-TYTYD6AK.js';
36
+ import '../chunk-W2FFROOO.js';
37
37
  import '../chunk-AXW67SY7.js';
38
38
  import '../chunk-BYMOPN2S.js';
39
39
  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-P7N3TZFE.js';
4
- import './chunk-D6IJYZ7U.js';
5
- import './chunk-PXM3FBPO.js';
3
+ export { TwilightProvider } from './chunk-ZTH65CJY.js';
4
+ import './chunk-5Q3SDXVC.js';
5
+ import './chunk-U5TBXUQT.js';
6
6
  import './chunk-D2VMJV3L.js';
7
7
  import './chunk-S6SP272Z.js';
8
8
  import './chunk-LPAWMUJR.js';
@@ -35,7 +35,7 @@ import './chunk-5XDPAKF5.js';
35
35
  import './chunk-GCPEMNSU.js';
36
36
  import './chunk-KTLQV4Q4.js';
37
37
  import './chunk-TYNZ5B2B.js';
38
- import './chunk-TYTYD6AK.js';
38
+ import './chunk-W2FFROOO.js';
39
39
  import './chunk-AXW67SY7.js';
40
40
  import './chunk-BYMOPN2S.js';
41
41
  import './chunk-SKLEJJ6M.js';
@@ -1,7 +1,7 @@
1
1
  import { product } from './chunk-VJQ7SM4O.js';
2
- import './chunk-P7N3TZFE.js';
3
- import './chunk-D6IJYZ7U.js';
4
- import './chunk-PXM3FBPO.js';
2
+ import './chunk-ZTH65CJY.js';
3
+ import './chunk-5Q3SDXVC.js';
4
+ import './chunk-U5TBXUQT.js';
5
5
  import './chunk-D2VMJV3L.js';
6
6
  import './chunk-S6SP272Z.js';
7
7
  import './chunk-LPAWMUJR.js';
@@ -34,7 +34,7 @@ import { HookSlot } from './chunk-5XDPAKF5.js';
34
34
  import './chunk-GCPEMNSU.js';
35
35
  import './chunk-KTLQV4Q4.js';
36
36
  import { useTranslation } from './chunk-TYNZ5B2B.js';
37
- import { LazyErrorPage } from './chunk-TYTYD6AK.js';
37
+ import { LazyErrorPage } from './chunk-W2FFROOO.js';
38
38
  import './chunk-AXW67SY7.js';
39
39
  import './chunk-BYMOPN2S.js';
40
40
  import './chunk-SKLEJJ6M.js';
@@ -151,5 +151,5 @@ function NotFoundPage(props = {}) {
151
151
  }
152
152
 
153
153
  export { NotFoundPage };
154
- //# sourceMappingURL=not-found-RBWKACRW.js.map
155
- //# sourceMappingURL=not-found-RBWKACRW.js.map
154
+ //# sourceMappingURL=not-found-RLM7SV7P.js.map
155
+ //# sourceMappingURL=not-found-RLM7SV7P.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-RBWKACRW.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-RLM7SV7P.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 +1 @@
1
- {"version":3,"file":"TwilightProvider.d.ts","sourceRoot":"","sources":["../../src/providers/TwilightProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuE,MAAM,OAAO,CAAC;AA2B5F,OAAO,KAAK,EAGV,qBAAqB,EAEtB,MAAM,mBAAmB,CAAC;AAgB3B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAUtC,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,KAAa,EACb,QAAQ,EACR,YAAY,EAAE,iBAAiB,EAC/B,OAAO,EACP,OAAO,EACP,MAAwD,EACxD,KAAY,EACZ,mBAAqC,EACrC,cAAqB,EACrB,UAAiB,EACjB,MAAM,EAAE,eAA8B,EACtC,eAAe,EAAE,wBAA8C,GAChE,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CA4S5C;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"TwilightProvider.d.ts","sourceRoot":"","sources":["../../src/providers/TwilightProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuE,MAAM,OAAO,CAAC;AA4B5F,OAAO,KAAK,EAGV,qBAAqB,EAEtB,MAAM,mBAAmB,CAAC;AAgB3B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAUtC,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,KAAa,EACb,QAAQ,EACR,YAAY,EAAE,iBAAiB,EAC/B,OAAO,EACP,OAAO,EACP,MAAwD,EACxD,KAAY,EACZ,mBAAqC,EACrC,cAAqB,EACrB,UAAiB,EACjB,MAAM,EAAE,eAA8B,EACtC,eAAe,EAAE,wBAA8C,GAChE,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAgT5C;AAED,eAAe,gBAAgB,CAAC"}
@@ -1,6 +1,6 @@
1
- export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-P7N3TZFE.js';
2
- import '../chunk-D6IJYZ7U.js';
3
- import '../chunk-PXM3FBPO.js';
1
+ export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-ZTH65CJY.js';
2
+ import '../chunk-5Q3SDXVC.js';
3
+ import '../chunk-U5TBXUQT.js';
4
4
  import '../chunk-D2VMJV3L.js';
5
5
  import '../chunk-S6SP272Z.js';
6
6
  import '../chunk-LPAWMUJR.js';
@@ -33,7 +33,7 @@ import '../chunk-5XDPAKF5.js';
33
33
  import '../chunk-GCPEMNSU.js';
34
34
  import '../chunk-KTLQV4Q4.js';
35
35
  import '../chunk-TYNZ5B2B.js';
36
- import '../chunk-TYTYD6AK.js';
36
+ import '../chunk-W2FFROOO.js';
37
37
  import '../chunk-AXW67SY7.js';
38
38
  export { LinkProvider, LinkProviderError, createLinkWithAdapter, useLinkAdapter } from '../chunk-BYMOPN2S.js';
39
39
  import '../chunk-SKLEJJ6M.js';
@@ -1,4 +1,4 @@
1
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-PLW6MTSL.js';
1
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-6W4J6ZDX.js';
2
2
  import '../../chunk-SDEBSX6Z.js';
3
3
  import '../../chunk-4SZZPXM2.js';
4
4
  import '../../chunk-V7QFIGQ4.js';
@@ -1,5 +1,5 @@
1
1
  import { wallet } from '../chunk-MSNU4NYS.js';
2
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-PLW6MTSL.js';
2
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-6W4J6ZDX.js';
3
3
  import '../chunk-SDEBSX6Z.js';
4
4
  import { notification } from '../chunk-STKR2KHL.js';
5
5
  import { wishlist } from '../chunk-RSWRKU4X.js';
@@ -31,7 +31,7 @@ async function profileLoader(_ctx) {
31
31
 
32
32
  // src/routes/account/profile/index.tsx
33
33
  var LazyProfilePage = lazy(
34
- () => import('../ProfilePage-RQJNJFAV.js').then((m) => ({ default: m.ProfilePage }))
34
+ () => import('../ProfilePage-4NDLJCST.js').then((m) => ({ default: m.ProfilePage }))
35
35
  );
36
36
  var ProfilePage = LazyProfilePage;
37
37
  var Profile = {
@@ -73,7 +73,7 @@ async function wishlistLoader(ctx) {
73
73
 
74
74
  // src/routes/account/wishlist/index.tsx
75
75
  var LazyWishlistPage = lazy(
76
- () => import('../WishlistPage-HOR22EBU.js').then((m) => ({ default: m.WishlistPage }))
76
+ () => import('../WishlistPage-IYKIDZT2.js').then((m) => ({ default: m.WishlistPage }))
77
77
  );
78
78
  var WishlistPage = LazyWishlistPage;
79
79
  var Wishlist = {
@@ -115,7 +115,7 @@ async function walletLoader(ctx) {
115
115
  }
116
116
 
117
117
  // src/routes/account/wallet/index.tsx
118
- var LazyWalletPage = lazy(() => import('../WalletPage-QKMWV2NA.js').then((m) => ({ default: m.WalletPage })));
118
+ var LazyWalletPage = lazy(() => import('../WalletPage-5T7UBXH4.js').then((m) => ({ default: m.WalletPage })));
119
119
  var WalletPage = LazyWalletPage;
120
120
  var Wallet = {
121
121
  id: RouteId.CUSTOMER_WALLET,
@@ -151,7 +151,7 @@ async function notificationsLoader(_ctx) {
151
151
 
152
152
  // src/routes/account/notifications/index.tsx
153
153
  var LazyNotificationsPage = lazy(
154
- () => import('../NotificationsPage-FNFKEOX3.js').then((m) => ({ default: m.NotificationsPage }))
154
+ () => import('../NotificationsPage-6WNYAZOR.js').then((m) => ({ default: m.NotificationsPage }))
155
155
  );
156
156
  var NotificationsPage = LazyNotificationsPage;
157
157
  var Notifications = {
@@ -184,7 +184,7 @@ async function settingsLoader(_ctx) {
184
184
 
185
185
  // src/routes/account/settings/index.tsx
186
186
  var LazySettingsPage = lazy(
187
- () => import('../SettingsPage-F2PHWF6M.js').then((m) => ({ default: m.SettingsPage }))
187
+ () => import('../SettingsPage-ZSN2P2XD.js').then((m) => ({ default: m.SettingsPage }))
188
188
  );
189
189
  var SettingsPage = LazySettingsPage;
190
190
  var Settings = {
@@ -145,18 +145,18 @@ async function blogTagLoader({
145
145
  }
146
146
 
147
147
  // src/routes/blog/index.tsx
148
- var LazyBlogPage = lazy(() => import('../BlogPage-W4NDWE5Q.js').then((m) => ({ default: m.BlogPage })));
148
+ var LazyBlogPage = lazy(() => import('../BlogPage-GXGSY6ET.js').then((m) => ({ default: m.BlogPage })));
149
149
  var LazyBlogSinglePage = lazy(
150
- () => import('../BlogSinglePage-543VMKSI.js').then((m) => ({ default: m.BlogSinglePage }))
150
+ () => import('../BlogSinglePage-KHF37HSX.js').then((m) => ({ default: m.BlogSinglePage }))
151
151
  );
152
152
  var LazyBlogAuthorPage = lazy(
153
- () => import('../BlogAuthorPage-E2BONAKB.js').then((m) => ({ default: m.BlogAuthorPage }))
153
+ () => import('../BlogAuthorPage-DSFZ6OLA.js').then((m) => ({ default: m.BlogAuthorPage }))
154
154
  );
155
155
  var LazyBlogCategoryPage = lazy(
156
- () => import('../BlogCategoryPage-F5G35XQE.js').then((m) => ({ default: m.BlogCategoryPage }))
156
+ () => import('../BlogCategoryPage-AD5LV4R3.js').then((m) => ({ default: m.BlogCategoryPage }))
157
157
  );
158
158
  var LazyBlogTagPage = lazy(
159
- () => import('../BlogTagPage-KDQVHQ65.js').then((m) => ({ default: m.BlogTagPage }))
159
+ () => import('../BlogTagPage-OSWZDEND.js').then((m) => ({ default: m.BlogTagPage }))
160
160
  );
161
161
  var BlogPage = LazyBlogPage;
162
162
  var BlogSinglePage = LazyBlogSinglePage;
@@ -24,7 +24,7 @@ async function brandsLoader() {
24
24
  }
25
25
 
26
26
  // src/routes/brands/index.tsx
27
- var LazyBrandsPage = lazy(() => import('../BrandsPage-ABKUKE5J.js').then((m) => ({ default: m.BrandsPage })));
27
+ var LazyBrandsPage = lazy(() => import('../BrandsPage-T2AVCDET.js').then((m) => ({ default: m.BrandsPage })));
28
28
  var BrandsPage = LazyBrandsPage;
29
29
  async function brandsLoaderWithExtend(_ctx, extend) {
30
30
  const data = await brandsLoader();
@@ -1,16 +1,16 @@
1
1
  import { cart } from '../chunk-HGY7P2Y3.js';
2
2
  import { loyalty } from '../chunk-5L6IBYWZ.js';
3
3
  import { CartSkeleton } from '../chunk-N7CCSGZF.js';
4
- import '../chunk-YMHL73TL.js';
5
- import '../chunk-BHNY4T4O.js';
4
+ import '../chunk-TYLJMWSI.js';
5
+ import '../chunk-BHV2RZWY.js';
6
6
  import '../chunk-42YMCOK4.js';
7
7
  import '../chunk-VJQ7SM4O.js';
8
- import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-TCTKM34I.js';
9
- import '../chunk-YXCJBX6X.js';
8
+ import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-JJIXGYVN.js';
9
+ import '../chunk-YD4TVUA4.js';
10
10
  import '../chunk-Y32RHCOH.js';
11
- import '../chunk-P7N3TZFE.js';
12
- import '../chunk-D6IJYZ7U.js';
13
- import '../chunk-PXM3FBPO.js';
11
+ import '../chunk-ZTH65CJY.js';
12
+ import '../chunk-5Q3SDXVC.js';
13
+ import '../chunk-U5TBXUQT.js';
14
14
  import '../chunk-D2VMJV3L.js';
15
15
  import '../chunk-S6SP272Z.js';
16
16
  import '../chunk-LPAWMUJR.js';
@@ -43,7 +43,7 @@ import { HookSlot } from '../chunk-5XDPAKF5.js';
43
43
  import '../chunk-GCPEMNSU.js';
44
44
  import '../chunk-KTLQV4Q4.js';
45
45
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
46
- import { LazyBreadcrumb, LazyNoContent } from '../chunk-TYTYD6AK.js';
46
+ import { LazyBreadcrumb, LazyNoContent } from '../chunk-W2FFROOO.js';
47
47
  import '../chunk-AXW67SY7.js';
48
48
  import '../chunk-BYMOPN2S.js';
49
49
  import '../chunk-SKLEJJ6M.js';
@@ -1,12 +1,12 @@
1
- export { Home, HomeSkeleton, homeLoader } from '../chunk-YMHL73TL.js';
2
- export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-BHNY4T4O.js';
1
+ export { Home, HomeSkeleton, homeLoader } from '../chunk-TYLJMWSI.js';
2
+ export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-BHV2RZWY.js';
3
3
  import '../chunk-42YMCOK4.js';
4
4
  import '../chunk-VJQ7SM4O.js';
5
- import '../chunk-YXCJBX6X.js';
5
+ import '../chunk-YD4TVUA4.js';
6
6
  import '../chunk-Y32RHCOH.js';
7
- import '../chunk-P7N3TZFE.js';
8
- import '../chunk-D6IJYZ7U.js';
9
- import '../chunk-PXM3FBPO.js';
7
+ import '../chunk-ZTH65CJY.js';
8
+ import '../chunk-5Q3SDXVC.js';
9
+ import '../chunk-U5TBXUQT.js';
10
10
  import '../chunk-D2VMJV3L.js';
11
11
  import '../chunk-S6SP272Z.js';
12
12
  import '../chunk-LPAWMUJR.js';
@@ -39,7 +39,7 @@ import '../chunk-5XDPAKF5.js';
39
39
  import '../chunk-GCPEMNSU.js';
40
40
  import '../chunk-KTLQV4Q4.js';
41
41
  import '../chunk-TYNZ5B2B.js';
42
- import '../chunk-TYTYD6AK.js';
42
+ import '../chunk-W2FFROOO.js';
43
43
  import '../chunk-AXW67SY7.js';
44
44
  import '../chunk-BYMOPN2S.js';
45
45
  import '../chunk-SKLEJJ6M.js';
@@ -58,10 +58,10 @@ async function loyaltyPointsLoader(locale) {
58
58
 
59
59
  // src/routes/loyalty/index.tsx
60
60
  var LazyLoyaltyPage = lazy(
61
- () => import('../LoyaltyPage-VOAUC2CY.js').then((m) => ({ default: m.LoyaltyPage }))
61
+ () => import('../LoyaltyPage-DORPKRUO.js').then((m) => ({ default: m.LoyaltyPage }))
62
62
  );
63
63
  var LazyLoyaltyPointsPage = lazy(
64
- () => import('../LoyaltyPointsPage-I5U5NFK3.js').then((m) => ({ default: m.LoyaltyPointsPage }))
64
+ () => import('../LoyaltyPointsPage-QFK6SI23.js').then((m) => ({ default: m.LoyaltyPointsPage }))
65
65
  );
66
66
  var LoyaltyPage = LazyLoyaltyPage;
67
67
  var LoyaltyPointsPage = LazyLoyaltyPointsPage;
@@ -29,7 +29,7 @@ async function pageSingleLoader({ params }) {
29
29
  }
30
30
 
31
31
  // src/routes/page/index.tsx
32
- var LazyPageSingle = lazy(() => import('../PageSingle-4NYB7VCI.js').then((m) => ({ default: m.PageSingle })));
32
+ var LazyPageSingle = lazy(() => import('../PageSingle-JBRR5X3B.js').then((m) => ({ default: m.PageSingle })));
33
33
  var PageSingleLazy = LazyPageSingle;
34
34
  async function loader(ctx, extend) {
35
35
  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-UWDS42UX.js';
3
3
  import { brand } from '../chunk-ZE262XHY.js';
4
- import { useReorderButtons, LazyTestimonials } from '../chunk-BHNY4T4O.js';
4
+ import { useReorderButtons, LazyTestimonials } from '../chunk-BHV2RZWY.js';
5
5
  import '../chunk-42YMCOK4.js';
6
6
  import { product, parseNextPageToken } from '../chunk-VJQ7SM4O.js';
7
7
  import { Drawer } from '../chunk-6TKIUG5C.js';
8
- import { ProductCard } from '../chunk-YXCJBX6X.js';
8
+ import { ProductCard } from '../chunk-YD4TVUA4.js';
9
9
  import { registry, COMPONENT_KEYS } from '../chunk-Y32RHCOH.js';
10
- import { useStore } from '../chunk-P7N3TZFE.js';
11
- import '../chunk-D6IJYZ7U.js';
12
- import '../chunk-PXM3FBPO.js';
10
+ import { useStore } from '../chunk-ZTH65CJY.js';
11
+ import '../chunk-5Q3SDXVC.js';
12
+ import '../chunk-U5TBXUQT.js';
13
13
  import '../chunk-D2VMJV3L.js';
14
14
  import '../chunk-S6SP272Z.js';
15
15
  import '../chunk-LPAWMUJR.js';
@@ -42,7 +42,7 @@ import { HookSlot } from '../chunk-5XDPAKF5.js';
42
42
  import '../chunk-GCPEMNSU.js';
43
43
  import { getAuthToken } from '../chunk-KTLQV4Q4.js';
44
44
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
45
- import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-TYTYD6AK.js';
45
+ import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-W2FFROOO.js';
46
46
  import '../chunk-AXW67SY7.js';
47
47
  import '../chunk-BYMOPN2S.js';
48
48
  import '../chunk-SKLEJJ6M.js';
@@ -1,11 +1,11 @@
1
- import { ProductsSlider, LazyTestimonials } from '../chunk-BHNY4T4O.js';
1
+ import { ProductsSlider, LazyTestimonials } from '../chunk-BHV2RZWY.js';
2
2
  import '../chunk-42YMCOK4.js';
3
3
  import { product } from '../chunk-VJQ7SM4O.js';
4
- import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-YXCJBX6X.js';
4
+ import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-YD4TVUA4.js';
5
5
  import '../chunk-Y32RHCOH.js';
6
- import { fastCheckoutScript } from '../chunk-P7N3TZFE.js';
7
- import '../chunk-D6IJYZ7U.js';
8
- import '../chunk-PXM3FBPO.js';
6
+ import { fastCheckoutScript } from '../chunk-ZTH65CJY.js';
7
+ import '../chunk-5Q3SDXVC.js';
8
+ import '../chunk-U5TBXUQT.js';
9
9
  import '../chunk-D2VMJV3L.js';
10
10
  import '../chunk-S6SP272Z.js';
11
11
  import '../chunk-LPAWMUJR.js';
@@ -38,7 +38,7 @@ import { HookSlot } from '../chunk-5XDPAKF5.js';
38
38
  import '../chunk-GCPEMNSU.js';
39
39
  import { getActiveCurrency } from '../chunk-KTLQV4Q4.js';
40
40
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
41
- import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-TYTYD6AK.js';
41
+ import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-W2FFROOO.js';
42
42
  import '../chunk-AXW67SY7.js';
43
43
  import '../chunk-BYMOPN2S.js';
44
44
  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-P3NQ4MD6.js').then((m) => ({ default: m.TestimonialsPage }))
35
+ () => import('../TestimonialsPage-AF7EIJMK.js').then((m) => ({ default: m.TestimonialsPage }))
36
36
  );
37
37
  var LazyReviewsPage = lazy(
38
- () => import('../ReviewsPage-SSVTW76R.js').then((m) => ({ default: m.ReviewsPage }))
38
+ () => import('../ReviewsPage-IB3HTSSY.js').then((m) => ({ default: m.ReviewsPage }))
39
39
  );
40
40
  var TestimonialsPage = LazyTestimonialsPage;
41
41
  var ReviewsPage = LazyReviewsPage;
@@ -40,7 +40,7 @@ async function thankYouLoader({
40
40
 
41
41
  // src/routes/thank-you/index.tsx
42
42
  var LazyThankYouPage = lazy(
43
- () => import('../ThankYouPage-NGQHYJV5.js').then((m) => ({ default: m.ThankYouPage }))
43
+ () => import('../ThankYouPage-NPUUJ4M6.js').then((m) => ({ default: m.ThankYouPage }))
44
44
  );
45
45
  var ThankYouPage = LazyThankYouPage;
46
46
  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-YMHL73TL.js';
3
- import './chunk-BHNY4T4O.js';
2
+ export { HomeSkeleton } from './chunk-TYLJMWSI.js';
3
+ import './chunk-BHV2RZWY.js';
4
4
  import './chunk-42YMCOK4.js';
5
5
  import './chunk-VJQ7SM4O.js';
6
- import './chunk-YXCJBX6X.js';
6
+ import './chunk-YD4TVUA4.js';
7
7
  import './chunk-Y32RHCOH.js';
8
- import './chunk-P7N3TZFE.js';
9
- import './chunk-D6IJYZ7U.js';
10
- import './chunk-PXM3FBPO.js';
8
+ import './chunk-ZTH65CJY.js';
9
+ import './chunk-5Q3SDXVC.js';
10
+ import './chunk-U5TBXUQT.js';
11
11
  import './chunk-D2VMJV3L.js';
12
12
  import './chunk-S6SP272Z.js';
13
13
  import './chunk-LPAWMUJR.js';
@@ -40,7 +40,7 @@ import './chunk-5XDPAKF5.js';
40
40
  import './chunk-GCPEMNSU.js';
41
41
  import './chunk-KTLQV4Q4.js';
42
42
  import './chunk-TYNZ5B2B.js';
43
- import './chunk-TYTYD6AK.js';
43
+ import './chunk-W2FFROOO.js';
44
44
  import './chunk-AXW67SY7.js';
45
45
  import './chunk-BYMOPN2S.js';
46
46
  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-42RKFHJG.js';
1
+ export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-EL2IPQLA.js';
2
2
  import { requestHostOf } from './chunk-XD33WKKI.js';
3
3
  export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-XD33WKKI.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.105",
3
+ "version": "1.0.106",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -0,0 +1,57 @@
1
+ import type { CSSProperties } from 'react';
2
+ import { getTwilightContext, hasTwilightSettings } from '../../twilight/context';
3
+ import { useTranslation } from '../../providers/I18nProvider';
4
+
5
+ const BAR: CSSProperties = {
6
+ position: 'fixed',
7
+ insetInline: 0,
8
+ top: 0,
9
+ zIndex: 2147483647,
10
+ display: 'flex',
11
+ flexWrap: 'wrap',
12
+ alignItems: 'center',
13
+ justifyContent: 'center',
14
+ gap: '8px 16px',
15
+ padding: '10px 16px',
16
+ font: '14px/1.4 system-ui, sans-serif',
17
+ color: '#fff',
18
+ background: '#1f2937',
19
+ boxShadow: '0 2px 8px rgb(0 0 0 / 20%)',
20
+ };
21
+
22
+ const LINK: CSSProperties = {
23
+ color: '#fff',
24
+ fontWeight: 600,
25
+ textDecoration: 'underline',
26
+ };
27
+
28
+ /**
29
+ * Dev-server only, pinned over the top of the maintenance page: says why the store did not render
30
+ * and links to the dashboard's own entry (`?utm_source=dashboard&identifier=<store id>`),
31
+ * which `rootBeforeLoad` answers with the owner cookie and the store. The provider
32
+ * mounts it behind `import.meta.env.DEV`, so production builds drop it; the theme's
33
+ * own `maintenancePage` gets it too.
34
+ */
35
+ export function MaintenanceDevBar() {
36
+ const { t } = useTranslation();
37
+ const storeId = hasTwilightSettings() ? getTwilightContext().settings?.store?.id : undefined;
38
+ if (storeId == null) return null;
39
+ return (
40
+ <aside data-testid="store-maintenance-dev-bar" style={BAR}>
41
+ <span>
42
+ {t('pages.maintenance.dev_hint', {
43
+ defaultValue: 'Twilight dev: this store is in maintenance, so customers get this page.',
44
+ })}
45
+ </span>
46
+ <a
47
+ data-testid="store-maintenance-view-as-merchant"
48
+ href={`?utm_source=dashboard&identifier=${storeId}`}
49
+ style={LINK}
50
+ >
51
+ {t('pages.maintenance.view_as_merchant', {
52
+ defaultValue: 'View the store as the merchant',
53
+ })}
54
+ </a>
55
+ </aside>
56
+ );
57
+ }
@@ -17,10 +17,15 @@ const SOCIAL_ICONS: [keyof StoreSocial, string][] = [
17
17
  // The platform's maintenance page (Store `pages/maintenance.blade.php` + `_maintenance.scss`),
18
18
  // trimmed to what it renders: greyscale, logo + title beside the message, contacts under a
19
19
  // rule, the illustration alongside; stacked and centred under 1024px.
20
+ //
21
+ // The page is its own scroll container, the viewport tall, because app-shell themes lock
22
+ // `html, body { overflow: hidden }` and scroll only their main element, which this page
23
+ // replaces. Centring is by auto margins, not `justify-content`, so content taller than the
24
+ // viewport starts at the top instead of being clipped at both ends.
20
25
  const STYLE = `
21
- .s-maintenance{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;min-height:100vh;color:#a3a3a3;background:#fff;filter:grayscale(100%);box-sizing:border-box}
26
+ .s-maintenance{display:flex;flex-direction:column;align-items:center;width:100%;height:100vh;height:100dvh;overflow-y:auto;color:#a3a3a3;background:#fff;filter:grayscale(100%);box-sizing:border-box}
22
27
  .s-maintenance *{box-sizing:border-box}
23
- .s-maintenance .mt-container{width:100%;max-width:1200px;padding:0 15px}
28
+ .s-maintenance .mt-container{width:100%;max-width:1200px;margin:auto 0;padding:0 15px}
24
29
  .s-maintenance .mt-panel{display:flex;flex-direction:row;align-items:center;justify-content:space-between;width:100%}
25
30
  .s-maintenance .mt-message{width:100%;padding-inline-start:80px;animation:revealMtBlock 1.5s forwards}
26
31
  .s-maintenance .mt-title{display:flex;align-items:center;margin:0 0 20px}
@@ -1,7 +0,0 @@
1
- export { MaintenancePage } from './chunk-3PSJH6Q4.js';
2
- import './chunk-TYNZ5B2B.js';
3
- import './chunk-HG4B4F4N.js';
4
- import './chunk-T72DAX7R.js';
5
- import './chunk-DGUM43GV.js';
6
- //# sourceMappingURL=MaintenancePage-MGWJYB2O.js.map
7
- //# sourceMappingURL=MaintenancePage-MGWJYB2O.js.map