@salla.sa/twilight-theme-engine 1.0.86 → 1.0.88

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 (147) hide show
  1. package/README.md +4 -3
  2. package/bin/twilight-check-manifest.mjs +16 -0
  3. package/dist/{AddToCartForm-5X2WZDWR.js → AddToCartForm-YY7DDANL.js} +4 -4
  4. package/dist/{AddToCartForm-5X2WZDWR.js.map → AddToCartForm-YY7DDANL.js.map} +1 -1
  5. package/dist/{BlogAuthorPage-LO7FSSJR.js → BlogAuthorPage-4IXOEQA4.js} +9 -9
  6. package/dist/{BlogAuthorPage-LO7FSSJR.js.map → BlogAuthorPage-4IXOEQA4.js.map} +1 -1
  7. package/dist/{BlogCategoryPage-KKFQ3PGR.js → BlogCategoryPage-NYB7EMKQ.js} +9 -9
  8. package/dist/{BlogCategoryPage-KKFQ3PGR.js.map → BlogCategoryPage-NYB7EMKQ.js.map} +1 -1
  9. package/dist/{BlogPage-VLF3NSGE.js → BlogPage-B2A47OBZ.js} +8 -8
  10. package/dist/{BlogPage-VLF3NSGE.js.map → BlogPage-B2A47OBZ.js.map} +1 -1
  11. package/dist/{BlogSinglePage-AVK535IW.js → BlogSinglePage-ZSOHP2GJ.js} +8 -8
  12. package/dist/{BlogSinglePage-AVK535IW.js.map → BlogSinglePage-ZSOHP2GJ.js.map} +1 -1
  13. package/dist/{BlogTagPage-F3T4D7RH.js → BlogTagPage-24MZSPCO.js} +9 -9
  14. package/dist/{BlogTagPage-F3T4D7RH.js.map → BlogTagPage-24MZSPCO.js.map} +1 -1
  15. package/dist/{BrandsPage-LVSBZSVC.js → BrandsPage-WJUCPMKH.js} +8 -8
  16. package/dist/{BrandsPage-LVSBZSVC.js.map → BrandsPage-WJUCPMKH.js.map} +1 -1
  17. package/dist/{Breadcrumb-VLFTXRFC.js → Breadcrumb-TMUSQ2XY.js} +8 -8
  18. package/dist/{Breadcrumb-VLFTXRFC.js.map → Breadcrumb-TMUSQ2XY.js.map} +1 -1
  19. package/dist/{CartItem-G3H34GW6.js → CartItem-QH6X7576.js} +8 -8
  20. package/dist/{CartItem-G3H34GW6.js.map → CartItem-QH6X7576.js.map} +1 -1
  21. package/dist/{CartSummary-VH37RPUI.js → CartSummary-MERS5R3X.js} +8 -8
  22. package/dist/{CartSummary-VH37RPUI.js.map → CartSummary-MERS5R3X.js.map} +1 -1
  23. package/dist/{Copyright-HE5ZWINZ.js → Copyright-JPOX7PLQ.js} +4 -4
  24. package/dist/{Copyright-HE5ZWINZ.js.map → Copyright-JPOX7PLQ.js.map} +1 -1
  25. package/dist/{CustomerLayout-LKBLOAVW.js → CustomerLayout-ER5SZO7U.js} +8 -8
  26. package/dist/{CustomerLayout-LKBLOAVW.js.map → CustomerLayout-ER5SZO7U.js.map} +1 -1
  27. package/dist/{Footer-HHXAST72.js → Footer-7O5CQ72M.js} +5 -5
  28. package/dist/{Footer-HHXAST72.js.map → Footer-7O5CQ72M.js.map} +1 -1
  29. package/dist/{Header-GEVZM2YG.js → Header-CH56KO3D.js} +5 -5
  30. package/dist/{Header-GEVZM2YG.js.map → Header-CH56KO3D.js.map} +1 -1
  31. package/dist/{LoyaltyPage-M5CT3CFD.js → LoyaltyPage-S74ZELSW.js} +8 -8
  32. package/dist/{LoyaltyPage-M5CT3CFD.js.map → LoyaltyPage-S74ZELSW.js.map} +1 -1
  33. package/dist/{LoyaltyPointsPage-SDJB52U6.js → LoyaltyPointsPage-TCKZTXSB.js} +3 -3
  34. package/dist/{LoyaltyPointsPage-SDJB52U6.js.map → LoyaltyPointsPage-TCKZTXSB.js.map} +1 -1
  35. package/dist/{MainMenu-I7EYS752.js → MainMenu-3WDXPG2J.js} +4 -4
  36. package/dist/{MainMenu-I7EYS752.js.map → MainMenu-3WDXPG2J.js.map} +1 -1
  37. package/dist/{MasterLayout-QDK4T3NE.js → MasterLayout-EC6LIXFB.js} +8 -8
  38. package/dist/{MasterLayout-QDK4T3NE.js.map → MasterLayout-EC6LIXFB.js.map} +1 -1
  39. package/dist/{MobileMenu-7VTCWAVJ.js → MobileMenu-VIMGPLKV.js} +8 -8
  40. package/dist/{MobileMenu-7VTCWAVJ.js.map → MobileMenu-VIMGPLKV.js.map} +1 -1
  41. package/dist/{NotificationsPage-QCABE6QD.js → NotificationsPage-HYID6XAA.js} +8 -8
  42. package/dist/{NotificationsPage-QCABE6QD.js.map → NotificationsPage-HYID6XAA.js.map} +1 -1
  43. package/dist/{OrderSinglePage-2HVBKBG4.js → OrderSinglePage-5GMYPKA6.js} +8 -8
  44. package/dist/{OrderSinglePage-2HVBKBG4.js.map → OrderSinglePage-5GMYPKA6.js.map} +1 -1
  45. package/dist/{OrdersPage-5MNCPCM3.js → OrdersPage-SKTTDOJ6.js} +8 -8
  46. package/dist/{OrdersPage-5MNCPCM3.js.map → OrdersPage-SKTTDOJ6.js.map} +1 -1
  47. package/dist/{PageSingle-EN5XIM2B.js → PageSingle-RNWFQQEM.js} +4 -4
  48. package/dist/{PageSingle-EN5XIM2B.js.map → PageSingle-RNWFQQEM.js.map} +1 -1
  49. package/dist/{ProductDetails-UEWQPPDZ.js → ProductDetails-OYPJ6MW7.js} +4 -4
  50. package/dist/{ProductDetails-UEWQPPDZ.js.map → ProductDetails-OYPJ6MW7.js.map} +1 -1
  51. package/dist/{ProfilePage-TZSU3GHZ.js → ProfilePage-BQE63RHK.js} +8 -8
  52. package/dist/{ProfilePage-TZSU3GHZ.js.map → ProfilePage-BQE63RHK.js.map} +1 -1
  53. package/dist/{ReviewsPage-WYZ6CHF2.js → ReviewsPage-VEYN7BSR.js} +4 -4
  54. package/dist/{ReviewsPage-WYZ6CHF2.js.map → ReviewsPage-VEYN7BSR.js.map} +1 -1
  55. package/dist/{SeoCartWidget-5JR5RXQM.js → SeoCartWidget-3BVMA4WY.js} +8 -8
  56. package/dist/{SeoCartWidget-5JR5RXQM.js.map → SeoCartWidget-3BVMA4WY.js.map} +1 -1
  57. package/dist/{SettingsPage-DIDRQXMM.js → SettingsPage-QLKKYVGH.js} +8 -8
  58. package/dist/{SettingsPage-DIDRQXMM.js.map → SettingsPage-QLKKYVGH.js.map} +1 -1
  59. package/dist/{StoreClosedNotification-C2G32E34.js → StoreClosedNotification-LQXGW2SB.js} +9 -9
  60. package/dist/{StoreClosedNotification-C2G32E34.js.map → StoreClosedNotification-LQXGW2SB.js.map} +1 -1
  61. package/dist/{TestimonialsPage-XPHFRBZ7.js → TestimonialsPage-OKDDAMJL.js} +4 -4
  62. package/dist/{TestimonialsPage-XPHFRBZ7.js.map → TestimonialsPage-OKDDAMJL.js.map} +1 -1
  63. package/dist/{ThankYouPage-UA6YYFB2.js → ThankYouPage-YWLG6UF7.js} +8 -8
  64. package/dist/{ThankYouPage-UA6YYFB2.js.map → ThankYouPage-YWLG6UF7.js.map} +1 -1
  65. package/dist/{WalletPage-AJVV7LVL.js → WalletPage-UEYRVSWR.js} +8 -8
  66. package/dist/{WalletPage-AJVV7LVL.js.map → WalletPage-UEYRVSWR.js.map} +1 -1
  67. package/dist/{WishlistPage-UW6LJLSW.js → WishlistPage-7257GI3Y.js} +8 -8
  68. package/dist/{WishlistPage-UW6LJLSW.js.map → WishlistPage-7257GI3Y.js.map} +1 -1
  69. package/dist/{chunk-4WVJJ7SN.js → chunk-6VOF5SB4.js} +3 -3
  70. package/dist/{chunk-4WVJJ7SN.js.map → chunk-6VOF5SB4.js.map} +1 -1
  71. package/dist/{chunk-WSDG4ZRI.js → chunk-7JVKUFFT.js} +4 -4
  72. package/dist/{chunk-WSDG4ZRI.js.map → chunk-7JVKUFFT.js.map} +1 -1
  73. package/dist/{chunk-BAYGWTNM.js → chunk-7PQPQEDN.js} +3 -3
  74. package/dist/{chunk-BAYGWTNM.js.map → chunk-7PQPQEDN.js.map} +1 -1
  75. package/dist/{chunk-E26YG3AO.js → chunk-A64SSH6M.js} +4 -4
  76. package/dist/{chunk-E26YG3AO.js.map → chunk-A64SSH6M.js.map} +1 -1
  77. package/dist/chunk-AUC6QMF7.js +14 -0
  78. package/dist/{chunk-QJYUTRAQ.js.map → chunk-AUC6QMF7.js.map} +1 -1
  79. package/dist/{chunk-PWTXR4RR.js → chunk-CTCVO7YU.js} +8 -9
  80. package/dist/chunk-CTCVO7YU.js.map +1 -0
  81. package/dist/{chunk-HQ7WA37L.js → chunk-H42Z4YFB.js} +7 -7
  82. package/dist/{chunk-HQ7WA37L.js.map → chunk-H42Z4YFB.js.map} +1 -1
  83. package/dist/{chunk-CLBFF2CY.js → chunk-NB7KGKLY.js} +3 -3
  84. package/dist/{chunk-CLBFF2CY.js.map → chunk-NB7KGKLY.js.map} +1 -1
  85. package/dist/{chunk-2HCCIHU7.js → chunk-NNNTEVFU.js} +4 -4
  86. package/dist/{chunk-2HCCIHU7.js.map → chunk-NNNTEVFU.js.map} +1 -1
  87. package/dist/{chunk-X54QP332.js → chunk-PKXEZRSJ.js} +5 -5
  88. package/dist/{chunk-X54QP332.js.map → chunk-PKXEZRSJ.js.map} +1 -1
  89. package/dist/{chunk-U55ZJC2X.js → chunk-SYVIMWYW.js} +18 -21
  90. package/dist/chunk-SYVIMWYW.js.map +1 -0
  91. package/dist/{chunk-KP3VYG4F.js → chunk-UKLZQK2J.js} +6 -6
  92. package/dist/{chunk-KP3VYG4F.js.map → chunk-UKLZQK2J.js.map} +1 -1
  93. package/dist/{chunk-DBXH3EMJ.js → chunk-V5OF7CV4.js} +3 -3
  94. package/dist/{chunk-DBXH3EMJ.js.map → chunk-V5OF7CV4.js.map} +1 -1
  95. package/dist/chunk-X5NK4TZH.js +228 -0
  96. package/dist/chunk-X5NK4TZH.js.map +1 -0
  97. package/dist/cli/check-manifest.d.ts +10 -0
  98. package/dist/cli/check-manifest.d.ts.map +1 -0
  99. package/dist/cli/check-manifest.js +44 -0
  100. package/dist/cli/check-manifest.js.map +1 -0
  101. package/dist/components/cart/index.js +1 -1
  102. package/dist/components/common/index.js +2 -2
  103. package/dist/components/drawer/index.js +6 -6
  104. package/dist/components/home/index.js +8 -8
  105. package/dist/components/layout/Footer.d.ts.map +1 -1
  106. package/dist/components/layout/MasterLayout.d.ts.map +1 -1
  107. package/dist/components/layout/index.js +1 -1
  108. package/dist/components/product/index.js +7 -7
  109. package/dist/components/store/index.js +8 -8
  110. package/dist/{document-class-7AXAAWGZ.js → document-class-WMKWZN7O.js} +3 -3
  111. package/dist/{document-class-7AXAAWGZ.js.map → document-class-WMKWZN7O.js.map} +1 -1
  112. package/dist/hooks/index.js +6 -6
  113. package/dist/hooks/useGtm.js +6 -6
  114. package/dist/hooks/useMoney.js +6 -6
  115. package/dist/hooks/useStore.js +6 -6
  116. package/dist/index.js +6 -6
  117. package/dist/{not-found-3EEMQZMU.js → not-found-NAXLRGC2.js} +8 -8
  118. package/dist/{not-found-3EEMQZMU.js.map → not-found-NAXLRGC2.js.map} +1 -1
  119. package/dist/providers/index.js +6 -6
  120. package/dist/routes/account/orders.js +1 -1
  121. package/dist/routes/account.js +6 -6
  122. package/dist/routes/blog.js +5 -5
  123. package/dist/routes/brands.js +1 -1
  124. package/dist/routes/cart.js +10 -10
  125. package/dist/routes/home.js +9 -9
  126. package/dist/routes/loyalty.js +2 -2
  127. package/dist/routes/page.js +1 -1
  128. package/dist/routes/product-listing.js +8 -8
  129. package/dist/routes/product.js +8 -8
  130. package/dist/routes/testimonials.js +2 -2
  131. package/dist/routes/thank-you.js +1 -1
  132. package/dist/skeleton.js +9 -9
  133. package/dist/tanstack.js +3 -3
  134. package/dist/utils/index.js +1 -1
  135. package/dist/vite/index.d.ts +1 -1
  136. package/dist/vite/index.d.ts.map +1 -1
  137. package/dist/vite/index.js +15 -26
  138. package/dist/vite/index.js.map +1 -1
  139. package/dist/vite/plugins/twilight-manifest.d.ts +23 -0
  140. package/dist/vite/plugins/twilight-manifest.d.ts.map +1 -1
  141. package/dist/vite/plugins/twilight-schema.plugin.d.ts.map +1 -1
  142. package/package.json +5 -1
  143. package/tailwind/components/layout/Footer.tsx.txt +20 -19
  144. package/tailwind/components/layout/MasterLayout.tsx.txt +0 -1
  145. package/dist/chunk-PWTXR4RR.js.map +0 -1
  146. package/dist/chunk-QJYUTRAQ.js +0 -14
  147. package/dist/chunk-U55ZJC2X.js.map +0 -1
