@salla.sa/twilight-theme-engine 1.0.134 → 1.0.135

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 (214) hide show
  1. package/dist/{AddToCartForm-D7AQIX7K.js → AddToCartForm-ODVZPTKN.js} +3 -3
  2. package/dist/{AddToCartForm-D7AQIX7K.js.map → AddToCartForm-ODVZPTKN.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-P2TVMO5O.js → BlogAuthorPage-BU23SINI.js} +16 -16
  4. package/dist/{BlogAuthorPage-P2TVMO5O.js.map → BlogAuthorPage-BU23SINI.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-A2BS6T3I.js → BlogCategoryPage-ZVITUHP4.js} +16 -16
  6. package/dist/{BlogCategoryPage-A2BS6T3I.js.map → BlogCategoryPage-ZVITUHP4.js.map} +1 -1
  7. package/dist/{BlogPage-ZOIVZQ5W.js → BlogPage-IN3V7FYK.js} +14 -14
  8. package/dist/{BlogPage-ZOIVZQ5W.js.map → BlogPage-IN3V7FYK.js.map} +1 -1
  9. package/dist/{BlogSinglePage-X57JXKQ6.js → BlogSinglePage-UJG7YPYZ.js} +14 -14
  10. package/dist/{BlogSinglePage-X57JXKQ6.js.map → BlogSinglePage-UJG7YPYZ.js.map} +1 -1
  11. package/dist/{BlogTagPage-WXLEEA63.js → BlogTagPage-XDETNKGR.js} +16 -16
  12. package/dist/{BlogTagPage-WXLEEA63.js.map → BlogTagPage-XDETNKGR.js.map} +1 -1
  13. package/dist/{BrandsPage-6ZMEF4EQ.js → BrandsPage-CBU7JFSX.js} +15 -15
  14. package/dist/{BrandsPage-6ZMEF4EQ.js.map → BrandsPage-CBU7JFSX.js.map} +1 -1
  15. package/dist/{Breadcrumb-FYA3KNAY.js → Breadcrumb-EA2XETAM.js} +14 -14
  16. package/dist/{Breadcrumb-FYA3KNAY.js.map → Breadcrumb-EA2XETAM.js.map} +1 -1
  17. package/dist/{CartItem-XGDV4EZ4.js → CartItem-2TW36QTW.js} +14 -14
  18. package/dist/{CartItem-XGDV4EZ4.js.map → CartItem-2TW36QTW.js.map} +1 -1
  19. package/dist/{CartSummary-BP6BJ7BB.js → CartSummary-TW2CAX57.js} +14 -14
  20. package/dist/{CartSummary-BP6BJ7BB.js.map → CartSummary-TW2CAX57.js.map} +1 -1
  21. package/dist/{Copyright-H4CYJQR3.js → Copyright-57XPE75X.js} +3 -3
  22. package/dist/{Copyright-H4CYJQR3.js.map → Copyright-57XPE75X.js.map} +1 -1
  23. package/dist/{CustomerLayout-YLMMDLXA.js → CustomerLayout-A2M7IY34.js} +14 -14
  24. package/dist/{CustomerLayout-YLMMDLXA.js.map → CustomerLayout-A2M7IY34.js.map} +1 -1
  25. package/dist/{Footer-ADZZF3NE.js → Footer-L5BIYCZ2.js} +4 -4
  26. package/dist/{Footer-ADZZF3NE.js.map → Footer-L5BIYCZ2.js.map} +1 -1
  27. package/dist/{Header-OMEW5PF4.js → Header-NLBDW4MR.js} +8 -8
  28. package/dist/{Header-OMEW5PF4.js.map → Header-NLBDW4MR.js.map} +1 -1
  29. package/dist/{LoyaltyPage-EGTJAFY3.js → LoyaltyPage-BVTDPSP3.js} +14 -14
  30. package/dist/{LoyaltyPage-EGTJAFY3.js.map → LoyaltyPage-BVTDPSP3.js.map} +1 -1
  31. package/dist/{LoyaltyPointsPage-RSPBAI73.js → LoyaltyPointsPage-HZYPCO7C.js} +6 -6
  32. package/dist/{LoyaltyPointsPage-RSPBAI73.js.map → LoyaltyPointsPage-HZYPCO7C.js.map} +1 -1
  33. package/dist/{MainMenu-R7RNOTPO.js → MainMenu-3HP3YJDH.js} +5 -5
  34. package/dist/{MainMenu-R7RNOTPO.js.map → MainMenu-3HP3YJDH.js.map} +1 -1
  35. package/dist/{MasterLayout-LLKACZ7T.js → MasterLayout-KD3GLYYX.js} +14 -14
  36. package/dist/{MasterLayout-LLKACZ7T.js.map → MasterLayout-KD3GLYYX.js.map} +1 -1
  37. package/dist/{MobileMenu-4F4DBTWU.js → MobileMenu-3UEQTURY.js} +15 -15
  38. package/dist/{MobileMenu-4F4DBTWU.js.map → MobileMenu-3UEQTURY.js.map} +1 -1
  39. package/dist/{NotificationsPage-AWKZRH7H.js → NotificationsPage-C6LNYZTB.js} +14 -14
  40. package/dist/{NotificationsPage-AWKZRH7H.js.map → NotificationsPage-C6LNYZTB.js.map} +1 -1
  41. package/dist/{OrderSinglePage-2RTLHMMO.js → OrderSinglePage-LXKINOXP.js} +15 -15
  42. package/dist/{OrderSinglePage-2RTLHMMO.js.map → OrderSinglePage-LXKINOXP.js.map} +1 -1
  43. package/dist/{OrdersPage-57MRSJTB.js → OrdersPage-VBF3P3JH.js} +14 -14
  44. package/dist/{OrdersPage-57MRSJTB.js.map → OrdersPage-VBF3P3JH.js.map} +1 -1
  45. package/dist/{PageSingle-YTXFQHHC.js → PageSingle-E7DTNIY7.js} +3 -3
  46. package/dist/{PageSingle-YTXFQHHC.js.map → PageSingle-E7DTNIY7.js.map} +1 -1
  47. package/dist/{ProductDetails-6LWZSW7R.js → ProductDetails-ZQLQWU7S.js} +4 -4
  48. package/dist/{ProductDetails-6LWZSW7R.js.map → ProductDetails-ZQLQWU7S.js.map} +1 -1
  49. package/dist/{ProfilePage-JKDLNAKB.js → ProfilePage-7LAIDEHS.js} +14 -14
  50. package/dist/{ProfilePage-JKDLNAKB.js.map → ProfilePage-7LAIDEHS.js.map} +1 -1
  51. package/dist/{ReviewsPage-OST5SGH5.js → ReviewsPage-FA3V745S.js} +3 -3
  52. package/dist/{ReviewsPage-OST5SGH5.js.map → ReviewsPage-FA3V745S.js.map} +1 -1
  53. package/dist/{SeoCartWidget-7L2B25DP.js → SeoCartWidget-4456ASOT.js} +14 -14
  54. package/dist/{SeoCartWidget-7L2B25DP.js.map → SeoCartWidget-4456ASOT.js.map} +1 -1
  55. package/dist/{SettingsPage-IFYFZ2SP.js → SettingsPage-IVOHCXVY.js} +14 -14
  56. package/dist/{SettingsPage-IFYFZ2SP.js.map → SettingsPage-IVOHCXVY.js.map} +1 -1
  57. package/dist/{StoreClosedNotification-COURDUGE.js → StoreClosedNotification-DIF6SKBX.js} +15 -15
  58. package/dist/{StoreClosedNotification-COURDUGE.js.map → StoreClosedNotification-DIF6SKBX.js.map} +1 -1
  59. package/dist/{TestimonialsPage-2RWGM5OP.js → TestimonialsPage-JY7MF5NW.js} +3 -3
  60. package/dist/{TestimonialsPage-2RWGM5OP.js.map → TestimonialsPage-JY7MF5NW.js.map} +1 -1
  61. package/dist/{ThankYouPage-OJLIJPLR.js → ThankYouPage-KNHHBFPZ.js} +14 -14
  62. package/dist/{ThankYouPage-OJLIJPLR.js.map → ThankYouPage-KNHHBFPZ.js.map} +1 -1
  63. package/dist/{WalletPage-FBOYCP2F.js → WalletPage-HH72DHOC.js} +15 -15
  64. package/dist/{WalletPage-FBOYCP2F.js.map → WalletPage-HH72DHOC.js.map} +1 -1
  65. package/dist/{WishlistPage-YWTH5YAO.js → WishlistPage-5BR63SMU.js} +16 -16
  66. package/dist/{WishlistPage-YWTH5YAO.js.map → WishlistPage-5BR63SMU.js.map} +1 -1
  67. package/dist/ambient/salla-components.d.ts +5 -0
  68. package/dist/api/advertisement.js +2 -2
  69. package/dist/api/apps.js +2 -2
  70. package/dist/api/blog.js +3 -3
  71. package/dist/api/brands.js +3 -3
  72. package/dist/api/cart.js +3 -3
  73. package/dist/api/category.js +3 -3
  74. package/dist/api/client.js +1 -1
  75. package/dist/api/home.js +2 -2
  76. package/dist/api/loyalty.js +3 -3
  77. package/dist/api/menu.js +2 -2
  78. package/dist/api/notification.js +2 -2
  79. package/dist/api/order.js +3 -3
  80. package/dist/api/page.js +3 -3
  81. package/dist/api/product.js +3 -3
  82. package/dist/api/profile.js +1 -1
  83. package/dist/api/store.js +2 -2
  84. package/dist/api/translations.js +2 -2
  85. package/dist/api/user.js +2 -2
  86. package/dist/api/wallet.js +2 -2
  87. package/dist/api/wishlist.js +4 -4
  88. package/dist/{chunk-OO2JMMCL.js → chunk-25UDBM27.js} +3 -3
  89. package/dist/{chunk-OO2JMMCL.js.map → chunk-25UDBM27.js.map} +1 -1
  90. package/dist/{chunk-ZKHMZF36.js → chunk-2GSYVPQS.js} +7 -7
  91. package/dist/{chunk-ZKHMZF36.js.map → chunk-2GSYVPQS.js.map} +1 -1
  92. package/dist/{chunk-FOBC4W73.js → chunk-4CM6JIQF.js} +3 -3
  93. package/dist/{chunk-FOBC4W73.js.map → chunk-4CM6JIQF.js.map} +1 -1
  94. package/dist/{chunk-NVPG5X2H.js → chunk-4NZKBANW.js} +3 -3
  95. package/dist/{chunk-NVPG5X2H.js.map → chunk-4NZKBANW.js.map} +1 -1
  96. package/dist/{chunk-LVEIDCW2.js → chunk-4SCGS2CM.js} +3 -3
  97. package/dist/{chunk-LVEIDCW2.js.map → chunk-4SCGS2CM.js.map} +1 -1
  98. package/dist/{chunk-4EAYVEJO.js → chunk-5A37NING.js} +3 -3
  99. package/dist/{chunk-4EAYVEJO.js.map → chunk-5A37NING.js.map} +1 -1
  100. package/dist/{chunk-352YYRKV.js → chunk-5AOW2SQW.js} +3 -3
  101. package/dist/{chunk-352YYRKV.js.map → chunk-5AOW2SQW.js.map} +1 -1
  102. package/dist/{chunk-6PMG5J4Z.js → chunk-6VYW7CVL.js} +4 -4
  103. package/dist/{chunk-6PMG5J4Z.js.map → chunk-6VYW7CVL.js.map} +1 -1
  104. package/dist/{chunk-2EF2HHHL.js → chunk-7U5OLKOS.js} +3 -3
  105. package/dist/{chunk-2EF2HHHL.js.map → chunk-7U5OLKOS.js.map} +1 -1
  106. package/dist/{chunk-WUDGMLUX.js → chunk-A5AU64GV.js} +4 -4
  107. package/dist/{chunk-WUDGMLUX.js.map → chunk-A5AU64GV.js.map} +1 -1
  108. package/dist/{chunk-PXH5TZGZ.js → chunk-AXWX5SJC.js} +3 -3
  109. package/dist/{chunk-PXH5TZGZ.js.map → chunk-AXWX5SJC.js.map} +1 -1
  110. package/dist/{chunk-YDXBRST4.js → chunk-D53M5ASN.js} +3 -3
  111. package/dist/{chunk-YDXBRST4.js.map → chunk-D53M5ASN.js.map} +1 -1
  112. package/dist/{chunk-5RWIVHYS.js → chunk-E5DP3MHE.js} +3 -3
  113. package/dist/{chunk-5RWIVHYS.js.map → chunk-E5DP3MHE.js.map} +1 -1
  114. package/dist/{chunk-2ZJAQBFV.js → chunk-HDSY5DWF.js} +3 -3
  115. package/dist/{chunk-2ZJAQBFV.js.map → chunk-HDSY5DWF.js.map} +1 -1
  116. package/dist/{chunk-HIF6PP7C.js → chunk-HIOYW3CS.js} +3 -3
  117. package/dist/{chunk-HIF6PP7C.js.map → chunk-HIOYW3CS.js.map} +1 -1
  118. package/dist/{chunk-KJG4BPY2.js → chunk-IOLNWPRO.js} +4 -4
  119. package/dist/{chunk-KJG4BPY2.js.map → chunk-IOLNWPRO.js.map} +1 -1
  120. package/dist/{chunk-3OWCF54L.js → chunk-KWJUCI7M.js} +3 -3
  121. package/dist/{chunk-3OWCF54L.js.map → chunk-KWJUCI7M.js.map} +1 -1
  122. package/dist/{chunk-DRDQQNIW.js → chunk-LUPDYN4T.js} +4 -4
  123. package/dist/{chunk-DRDQQNIW.js.map → chunk-LUPDYN4T.js.map} +1 -1
  124. package/dist/{chunk-DRX6L472.js → chunk-MWG734P7.js} +3 -3
  125. package/dist/{chunk-DRX6L472.js.map → chunk-MWG734P7.js.map} +1 -1
  126. package/dist/{chunk-IJX2MCPN.js → chunk-OJKTKMWS.js} +4 -4
  127. package/dist/{chunk-IJX2MCPN.js.map → chunk-OJKTKMWS.js.map} +1 -1
  128. package/dist/chunk-OKKS2RA4.js +14 -0
  129. package/dist/{chunk-XRULXQBR.js.map → chunk-OKKS2RA4.js.map} +1 -1
  130. package/dist/{chunk-WSPMY4BC.js → chunk-P3D67RVR.js} +6 -6
  131. package/dist/{chunk-WSPMY4BC.js.map → chunk-P3D67RVR.js.map} +1 -1
  132. package/dist/{chunk-IYAXNDJI.js → chunk-P6TJCCM3.js} +4 -4
  133. package/dist/{chunk-IYAXNDJI.js.map → chunk-P6TJCCM3.js.map} +1 -1
  134. package/dist/{chunk-5EDFGGY4.js → chunk-RBXGVURD.js} +4 -4
  135. package/dist/{chunk-5EDFGGY4.js.map → chunk-RBXGVURD.js.map} +1 -1
  136. package/dist/{chunk-DGK2HVSR.js → chunk-RLJLG4EN.js} +3 -3
  137. package/dist/{chunk-DGK2HVSR.js.map → chunk-RLJLG4EN.js.map} +1 -1
  138. package/dist/{chunk-BQ5SELOL.js → chunk-SGB7HCXF.js} +4 -4
  139. package/dist/{chunk-BQ5SELOL.js.map → chunk-SGB7HCXF.js.map} +1 -1
  140. package/dist/{chunk-UII3OBWQ.js → chunk-TTLRRVM2.js} +5 -5
  141. package/dist/{chunk-UII3OBWQ.js.map → chunk-TTLRRVM2.js.map} +1 -1
  142. package/dist/{chunk-R7DPH75N.js → chunk-UHGDQIIF.js} +4 -4
  143. package/dist/{chunk-R7DPH75N.js.map → chunk-UHGDQIIF.js.map} +1 -1
  144. package/dist/{chunk-JPG5XSTP.js → chunk-VNDUKDZG.js} +36 -8
  145. package/dist/chunk-VNDUKDZG.js.map +1 -0
  146. package/dist/{chunk-LA7B3TTK.js → chunk-VZPEPWDF.js} +7 -7
  147. package/dist/{chunk-LA7B3TTK.js.map → chunk-VZPEPWDF.js.map} +1 -1
  148. package/dist/{chunk-TL2RV5KC.js → chunk-WEKO2DAN.js} +3 -3
  149. package/dist/{chunk-TL2RV5KC.js.map → chunk-WEKO2DAN.js.map} +1 -1
  150. package/dist/{chunk-UJIE7IEJ.js → chunk-WHFKJ3AS.js} +4 -4
  151. package/dist/{chunk-UJIE7IEJ.js.map → chunk-WHFKJ3AS.js.map} +1 -1
  152. package/dist/{chunk-EISZVMJY.js → chunk-WVSGVFMM.js} +3 -3
  153. package/dist/{chunk-EISZVMJY.js.map → chunk-WVSGVFMM.js.map} +1 -1
  154. package/dist/{chunk-RFDP66ID.js → chunk-X5QZBD5V.js} +7 -7
  155. package/dist/{chunk-RFDP66ID.js.map → chunk-X5QZBD5V.js.map} +1 -1
  156. package/dist/{chunk-6S43HHJM.js → chunk-XHWBJYJL.js} +3 -3
  157. package/dist/{chunk-6S43HHJM.js.map → chunk-XHWBJYJL.js.map} +1 -1
  158. package/dist/{chunk-M75BIUMZ.js → chunk-YBIL64R7.js} +3 -3
  159. package/dist/{chunk-M75BIUMZ.js.map → chunk-YBIL64R7.js.map} +1 -1
  160. package/dist/{chunk-XUJJIH5C.js → chunk-YJWJPS25.js} +10 -10
  161. package/dist/{chunk-XUJJIH5C.js.map → chunk-YJWJPS25.js.map} +1 -1
  162. package/dist/{chunk-WVQBEAYO.js → chunk-YKNDXZAD.js} +14 -14
  163. package/dist/{chunk-WVQBEAYO.js.map → chunk-YKNDXZAD.js.map} +1 -1
  164. package/dist/{chunk-QC4XQO6D.js → chunk-ZRJXN766.js} +4 -4
  165. package/dist/{chunk-QC4XQO6D.js.map → chunk-ZRJXN766.js.map} +1 -1
  166. package/dist/components/cart/index.js +1 -1
  167. package/dist/components/common/index.js +1 -1
  168. package/dist/components/drawer/index.js +12 -12
  169. package/dist/components/home/BundleComponent.d.ts +3 -0
  170. package/dist/components/home/BundleComponent.d.ts.map +1 -1
  171. package/dist/components/home/index.js +16 -16
  172. package/dist/components/layout/index.js +4 -4
  173. package/dist/components/product/index.js +13 -13
  174. package/dist/components/store/index.js +13 -13
  175. package/dist/dev/editor/index.js +1 -1
  176. package/dist/dev/index.js +1 -1
  177. package/dist/{document-class-R26LC5C2.js → document-class-3GOSUA4H.js} +11 -11
  178. package/dist/{document-class-R26LC5C2.js.map → document-class-3GOSUA4H.js.map} +1 -1
  179. package/dist/hooks/index.js +12 -12
  180. package/dist/hooks/useGtm.js +12 -12
  181. package/dist/hooks/useMoney.js +12 -12
  182. package/dist/hooks/useStore.js +12 -12
  183. package/dist/hooks/useUser.js +3 -3
  184. package/dist/index.js +12 -12
  185. package/dist/{navigation-2UNFQOOQ.js → navigation-SN2ZTS4V.js} +4 -4
  186. package/dist/{navigation-2UNFQOOQ.js.map → navigation-SN2ZTS4V.js.map} +1 -1
  187. package/dist/{navigation-5ZAI4SPZ.js → navigation-ZV4TGIAA.js} +5 -5
  188. package/dist/{navigation-5ZAI4SPZ.js.map → navigation-ZV4TGIAA.js.map} +1 -1
  189. package/dist/{not-found-LGTTNZ4Y.js → not-found-J3UJVHNJ.js} +15 -15
  190. package/dist/{not-found-LGTTNZ4Y.js.map → not-found-J3UJVHNJ.js.map} +1 -1
  191. package/dist/providers/index.js +12 -12
  192. package/dist/routes/account/orders.js +4 -4
  193. package/dist/routes/account.js +13 -13
  194. package/dist/routes/blog.js +8 -8
  195. package/dist/routes/brands.js +4 -4
  196. package/dist/routes/cart.js +20 -20
  197. package/dist/routes/home.js +17 -17
  198. package/dist/routes/index.js +3 -3
  199. package/dist/routes/loyalty.js +5 -5
  200. package/dist/routes/page.js +4 -4
  201. package/dist/routes/product-listing.js +18 -18
  202. package/dist/routes/product.js +16 -16
  203. package/dist/routes/seo-redirects.js +3 -3
  204. package/dist/routes/testimonials.js +2 -2
  205. package/dist/routes/thank-you.js +4 -4
  206. package/dist/skeleton.js +17 -17
  207. package/dist/{store-lookup-DQECZUBL.js → store-lookup-U6TJNLZM.js} +8 -8
  208. package/dist/{store-lookup-DQECZUBL.js.map → store-lookup-U6TJNLZM.js.map} +1 -1
  209. package/dist/tanstack.js +11 -11
  210. package/dist/utils/index.js +2 -2
  211. package/package.json +1 -1
  212. package/tailwind/components/home/BundleComponent.tsx.txt +46 -3
  213. package/dist/chunk-JPG5XSTP.js.map +0 -1
  214. package/dist/chunk-XRULXQBR.js +0 -14