@@ -1,8 +1,8 @@
1
- export { useStore } from '../chunk-PWTXR4RR.js';
2
- import '../chunk-X54QP332.js';
3
- import '../chunk-U55ZJC2X.js';
4
- import '../chunk-2JV6WZ6O.js';
1
+ export { useStore } from '../chunk-CTCVO7YU.js';
2
+ import '../chunk-PKXEZRSJ.js';
3
+ import '../chunk-SYVIMWYW.js';
5
4
  import '../chunk-E7WWO3V3.js';
5
+ import '../chunk-2JV6WZ6O.js';
6
6
  import '../chunk-RV54D2D7.js';
7
7
  import '../chunk-ZVZGLEZ6.js';
8
8
  import '../chunk-VVZNW5CB.js';
@@ -32,10 +32,10 @@ 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-DBXH3EMJ.js';
35
+ import '../chunk-V5OF7CV4.js';
36
36
  import '../chunk-AXW67SY7.js';
37
- import '../chunk-SKLEJJ6M.js';
38
37
  import '../chunk-BYMOPN2S.js';
38
+ import '../chunk-SKLEJJ6M.js';
39
39
  import '../chunk-6BZ5TKEV.js';
40
40
  import '../chunk-FZKRSGLP.js';
41
41
  import '../chunk-7V5HOZW4.js';
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { registry } from './chunk-Y32RHCOH.js';
2
2
  export { ComponentRegistry, registry } from './chunk-Y32RHCOH.js';
3
- export { TwilightProvider } from './chunk-PWTXR4RR.js';
4
- import './chunk-X54QP332.js';
5
- import './chunk-U55ZJC2X.js';
6
- import './chunk-2JV6WZ6O.js';
3
+ export { TwilightProvider } from './chunk-CTCVO7YU.js';
4
+ import './chunk-PKXEZRSJ.js';
5
+ import './chunk-SYVIMWYW.js';
7
6
  import './chunk-E7WWO3V3.js';
7
+ import './chunk-2JV6WZ6O.js';
8
8
  import './chunk-RV54D2D7.js';
9
9
  import './chunk-ZVZGLEZ6.js';
10
10
  import './chunk-VVZNW5CB.js';
@@ -34,10 +34,10 @@ 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-DBXH3EMJ.js';
37
+ import './chunk-V5OF7CV4.js';
38
38
  import './chunk-AXW67SY7.js';
39
- import './chunk-SKLEJJ6M.js';
40
39
  import './chunk-BYMOPN2S.js';
40
+ import './chunk-SKLEJJ6M.js';
41
41
  import './chunk-6BZ5TKEV.js';
42
42
  import './chunk-FZKRSGLP.js';
43
43
  import './chunk-7V5HOZW4.js';
@@ -1,9 +1,9 @@
1
1
  import { product } from './chunk-556OT3BN.js';
2
- import './chunk-PWTXR4RR.js';
3
- import './chunk-X54QP332.js';
4
- import './chunk-U55ZJC2X.js';
5
- import './chunk-2JV6WZ6O.js';
2
+ import './chunk-CTCVO7YU.js';
3
+ import './chunk-PKXEZRSJ.js';
4
+ import './chunk-SYVIMWYW.js';
6
5
  import './chunk-E7WWO3V3.js';
6
+ import './chunk-2JV6WZ6O.js';
7
7
  import './chunk-RV54D2D7.js';
8
8
  import './chunk-ZVZGLEZ6.js';
9
9
  import './chunk-VVZNW5CB.js';
@@ -33,10 +33,10 @@ 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-DBXH3EMJ.js';
36
+ import { LazyErrorPage } from './chunk-V5OF7CV4.js';
37
37
  import './chunk-AXW67SY7.js';
38
- import './chunk-SKLEJJ6M.js';
39
38
  import './chunk-BYMOPN2S.js';
39
+ import './chunk-SKLEJJ6M.js';
40
40
  import './chunk-6BZ5TKEV.js';
41
41
  import './chunk-FZKRSGLP.js';
42
42
  import './chunk-7V5HOZW4.js';
@@ -149,5 +149,5 @@ function NotFoundPage(props = {}) {
149
149
  }
150
150
 
151
151
  export { NotFoundPage };