@@ -1,32 +1,32 @@
1
1
  import { SORT_IDS, availableSortIds, sortOptions } from '../chunk-3LZJXKVO.js';
2
- import { category } from '../chunk-IYAXNDJI.js';
3
- import { brand } from '../chunk-KJG4BPY2.js';
4
- import { useReorderButtons, LazyTestimonials } from '../chunk-JPG5XSTP.js';
5
- import '../chunk-M75BIUMZ.js';
6
- import { product, parseNextPageToken } from '../chunk-DRDQQNIW.js';
2
+ import { category } from '../chunk-P6TJCCM3.js';
3
+ import { brand } from '../chunk-IOLNWPRO.js';
4
+ import { useReorderButtons, LazyTestimonials } from '../chunk-VNDUKDZG.js';
5
+ import '../chunk-YBIL64R7.js';
6
+ import { product, parseNextPageToken } from '../chunk-LUPDYN4T.js';
7
7
  import { Drawer } from '../chunk-6TKIUG5C.js';
8
- import { ProductCard } from '../chunk-WSPMY4BC.js';
8
+ import { ProductCard } from '../chunk-P3D67RVR.js';
9
9
  import { registry, COMPONENT_KEYS } from '../chunk-Y32RHCOH.js';
10
- import { useStore } from '../chunk-WVQBEAYO.js';
10
+ import { useStore } from '../chunk-YKNDXZAD.js';
11
11
  import '../chunk-H2QBHOF2.js';
12
- import '../chunk-RFDP66ID.js';
13
- import '../chunk-FOBC4W73.js';
12
+ import '../chunk-X5QZBD5V.js';
13
+ import '../chunk-4CM6JIQF.js';
14
14
  import '../chunk-SXI2XBCC.js';
15
15
  import '../chunk-X55R4VVK.js';
16
- import '../chunk-OO2JMMCL.js';
16
+ import '../chunk-25UDBM27.js';
17
17
  import '../chunk-OXMUPNMH.js';
18
- import '../chunk-2EF2HHHL.js';
18
+ import '../chunk-7U5OLKOS.js';
19
19
  import '../chunk-VVZNW5CB.js';
20
20
  import '../chunk-WQPG22DY.js';
21
21
  import '../chunk-GD26FI4J.js';
22
22
  import '../chunk-Q7E4TNN7.js';
23
23
  import { buildHreflangAlternates, storePageUrl } from '../chunk-RYGEIQWO.js';
24
- import { unauthorized, notFound, orThrow, useNavigate, useLocation } from '../chunk-DGK2HVSR.js';
24
+ import { unauthorized, notFound, orThrow, useNavigate, useLocation } from '../chunk-RLJLG4EN.js';
25
25
  import { RouteId } from '../chunk-OUW6WESU.js';