152
- //# sourceMappingURL=not-found-3EEMQZMU.js.map
153
- //# sourceMappingURL=not-found-3EEMQZMU.js.map
152
+ //# sourceMappingURL=not-found-NAXLRGC2.js.map
153
+ //# sourceMappingURL=not-found-NAXLRGC2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/routes/product-short-link.ts","../src/routes/not-found.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAM,UAAA,GAAa,qBAAA;AAOZ,SAAS,mBAAmB,QAAA,EAA4D;AAC7F,EAAA,MAAM,WAAW,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACnD,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,CAAC,CAAC,CAAA,IAAK,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG;AAClF,IAAA,OAAO,EAAE,MAAM,QAAA,CAAS,CAAC,GAAG,MAAA,EAAQ,QAAA,CAAS,CAAC,CAAA,EAAE;AAAA,EAClD;AACA,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,CAAC,SAAS,QAAA,CAAS,CAAC,CAAC,CAAA,IAAK,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG;AACnF,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,CAAS,CAAC,CAAA,EAAE;AAAA,EAC7B;AACA,EAAA,OAAO,IAAA;AACT;AAGA,IAAM,WAAA,GAAc,mBAAA;AAGb,SAAS,oBAAoB,QAAA,EAA2D;AAC7F,EAAA,MAAM,WAAW,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACnD,EAAA,MAAM,YAAY,QAAA,CAAS,MAAA,KAAW,KAAK,QAAA,CAAS,QAAA,CAAS,CAAC,CAAC,CAAA;AAC/D,EAAA,IAAI,CAAC,SAAA,KAAc,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,SAAS,QAAA,CAAS,CAAC,CAAC,CAAA,CAAA,EAAI,OAAO,IAAA;AAC3E,EAAA,MAAM,GAAA,GAAM,SAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA,GAAI,CAAC,CAAA;AAChE,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,OAAO,SAAA,GAAY,EAAE,GAAA,EAAK,MAAA,EAAQ,SAAS,CAAC,CAAA,EAAE,GAAI,EAAE,GAAA,EAAI;AAC1D;AAEA,SAAS,aAAa,GAAA,EAA6C;AACjE,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,GAAA,IAAO,EAAE,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAI,IAAK,EAAA;AAC7E,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,GAAI,CAAC,CAAA;AAAA,EACpC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAGA,eAAe,iBAAiB,GAAA,EAAqC;AACnE,EAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,UAAU,IAAI,CAAC,CAAA;AACpC,EAAA,IAAI,EAAA,EAAI,OAAO,MAAA,CAAO,EAAE,CAAA;AACxB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,GAAA,EAAK,OAAA,EAAS,IAAI,CAAA;AACpF,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,CAAC,SAAS,YAAA,CAAa,IAAA,CAAK,GAAG,CAAA,KAAM,GAAG,CAAA;AACjE,EAAA,OAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,GAAI,IAAA;AACpC;AAGO,SAAS,mBAAmB,GAAA,EAAiC;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,GAAA,IAAO,EAAE,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AACtE,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAC9C,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,IAAK,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,GAAI,GAAA;AAAA,EACtF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAQO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,WAAA,EAAY;AACjC,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,SAAA,GAAY,mBAAmB,QAAQ,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAa,oBAAoB,QAAQ,CAAA;AAC/C,EAAA,MAAM,MAAA,GAAS,SAAA,EAAW,IAAA,IAAQ,UAAA,EAAY,GAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,SAAA,EAAW,MAAA,IAAU,UAAA,EAAY,MAAA;AAChD,EAAA,MAAM,WAAA,GAAc,CAAC,CAAC,SAAA;AACtB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAwB,IAAI,CAAA;AAExD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,MAAM,WAAA,GAAc,WAAA,GAChB,OAAA,CACG,IAAA,CAAK,MAAM,CAAA,CACX,IAAA,CAAK,CAAC,KAAA,KAAW,KAAA,EAAO,EAAA,GAAK,CAAA,EAAG,kBAAA,CAAmB,MAAM,GAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,EAAE,CAAA,CAAA,GAAK,IAAK,CAAA,GACvF,iBAAiB,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,EAAA,KAAQ,EAAA,GAAK,CAAA,GAAA,EAAM,EAAE,KAAK,IAAK,CAAA;AAClE,IAAA,WAAA,CACG,IAAA,CAAK,CAAC,IAAA,KAAS;AACd,MAAA,IAAI,SAAA,EAAW;AACf,MAAA,IAAI,CAAC,IAAA,EAAM,OAAO,SAAA,CAAU,MAAM,CAAA;AAClC,MAAA,QAAA,CAAS,CAAA,EAAG,MAAA,GAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,IACrE,CAAC,EACA,KAAA,CAAM,MAAM,CAAC,SAAA,IAAa,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9C,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAE1C,EAAA,OAAO,CAAC,CAAC,MAAA,IAAU,MAAA,KAAW,MAAA;AAChC;ACpFO,SAAS,YAAA,CAAa,KAAA,GAA2B,EAAC,EAAG;AAC1D,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,MAAM,qBAAqB,mBAAA,EAAoB;AAE/C,EAAA,MAAM;AAAA,IACJ,KAAA,GAAQ,CAAA,CAAE,mBAAmB,CAAA,IAAK,gBAAA;AAAA,IAClC,OAAA,GAAU,CAAA,CAAE,8BAA8B,CAAA,IACxC,gEAAA;AAAA,IACF,YAAA,GAAe,IAAA;AAAA,IACf,YAAA,GAAe,CAAA,CAAE,2BAA2B,CAAA,IAAK,cAAA;AAAA,IACjD;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,IAAI,oBAAoB,OAAO,IAAA;AAE/B,EAAA,uBACE,IAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,GAAA;AAAA,MACN,KAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA,EAAY,YAAA;AAAA,MACZ,UAAA,EAAY,YAAA;AAAA,MACZ,aAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,MAAK,gBAAA,EAAiB,CAAA;AAAA,wBAChC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,kBAAA,EAAmB,CAAA;AAAA,wBAClC,GAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAK,cAAA,EAAe;AAAA;AAAA;AAAA,GAChC;AAEJ","file":"not-found-3EEMQZMU.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-NAXLRGC2.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,8 +1,8 @@
1
- export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-PWTXR4RR.js';
2
- import '../chunk-X54QP332.js';
3
- import '../chunk-U55ZJC2X.js';
4
- import '../chunk-2JV6WZ6O.js';
1
+ export { TwilightProvider, registerDocumentSync, routeDocumentSyncs } from '../chunk-CTCVO7YU.js';
2
+ import '../chunk-PKXEZRSJ.js';
3
+ import '../chunk-SYVIMWYW.js';
5
4
  import '../chunk-E7WWO3V3.js';
5
+ import '../chunk-2JV6WZ6O.js';
6
6
  import '../chunk-RV54D2D7.js';
7
7
  import '../chunk-ZVZGLEZ6.js';
8
8
  import '../chunk-VVZNW5CB.js';
@@ -32,10 +32,10 @@ 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-DBXH3EMJ.js';
35
+ import '../chunk-V5OF7CV4.js';
36
36
  import '../chunk-AXW67SY7.js';
37
- import '../chunk-SKLEJJ6M.js';
38
37
  export { LinkProvider, LinkProviderError, createLinkWithAdapter, useLinkAdapter } from '../chunk-BYMOPN2S.js';
38
+ import '../chunk-SKLEJJ6M.js';
39
39
  import '../chunk-6BZ5TKEV.js';
40
40
  import '../chunk-FZKRSGLP.js';
41
41
  import '../chunk-7V5HOZW4.js';