26
26
  import '../chunk-HOJ5E2PG.js';
27
27
  import '../chunk-HI5V5X3S.js';
28
- import '../chunk-EISZVMJY.js';
29
- import '../chunk-6S43HHJM.js';
28
+ import '../chunk-WVSGVFMM.js';
29
+ import '../chunk-XHWBJYJL.js';
30
30
  import '../chunk-MVT5AF2A.js';
31
31
  import '../chunk-Z653O7MX.js';
32
32
  import '../chunk-ZCH7W7DZ.js';
@@ -37,16 +37,16 @@ import '../chunk-7V36I5GT.js';
37
37
  import '../chunk-6WI7R2BD.js';
38
38
  import '../chunk-LFHYQ6AN.js';
39
39
  import '../chunk-OAMIDZKW.js';
40
- import '../chunk-TL2RV5KC.js';
40
+ import '../chunk-WEKO2DAN.js';
41
41
  import '../chunk-OQIIJRAS.js';
42
42
  import '../chunk-V2ZDTY6H.js';
43
- import '../chunk-4EAYVEJO.js';
43
+ import '../chunk-5A37NING.js';
44
44
  import { HookSlot } from '../chunk-5XDPAKF5.js';
45
45
  import '../chunk-GCPEMNSU.js';
46
- import { getAuthToken } from '../chunk-5RWIVHYS.js';
46
+ import { getAuthToken } from '../chunk-E5DP3MHE.js';
47
47
  import '../chunk-Z5M4YYWT.js';
48
48
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
49
- import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-DRX6L472.js';
49
+ import { LazyBreadcrumb, Image, LazyNoContent, ProductCardSkeleton, LazyRenderWhenVisible } from '../chunk-MWG734P7.js';
50
50
  import '../chunk-AXW67SY7.js';
51
51
  import '../chunk-BYMOPN2S.js';
52
52
  import '../chunk-SKLEJJ6M.js';
@@ -1,28 +1,28 @@
1
- import { ProductsSlider, LazyTestimonials } from '../chunk-JPG5XSTP.js';
2
- import '../chunk-M75BIUMZ.js';
3
- import { product } from '../chunk-DRDQQNIW.js';
4
- import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-WSPMY4BC.js';
1
+ import { ProductsSlider, LazyTestimonials } from '../chunk-VNDUKDZG.js';
2
+ import '../chunk-YBIL64R7.js';
3
+ import { product } from '../chunk-LUPDYN4T.js';
4
+ import { ProductGallery, LazyProductDetails, LazyAddToCartForm } from '../chunk-P3D67RVR.js';
5
5
  import '../chunk-Y32RHCOH.js';
6
- import { fastCheckoutScript } from '../chunk-WVQBEAYO.js';
6
+ import { fastCheckoutScript } from '../chunk-YKNDXZAD.js';
7
7
  import '../chunk-H2QBHOF2.js';
8
- import '../chunk-RFDP66ID.js';
9
- import '../chunk-FOBC4W73.js';
8
+ import '../chunk-X5QZBD5V.js';
9
+ import '../chunk-4CM6JIQF.js';
10
10
  import '../chunk-SXI2XBCC.js';
11
11
  import '../chunk-X55R4VVK.js';
12
- import '../chunk-OO2JMMCL.js';
12
+ import '../chunk-25UDBM27.js';
13
13
  import '../chunk-OXMUPNMH.js';
14
- import '../chunk-2EF2HHHL.js';
14
+ import '../chunk-7U5OLKOS.js';
15
15
  import '../chunk-VVZNW5CB.js';
16
16
  import '../chunk-WQPG22DY.js';
17
17
  import '../chunk-GD26FI4J.js';
18
18
  import '../chunk-Q7E4TNN7.js';
19
19
  import { buildHreflangAlternates } from '../chunk-RYGEIQWO.js';
20
- import '../chunk-DGK2HVSR.js';
20
+ import '../chunk-RLJLG4EN.js';
21
21
  import { RouteId } from '../chunk-OUW6WESU.js';
22
22
  import { useComments } from '../chunk-HOJ5E2PG.js';
23
23
  import '../chunk-HI5V5X3S.js';
24
- import '../chunk-EISZVMJY.js';
25
- import '../chunk-6S43HHJM.js';
24
+ import '../chunk-WVSGVFMM.js';
25
+ import '../chunk-XHWBJYJL.js';
26
26
  import '../chunk-MVT5AF2A.js';
27
27
  import '../chunk-Z653O7MX.js';
28
28
  import '../chunk-ZCH7W7DZ.js';
@@ -33,16 +33,16 @@ import '../chunk-7V36I5GT.js';
33
33
  import '../chunk-6WI7R2BD.js';
34
34
  import '../chunk-LFHYQ6AN.js';
35
35
  import '../chunk-OAMIDZKW.js';
36
- import '../chunk-TL2RV5KC.js';
36
+ import '../chunk-WEKO2DAN.js';
37
37
  import '../chunk-OQIIJRAS.js';
38
38
  import '../chunk-V2ZDTY6H.js';
39
- import '../chunk-4EAYVEJO.js';
39
+ import '../chunk-5A37NING.js';
40
40
  import { HookSlot } from '../chunk-5XDPAKF5.js';
41
41
  import '../chunk-GCPEMNSU.js';
42
- import { getActiveCurrency } from '../chunk-5RWIVHYS.js';
42
+ import { getActiveCurrency } from '../chunk-E5DP3MHE.js';
43
43
  import '../chunk-Z5M4YYWT.js';
44
44
  import { useTranslation } from '../chunk-TYNZ5B2B.js';
45
- import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-DRX6L472.js';
45
+ import { LazyBreadcrumb, LazyRenderWhenVisible } from '../chunk-MWG734P7.js';
46
46
  import '../chunk-AXW67SY7.js';
47
47
  import '../chunk-BYMOPN2S.js';
48
48
  import '../chunk-SKLEJJ6M.js';
@@ -1,7 +1,7 @@
1
- export { LogoutRedirect, accountRedirectLoader, pendingOrdersRedirectLoader, productsSourceRedirectLoader, ratingRedirectLoader, slugBrandRedirectLoader } from '../chunk-HIF6PP7C.js';
2
- import '../chunk-DGK2HVSR.js';
1
+ export { LogoutRedirect, accountRedirectLoader, pendingOrdersRedirectLoader, productsSourceRedirectLoader, ratingRedirectLoader, slugBrandRedirectLoader } from '../chunk-HIOYW3CS.js';
2
+ import '../chunk-RLJLG4EN.js';
3
3
  import '../chunk-OUW6WESU.js';
4
- import '../chunk-5RWIVHYS.js';
4
+ import '../chunk-E5DP3MHE.js';
5
5
  import '../chunk-Z5M4YYWT.js';
6
6
  import '../chunk-3E3ABCPC.js';
7
7
  import '../chunk-NHA4SBKG.js';