@@ -1,4 +1,4 @@
1
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-E26YG3AO.js';
1
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../../chunk-A64SSH6M.js';
2
2
  import '../../chunk-YGJMUJVR.js';
3
3
  import '../../chunk-TZ3E5BN4.js';
4
4
  import '../../chunk-6ZMNTJM3.js';
@@ -1,5 +1,5 @@
1
1
  import { wallet } from '../chunk-HQAFPDJK.js';
2
- export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-E26YG3AO.js';
2
+ export { OrderSingle, OrderSinglePage, Orders, OrdersPage, orderSingleLoader, ordersLoader } from '../chunk-A64SSH6M.js';
3
3
  import '../chunk-YGJMUJVR.js';
4
4
  import { notification } from '../chunk-6OOTDFC7.js';
5
5
  import { wishlist } from '../chunk-I4LYRR2O.js';
@@ -29,7 +29,7 @@ async function profileLoader(_ctx) {
29
29
 
30
30
  // src/routes/account/profile/index.tsx
31
31
  var LazyProfilePage = lazy(
32
- () => import('../ProfilePage-TZSU3GHZ.js').then((m) => ({ default: m.ProfilePage }))
32
+ () => import('../ProfilePage-BQE63RHK.js').then((m) => ({ default: m.ProfilePage }))
33
33
  );
34
34
  var ProfilePage = LazyProfilePage;
35
35
  var Profile = {
@@ -71,7 +71,7 @@ async function wishlistLoader(ctx) {
71
71
 
72
72
  // src/routes/account/wishlist/index.tsx
73
73
  var LazyWishlistPage = lazy(
74
- () => import('../WishlistPage-UW6LJLSW.js').then((m) => ({ default: m.WishlistPage }))
74
+ () => import('../WishlistPage-7257GI3Y.js').then((m) => ({ default: m.WishlistPage }))
75
75
  );
76
76
  var WishlistPage = LazyWishlistPage;
77
77
  var Wishlist = {
@@ -113,7 +113,7 @@ async function walletLoader(ctx) {
113
113
  }
114
114
 
115
115
  // src/routes/account/wallet/index.tsx
116
- var LazyWalletPage = lazy(() => import('../WalletPage-AJVV7LVL.js').then((m) => ({ default: m.WalletPage })));
116
+ var LazyWalletPage = lazy(() => import('../WalletPage-UEYRVSWR.js').then((m) => ({ default: m.WalletPage })));
117
117
  var WalletPage = LazyWalletPage;
118
118
  var Wallet = {
119
119
  id: RouteId.CUSTOMER_WALLET,
@@ -149,7 +149,7 @@ async function notificationsLoader(_ctx) {
149
149
 
150
150
  // src/routes/account/notifications/index.tsx
151
151
  var LazyNotificationsPage = lazy(
152
- () => import('../NotificationsPage-QCABE6QD.js').then((m) => ({ default: m.NotificationsPage }))
152
+ () => import('../NotificationsPage-HYID6XAA.js').then((m) => ({ default: m.NotificationsPage }))
153
153
  );
154
154
  var NotificationsPage = LazyNotificationsPage;
155
155
  var Notifications = {
@@ -182,7 +182,7 @@ async function settingsLoader(_ctx) {
182
182
 
183
183
  // src/routes/account/settings/index.tsx
184
184
  var LazySettingsPage = lazy(
185
- () => import('../SettingsPage-DIDRQXMM.js').then((m) => ({ default: m.SettingsPage }))
185
+ () => import('../SettingsPage-QLKKYVGH.js').then((m) => ({ default: m.SettingsPage }))
186
186
  );
187
187
  var SettingsPage = LazySettingsPage;
188
188
  var Settings = {
@@ -143,18 +143,18 @@ async function blogTagLoader({
143
143
  }
144
144
 
145
145
  // src/routes/blog/index.tsx
146
- var LazyBlogPage = lazy(() => import('../BlogPage-VLF3NSGE.js').then((m) => ({ default: m.BlogPage })));
146
+ var LazyBlogPage = lazy(() => import('../BlogPage-B2A47OBZ.js').then((m) => ({ default: m.BlogPage })));
147
147
  var LazyBlogSinglePage = lazy(
148
- () => import('../BlogSinglePage-AVK535IW.js').then((m) => ({ default: m.BlogSinglePage }))
148
+ () => import('../BlogSinglePage-ZSOHP2GJ.js').then((m) => ({ default: m.BlogSinglePage }))
149
149
  );
150
150
  var LazyBlogAuthorPage = lazy(
151
- () => import('../BlogAuthorPage-LO7FSSJR.js').then((m) => ({ default: m.BlogAuthorPage }))
151
+ () => import('../BlogAuthorPage-4IXOEQA4.js').then((m) => ({ default: m.BlogAuthorPage }))
152
152
  );
153
153
  var LazyBlogCategoryPage = lazy(
154
- () => import('../BlogCategoryPage-KKFQ3PGR.js').then((m) => ({ default: m.BlogCategoryPage }))
154
+ () => import('../BlogCategoryPage-NYB7EMKQ.js').then((m) => ({ default: m.BlogCategoryPage }))
155
155
  );
156
156
  var LazyBlogTagPage = lazy(
157
- () => import('../BlogTagPage-F3T4D7RH.js').then((m) => ({ default: m.BlogTagPage }))
157
+ () => import('../BlogTagPage-24MZSPCO.js').then((m) => ({ default: m.BlogTagPage }))
158
158
  );
159
159
  var BlogPage = LazyBlogPage;
160
160
  var BlogSinglePage = LazyBlogSinglePage;
@@ -22,7 +22,7 @@ async function brandsLoader() {
22
22
  }
23
23
 
24
24
  // src/routes/brands/index.tsx
25
- var LazyBrandsPage = lazy(() => import('../BrandsPage-LVSBZSVC.js').then((m) => ({ default: m.BrandsPage })));
25
+ var LazyBrandsPage = lazy(() => import('../BrandsPage-WJUCPMKH.js').then((m) => ({ default: m.BrandsPage })));
26
26
  var BrandsPage = LazyBrandsPage;
27
27
  async function brandsLoaderWithExtend(_ctx, extend) {
28
28
  const data = await brandsLoader();
@@ -1,18 +1,18 @@
1
1
  import { cart } from '../chunk-27Z442XF.js';
2
2
  import { loyalty } from '../chunk-B2G7S4UR.js';
3
3
  import { CartSkeleton } from '../chunk-N7CCSGZF.js';
4
- import '../chunk-BAYGWTNM.js';
5
- import '../chunk-WSDG4ZRI.js';
4
+ import '../chunk-7PQPQEDN.js';
5
+ import '../chunk-7JVKUFFT.js';
6
6
  import '../chunk-FZYR4BA2.js';
7
7
  import '../chunk-556OT3BN.js';
8
- import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-QJYUTRAQ.js';
9
- import '../chunk-KP3VYG4F.js';
8
+ import { LazySeoCartWidget, LazyCartItem, LazyCartSummary } from '../chunk-AUC6QMF7.js';
9
+ import '../chunk-UKLZQK2J.js';
10
10
  import '../chunk-Y32RHCOH.js';
11
- import '../chunk-PWTXR4RR.js';
12
- import '../chunk-X54QP332.js';
13
- import '../chunk-U55ZJC2X.js';
14
- import '../chunk-2JV6WZ6O.js';
11
+ import '../chunk-CTCVO7YU.js';
12
+ import '../chunk-PKXEZRSJ.js';
13
+ import '../chunk-SYVIMWYW.js';
15
14
  import '../chunk-E7WWO3V3.js';
15
+ import '../chunk-2JV6WZ6O.js';
16
16
  import '../chunk-RV54D2D7.js';
17
17
  import '../chunk-ZVZGLEZ6.js';
18
18
  import '../chunk-VVZNW5CB.js';
@@ -42,10 +42,10 @@ 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-DBXH3EMJ.js';
45
+ import { LazyBreadcrumb, LazyNoContent } from '../chunk-V5OF7CV4.js';
46
46
  import '../chunk-AXW67SY7.js';
47
- import '../chunk-SKLEJJ6M.js';
48
47
  import '../chunk-BYMOPN2S.js';
48
+ import '../chunk-SKLEJJ6M.js';
49
49
  import '../chunk-6BZ5TKEV.js';
50
50
  import '../chunk-FZKRSGLP.js';
51
51
  import '../chunk-7V5HOZW4.js';
@@ -1,14 +1,14 @@
1
- export { Home, HomeSkeleton, homeLoader } from '../chunk-BAYGWTNM.js';
2
- export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-WSDG4ZRI.js';
1
+ export { Home, HomeSkeleton, homeLoader } from '../chunk-7PQPQEDN.js';
2
+ export { DefaultHomeComponents, registerHomeComponentConfig, registerHomeComponents } from '../chunk-7JVKUFFT.js';
3
3
  import '../chunk-FZYR4BA2.js';
4
4
  import '../chunk-556OT3BN.js';
5
- import '../chunk-KP3VYG4F.js';
5
+ import '../chunk-UKLZQK2J.js';
6
6
  import '../chunk-Y32RHCOH.js';
7
- import '../chunk-PWTXR4RR.js';
8
- import '../chunk-X54QP332.js';
9
- import '../chunk-U55ZJC2X.js';
10
- import '../chunk-2JV6WZ6O.js';
7
+ import '../chunk-CTCVO7YU.js';
8
+ import '../chunk-PKXEZRSJ.js';
9
+ import '../chunk-SYVIMWYW.js';
11
10
  import '../chunk-E7WWO3V3.js';
11
+ import '../chunk-2JV6WZ6O.js';
12
12
  import '../chunk-RV54D2D7.js';
13
13
  import '../chunk-ZVZGLEZ6.js';
14
14
  import '../chunk-VVZNW5CB.js';
@@ -38,10 +38,10 @@ 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-DBXH3EMJ.js';
41
+ import '../chunk-V5OF7CV4.js';
42
42
  import '../chunk-AXW67SY7.js';
43
- import '../chunk-SKLEJJ6M.js';
44
43
  import '../chunk-BYMOPN2S.js';
44
+ import '../chunk-SKLEJJ6M.js';
45
45
  import '../chunk-6BZ5TKEV.js';
46
46
  import '../chunk-FZKRSGLP.js';
47
47
  import '../chunk-7V5HOZW4.js';
@@ -56,10 +56,10 @@ async function loyaltyPointsLoader(locale) {
56
56
 
57
57
  // src/routes/loyalty/index.tsx
58
58
  var LazyLoyaltyPage = lazy(
59
- () => import('../LoyaltyPage-M5CT3CFD.js').then((m) => ({ default: m.LoyaltyPage }))
59
+ () => import('../LoyaltyPage-S74ZELSW.js').then((m) => ({ default: m.LoyaltyPage }))
60
60
  );
61
61
  var LazyLoyaltyPointsPage = lazy(
62
- () => import('../LoyaltyPointsPage-SDJB52U6.js').then((m) => ({ default: m.LoyaltyPointsPage }))
62
+ () => import('../LoyaltyPointsPage-TCKZTXSB.js').then((m) => ({ default: m.LoyaltyPointsPage }))
63
63
  );
64
64
  var LoyaltyPage = LazyLoyaltyPage;
65
65
  var LoyaltyPointsPage = LazyLoyaltyPointsPage;
@@ -27,7 +27,7 @@ async function pageSingleLoader({ params }) {
27
27
  }
28
28
 
29
29
  // src/routes/page/index.tsx
30
- var LazyPageSingle = lazy(() => import('../PageSingle-EN5XIM2B.js').then((m) => ({ default: m.PageSingle })));
30
+ var LazyPageSingle = lazy(() => import('../PageSingle-RNWFQQEM.js').then((m) => ({ default: m.PageSingle })));
31
31
  var PageSingleLazy = LazyPageSingle;
32
32
  async function loader(ctx, extend) {
33
33
  const data = await pageSingleLoader({ params: ctx.params });
@@ -1,17 +1,17 @@
1
1
  import { sortOptions } from '../chunk-6Z4MOC4S.js';
2
2
  import { category } from '../chunk-GAXVDCMA.js';
3
3
  import { brand } from '../chunk-7X4XGKXO.js';
4
- import { useReorderButtons, LazyTestimonials } from '../chunk-WSDG4ZRI.js';
4
+ import { useReorderButtons, LazyTestimonials } from '../chunk-7JVKUFFT.js';
5
5
  import '../chunk-FZYR4BA2.js';
6
6
  import { product, parseNextPageToken } from '../chunk-556OT3BN.js';
7
7
  import { Drawer } from '../chunk-6TKIUG5C.js';
8
- import { ProductCard } from '../chunk-KP3VYG4F.js';
8
+ import { ProductCard } from '../chunk-UKLZQK2J.js';
9
9
  import { registry, COMPONENT_KEYS } from '../chunk-Y32RHCOH.js';
10
- import { useStore } from '../chunk-PWTXR4RR.js';
11
- import '../chunk-X54QP332.js';
12
- import '../chunk-U55ZJC2X.js';
13
- import '../chunk-2JV6WZ6O.js';
10
+ import { useStore } from '../chunk-CTCVO7YU.js';
11
+ import '../chunk-PKXEZRSJ.js';
12
+ import '../chunk-SYVIMWYW.js';
14
13
  import '../chunk-E7WWO3V3.js';
14
+ import '../chunk-2JV6WZ6O.js';
15
15
  import '../chunk-RV54D2D7.js';
16
16
  import '../chunk-ZVZGLEZ6.js';
17
17
  import '../chunk-VVZNW5CB.js';
@@ -41,10 +41,10 @@ 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-DBXH3EMJ.js';
44
+ import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-V5OF7CV4.js';
45
45
  import '../chunk-AXW67SY7.js';
46
- import '../chunk-SKLEJJ6M.js';
47
46
  import '../chunk-BYMOPN2S.js';
47
+ import '../chunk-SKLEJJ6M.js';
48
48
  import '../chunk-6BZ5TKEV.js';
49
49
  import '../chunk-FZKRSGLP.js';
50
50
  import '../chunk-7V5HOZW4.js';
@@ -1,13 +1,13 @@
1
- import { ProductsSlider, LazyTestimonials } from '../chunk-WSDG4ZRI.js';
1
+ import { ProductsSlider, LazyTestimonials } from '../chunk-7JVKUFFT.js';
2
2
  import '../chunk-FZYR4BA2.js';
3
3
  import { product } from '../chunk-556OT3BN.js';
4
- import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-KP3VYG4F.js';
4
+ import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-UKLZQK2J.js';
5
5
  import '../chunk-Y32RHCOH.js';
6
- import { fastCheckoutScript } from '../chunk-PWTXR4RR.js';
7
- import '../chunk-X54QP332.js';
8
- import '../chunk-U55ZJC2X.js';
9
- import '../chunk-2JV6WZ6O.js';
6
+ import { fastCheckoutScript } from '../chunk-CTCVO7YU.js';
7
+ import '../chunk-PKXEZRSJ.js';
8
+ import '../chunk-SYVIMWYW.js';
10
9
  import '../chunk-E7WWO3V3.js';
10
+ import '../chunk-2JV6WZ6O.js';
11
11
  import '../chunk-RV54D2D7.js';
12
12
  import '../chunk-ZVZGLEZ6.js';
13
13
  import '../chunk-VVZNW5CB.js';
@@ -37,10 +37,10 @@ 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-DBXH3EMJ.js';
40
+ import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-V5OF7CV4.js';
41
41
  import '../chunk-AXW67SY7.js';
42
- import '../chunk-SKLEJJ6M.js';
43
42
  import '../chunk-BYMOPN2S.js';
43
+ import '../chunk-SKLEJJ6M.js';
44
44
  import '../chunk-6BZ5TKEV.js';
45
45
  import '../chunk-FZKRSGLP.js';
46
46
  import '../chunk-7V5HOZW4.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-XPHFRBZ7.js').then((m) => ({ default: m.TestimonialsPage }))
35
+ () => import('../TestimonialsPage-OKDDAMJL.js').then((m) => ({ default: m.TestimonialsPage }))
36
36
  );
37
37
  var LazyReviewsPage = lazy(
38
- () => import('../ReviewsPage-WYZ6CHF2.js').then((m) => ({ default: m.ReviewsPage }))
38
+ () => import('../ReviewsPage-VEYN7BSR.js').then((m) => ({ default: m.ReviewsPage }))
39
39
  );
40
40
  var TestimonialsPage = LazyTestimonialsPage;
41
41
  var ReviewsPage = LazyReviewsPage;
@@ -38,7 +38,7 @@ async function thankYouLoader({
38
38
 
39
39
  // src/routes/thank-you/index.tsx
40
40
  var LazyThankYouPage = lazy(
41
- () => import('../ThankYouPage-UA6YYFB2.js').then((m) => ({ default: m.ThankYouPage }))
41
+ () => import('../ThankYouPage-YWLG6UF7.js').then((m) => ({ default: m.ThankYouPage }))
42
42
  );
43
43
  var ThankYouPage = LazyThankYouPage;
44
44
  async function loader(ctx, extend) {
package/dist/skeleton.js CHANGED
@@ -1,15 +1,15 @@
1
1
  export { BlogSkeleton, BreadcrumbSkeleton, CartSkeleton, CustomerLayoutSkeleton, CustomerPageSkeleton, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, SkeletonPulse } from './chunk-N7CCSGZF.js';
2
- export { HomeSkeleton } from './chunk-BAYGWTNM.js';
3
- import './chunk-WSDG4ZRI.js';
2
+ export { HomeSkeleton } from './chunk-7PQPQEDN.js';
3
+ import './chunk-7JVKUFFT.js';
4
4
  import './chunk-FZYR4BA2.js';
5
5
  import './chunk-556OT3BN.js';
6
- import './chunk-KP3VYG4F.js';
6
+ import './chunk-UKLZQK2J.js';
7
7
  import './chunk-Y32RHCOH.js';
8
- import './chunk-PWTXR4RR.js';
9
- import './chunk-X54QP332.js';
10
- import './chunk-U55ZJC2X.js';
11
- import './chunk-2JV6WZ6O.js';
8
+ import './chunk-CTCVO7YU.js';
9
+ import './chunk-PKXEZRSJ.js';
10
+ import './chunk-SYVIMWYW.js';
12
11
  import './chunk-E7WWO3V3.js';
12
+ import './chunk-2JV6WZ6O.js';
13
13
  import './chunk-RV54D2D7.js';
14
14
  import './chunk-ZVZGLEZ6.js';
15
15
  import './chunk-VVZNW5CB.js';
@@ -39,10 +39,10 @@ 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-DBXH3EMJ.js';
42
+ import './chunk-V5OF7CV4.js';
43
43
  import './chunk-AXW67SY7.js';
44
- import './chunk-SKLEJJ6M.js';
45
44
  import './chunk-BYMOPN2S.js';
45
+ import './chunk-SKLEJJ6M.js';
46
46
  import './chunk-6BZ5TKEV.js';
47
47
  import './chunk-FZKRSGLP.js';
48
48
  import './chunk-7V5HOZW4.js';
package/dist/tanstack.js CHANGED
@@ -1,8 +1,8 @@
1
- export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-4WVJJ7SN.js';
2
- import './chunk-Z4Y55HWX.js';
3
- import { CRITICAL_STYLE_HREF } from './chunk-4FJGZQD3.js';
1
+ export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-6VOF5SB4.js';
4
2
  import { requestHostOf } from './chunk-UGLZPGPF.js';
5
3
  export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-UGLZPGPF.js';
4
+ import './chunk-Z4Y55HWX.js';
5
+ import { CRITICAL_STYLE_HREF } from './chunk-4FJGZQD3.js';
6
6
  export { tanstackHeadAdapter as head, withHead } from './chunk-3LXB4VFK.js';
7
7
  import './chunk-MKVCFBVF.js';
8
8
  import './chunk-BNI6SKFL.js';
@@ -1,5 +1,5 @@
1
- export { stripUnsafeHtml } from '../chunk-RUHSV4Z6.js';
2
1
  export { formatSallaPlural } from '../chunk-BT6HEEAP.js';
2
+ export { stripUnsafeHtml } from '../chunk-RUHSV4Z6.js';
3
3
  export { dispatchRouteChanged } from '../chunk-MKVCFBVF.js';
4
4
  export { sortOptions } from '../chunk-6Z4MOC4S.js';
5
5
  export { color } from '../chunk-VVZNW5CB.js';
@@ -3,5 +3,5 @@ export { default } from './twilight-react';
3
3
  export { getFrameworkAdapter, tanstackAdapter as tanstack, nextjsAdapter as nextjs, } from './adapters';
4
4
  export { bestPracticesPlugin } from './plugins/best-practices/best-practices.plugin';
5
5
  export type { BestPracticesOptions } from './plugins/best-practices/types';
6
- export { REACT_THEME_TYPE, getThemeType, isReactThemeManifest, describeThemeTypeIssue, type TwilightManifest, } from './plugins/twilight-manifest';
6
+ export { REACT_THEME_TYPE, getThemeType, isReactThemeManifest, describeThemeTypeIssue, validateTwilightManifest, type ManifestIssue, type ManifestValidation, type TwilightManifest, } from './plugins/twilight-manifest';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG3C,OAAO,EACL,mBAAmB,EACnB,eAAe,IAAI,QAAQ,EAC3B,aAAa,IAAI,MAAM,GACxB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,YAAY,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAI3E,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG3C,OAAO,EACL,mBAAmB,EACnB,eAAe,IAAI,QAAQ,EAC3B,aAAa,IAAI,MAAM,GACxB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,YAAY,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAI3E,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAC"}
@@ -1,5 +1,7 @@
1
- import { nextjsHeadAdapter } from '../chunk-HOSHJBPS.js';
2
1
  import { tanstackHeadAdapter } from '../chunk-3LXB4VFK.js';
2
+ import { nextjsHeadAdapter } from '../chunk-HOSHJBPS.js';
3
+ import { validateTwilightManifest } from '../chunk-X5NK4TZH.js';
4
+ export { REACT_THEME_TYPE, describeThemeTypeIssue, getThemeType, isReactThemeManifest, validateTwilightManifest } from '../chunk-X5NK4TZH.js';
3
5
  import '../chunk-RV54D2D7.js';
4
6
  import { setHeadAdapter } from '../chunk-GD26FI4J.js';
5
7
  import { RouteId } from '../chunk-OUW6WESU.js';
@@ -271,28 +273,6 @@ function buildTwilightSchema(raw) {
271
273
  };
272
274
  }
273
275
 
274
- // src/vite/plugins/twilight-manifest.ts
275
- var REACT_THEME_TYPE = "react";
276
- function getThemeType(raw) {
277
- if (!raw || typeof raw !== "object") return void 0;
278
- const { type } = raw;
279
- return typeof type === "string" && type.trim() ? type : void 0;
280
- }
281
- function isReactThemeManifest(raw) {
282
- return getThemeType(raw) === REACT_THEME_TYPE;
283
- }
284
- function describeThemeTypeIssue(raw, fileLabel = "twilight.json") {
285
- const type = getThemeType(raw);
286
- if (type === REACT_THEME_TYPE) return null;
287
- if (!type) {
288
- return `${fileLabel} has no "type": "${REACT_THEME_TYPE}" \u2014 the Salla CLI treats a manifest without it as a twig theme, so \`salla theme dev\` and publishing will take the wrong path. Add "type": "${REACT_THEME_TYPE}" as the first key.`;
289
- }
290
- if (type.trim() === REACT_THEME_TYPE) {
291
- return `${fileLabel} declares "type": ${JSON.stringify(type)} \u2014 the Salla CLI compares this value exactly, so the surrounding whitespace still routes the theme to the twig path. Use "type": "${REACT_THEME_TYPE}".`;
292
- }
293
- return `${fileLabel} declares "type": "${type}", but this theme is built with the React theme engine. Change it to "${REACT_THEME_TYPE}" so the Salla CLI routes it correctly.`;
294
- }
295
-
296
276
  // src/dev/schema-types.ts
297
277
  var EMPTY_DEV_SCHEMA = {
298
278
  settings: [],
@@ -306,6 +286,7 @@ var VIRTUAL_ID2 = "virtual:twilight/schema";
306
286
  var RESOLVED_ID2 = "\0" + VIRTUAL_ID2;
307
287
  var EMPTY_MODULE = `export default ${JSON.stringify(EMPTY_DEV_SCHEMA)};`;
308
288
  var LOG_PREFIX = "[twilight-react:schema]";
289
+ var MAX_REPORTED = 8;
309
290
  function twilightSchemaPlugin(twilightJsonPath = "twilight.json") {
310
291
  let filePath;
311
292
  let isDevServer = false;
@@ -318,8 +299,16 @@ function twilightSchemaPlugin(twilightJsonPath = "twilight.json") {
318
299
  return;
319
300
  }
320
301
  try {
321
- const issue = describeThemeTypeIssue(JSON.parse(raw), twilightJsonPath);
322
- if (issue) console.warn(`${LOG_PREFIX} ${issue}`);
302
+ const { errors: issues } = validateTwilightManifest(JSON.parse(raw), twilightJsonPath);
303
+ for (const issue of issues.slice(0, MAX_REPORTED)) {
304
+ const where = issue.path ? `${twilightJsonPath} ${issue.path}: ` : "";
305
+ console.warn(`${LOG_PREFIX} ${where}${issue.message}`);
306
+ }
307
+ if (issues.length > MAX_REPORTED) {
308
+ console.warn(
309
+ `${LOG_PREFIX} ...and ${issues.length - MAX_REPORTED} more. Run \`pnpm check:manifest\` for the full list.`
310
+ );
311
+ }
323
312
  } catch {
324
313
  console.warn(
325
314
  `${LOG_PREFIX} ${twilightJsonPath} is not valid JSON \u2014 theme settings and the dev widget will be empty.`
@@ -2799,6 +2788,6 @@ async function twilightReact(options = {}) {
2799
2788
  }
2800
2789
  var twilight_react_default = twilightReact;
2801
2790
 
2802
- export { REACT_THEME_TYPE, bestPracticesPlugin, twilight_react_default as default, describeThemeTypeIssue, getFrameworkAdapter, getThemeType, isReactThemeManifest, nextjsAdapter as nextjs, tanstackAdapter as tanstack, twilightReact };
2791
+ export { bestPracticesPlugin, twilight_react_default as default, getFrameworkAdapter, nextjsAdapter as nextjs, tanstackAdapter as tanstack, twilightReact };
2803
2792
  //# sourceMappingURL=index.js.map
2804
2793
  //# sourceMappingURL=index.js.map