@@ -33,10 +33,10 @@ async function reviewsLoader() {
33
33
 
34
34
  // src/routes/testimonials/index.tsx
35
35
  var LazyTestimonialsPage = lazy(
36
- () => import('../TestimonialsPage-2RWGM5OP.js').then((m) => ({ default: m.TestimonialsPage }))
36
+ () => import('../TestimonialsPage-JY7MF5NW.js').then((m) => ({ default: m.TestimonialsPage }))
37
37
  );
38
38
  var LazyReviewsPage = lazy(
39
- () => import('../ReviewsPage-OST5SGH5.js').then((m) => ({ default: m.ReviewsPage }))
39
+ () => import('../ReviewsPage-FA3V745S.js').then((m) => ({ default: m.ReviewsPage }))
40
40
  );
41
41
  var TestimonialsPage = LazyTestimonialsPage;
42
42
  var ReviewsPage = LazyReviewsPage;
@@ -1,8 +1,8 @@
1
- import { order } from '../chunk-UJIE7IEJ.js';
1
+ import { order } from '../chunk-WHFKJ3AS.js';
2
2
  import { buildHreflangAlternates } from '../chunk-RYGEIQWO.js';
3
- import '../chunk-DGK2HVSR.js';
3
+ import '../chunk-RLJLG4EN.js';
4
4
  import { RouteId } from '../chunk-OUW6WESU.js';
5
- import '../chunk-5RWIVHYS.js';
5
+ import '../chunk-E5DP3MHE.js';
6
6
  import '../chunk-Z5M4YYWT.js';
7
7
  import '../chunk-3E3ABCPC.js';
8
8
  import '../chunk-NHA4SBKG.js';
@@ -41,7 +41,7 @@ async function thankYouLoader({
41
41
 
42
42
  // src/routes/thank-you/index.tsx
43
43
  var LazyThankYouPage = lazy(
44
- () => import('../ThankYouPage-OJLIJPLR.js').then((m) => ({ default: m.ThankYouPage }))
44
+ () => import('../ThankYouPage-KNHHBFPZ.js').then((m) => ({ default: m.ThankYouPage }))
45
45
  );
46
46
  var ThankYouPage = LazyThankYouPage;
47
47
  async function loader(ctx, extend) {
package/dist/skeleton.js CHANGED
@@ -1,31 +1,31 @@
1
1
  export { BlogSkeleton, BreadcrumbSkeleton, CartSkeleton, CustomerLayoutSkeleton, CustomerPageSkeleton, PageSkeleton, ProductCardSkeleton, ProductDetailSkeleton, ProductGridSkeleton, SkeletonPulse } from './chunk-N7CCSGZF.js';
2
- export { HomeSkeleton } from './chunk-UII3OBWQ.js';
2
+ export { HomeSkeleton } from './chunk-TTLRRVM2.js';
3
3
  import './chunk-IXHM24Z4.js';
4
- import './chunk-JPG5XSTP.js';
5
- import './chunk-M75BIUMZ.js';
6
- import './chunk-DRDQQNIW.js';
7
- import './chunk-WSPMY4BC.js';
4
+ import './chunk-VNDUKDZG.js';
5
+ import './chunk-YBIL64R7.js';
6
+ import './chunk-LUPDYN4T.js';
7
+ import './chunk-P3D67RVR.js';
8
8
  import './chunk-Y32RHCOH.js';
9
- import './chunk-WVQBEAYO.js';
9
+ import './chunk-YKNDXZAD.js';
10
10
  import './chunk-H2QBHOF2.js';
11
- import './chunk-RFDP66ID.js';
12
- import './chunk-FOBC4W73.js';
11
+ import './chunk-X5QZBD5V.js';
12
+ import './chunk-4CM6JIQF.js';
13
13
  import './chunk-SXI2XBCC.js';
14
14
  import './chunk-X55R4VVK.js';
15
- import './chunk-OO2JMMCL.js';
15
+ import './chunk-25UDBM27.js';
16
16
  import './chunk-OXMUPNMH.js';
17
- import './chunk-2EF2HHHL.js';
17
+ import './chunk-7U5OLKOS.js';
18
18
  import './chunk-VVZNW5CB.js';
19
19
  import './chunk-WQPG22DY.js';
20
20
  import './chunk-GD26FI4J.js';
21
21
  import './chunk-Q7E4TNN7.js';
22
22
  import './chunk-RYGEIQWO.js';
23
- import './chunk-DGK2HVSR.js';
23
+ import './chunk-RLJLG4EN.js';
24
24
  import './chunk-OUW6WESU.js';
25
25
  import './chunk-HOJ5E2PG.js';
26
26
  import './chunk-HI5V5X3S.js';
27
- import './chunk-EISZVMJY.js';
28
- import './chunk-6S43HHJM.js';
27
+ import './chunk-WVSGVFMM.js';
28
+ import './chunk-XHWBJYJL.js';
29
29
  import './chunk-MVT5AF2A.js';
30
30
  import './chunk-Z653O7MX.js';
31
31
  import './chunk-ZCH7W7DZ.js';
@@ -36,16 +36,16 @@ import './chunk-7V36I5GT.js';
36
36
  import './chunk-6WI7R2BD.js';
37
37
  import './chunk-LFHYQ6AN.js';
38
38
  import './chunk-OAMIDZKW.js';
39
- import './chunk-TL2RV5KC.js';
39
+ import './chunk-WEKO2DAN.js';
40
40
  import './chunk-OQIIJRAS.js';
41
41
  import './chunk-V2ZDTY6H.js';
42
- import './chunk-4EAYVEJO.js';
42
+ import './chunk-5A37NING.js';
43
43
  import './chunk-5XDPAKF5.js';
44
44
  import './chunk-GCPEMNSU.js';
45
- import './chunk-5RWIVHYS.js';
45
+ import './chunk-E5DP3MHE.js';
46
46
  import './chunk-Z5M4YYWT.js';
47
47
  import './chunk-TYNZ5B2B.js';
48
- import './chunk-DRX6L472.js';
48
+ import './chunk-MWG734P7.js';
49
49
  import './chunk-AXW67SY7.js';
50
50
  import './chunk-BYMOPN2S.js';
51
51
  import './chunk-SKLEJJ6M.js';
@@ -1,11 +1,11 @@
1
- import { category } from './chunk-IYAXNDJI.js';
2
- import { blog } from './chunk-WUDGMLUX.js';
3
- import { brand } from './chunk-KJG4BPY2.js';
4
- import { product } from './chunk-DRDQQNIW.js';
1
+ import { category } from './chunk-P6TJCCM3.js';
2
+ import { blog } from './chunk-A5AU64GV.js';
3
+ import { brand } from './chunk-IOLNWPRO.js';
4
+ import { product } from './chunk-LUPDYN4T.js';
5
5
  import { DEV_LOOKUP_BUDGET_MS } from './chunk-OXMUPNMH.js';
6
- import './chunk-DGK2HVSR.js';
6
+ import './chunk-RLJLG4EN.js';
7
7
  import './chunk-OUW6WESU.js';
8
- import './chunk-5RWIVHYS.js';
8
+ import './chunk-E5DP3MHE.js';
9
9
  import './chunk-Z5M4YYWT.js';
10
10
  import './chunk-3E3ABCPC.js';
11
11
  import './chunk-NHA4SBKG.js';
@@ -111,5 +111,5 @@ function lookupInStore(source, query) {
111
111
  }
112
112
 
113
113
  export { lookupInStore };
114
- //# sourceMappingURL=store-lookup-DQECZUBL.js.map
115
- //# sourceMappingURL=store-lookup-DQECZUBL.js.map
114
+ //# sourceMappingURL=store-lookup-U6TJNLZM.js.map
115
+ //# sourceMappingURL=store-lookup-U6TJNLZM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev/store-lookup.ts"],"names":["categories"],"mappings":"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","file":"store-lookup-DQECZUBL.js","sourcesContent":["/**\n * Runs in the editor's frame (the storefront), which has the engine's API\n * client set up for the dev store: answers the editor's pickers with the real\n * store's products, categories, brands and blog. Loaded with `import()` on the\n * first lookup, so a storefront never carries it.\n *\n * Each item's `data` is what a block receives for it, in the API's shape: a\n * product block reads only the ids and fetches the rest, while categories and\n * brands are drawn from what is saved.\n */\n\nimport { product } from '../api/product';\nimport { category } from '../api/category';\nimport { brand } from '../api/brands';\nimport { blog } from '../api/blog';\nimport type { Category } from '../types';\nimport { DEV_LOOKUP_BUDGET_MS, type DevLookupItem, type DevLookupSource } from './schema-types';\n\n/** Enough to choose from; a search narrows it further. */\nconst PER_PAGE = 20;\n/** How far a paged list is searched before giving up, so a big store can't stall the picker. */\nconst MAX_PAGES = 10;\n\ninterface Page<T> {\n items: T[];\n next: string | null;\n}\n\n/**\n * The matching items of a paged list, read page after page until there are\n * enough, the pages run out, or the time budget is spent: a brand or article on\n * page three is still found, and what was found so far always reaches the\n * editor before it stops waiting (`DEV_LOOKUP_BUDGET_MS` < its timeout).\n */\nasync function collect<T>(\n fetchPage: (page: number, cursor: string | null) => Promise<Page<T>>,\n keep: (item: T) => boolean\n): Promise<T[]> {\n const deadline = Date.now() + DEV_LOOKUP_BUDGET_MS;\n const found: T[] = [];\n let cursor: string | null = null;\n for (let page = 1; page <= MAX_PAGES; page += 1) {\n const { items, next } = await fetchPage(page, cursor);\n found.push(...items.filter(keep));\n if (found.length >= PER_PAGE || !next || Date.now() >= deadline) break;\n cursor = next;\n }\n return found.slice(0, PER_PAGE);\n}\n\nfunction matches(name: string, query: string): boolean {\n return !query || name.toLowerCase().includes(query.toLowerCase());\n}\n\n/** Categories with their subcategories, flattened, parents first. */\nfunction flatten(categories: Category[]): Category[] {\n return categories.flatMap((c) => [c, ...flatten(c.sub_categories ?? [])]);\n}\n\nasync function products(query: string): Promise<DevLookupItem[]> {\n const { items } = await product.list({\n source: query ? 'search' : 'latest',\n ...(query ? { keyword: query } : {}),\n perPage: PER_PAGE,\n });\n // List responses send the id as a numeric string; the block reads a number. Use it for both.\n return items.map((p) => ({\n id: Number(p.id),\n name: p.name,\n image: p.image?.url,\n url: p.url,\n data: { id: Number(p.id), name: p.name, url: p.url, image: p.image?.url ?? null },\n }));\n}\n\nasync function categories(query: string): Promise<DevLookupItem[]> {\n return flatten(await category.list())\n .filter((c) => matches(c.name, query))\n .slice(0, PER_PAGE)\n .map((c) => ({\n id: c.id,\n name: c.name,\n image: c.image ?? undefined,\n url: c.url,\n data: { id: c.id, name: c.name, url: c.url, image: c.image ?? null, icon: c.icon ?? null },\n }));\n}\n\nasync function brands(query: string): Promise<DevLookupItem[]> {\n const found = await collect(\n (page) => brand.list(page),\n (b) => matches(b.name, query)\n );\n return found.map((b) => ({\n id: b.id,\n name: b.name,\n image: b.logo,\n url: b.url,\n data: { id: b.id, name: b.name, url: b.url, logo: b.logo, banner: b.banner ?? null },\n }));\n}\n\nasync function blogArticles(query: string): Promise<DevLookupItem[]> {\n const found = await collect(\n async (_page, cursor) => {\n const { data, cursor: pages } = await blog.articles.list(cursor ? { cursor } : undefined);\n return { items: data, next: pages?.next ?? null };\n },\n (a) => matches(a.name, query)\n );\n return found.map((a) => ({\n id: a.id,\n name: a.name,\n image: a.image,\n url: a.url,\n data: { id: a.id, name: a.name, url: a.url },\n }));\n}\n\nasync function blogCategories(query: string): Promise<DevLookupItem[]> {\n const { categories: list } = await blog.get();\n return list\n .filter((c) => matches(c.name, query))\n .slice(0, PER_PAGE)\n .map((c) => ({\n id: c.id,\n name: c.name,\n url: c.url,\n data: { id: c.id, name: c.name, url: c.url },\n }));\n}\n\nconst LOOKUPS: Record<DevLookupSource, (query: string) => Promise<DevLookupItem[]>> = {\n products,\n categories,\n brands,\n blog_articles: blogArticles,\n blog_categories: blogCategories,\n};\n\nexport function lookupInStore(source: DevLookupSource, query: string): Promise<DevLookupItem[]> {\n const lookup = LOOKUPS[source];\n if (!lookup) return Promise.reject(new Error(`no lookup for ${source}`));\n return lookup(query.trim());\n}\n"]}
1
+ {"version":3,"sources":["../src/dev/store-lookup.ts"],"names":["categories"],"mappings":"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","file":"store-lookup-U6TJNLZM.js","sourcesContent":["/**\n * Runs in the editor's frame (the storefront), which has the engine's API\n * client set up for the dev store: answers the editor's pickers with the real\n * store's products, categories, brands and blog. Loaded with `import()` on the\n * first lookup, so a storefront never carries it.\n *\n * Each item's `data` is what a block receives for it, in the API's shape: a\n * product block reads only the ids and fetches the rest, while categories and\n * brands are drawn from what is saved.\n */\n\nimport { product } from '../api/product';\nimport { category } from '../api/category';\nimport { brand } from '../api/brands';\nimport { blog } from '../api/blog';\nimport type { Category } from '../types';\nimport { DEV_LOOKUP_BUDGET_MS, type DevLookupItem, type DevLookupSource } from './schema-types';\n\n/** Enough to choose from; a search narrows it further. */\nconst PER_PAGE = 20;\n/** How far a paged list is searched before giving up, so a big store can't stall the picker. */\nconst MAX_PAGES = 10;\n\ninterface Page<T> {\n items: T[];\n next: string | null;\n}\n\n/**\n * The matching items of a paged list, read page after page until there are\n * enough, the pages run out, or the time budget is spent: a brand or article on\n * page three is still found, and what was found so far always reaches the\n * editor before it stops waiting (`DEV_LOOKUP_BUDGET_MS` < its timeout).\n */\nasync function collect<T>(\n fetchPage: (page: number, cursor: string | null) => Promise<Page<T>>,\n keep: (item: T) => boolean\n): Promise<T[]> {\n const deadline = Date.now() + DEV_LOOKUP_BUDGET_MS;\n const found: T[] = [];\n let cursor: string | null = null;\n for (let page = 1; page <= MAX_PAGES; page += 1) {\n const { items, next } = await fetchPage(page, cursor);\n found.push(...items.filter(keep));\n if (found.length >= PER_PAGE || !next || Date.now() >= deadline) break;\n cursor = next;\n }\n return found.slice(0, PER_PAGE);\n}\n\nfunction matches(name: string, query: string): boolean {\n return !query || name.toLowerCase().includes(query.toLowerCase());\n}\n\n/** Categories with their subcategories, flattened, parents first. */\nfunction flatten(categories: Category[]): Category[] {\n return categories.flatMap((c) => [c, ...flatten(c.sub_categories ?? [])]);\n}\n\nasync function products(query: string): Promise<DevLookupItem[]> {\n const { items } = await product.list({\n source: query ? 'search' : 'latest',\n ...(query ? { keyword: query } : {}),\n perPage: PER_PAGE,\n });\n // List responses send the id as a numeric string; the block reads a number. Use it for both.\n return items.map((p) => ({\n id: Number(p.id),\n name: p.name,\n image: p.image?.url,\n url: p.url,\n data: { id: Number(p.id), name: p.name, url: p.url, image: p.image?.url ?? null },\n }));\n}\n\nasync function categories(query: string): Promise<DevLookupItem[]> {\n return flatten(await category.list())\n .filter((c) => matches(c.name, query))\n .slice(0, PER_PAGE)\n .map((c) => ({\n id: c.id,\n name: c.name,\n image: c.image ?? undefined,\n url: c.url,\n data: { id: c.id, name: c.name, url: c.url, image: c.image ?? null, icon: c.icon ?? null },\n }));\n}\n\nasync function brands(query: string): Promise<DevLookupItem[]> {\n const found = await collect(\n (page) => brand.list(page),\n (b) => matches(b.name, query)\n );\n return found.map((b) => ({\n id: b.id,\n name: b.name,\n image: b.logo,\n url: b.url,\n data: { id: b.id, name: b.name, url: b.url, logo: b.logo, banner: b.banner ?? null },\n }));\n}\n\nasync function blogArticles(query: string): Promise<DevLookupItem[]> {\n const found = await collect(\n async (_page, cursor) => {\n const { data, cursor: pages } = await blog.articles.list(cursor ? { cursor } : undefined);\n return { items: data, next: pages?.next ?? null };\n },\n (a) => matches(a.name, query)\n );\n return found.map((a) => ({\n id: a.id,\n name: a.name,\n image: a.image,\n url: a.url,\n data: { id: a.id, name: a.name, url: a.url },\n }));\n}\n\nasync function blogCategories(query: string): Promise<DevLookupItem[]> {\n const { categories: list } = await blog.get();\n return list\n .filter((c) => matches(c.name, query))\n .slice(0, PER_PAGE)\n .map((c) => ({\n id: c.id,\n name: c.name,\n url: c.url,\n data: { id: c.id, name: c.name, url: c.url },\n }));\n}\n\nconst LOOKUPS: Record<DevLookupSource, (query: string) => Promise<DevLookupItem[]>> = {\n products,\n categories,\n brands,\n blog_articles: blogArticles,\n blog_categories: blogCategories,\n};\n\nexport function lookupInStore(source: DevLookupSource, query: string): Promise<DevLookupItem[]> {\n const lookup = LOOKUPS[source];\n if (!lookup) return Promise.reject(new Error(`no lookup for ${source}`));\n return lookup(query.trim());\n}\n"]}
package/dist/tanstack.js CHANGED
@@ -1,26 +1,26 @@
1
- export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-XUJJIH5C.js';
2
- import { requestHostOf } from './chunk-LVEIDCW2.js';
3
- export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-LVEIDCW2.js';
1
+ export { tanstackDocumentAdapter as attrs, createRouter, createTwilightRootRoute, useTanstackDocumentAttrs as useAttrs } from './chunk-YJWJPS25.js';
2
+ import { requestHostOf } from './chunk-4SCGS2CM.js';
3
+ export { TanStackLinkAdapter, TanStackNavigationProvider, createTanStackLinkAdapter } from './chunk-4SCGS2CM.js';
4
4
  import './chunk-Z4Y55HWX.js';
5
5
  export { tanstackHeadAdapter as head, withHead } from './chunk-5UWRPWK2.js';
6
6
  import { CRITICAL_STYLE_HREF } from './chunk-4FJGZQD3.js';
7
- import './chunk-PXH5TZGZ.js';
8
- import { readNativeAppHeaders } from './chunk-YDXBRST4.js';
9
- import './chunk-3OWCF54L.js';
10
- import './chunk-DRDQQNIW.js';
7
+ import './chunk-AXWX5SJC.js';
8
+ import { readNativeAppHeaders } from './chunk-D53M5ASN.js';
9
+ import './chunk-KWJUCI7M.js';
10
+ import './chunk-LUPDYN4T.js';
11
11
  import { rootHead } from './chunk-SXI2XBCC.js';
12
12
  import './chunk-X55R4VVK.js';
13
- import './chunk-2EF2HHHL.js';
13
+ import './chunk-7U5OLKOS.js';
14
14
  import './chunk-WQPG22DY.js';
15
15
  import './chunk-GD26FI4J.js';
16
16
  import { maintenanceEvidence, MAINTENANCE_EVIDENCE_HEADER, maintenanceEvidenceHeader } from './chunk-Q7E4TNN7.js';
17
17
  import './chunk-RYGEIQWO.js';
18
- import './chunk-DGK2HVSR.js';
18
+ import './chunk-RLJLG4EN.js';
19
19
  import './chunk-OUW6WESU.js';
20
20
  import './chunk-JWXJPJBO.js';
21
21
  export { mergeDocumentDescriptors as mergeAttrs } from './chunk-CW625T2E.js';
22
- import './chunk-4EAYVEJO.js';
23
- import './chunk-5RWIVHYS.js';
22
+ import './chunk-5A37NING.js';
23
+ import './chunk-E5DP3MHE.js';
24
24
  import './chunk-Z5M4YYWT.js';
25
25
  import './chunk-TYNZ5B2B.js';
26
26
  import './chunk-BYMOPN2S.js';
@@ -1,6 +1,6 @@
1
1
  export { stripUnsafeHtml } from '../chunk-RUHSV4Z6.js';
2
2
  export { formatSallaPlural } from '../chunk-BT6HEEAP.js';
3
- export { dispatchRouteChanged } from '../chunk-PXH5TZGZ.js';
3
+ export { dispatchRouteChanged } from '../chunk-AXWX5SJC.js';
4
4
  export { sortOptions } from '../chunk-3LZJXKVO.js';
5
5
  export { color } from '../chunk-VVZNW5CB.js';
6
6
  export { applyAppScopeMocks, registerThemeHookSlots } from '../chunk-WQPG22DY.js';
@@ -8,7 +8,7 @@ export { mergeHead, resolveHead, setHeadAdapter } from '../chunk-GD26FI4J.js';
8
8
  export { buildBaseHead, buildHreflangAlternates, localeToOgLocale } from '../chunk-RYGEIQWO.js';
9
9
  export { asset, cdn, isPlaceholder } from '../chunk-ZCH7W7DZ.js';
10
10
  export { mergeDocumentDescriptors, mergeElementAttrs, normalizeClasses, syncAttrsToElement, toReactProps } from '../chunk-CW625T2E.js';
11
- import '../chunk-5RWIVHYS.js';
11
+ import '../chunk-E5DP3MHE.js';
12
12
  import '../chunk-Z5M4YYWT.js';
13
13
  export { getSallaSDK, getStoreIdentifier, onSallaEvent, whenSallaLoaded, whenSallaReady } from '../chunk-NHA4SBKG.js';
14
14
  export { AUTH_TOKEN_COOKIE_NAME, clearAuthTokenCookie, extractTokenFromCookies } from '../chunk-FXVII733.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salla.sa/twilight-theme-engine",
3
- "version": "1.0.134",
3
+ "version": "1.0.135",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,13 +1,47 @@
1
- import { memo, useState, useEffect } from 'react';
1
+ import { memo, useState, useEffect, type CSSProperties } from 'react';
2
+
3
+ // Placeholder hints a bundle declares per component under `props` in its
4
+ // twilight-bundle.json; the store API passes them as `component_props`. Each maps 1:1 to an
5
+ // attribute on <salla-custom-component>, which reserves the component's space until the
6
+ // bundle renders.
7
+ // @see https://github.com/SallaApp/twilight-bundles/blob/master/packages/starter-kit/README.md#component-skeleton--placeholder
8
+ const SIZE_PROPS = ['min-height', 'height', 'width', 'aspect-ratio'] as const;
9
+ const SKELETON_PROPS: readonly string[] = [...SIZE_PROPS, 'skeleton-style'];
10
+
11
+ type SkeletonProps = Record<string, string>;
2
12
 
3
13
  export interface BundleComponentProps {
4
14
  data: {
5
15
  component_name: string;
6
16
  bundle_id: string;
17
+ component_props?: SkeletonProps;
7
18
  [key: string]: unknown;
8
19
  };
9
20
  }
10
21
 
22
+ function pickSkeletonProps(props: unknown): SkeletonProps {
23
+ if (!props || typeof props !== 'object') return {};
24
+ return Object.fromEntries(
25
+ Object.entries(props).filter(
26
+ ([name, value]) =>
27
+ SKELETON_PROPS.includes(name) && typeof value === 'string' && value.trim() !== ''
28
+ )
29
+ ) as SkeletonProps;
30
+ }
31
+
32
+ // Until mount there is no <salla-custom-component>, so hold the same footprint with a plain
33
+ // block — otherwise the server HTML has nothing here and the page shifts once it mounts.
34
+ function reservedSizeStyle(props: SkeletonProps): CSSProperties | undefined {
35
+ const sizes = SIZE_PROPS.filter((name) => props[name]);
36
+ if (!sizes.length) return undefined;
37
+ return Object.fromEntries(
38
+ sizes.map((name) => [
39
+ name.replace(/-([a-z])/g, (_, char: string) => char.toUpperCase()),
40
+ props[name],
41
+ ])
42
+ ) as CSSProperties;
43
+ }
44
+
11
45
  export const BundleComponent = memo(function BundleComponent(props: BundleComponentProps) {
12
46
  const [mounted, setMounted] = useState(false);
13
47
 
@@ -15,11 +49,19 @@ export const BundleComponent = memo(function BundleComponent(props: BundleCompon
15
49
  setMounted(true);
16
50
  }, []);
17
51
 
52
+ const {
53
+ component_name: componentName,
54
+ bundle_id: bundleId,
55
+ component_props: componentProps,
56
+ ...rest
57
+ } = props.data;
58
+ const skeletonProps = pickSkeletonProps(componentProps);
59
+
18
60
  if (!mounted) {
19
- return null;
61
+ const style = reservedSizeStyle(skeletonProps);
62
+ return style ? <div aria-hidden="true" style={style} /> : null;
20
63
  }
21
64
 
22
- const { component_name: componentName, bundle_id: bundleId, ...rest } = props.data;
23
65
  const config = JSON.stringify(rest);
24
66
 
25
67
  return (
@@ -28,6 +70,7 @@ export const BundleComponent = memo(function BundleComponent(props: BundleCompon
28
70
  component-name={componentName}
29
71
  bundle-id={bundleId}
30
72
  config={config}
73
+ {...skeletonProps}
31
74
  suppressHydrationWarning
32
75
  />
33
76
  </>