@salla.sa/twilight-theme-engine 1.0.95 → 1.0.96

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 (349) hide show
  1. package/dist/{AddToCartForm-6M57VCZU.js → AddToCartForm-DASRXMY7.js} +3 -3
  2. package/dist/{AddToCartForm-6M57VCZU.js.map → AddToCartForm-DASRXMY7.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-F6RKZEXT.js → BlogAuthorPage-WFZGYSUB.js} +26 -24
  4. package/dist/BlogAuthorPage-WFZGYSUB.js.map +1 -0
  5. package/dist/{BlogCategoryPage-TMADZWDK.js → BlogCategoryPage-23PFOVVP.js} +26 -24
  6. package/dist/BlogCategoryPage-23PFOVVP.js.map +1 -0
  7. package/dist/{BlogPage-KUNTYL2L.js → BlogPage-4RFI56TW.js} +24 -22
  8. package/dist/BlogPage-4RFI56TW.js.map +1 -0
  9. package/dist/{BlogSinglePage-JCI5KX6K.js → BlogSinglePage-KMGBQUG5.js} +24 -22
  10. package/dist/BlogSinglePage-KMGBQUG5.js.map +1 -0
  11. package/dist/{BlogTagPage-6IC6HRXA.js → BlogTagPage-ZPQJKPBO.js} +26 -24
  12. package/dist/BlogTagPage-ZPQJKPBO.js.map +1 -0
  13. package/dist/{BrandsPage-CK7LZ4ZR.js → BrandsPage-FIHOZYMB.js} +25 -23
  14. package/dist/BrandsPage-FIHOZYMB.js.map +1 -0
  15. package/dist/{Breadcrumb-5RWSAJKQ.js → Breadcrumb-2IXFQL6L.js} +24 -22
  16. package/dist/Breadcrumb-2IXFQL6L.js.map +1 -0
  17. package/dist/{CartItem-AEIRNYUK.js → CartItem-GRFH5BED.js} +24 -22
  18. package/dist/CartItem-GRFH5BED.js.map +1 -0
  19. package/dist/{CartSummary-WCQL3GV5.js → CartSummary-IOCZJL26.js} +24 -22
  20. package/dist/CartSummary-IOCZJL26.js.map +1 -0
  21. package/dist/{Copyright-HRQKNNC3.js → Copyright-MDKYCKML.js} +3 -3
  22. package/dist/{Copyright-HRQKNNC3.js.map → Copyright-MDKYCKML.js.map} +1 -1
  23. package/dist/{CustomerLayout-ET4OD3VV.js → CustomerLayout-4737YCAK.js} +24 -22
  24. package/dist/CustomerLayout-4737YCAK.js.map +1 -0
  25. package/dist/{Footer-N2DCHQMO.js → Footer-2F652QDB.js} +4 -4
  26. package/dist/{Footer-N2DCHQMO.js.map → Footer-2F652QDB.js.map} +1 -1
  27. package/dist/Header-4OATF4LX.js +22 -0
  28. package/dist/{Header-SGRINHMD.js.map → Header-4OATF4LX.js.map} +1 -1
  29. package/dist/{LoyaltyPage-FLTNW6G3.js → LoyaltyPage-POFUTIPB.js} +24 -22
  30. package/dist/LoyaltyPage-POFUTIPB.js.map +1 -0
  31. package/dist/{LoyaltyPointsPage-W4QU4RDU.js → LoyaltyPointsPage-L4S4NZA2.js} +8 -7
  32. package/dist/LoyaltyPointsPage-L4S4NZA2.js.map +1 -0
  33. package/dist/{MainMenu-D5CFVBNQ.js → MainMenu-ROGX37TG.js} +7 -6
  34. package/dist/MainMenu-ROGX37TG.js.map +1 -0
  35. package/dist/{MasterLayout-DKUMEBDQ.js → MasterLayout-PGL5YU2B.js} +24 -22
  36. package/dist/{MasterLayout-DKUMEBDQ.js.map → MasterLayout-PGL5YU2B.js.map} +1 -1
  37. package/dist/{MobileMenu-3LCM35WP.js → MobileMenu-VGXWJHEF.js} +25 -23
  38. package/dist/MobileMenu-VGXWJHEF.js.map +1 -0
  39. package/dist/{NotificationsPage-KJ6WDEVH.js → NotificationsPage-PZAEKKJO.js} +24 -22
  40. package/dist/NotificationsPage-PZAEKKJO.js.map +1 -0
  41. package/dist/{OrderSinglePage-H6TGX43N.js → OrderSinglePage-KTKLXTUX.js} +25 -23
  42. package/dist/OrderSinglePage-KTKLXTUX.js.map +1 -0
  43. package/dist/{OrdersPage-BEBXUZGC.js → OrdersPage-BY6LYV5M.js} +24 -22
  44. package/dist/OrdersPage-BY6LYV5M.js.map +1 -0
  45. package/dist/{PageSingle-P5PI65M5.js → PageSingle-CJRT3HJZ.js} +6 -5
  46. package/dist/PageSingle-CJRT3HJZ.js.map +1 -0
  47. package/dist/{ProductDetails-PWS4VZWO.js → ProductDetails-O2VJVIZC.js} +7 -6
  48. package/dist/ProductDetails-O2VJVIZC.js.map +1 -0
  49. package/dist/{ProfilePage-25NC72CQ.js → ProfilePage-TB7PBODI.js} +24 -22
  50. package/dist/ProfilePage-TB7PBODI.js.map +1 -0
  51. package/dist/{RenderWhenVisible-F44J5MMG.js → RenderWhenVisible-KWAXEJOJ.js} +8 -5
  52. package/dist/RenderWhenVisible-KWAXEJOJ.js.map +1 -0
  53. package/dist/{ReviewsPage-JQJEEKR3.js → ReviewsPage-5KGCKLFR.js} +3 -3
  54. package/dist/{ReviewsPage-JQJEEKR3.js.map → ReviewsPage-5KGCKLFR.js.map} +1 -1
  55. package/dist/{SeoCartWidget-A7MCWGQ2.js → SeoCartWidget-6BU7WCTP.js} +24 -22
  56. package/dist/SeoCartWidget-6BU7WCTP.js.map +1 -0
  57. package/dist/{SettingsPage-6W32UA32.js → SettingsPage-G55AM2KS.js} +24 -22
  58. package/dist/SettingsPage-G55AM2KS.js.map +1 -0
  59. package/dist/{StoreClosedNotification-B3MQFPFY.js → StoreClosedNotification-C3BBFGAA.js} +25 -23
  60. package/dist/{StoreClosedNotification-B3MQFPFY.js.map → StoreClosedNotification-C3BBFGAA.js.map} +1 -1
  61. package/dist/{TestimonialsPage-MDYX65Z3.js → TestimonialsPage-EA4PSO7E.js} +6 -5
  62. package/dist/TestimonialsPage-EA4PSO7E.js.map +1 -0
  63. package/dist/{ThankYouPage-AFJCN3AH.js → ThankYouPage-R2OEK7ZZ.js} +24 -22
  64. package/dist/ThankYouPage-R2OEK7ZZ.js.map +1 -0
  65. package/dist/{WalletPage-S6S5ZV3A.js → WalletPage-MEWHIHUE.js} +25 -23
  66. package/dist/WalletPage-MEWHIHUE.js.map +1 -0
  67. package/dist/{WishlistPage-YH4OQPXP.js → WishlistPage-YFKG7CXU.js} +26 -24
  68. package/dist/WishlistPage-YFKG7CXU.js.map +1 -0
  69. package/dist/ambient/virtual-modules.d.ts +43 -1
  70. package/dist/api/advertisement.js +4 -3
  71. package/dist/api/apps.js +4 -3
  72. package/dist/api/blog.js +6 -5
  73. package/dist/api/brands.js +6 -5
  74. package/dist/api/cart.js +6 -5
  75. package/dist/api/category.js +6 -5
  76. package/dist/api/client.js +3 -2
  77. package/dist/api/home.js +4 -3
  78. package/dist/api/loyalty.js +6 -5
  79. package/dist/api/menu.js +4 -3
  80. package/dist/api/notification.js +4 -3
  81. package/dist/api/order.js +6 -5
  82. package/dist/api/page.js +6 -5
  83. package/dist/api/product.js +6 -5
  84. package/dist/api/profile.js +3 -2
  85. package/dist/api/profile.js.map +1 -1
  86. package/dist/api/store.js +4 -3
  87. package/dist/api/translations.js +4 -3
  88. package/dist/api/user.js +4 -3
  89. package/dist/api/wallet.js +4 -3
  90. package/dist/api/wishlist.js +7 -6
  91. package/dist/{chunk-LV6J5FMT.js → chunk-2D5TFSVG.js} +8 -8
  92. package/dist/{chunk-LV6J5FMT.js.map → chunk-2D5TFSVG.js.map} +1 -1
  93. package/dist/{chunk-HQAFPDJK.js → chunk-2FDLEB5J.js} +3 -3
  94. package/dist/{chunk-HQAFPDJK.js.map → chunk-2FDLEB5J.js.map} +1 -1
  95. package/dist/chunk-2FKZAAV7.js +90 -0
  96. package/dist/chunk-2FKZAAV7.js.map +1 -0
  97. package/dist/{chunk-FCTL7IV6.js → chunk-3GW3VFR6.js} +3 -3
  98. package/dist/{chunk-FCTL7IV6.js.map → chunk-3GW3VFR6.js.map} +1 -1
  99. package/dist/{chunk-CEYT3JER.js → chunk-56T47K7P.js} +4 -4
  100. package/dist/{chunk-CEYT3JER.js.map → chunk-56T47K7P.js.map} +1 -1
  101. package/dist/{chunk-LPQ5FUMJ.js → chunk-5SDCUGYR.js} +4 -4
  102. package/dist/{chunk-LPQ5FUMJ.js.map → chunk-5SDCUGYR.js.map} +1 -1
  103. package/dist/{chunk-QGOPTVV5.js → chunk-6EQ7G3SZ.js} +4 -3
  104. package/dist/chunk-6EQ7G3SZ.js.map +1 -0
  105. package/dist/{chunk-QFS2SHJ4.js → chunk-6RHU4TEF.js} +7 -7
  106. package/dist/{chunk-QFS2SHJ4.js.map → chunk-6RHU4TEF.js.map} +1 -1
  107. package/dist/{chunk-FZYR4BA2.js → chunk-7WTUA4WY.js} +3 -3
  108. package/dist/{chunk-FZYR4BA2.js.map → chunk-7WTUA4WY.js.map} +1 -1
  109. package/dist/{chunk-3PXONLUK.js → chunk-BH7YNCYB.js} +3 -3
  110. package/dist/{chunk-3PXONLUK.js.map → chunk-BH7YNCYB.js.map} +1 -1
  111. package/dist/{chunk-DBW7XXNE.js → chunk-BPL5H33B.js} +4 -4
  112. package/dist/{chunk-DBW7XXNE.js.map → chunk-BPL5H33B.js.map} +1 -1
  113. package/dist/{chunk-66K5P5ZX.js → chunk-CNUBL24W.js} +3 -3
  114. package/dist/{chunk-66K5P5ZX.js.map → chunk-CNUBL24W.js.map} +1 -1
  115. package/dist/chunk-COJH52VR.js +443 -0
  116. package/dist/chunk-COJH52VR.js.map +1 -0
  117. package/dist/{chunk-6OOTDFC7.js → chunk-D56TVNOG.js} +3 -3
  118. package/dist/{chunk-6OOTDFC7.js.map → chunk-D56TVNOG.js.map} +1 -1
  119. package/dist/{chunk-Y7XVWQXG.js → chunk-DNPQ2JBM.js} +4 -4
  120. package/dist/{chunk-Y7XVWQXG.js.map → chunk-DNPQ2JBM.js.map} +1 -1
  121. package/dist/{chunk-JJARU7YP.js → chunk-EWLVLDRP.js} +3 -3
  122. package/dist/{chunk-JJARU7YP.js.map → chunk-EWLVLDRP.js.map} +1 -1
  123. package/dist/{chunk-DTS3AGXT.js → chunk-FNHZEBA5.js} +9 -8
  124. package/dist/chunk-FNHZEBA5.js.map +1 -0
  125. package/dist/{chunk-HSWRYXC7.js → chunk-FO4WVGUQ.js} +3 -88
  126. package/dist/chunk-FO4WVGUQ.js.map +1 -0
  127. package/dist/{chunk-BNI6SKFL.js → chunk-G3UTLICK.js} +4 -4
  128. package/dist/{chunk-BNI6SKFL.js.map → chunk-G3UTLICK.js.map} +1 -1
  129. package/dist/{chunk-C4RXPVDF.js → chunk-GMXI6V2D.js} +6 -5
  130. package/dist/chunk-GMXI6V2D.js.map +1 -0
  131. package/dist/{chunk-RKQH63G2.js → chunk-GXHJXZBG.js} +4 -4
  132. package/dist/{chunk-RKQH63G2.js.map → chunk-GXHJXZBG.js.map} +1 -1
  133. package/dist/{chunk-43D2CG4F.js → chunk-IBSQO6LW.js} +4 -4
  134. package/dist/{chunk-43D2CG4F.js.map → chunk-IBSQO6LW.js.map} +1 -1
  135. package/dist/{chunk-ZVZGLEZ6.js → chunk-IU4KTCS3.js} +3 -3
  136. package/dist/{chunk-ZVZGLEZ6.js.map → chunk-IU4KTCS3.js.map} +1 -1
  137. package/dist/{chunk-N6OPDLCU.js → chunk-J3G4ZD76.js} +13 -12
  138. package/dist/chunk-J3G4ZD76.js.map +1 -0
  139. package/dist/{chunk-ENJ3CM5M.js → chunk-J5X4LXNM.js} +3 -3
  140. package/dist/{chunk-ENJ3CM5M.js.map → chunk-J5X4LXNM.js.map} +1 -1
  141. package/dist/{chunk-RNCISHJT.js → chunk-JKBLG344.js} +8 -7
  142. package/dist/chunk-JKBLG344.js.map +1 -0
  143. package/dist/{chunk-J47OCHM7.js → chunk-JVIPOD6M.js} +20 -19
  144. package/dist/chunk-JVIPOD6M.js.map +1 -0
  145. package/dist/{chunk-4WAUITU2.js → chunk-KNIGLCRV.js} +3 -3
  146. package/dist/{chunk-4WAUITU2.js.map → chunk-KNIGLCRV.js.map} +1 -1
  147. package/dist/{chunk-UOQR643Q.js → chunk-KQW6I5CD.js} +4 -4
  148. package/dist/{chunk-UOQR643Q.js.map → chunk-KQW6I5CD.js.map} +1 -1
  149. package/dist/{chunk-H64QXA6N.js → chunk-LXNS6CMT.js} +4 -4
  150. package/dist/{chunk-H64QXA6N.js.map → chunk-LXNS6CMT.js.map} +1 -1
  151. package/dist/chunk-MGDCJQ5P.js +14 -0
  152. package/dist/{chunk-7GBNI3AU.js.map → chunk-MGDCJQ5P.js.map} +1 -1
  153. package/dist/chunk-N45X7D55.js +63 -0
  154. package/dist/chunk-N45X7D55.js.map +1 -0
  155. package/dist/{chunk-OH2L4U2C.js → chunk-NZRJOAA7.js} +3 -3
  156. package/dist/{chunk-OH2L4U2C.js.map → chunk-NZRJOAA7.js.map} +1 -1
  157. package/dist/{chunk-TEOVJ6WU.js → chunk-O7B5JL6H.js} +4 -4
  158. package/dist/{chunk-TEOVJ6WU.js.map → chunk-O7B5JL6H.js.map} +1 -1
  159. package/dist/{chunk-UURVAJ42.js → chunk-OZP2FID7.js} +4 -4
  160. package/dist/{chunk-UURVAJ42.js.map → chunk-OZP2FID7.js.map} +1 -1
  161. package/dist/{chunk-HCA2TE4G.js → chunk-PGUKRWOY.js} +5 -5
  162. package/dist/{chunk-HCA2TE4G.js.map → chunk-PGUKRWOY.js.map} +1 -1
  163. package/dist/{chunk-3MIFT4VQ.js → chunk-Q62YEBIA.js} +4 -4
  164. package/dist/{chunk-3MIFT4VQ.js.map → chunk-Q62YEBIA.js.map} +1 -1
  165. package/dist/{chunk-6DMNJPLW.js → chunk-QS4EDTEX.js} +3 -3
  166. package/dist/{chunk-6DMNJPLW.js.map → chunk-QS4EDTEX.js.map} +1 -1
  167. package/dist/{chunk-SAGXF3MU.js → chunk-QZEQOVA5.js} +3 -3
  168. package/dist/{chunk-SAGXF3MU.js.map → chunk-QZEQOVA5.js.map} +1 -1
  169. package/dist/{chunk-JTOVO3ZU.js → chunk-RWBTMHLR.js} +5 -5
  170. package/dist/{chunk-JTOVO3ZU.js.map → chunk-RWBTMHLR.js.map} +1 -1
  171. package/dist/{chunk-DV6SJHL5.js → chunk-S34G5DL4.js} +4 -4
  172. package/dist/{chunk-DV6SJHL5.js.map → chunk-S34G5DL4.js.map} +1 -1
  173. package/dist/{chunk-MKVCFBVF.js → chunk-TIPR4JUO.js} +4 -4
  174. package/dist/{chunk-MKVCFBVF.js.map → chunk-TIPR4JUO.js.map} +1 -1
  175. package/dist/{chunk-IR47RORL.js → chunk-ULMSO2XZ.js} +7 -7
  176. package/dist/{chunk-IR47RORL.js.map → chunk-ULMSO2XZ.js.map} +1 -1
  177. package/dist/{chunk-IVBOLREE.js → chunk-VWVCSD3N.js} +3 -3
  178. package/dist/{chunk-IVBOLREE.js.map → chunk-VWVCSD3N.js.map} +1 -1
  179. package/dist/{chunk-5G7NYNX6.js → chunk-W2LNKEBF.js} +3 -3
  180. package/dist/{chunk-5G7NYNX6.js.map → chunk-W2LNKEBF.js.map} +1 -1
  181. package/dist/{chunk-ZTXEXO4W.js → chunk-XGNML7XM.js} +7 -7
  182. package/dist/{chunk-ZTXEXO4W.js.map → chunk-XGNML7XM.js.map} +1 -1
  183. package/dist/{chunk-46NBPXAI.js → chunk-XT6CLGF5.js} +3 -3
  184. package/dist/{chunk-46NBPXAI.js.map → chunk-XT6CLGF5.js.map} +1 -1
  185. package/dist/{chunk-SFZ7IIWL.js → chunk-ZEGNYJOR.js} +4 -4
  186. package/dist/{chunk-SFZ7IIWL.js.map → chunk-ZEGNYJOR.js.map} +1 -1
  187. package/dist/{chunk-6ELXANJG.js → chunk-ZPVLBXDY.js} +4 -4
  188. package/dist/{chunk-6ELXANJG.js.map → chunk-ZPVLBXDY.js.map} +1 -1
  189. package/dist/components/cart/index.js +1 -1
  190. package/dist/components/common/RenderWhenVisible.d.ts +3 -1
  191. package/dist/components/common/RenderWhenVisible.d.ts.map +1 -1
  192. package/dist/components/common/index.js +1 -1
  193. package/dist/components/common/lazy.d.ts +1 -1
  194. package/dist/components/common/lazy.d.ts.map +1 -1
  195. package/dist/components/drawer/index.js +22 -20
  196. package/dist/components/home/HomePageRenderer.d.ts.map +1 -1
  197. package/dist/components/home/index.js +26 -24
  198. package/dist/components/layout/index.js +6 -5
  199. package/dist/components/product/index.js +23 -21
  200. package/dist/components/store/index.js +24 -22
  201. package/dist/components/store/index.js.map +1 -1
  202. package/dist/components/toast/index.js +4 -3
  203. package/dist/components/toast/index.js.map +1 -1
  204. package/dist/components/tracking/index.js +1 -1
  205. package/dist/dev/DevSettingsWidget.d.ts +6 -7
  206. package/dist/dev/DevSettingsWidget.d.ts.map +1 -1
  207. package/dist/dev/dev-settings-store.d.ts +89 -46
  208. package/dist/dev/dev-settings-store.d.ts.map +1 -1
  209. package/dist/dev/editor/AddElementDrawer.d.ts +17 -0
  210. package/dist/dev/editor/AddElementDrawer.d.ts.map +1 -0
  211. package/dist/dev/editor/BuilderPanel.d.ts +23 -0
  212. package/dist/dev/editor/BuilderPanel.d.ts.map +1 -0
  213. package/dist/dev/editor/SettingsPanel.d.ts +9 -0
  214. package/dist/dev/editor/SettingsPanel.d.ts.map +1 -0
  215. package/dist/dev/editor/ThemeEditor.d.ts +20 -0
  216. package/dist/dev/editor/ThemeEditor.d.ts.map +1 -0
  217. package/dist/dev/editor/catalog.d.ts +10 -0
  218. package/dist/dev/editor/catalog.d.ts.map +1 -0
  219. package/dist/dev/editor/fields.d.ts +18 -0
  220. package/dist/dev/editor/fields.d.ts.map +1 -0
  221. package/dist/dev/editor/i18n.d.ts +72 -0
  222. package/dist/dev/editor/i18n.d.ts.map +1 -0
  223. package/dist/dev/editor/icons.d.ts +21 -0
  224. package/dist/dev/editor/icons.d.ts.map +1 -0
  225. package/dist/dev/editor/index.d.ts +8 -0
  226. package/dist/dev/editor/index.d.ts.map +1 -0
  227. package/dist/dev/editor/index.js +2059 -0
  228. package/dist/dev/editor/index.js.map +1 -0
  229. package/dist/dev/editor/lookup.d.ts +22 -0
  230. package/dist/dev/editor/lookup.d.ts.map +1 -0
  231. package/dist/dev/editor/mount.d.ts +4 -0
  232. package/dist/dev/editor/mount.d.ts.map +1 -0
  233. package/dist/dev/editor/paths.d.ts +44 -0
  234. package/dist/dev/editor/paths.d.ts.map +1 -0
  235. package/dist/dev/editor/pickers.d.ts +12 -0
  236. package/dist/dev/editor/pickers.d.ts.map +1 -0
  237. package/dist/dev/editor/styles.d.ts +8 -0
  238. package/dist/dev/editor/styles.d.ts.map +1 -0
  239. package/dist/dev/index.d.ts +1 -1
  240. package/dist/dev/index.d.ts.map +1 -1
  241. package/dist/dev/index.js +35 -309
  242. package/dist/dev/index.js.map +1 -1
  243. package/dist/dev/schema-types.d.ts +124 -4
  244. package/dist/dev/schema-types.d.ts.map +1 -1
  245. package/dist/dev/store-lookup.d.ts +13 -0
  246. package/dist/dev/store-lookup.d.ts.map +1 -0
  247. package/dist/document-class-2RROXH4K.js +29 -0
  248. package/dist/{document-class-BRRNAIKV.js.map → document-class-2RROXH4K.js.map} +1 -1
  249. package/dist/hooks/index.js +22 -20
  250. package/dist/hooks/useComments.js +3 -2
  251. package/dist/hooks/useGtm.js +22 -20
  252. package/dist/hooks/useMoney.js +22 -20
  253. package/dist/hooks/useProduct.js +3 -2
  254. package/dist/hooks/useStore.js +22 -20
  255. package/dist/hooks/useUser.js +5 -4
  256. package/dist/hooks/useWishlist.js +3 -2
  257. package/dist/index.js +22 -20
  258. package/dist/index.js.map +1 -1
  259. package/dist/native-app/index.js +3 -2
  260. package/dist/{navigation-KTFJWOWI.js → navigation-JB2CJXBF.js} +7 -6
  261. package/dist/navigation-JB2CJXBF.js.map +1 -0
  262. package/dist/navigation-KTMLD4VB.js +14 -0
  263. package/dist/{navigation-BARZWXJZ.js.map → navigation-KTMLD4VB.js.map} +1 -1
  264. package/dist/{not-found-VJDPMT6N.js → not-found-ZM6VIELR.js} +25 -23
  265. package/dist/not-found-ZM6VIELR.js.map +1 -0
  266. package/dist/providers/index.js +22 -20
  267. package/dist/routes/account/orders.js +7 -6
  268. package/dist/routes/account.js +16 -15
  269. package/dist/routes/account.js.map +1 -1
  270. package/dist/routes/blog.js +11 -10
  271. package/dist/routes/blog.js.map +1 -1
  272. package/dist/routes/brands.js +7 -6
  273. package/dist/routes/brands.js.map +1 -1
  274. package/dist/routes/cart.js +30 -28
  275. package/dist/routes/cart.js.map +1 -1
  276. package/dist/routes/home/HomePage.d.ts.map +1 -1
  277. package/dist/routes/home.js +27 -25
  278. package/dist/routes/index.js +6 -5
  279. package/dist/routes/loyalty.js +8 -7
  280. package/dist/routes/loyalty.js.map +1 -1
  281. package/dist/routes/page.js +7 -6
  282. package/dist/routes/page.js.map +1 -1
  283. package/dist/routes/product-listing.js +28 -26
  284. package/dist/routes/product-listing.js.map +1 -1
  285. package/dist/routes/product.js +26 -24
  286. package/dist/routes/product.js.map +1 -1
  287. package/dist/routes/seo-redirects.js +6 -5
  288. package/dist/routes/testimonials.js +2 -2
  289. package/dist/routes/thank-you.js +7 -6
  290. package/dist/routes/thank-you.js.map +1 -1
  291. package/dist/skeleton.js +27 -25
  292. package/dist/store-lookup-T4TK7CKA.js +114 -0
  293. package/dist/store-lookup-T4TK7CKA.js.map +1 -0
  294. package/dist/tanstack.js +17 -16
  295. package/dist/tanstack.js.map +1 -1
  296. package/dist/utils/index.js +6 -5
  297. package/dist/utils/index.js.map +1 -1
  298. package/dist/vite/index.js +415 -23
  299. package/dist/vite/index.js.map +1 -1
  300. package/dist/vite/plugins/twilight-schema.d.ts +7 -2
  301. package/dist/vite/plugins/twilight-schema.d.ts.map +1 -1
  302. package/dist/vite/plugins/twilight-schema.plugin.d.ts +26 -0
  303. package/dist/vite/plugins/twilight-schema.plugin.d.ts.map +1 -1
  304. package/package.json +5 -1
  305. package/tailwind/components/common/RenderWhenVisible.tsx.txt +9 -2
  306. package/tailwind/components/home/HomePageRenderer.tsx.txt +2 -0
  307. package/tailwind/routes/home/HomePage.tsx.txt +7 -6
  308. package/dist/BlogAuthorPage-F6RKZEXT.js.map +0 -1
  309. package/dist/BlogCategoryPage-TMADZWDK.js.map +0 -1
  310. package/dist/BlogPage-KUNTYL2L.js.map +0 -1
  311. package/dist/BlogSinglePage-JCI5KX6K.js.map +0 -1
  312. package/dist/BlogTagPage-6IC6HRXA.js.map +0 -1
  313. package/dist/BrandsPage-CK7LZ4ZR.js.map +0 -1
  314. package/dist/Breadcrumb-5RWSAJKQ.js.map +0 -1
  315. package/dist/CartItem-AEIRNYUK.js.map +0 -1
  316. package/dist/CartSummary-WCQL3GV5.js.map +0 -1
  317. package/dist/CustomerLayout-ET4OD3VV.js.map +0 -1
  318. package/dist/Header-SGRINHMD.js +0 -21
  319. package/dist/LoyaltyPage-FLTNW6G3.js.map +0 -1
  320. package/dist/LoyaltyPointsPage-W4QU4RDU.js.map +0 -1
  321. package/dist/MainMenu-D5CFVBNQ.js.map +0 -1
  322. package/dist/MobileMenu-3LCM35WP.js.map +0 -1
  323. package/dist/NotificationsPage-KJ6WDEVH.js.map +0 -1
  324. package/dist/OrderSinglePage-H6TGX43N.js.map +0 -1
  325. package/dist/OrdersPage-BEBXUZGC.js.map +0 -1
  326. package/dist/PageSingle-P5PI65M5.js.map +0 -1
  327. package/dist/ProductDetails-PWS4VZWO.js.map +0 -1
  328. package/dist/ProfilePage-25NC72CQ.js.map +0 -1
  329. package/dist/RenderWhenVisible-F44J5MMG.js.map +0 -1
  330. package/dist/SeoCartWidget-A7MCWGQ2.js.map +0 -1
  331. package/dist/SettingsPage-6W32UA32.js.map +0 -1
  332. package/dist/TestimonialsPage-MDYX65Z3.js.map +0 -1
  333. package/dist/ThankYouPage-AFJCN3AH.js.map +0 -1
  334. package/dist/WalletPage-S6S5ZV3A.js.map +0 -1
  335. package/dist/WishlistPage-YH4OQPXP.js.map +0 -1
  336. package/dist/chunk-2JV6WZ6O.js +0 -136
  337. package/dist/chunk-2JV6WZ6O.js.map +0 -1
  338. package/dist/chunk-7GBNI3AU.js +0 -14
  339. package/dist/chunk-C4RXPVDF.js.map +0 -1
  340. package/dist/chunk-DTS3AGXT.js.map +0 -1
  341. package/dist/chunk-HSWRYXC7.js.map +0 -1
  342. package/dist/chunk-J47OCHM7.js.map +0 -1
  343. package/dist/chunk-N6OPDLCU.js.map +0 -1
  344. package/dist/chunk-QGOPTVV5.js.map +0 -1
  345. package/dist/chunk-RNCISHJT.js.map +0 -1
  346. package/dist/document-class-BRRNAIKV.js +0 -28
  347. package/dist/navigation-BARZWXJZ.js +0 -13
  348. package/dist/navigation-KTFJWOWI.js.map +0 -1
  349. package/dist/not-found-VJDPMT6N.js.map +0 -1
package/dist/dev/index.js CHANGED
@@ -1,326 +1,52 @@
1
- import { useDevSettingsState, devSettingsStore } from '../chunk-2JV6WZ6O.js';
1
+ import { useDevSettingsState } from '../chunk-COJH52VR.js';
2
+ import { isEditorFrame, DEV_EDITOR_PATH } from '../chunk-N45X7D55.js';
3
+ import '../chunk-FO4WVGUQ.js';
4
+ import '../chunk-N2S25NXP.js';
5
+ import '../chunk-T72DAX7R.js';
2
6
  import '../chunk-DGUM43GV.js';
3
7
  import { useState, useEffect } from 'react';
4
8
  import { createPortal } from 'react-dom';
5
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
+ import { jsx } from 'react/jsx-runtime';
6
10
 
7
- var Z = 2147483e3;
8
- var C = {
9
- accent: "#7c3aed",
10
- panelBg: "#ffffff",
11
- text: "#111827",
12
- sub: "#6b7280",
13
- border: "#e5e7eb",
14
- rowBorder: "#f1f1f4"
15
- };
16
11
  function useMounted() {
17
12
  const [m, setM] = useState(false);
18
13
  useEffect(() => setM(true), []);
19
14
  return m;
20
15
  }
21
- function Field({
22
- field,
23
- value,
24
- onChange
25
- }) {
26
- const rowStyle = {
27
- display: "flex",
28
- alignItems: "center",
29
- justifyContent: "space-between",
30
- gap: 10,
31
- padding: "9px 0",
32
- borderBottom: `1px solid ${C.rowBorder}`
33
- };
34
- const labelStyle = {
35
- fontSize: 12.5,
36
- color: C.text,
37
- flex: 1,
38
- minWidth: 0,
39
- overflowWrap: "anywhere"
40
- };
41
- if (field.kind === "toggle") {
42
- const on = Boolean(value);
43
- return /* @__PURE__ */ jsxs("label", { style: { ...rowStyle, cursor: "pointer" }, children: [
44
- /* @__PURE__ */ jsx("span", { style: labelStyle, children: field.label }),
45
- /* @__PURE__ */ jsx(
46
- "input",
47
- {
48
- type: "checkbox",
49
- checked: on,
50
- onChange: (e) => onChange(e.target.checked),
51
- style: { width: 16, height: 16, accentColor: C.accent, cursor: "pointer" }
52
- }
53
- )
54
- ] });
55
- }
56
- if (field.kind === "select") {
57
- return /* @__PURE__ */ jsxs("label", { style: rowStyle, children: [
58
- /* @__PURE__ */ jsx("span", { style: labelStyle, children: field.label }),
59
- /* @__PURE__ */ jsx(
60
- "select",
61
- {
62
- value: value == null ? "" : String(value),
63
- onChange: (e) => onChange(e.target.value),
64
- style: {
65
- fontSize: 12,
66
- padding: "4px 6px",
67
- border: `1px solid ${C.border}`,
68
- borderRadius: 6,
69
- maxWidth: 150,
70
- background: "#fff",
71
- color: C.text
72
- },
73
- children: field.options?.map((o) => /* @__PURE__ */ jsx("option", { value: o.value, children: o.label }, o.value))
74
- }
75
- )
76
- ] });
77
- }
78
- if (field.kind === "text") {
79
- return /* @__PURE__ */ jsxs("label", { style: { ...rowStyle, flexDirection: "column", alignItems: "stretch", gap: 4 }, children: [
80
- /* @__PURE__ */ jsx("span", { style: { ...labelStyle, flex: "none" }, children: field.label }),
81
- /* @__PURE__ */ jsx(
82
- "input",
83
- {
84
- type: "text",
85
- value: value == null ? "" : String(value),
86
- onChange: (e) => onChange(e.target.value),
87
- style: {
88
- fontSize: 12,
89
- padding: "5px 7px",
90
- border: `1px solid ${C.border}`,
91
- borderRadius: 6,
92
- width: "100%",
93
- boxSizing: "border-box",
94
- color: C.text
95
- }
96
- }
97
- )
98
- ] });
99
- }
100
- return /* @__PURE__ */ jsxs("div", { style: rowStyle, children: [
101
- /* @__PURE__ */ jsx("span", { style: labelStyle, children: field.label }),
102
- /* @__PURE__ */ jsx("span", { style: { fontSize: 10.5, color: C.sub, fontStyle: "italic", whiteSpace: "nowrap" }, children: field.note ?? "not editable" })
103
- ] });
104
- }
105
- function SectionHeader({ children }) {
106
- return /* @__PURE__ */ jsx(
107
- "div",
108
- {
109
- style: {
110
- fontSize: 11,
111
- fontWeight: 700,
112
- textTransform: "uppercase",
113
- letterSpacing: 0.6,
114
- color: C.sub,
115
- margin: "14px 0 4px"
116
- },
117
- children
118
- }
119
- );
120
- }
121
16
  function DevSettingsWidget({ schema }) {
122
17
  const mounted = useMounted();
123
- const [open, setOpen] = useState(false);
124
- const [expanded, setExpanded] = useState({});
125
18
  const store = useDevSettingsState();
126
19
  const hasContent = schema.settings.length > 0 || schema.components.length > 0;
127
- if (!mounted || typeof document === "undefined" || !hasContent) return null;
128
- const settingValue = (f) => f.id in store.settings ? store.settings[f.id] : f.default;
129
- const componentValue = (path, f) => {
130
- const c = store.components[path];
131
- return c && f.id in c ? c[f.id] : f.default;
132
- };
133
- const fab = /* @__PURE__ */ jsx(
134
- "button",
135
- {
136
- type: "button",
137
- onClick: () => setOpen((v) => !v),
138
- "aria-label": "Theme dev settings",
139
- title: "Theme dev settings (twilight.json)",
140
- style: {
141
- position: "fixed",
142
- left: 14,
143
- bottom: 14,
144
- zIndex: Z,
145
- width: 44,
146
- height: 44,
147
- borderRadius: "50%",
148
- border: "none",
149
- cursor: "pointer",
150
- background: store.enabled ? C.accent : "#1f2937",
151
- color: "#fff",
152
- boxShadow: "0 4px 16px rgba(0,0,0,0.28)",
153
- fontSize: 20,
154
- lineHeight: 1,
155
- display: open ? "none" : "flex",
156
- alignItems: "center",
157
- justifyContent: "center"
158
- },
159
- children: "\u2699"
160
- }
161
- );
162
- const panel = open && /* @__PURE__ */ jsxs(
163
- "div",
164
- {
165
- dir: "ltr",
166
- style: {
167
- position: "fixed",
168
- left: 14,
169
- bottom: 14,
170
- zIndex: Z,
171
- width: 320,
172
- maxWidth: "calc(100vw - 28px)",
173
- maxHeight: "78vh",
174
- display: "flex",
175
- flexDirection: "column",
176
- background: C.panelBg,
177
- color: C.text,
178
- border: `1px solid ${C.border}`,
179
- borderRadius: 14,
180
- boxShadow: "0 12px 40px rgba(0,0,0,0.3)",
181
- fontFamily: 'ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
182
- overflow: "hidden"
183
- },
184
- children: [
185
- /* @__PURE__ */ jsxs(
186
- "div",
187
- {
188
- style: {
189
- display: "flex",
190
- alignItems: "center",
191
- gap: 8,
192
- padding: "11px 12px",
193
- borderBottom: `1px solid ${C.border}`
194
- },
195
- children: [
196
- /* @__PURE__ */ jsxs("span", { style: { fontSize: 13, fontWeight: 700, flex: 1 }, children: [
197
- "Theme Dev \xB7 ",
198
- /* @__PURE__ */ jsx("span", { style: { color: C.sub, fontWeight: 500 }, children: "twilight.json" })
199
- ] }),
200
- /* @__PURE__ */ jsx(
201
- "button",
202
- {
203
- type: "button",
204
- onClick: () => store.enabled ? devSettingsStore.disable() : devSettingsStore.enable(schema),
205
- style: {
206
- fontSize: 11,
207
- fontWeight: 600,
208
- padding: "4px 9px",
209
- borderRadius: 999,
210
- border: `1px solid ${store.enabled ? C.accent : C.border}`,
211
- background: store.enabled ? C.accent : "#fff",
212
- color: store.enabled ? "#fff" : C.sub,
213
- cursor: "pointer"
214
- },
215
- children: store.enabled ? "Applied" : "Apply"
216
- }
217
- ),
218
- /* @__PURE__ */ jsx(
219
- "button",
220
- {
221
- type: "button",
222
- onClick: () => setOpen(false),
223
- "aria-label": "Close",
224
- style: {
225
- border: "none",
226
- background: "transparent",
227
- cursor: "pointer",
228
- fontSize: 18,
229
- color: C.sub,
230
- lineHeight: 1,
231
- padding: 2
232
- },
233
- children: "\xD7"
234
- }
235
- )
236
- ]
237
- }
238
- ),
239
- /* @__PURE__ */ jsxs("div", { style: { overflowY: "auto", padding: "4px 12px 12px" }, children: [
240
- /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C.sub, padding: "8px 0 2px" }, children: store.enabled ? 'Overrides are live on this theme. Toggle "Applied" off to use the real store values.' : 'Pre-filled with twilight.json defaults. Click "Apply" to preview them on the theme.' }),
241
- schema.settings.length > 0 && /* @__PURE__ */ jsx(SectionHeader, { children: "Theme settings" }),
242
- schema.settings.map((f) => /* @__PURE__ */ jsx(
243
- Field,
244
- {
245
- field: f,
246
- value: settingValue(f),
247
- onChange: (v) => devSettingsStore.setSetting(f.id, v)
248
- },
249
- f.id
250
- )),
251
- schema.components.length > 0 && /* @__PURE__ */ jsx(SectionHeader, { children: "Components" }),
252
- schema.components.map((comp) => {
253
- const isOpen = expanded[comp.path] ?? false;
254
- return /* @__PURE__ */ jsxs("div", { style: { borderBottom: `1px solid ${C.rowBorder}` }, children: [
255
- /* @__PURE__ */ jsxs(
256
- "button",
257
- {
258
- type: "button",
259
- onClick: () => setExpanded((p) => ({ ...p, [comp.path]: !isOpen })),
260
- style: {
261
- width: "100%",
262
- display: "flex",
263
- alignItems: "center",
264
- justifyContent: "space-between",
265
- gap: 8,
266
- padding: "10px 0",
267
- background: "transparent",
268
- border: "none",
269
- cursor: "pointer",
270
- fontSize: 12.5,
271
- fontWeight: 600,
272
- color: C.text,
273
- textAlign: "left"
274
- },
275
- children: [
276
- /* @__PURE__ */ jsx("span", { children: comp.title }),
277
- /* @__PURE__ */ jsx("span", { style: { color: C.sub, fontSize: 11 }, children: isOpen ? "\u25BE" : "\u25B8" })
278
- ]
279
- }
280
- ),
281
- isOpen && /* @__PURE__ */ jsxs("div", { style: { padding: "0 0 6px 10px" }, children: [
282
- comp.fields.length === 0 && /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C.sub, padding: "4px 0 8px" }, children: "No editable fields." }),
283
- comp.fields.map((f) => /* @__PURE__ */ jsx(
284
- Field,
285
- {
286
- field: f,
287
- value: componentValue(comp.path, f),
288
- onChange: (v) => devSettingsStore.setComponentField(comp.path, f.id, v)
289
- },
290
- f.id
291
- ))
292
- ] })
293
- ] }, comp.path);
294
- }),
295
- /* @__PURE__ */ jsx(
296
- "button",
297
- {
298
- type: "button",
299
- onClick: () => devSettingsStore.reset(schema),
300
- style: {
301
- marginTop: 14,
302
- width: "100%",
303
- padding: "8px 0",
304
- fontSize: 12,
305
- fontWeight: 600,
306
- color: C.sub,
307
- background: "#f9fafb",
308
- border: `1px solid ${C.border}`,
309
- borderRadius: 8,
310
- cursor: "pointer"
311
- },
312
- children: "Reset to twilight.json defaults"
313
- }
314
- )
315
- ] })
316
- ]
317
- }
318
- );
20
+ if (!mounted || typeof document === "undefined" || !hasContent || isEditorFrame()) return null;
21
+ const here = `${window.location.pathname}${window.location.search}${window.location.hash}`;
319
22
  return createPortal(
320
- /* @__PURE__ */ jsxs(Fragment, { children: [
321
- fab,
322
- panel
323
- ] }),
23
+ /* @__PURE__ */ jsx(
24
+ "a",
25
+ {
26
+ href: `${DEV_EDITOR_PATH}?path=${encodeURIComponent(here)}`,
27
+ "aria-label": "Open the theme editor",
28
+ title: store.enabled ? "Theme editor (preview on)" : "Theme editor",
29
+ style: {
30
+ position: "fixed",
31
+ left: 14,
32
+ bottom: 14,
33
+ zIndex: 2147483e3,
34
+ width: 44,
35
+ height: 44,
36
+ borderRadius: "50%",
37
+ background: store.enabled ? "#0d9488" : "#1f2937",
38
+ color: "#fff",
39
+ boxShadow: "0 4px 16px rgba(0,0,0,0.28)",
40
+ fontSize: 20,
41
+ lineHeight: 1,
42
+ display: "flex",
43
+ alignItems: "center",
44
+ justifyContent: "center",
45
+ textDecoration: "none"
46
+ },
47
+ children: "\u2699"
48
+ }
49
+ ),
324
50
  document.body
325
51
  );
326
52
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dev/DevSettingsWidget.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Optional dev-mode widget that reads the theme's local `twilight.json`\n * (via `virtual:twilight/schema`), fills every setting/component field with its\n * default, and lets the developer change those values. Enabling it merges the\n * setting overrides into the live theme (see `useTwilightInit`) and component\n * field overrides into the home page's blocks (see `useDevHomeComponentOverrides`).\n *\n * Rendered only in dev — gate the mount with `import.meta.env.DEV`. It portals\n * to <body>, styles itself inline (no theme CSS dependency), and shows nothing\n * when the schema is empty (e.g. a production build).\n */\n\nimport { useEffect, useState, type CSSProperties, type ReactElement, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { DevSchema, DevSchemaField } from './schema-types';\nimport { devSettingsStore, useDevSettingsState } from './dev-settings-store';\n\nexport interface DevSettingsWidgetProps {\n schema: DevSchema;\n}\n\nconst Z = 2147483000;\nconst C = {\n accent: '#7c3aed',\n panelBg: '#ffffff',\n text: '#111827',\n sub: '#6b7280',\n border: '#e5e7eb',\n rowBorder: '#f1f1f4',\n};\n\nfunction useMounted(): boolean {\n const [m, setM] = useState(false);\n useEffect(() => setM(true), []);\n return m;\n}\n\nfunction Field({\n field,\n value,\n onChange,\n}: {\n field: DevSchemaField;\n value: unknown;\n onChange: (v: unknown) => void;\n}) {\n const rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 10,\n padding: '9px 0',\n borderBottom: `1px solid ${C.rowBorder}`,\n };\n const labelStyle: CSSProperties = {\n fontSize: 12.5,\n color: C.text,\n flex: 1,\n minWidth: 0,\n overflowWrap: 'anywhere',\n };\n\n if (field.kind === 'toggle') {\n const on = Boolean(value);\n return (\n <label style={{ ...rowStyle, cursor: 'pointer' }}>\n <span style={labelStyle}>{field.label}</span>\n <input\n type=\"checkbox\"\n checked={on}\n onChange={(e) => onChange(e.target.checked)}\n style={{ width: 16, height: 16, accentColor: C.accent, cursor: 'pointer' }}\n />\n </label>\n );\n }\n\n if (field.kind === 'select') {\n return (\n <label style={rowStyle}>\n <span style={labelStyle}>{field.label}</span>\n <select\n value={value == null ? '' : String(value)}\n onChange={(e) => onChange(e.target.value)}\n style={{\n fontSize: 12,\n padding: '4px 6px',\n border: `1px solid ${C.border}`,\n borderRadius: 6,\n maxWidth: 150,\n background: '#fff',\n color: C.text,\n }}\n >\n {field.options?.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n </label>\n );\n }\n\n if (field.kind === 'text') {\n return (\n <label style={{ ...rowStyle, flexDirection: 'column', alignItems: 'stretch', gap: 4 }}>\n <span style={{ ...labelStyle, flex: 'none' }}>{field.label}</span>\n <input\n type=\"text\"\n value={value == null ? '' : String(value)}\n onChange={(e) => onChange(e.target.value)}\n style={{\n fontSize: 12,\n padding: '5px 7px',\n border: `1px solid ${C.border}`,\n borderRadius: 6,\n width: '100%',\n boxSizing: 'border-box',\n color: C.text,\n }}\n />\n </label>\n );\n }\n\n // readonly\n return (\n <div style={rowStyle}>\n <span style={labelStyle}>{field.label}</span>\n <span style={{ fontSize: 10.5, color: C.sub, fontStyle: 'italic', whiteSpace: 'nowrap' }}>\n {field.note ?? 'not editable'}\n </span>\n </div>\n );\n}\n\nfunction SectionHeader({ children }: { children: ReactNode }) {\n return (\n <div\n style={{\n fontSize: 11,\n fontWeight: 700,\n textTransform: 'uppercase',\n letterSpacing: 0.6,\n color: C.sub,\n margin: '14px 0 4px',\n }}\n >\n {children}\n </div>\n );\n}\n\nexport function DevSettingsWidget({ schema }: DevSettingsWidgetProps): ReactElement | null {\n const mounted = useMounted();\n const [open, setOpen] = useState(false);\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n const store = useDevSettingsState();\n\n const hasContent = schema.settings.length > 0 || schema.components.length > 0;\n if (!mounted || typeof document === 'undefined' || !hasContent) return null;\n\n const settingValue = (f: DevSchemaField) =>\n f.id in store.settings ? store.settings[f.id] : f.default;\n\n const componentValue = (path: string, f: DevSchemaField) => {\n const c = store.components[path];\n return c && f.id in c ? c[f.id] : f.default;\n };\n\n const fab = (\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-label=\"Theme dev settings\"\n title=\"Theme dev settings (twilight.json)\"\n style={{\n position: 'fixed',\n left: 14,\n bottom: 14,\n zIndex: Z,\n width: 44,\n height: 44,\n borderRadius: '50%',\n border: 'none',\n cursor: 'pointer',\n background: store.enabled ? C.accent : '#1f2937',\n color: '#fff',\n boxShadow: '0 4px 16px rgba(0,0,0,0.28)',\n fontSize: 20,\n lineHeight: 1,\n display: open ? 'none' : 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n ⚙\n </button>\n );\n\n const panel = open && (\n <div\n dir=\"ltr\"\n style={{\n position: 'fixed',\n left: 14,\n bottom: 14,\n zIndex: Z,\n width: 320,\n maxWidth: 'calc(100vw - 28px)',\n maxHeight: '78vh',\n display: 'flex',\n flexDirection: 'column',\n background: C.panelBg,\n color: C.text,\n border: `1px solid ${C.border}`,\n borderRadius: 14,\n boxShadow: '0 12px 40px rgba(0,0,0,0.3)',\n fontFamily:\n 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif',\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '11px 12px',\n borderBottom: `1px solid ${C.border}`,\n }}\n >\n <span style={{ fontSize: 13, fontWeight: 700, flex: 1 }}>\n Theme Dev · <span style={{ color: C.sub, fontWeight: 500 }}>twilight.json</span>\n </span>\n <button\n type=\"button\"\n onClick={() =>\n store.enabled ? devSettingsStore.disable() : devSettingsStore.enable(schema)\n }\n style={{\n fontSize: 11,\n fontWeight: 600,\n padding: '4px 9px',\n borderRadius: 999,\n border: `1px solid ${store.enabled ? C.accent : C.border}`,\n background: store.enabled ? C.accent : '#fff',\n color: store.enabled ? '#fff' : C.sub,\n cursor: 'pointer',\n }}\n >\n {store.enabled ? 'Applied' : 'Apply'}\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n aria-label=\"Close\"\n style={{\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontSize: 18,\n color: C.sub,\n lineHeight: 1,\n padding: 2,\n }}\n >\n ×\n </button>\n </div>\n\n {/* Body */}\n <div style={{ overflowY: 'auto', padding: '4px 12px 12px' }}>\n <div style={{ fontSize: 11, color: C.sub, padding: '8px 0 2px' }}>\n {store.enabled\n ? 'Overrides are live on this theme. Toggle \"Applied\" off to use the real store values.'\n : 'Pre-filled with twilight.json defaults. Click \"Apply\" to preview them on the theme.'}\n </div>\n\n {schema.settings.length > 0 && <SectionHeader>Theme settings</SectionHeader>}\n {schema.settings.map((f) => (\n <Field\n key={f.id}\n field={f}\n value={settingValue(f)}\n onChange={(v) => devSettingsStore.setSetting(f.id, v)}\n />\n ))}\n\n {schema.components.length > 0 && <SectionHeader>Components</SectionHeader>}\n {schema.components.map((comp) => {\n const isOpen = expanded[comp.path] ?? false;\n return (\n <div key={comp.path} style={{ borderBottom: `1px solid ${C.rowBorder}` }}>\n <button\n type=\"button\"\n onClick={() => setExpanded((p) => ({ ...p, [comp.path]: !isOpen }))}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n padding: '10px 0',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n fontSize: 12.5,\n fontWeight: 600,\n color: C.text,\n textAlign: 'left',\n }}\n >\n <span>{comp.title}</span>\n <span style={{ color: C.sub, fontSize: 11 }}>{isOpen ? '▾' : '▸'}</span>\n </button>\n {isOpen && (\n <div style={{ padding: '0 0 6px 10px' }}>\n {comp.fields.length === 0 && (\n <div style={{ fontSize: 11, color: C.sub, padding: '4px 0 8px' }}>\n No editable fields.\n </div>\n )}\n {comp.fields.map((f) => (\n <Field\n key={f.id}\n field={f}\n value={componentValue(comp.path, f)}\n onChange={(v) => devSettingsStore.setComponentField(comp.path, f.id, v)}\n />\n ))}\n </div>\n )}\n </div>\n );\n })}\n\n <button\n type=\"button\"\n onClick={() => devSettingsStore.reset(schema)}\n style={{\n marginTop: 14,\n width: '100%',\n padding: '8px 0',\n fontSize: 12,\n fontWeight: 600,\n color: C.sub,\n background: '#f9fafb',\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n cursor: 'pointer',\n }}\n >\n Reset to twilight.json defaults\n </button>\n </div>\n </div>\n );\n\n return createPortal(\n <>\n {fab}\n {panel}\n </>,\n document.body\n );\n}\n\nexport default DevSettingsWidget;\n"]}
1
+ {"version":3,"sources":["../../src/dev/DevSettingsWidget.tsx"],"names":[],"mappings":";;;;;;;;;;AAoBA,SAAS,UAAA,GAAsB;AAC7B,EAAA,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,GAAI,SAAS,KAAK,CAAA;AAChC,EAAA,SAAA,CAAU,MAAM,IAAA,CAAK,IAAI,CAAA,EAAG,EAAE,CAAA;AAC9B,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,iBAAA,CAAkB,EAAE,MAAA,EAAO,EAAgD;AACzF,EAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,EAAA,MAAM,QAAQ,mBAAA,EAAoB;AAElC,EAAA,MAAM,aAAa,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,IAAK,MAAA,CAAO,WAAW,MAAA,GAAS,CAAA;AAC5E,EAAA,IAAI,CAAC,WAAW,OAAO,QAAA,KAAa,eAAe,CAAC,UAAA,IAAc,aAAA,EAAc,EAAG,OAAO,IAAA;AAE1F,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA;AACxF,EAAA,OAAO,YAAA;AAAA,oBACL,GAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,MAAM,CAAA,EAAG,eAAe,CAAA,MAAA,EAAS,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,QACzD,YAAA,EAAW,uBAAA;AAAA,QACX,KAAA,EAAO,KAAA,CAAM,OAAA,GAAU,2BAAA,GAA8B,cAAA;AAAA,QACrD,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,OAAA;AAAA,UACV,IAAA,EAAM,EAAA;AAAA,UACN,MAAA,EAAQ,EAAA;AAAA,UACR,MAAA,EAAQ,SAAA;AAAA,UACR,KAAA,EAAO,EAAA;AAAA,UACP,MAAA,EAAQ,EAAA;AAAA,UACR,YAAA,EAAc,KAAA;AAAA,UACd,UAAA,EAAY,KAAA,CAAM,OAAA,GAAU,SAAA,GAAY,SAAA;AAAA,UACxC,KAAA,EAAO,MAAA;AAAA,UACP,SAAA,EAAW,6BAAA;AAAA,UACX,QAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAY,CAAA;AAAA,UACZ,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,cAAA,EAAgB;AAAA,SAClB;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF","file":"index.js","sourcesContent":["/**\n * Dev-mode entry to the theme editor: a floating button that opens\n * `/__twilight/editor` on the page you are looking at. The editor itself (home\n * layout, theme settings, phone/desktop preview) lives in `./editor`.\n *\n * Rendered only in dev — gate the mount with `import.meta.env.DEV`. It portals\n * to <body>, styles itself inline (no theme CSS dependency), and shows nothing\n * when the schema is empty (e.g. a production build) or inside the editor's\n * own frame.\n */\n\nimport { useEffect, useState, type ReactElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport { DEV_EDITOR_PATH, isEditorFrame, type DevSchema } from './schema-types';\nimport { useDevSettingsState } from './dev-settings-store';\n\nexport interface DevSettingsWidgetProps {\n schema: DevSchema;\n}\n\nfunction useMounted(): boolean {\n const [m, setM] = useState(false);\n useEffect(() => setM(true), []);\n return m;\n}\n\nexport function DevSettingsWidget({ schema }: DevSettingsWidgetProps): ReactElement | null {\n const mounted = useMounted();\n const store = useDevSettingsState();\n\n const hasContent = schema.settings.length > 0 || schema.components.length > 0;\n if (!mounted || typeof document === 'undefined' || !hasContent || isEditorFrame()) return null;\n\n const here = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n return createPortal(\n <a\n href={`${DEV_EDITOR_PATH}?path=${encodeURIComponent(here)}`}\n aria-label=\"Open the theme editor\"\n title={store.enabled ? 'Theme editor (preview on)' : 'Theme editor'}\n style={{\n position: 'fixed',\n left: 14,\n bottom: 14,\n zIndex: 2147483000,\n width: 44,\n height: 44,\n borderRadius: '50%',\n background: store.enabled ? '#0d9488' : '#1f2937',\n color: '#fff',\n boxShadow: '0 4px 16px rgba(0,0,0,0.28)',\n fontSize: 20,\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textDecoration: 'none',\n }}\n >\n ⚙\n </a>,\n document.body\n );\n}\n\nexport default DevSettingsWidget;\n"]}
@@ -4,31 +4,95 @@
4
4
  * browser) by the dev store and `DevSettingsWidget`. Kept free of any Node or
5
5
  * React imports so both sides can share it.
6
6
  */
7
- /** How a single setting/field is rendered in the dev widget. */
8
- export type DevFieldKind = 'toggle' | 'select' | 'text' | 'readonly';
7
+ /** How a single setting/field is rendered in the dev editor. */
8
+ export type DevFieldKind = 'toggle' | 'select' | 'text' | 'textarea' | 'number' | 'image' | 'collection' | 'entities' | 'link' | 'readonly';
9
+ /** What a picker can look up in the store (or fall back to samples for). */
10
+ export type DevLookupSource = 'products' | 'categories' | 'brands' | 'blog_articles' | 'blog_categories';
11
+ /** How long the editor waits for its frame to answer a store lookup. */
12
+ export declare const DEV_LOOKUP_TIMEOUT_MS = 8000;
13
+ /**
14
+ * How long a lookup may keep reading further pages: well inside
15
+ * {@link DEV_LOOKUP_TIMEOUT_MS}, so the frame answers with what it has found
16
+ * before the editor stops waiting, and stops fetching once it has answered.
17
+ */
18
+ export declare const DEV_LOOKUP_BUDGET_MS = 5000;
19
+ /** One thing a picker found. `data` is what gets saved, shaped like the API sends it to a block. */
20
+ export interface DevLookupItem {
21
+ id: string | number;
22
+ name: string;
23
+ image?: string;
24
+ url?: string;
25
+ data: Record<string, unknown>;
26
+ }
9
27
  export interface DevSchemaOption {
10
28
  label: string;
11
29
  value: string;
12
30
  }
31
+ /** One twilight.json `conditions` entry: the field shows only while `id`'s value passes. */
32
+ export interface DevFieldCondition {
33
+ /** The other field's id (inside a collection, without the `<collection>.` prefix). */
34
+ id: string;
35
+ /** `=` (also `==`) or `!=`. Any other operator is ignored, so it never hides a field. */
36
+ operation: string;
37
+ value: unknown;
38
+ }
13
39
  export interface DevSchemaField {
14
- /** twilight.json entry `id` — also the key used for overrides. */
40
+ /**
41
+ * twilight.json entry `id` — also the key used for overrides. Inside a
42
+ * collection, the `<collection>.` prefix is dropped (`slides.image` → `image`),
43
+ * matching the rows the API hands a block.
44
+ */
15
45
  id: string;
16
46
  label: string;
17
47
  kind: DevFieldKind;
18
- /** Default value taken from twilight.json (`null` for readonly fields). */
48
+ /** Default value taken from twilight.json (`null` for readonly fields; rows for a collection). */
19
49
  default: unknown;
20
50
  /** Present for `select`. */
21
51
  options?: DevSchemaOption[];
22
52
  /** For `readonly`: why it can't be edited yet (e.g. "collection", "remote"). */
23
53
  note?: string;
54
+ /** twilight.json `description`, shown under the field. */
55
+ description?: string;
56
+ placeholder?: string;
57
+ /** `number`: `minimum`/`maximum`. `collection`: `minLength`/`maxLength` (item count). */
58
+ min?: number;
59
+ max?: number;
60
+ /** `collection`: the fields of one item. */
61
+ fields?: DevSchemaField[];
62
+ /** `collection`: what one item is called (`item_label`), e.g. "Slide". */
63
+ itemLabel?: string;
64
+ /** `entities`: which store list it picks from. */
65
+ source?: Extract<DevLookupSource, 'products' | 'categories' | 'brands'>;
66
+ /** `entities`: more than one (`multichoice`). */
67
+ multiple?: boolean;
68
+ /** `link`: the kinds of link it offers (`sources`), e.g. product, category, external. */
69
+ linkSources?: DevSchemaOption[];
70
+ /** twilight.json `conditions`: the field shows only while every one holds. */
71
+ conditions?: DevFieldCondition[];
24
72
  }
73
+ /**
74
+ * Whether a field should show: true when it has no `conditions`, or when each
75
+ * one holds against `valueOf` (the current value of the field it names, its
76
+ * default included). Values compare as strings, so `true` matches `"true"`.
77
+ */
78
+ export declare function conditionsMet(field: Pick<DevSchemaField, 'conditions'>, valueOf: (id: string) => unknown): boolean;
25
79
  export interface DevSchemaComponent {
26
80
  /** e.g. "home.enhanced-slider" — the natural component key. */
27
81
  path: string;
82
+ /** twilight.json catalog id, sent as a block's `key` like the API does. */
83
+ key?: string;
28
84
  title: string;
85
+ /** `title` per language when twilight.json gives `{ ar, en }`. */
86
+ titles?: Record<string, string>;
87
+ /** twilight.json `image`: a preview of the component, shown when adding one. */
88
+ image?: string;
89
+ /** twilight.json `icon`: a Salla icon class, e.g. `sicon-image`. */
90
+ icon?: string;
29
91
  fields: DevSchemaField[];
30
92
  }
31
93
  export interface DevSchema {
94
+ /** twilight.json `name`, per language (a plain string is filed under both). */
95
+ themeName?: Record<string, string>;
32
96
  /** Editable + readonly theme settings, in declaration order. */
33
97
  settings: DevSchemaField[];
34
98
  /** Store components with their fields. */
@@ -37,7 +101,63 @@ export interface DevSchema {
37
101
  settingsDefaults: Record<string, unknown>;
38
102
  /** `{ [componentPath]: { [fieldId]: default } }`. */
39
103
  componentDefaults: Record<string, Record<string, unknown>>;
104
+ /**
105
+ * `{ [componentPath]: data }`: everything a newly added block starts with,
106
+ * readonly fields included, shaped the way the API delivers block data
107
+ * (collection rows lose their `<collection>.` key prefix). Optional so a
108
+ * schema from an older engine build still type-checks.
109
+ */
110
+ blockDefaults?: Record<string, Record<string, unknown>>;
111
+ /** The saved preview state (`twilight.preview.json`), `null` when there is none. */
112
+ preview?: DevPreviewState | null;
40
113
  }
114
+ /** One home block in a dev-owned layout. */
115
+ export interface DevPreviewBlock {
116
+ /** Stable id for React keys and edits; unrelated to the API. */
117
+ id: string;
118
+ /** Home loader spelling, without the `home.` prefix (e.g. "main-links"). */
119
+ path: string;
120
+ /** The block's data, spread onto `{ path }` when it renders. */
121
+ fields: Record<string, unknown>;
122
+ }
123
+ /**
124
+ * Everything the dev editor saves, persisted to `twilight.preview.json` by the
125
+ * dev server so the server render and every tab start from the same values.
126
+ */
127
+ export interface DevPreviewState {
128
+ /** Master switch: when false the theme uses the real store's values. */
129
+ enabled: boolean;
130
+ /** Sparse `{ [settingId]: value }` overrides for theme settings. */
131
+ settings: Record<string, unknown>;
132
+ /** The home page's blocks, in order. `null` renders the store's own blocks. */
133
+ layout: DevPreviewBlock[] | null;
134
+ }
135
+ /** Dev-server page that hosts the theme editor. */
136
+ export declare const DEV_EDITOR_PATH = "/__twilight/editor";
137
+ /** Marks the iframe the editor frames the storefront in. */
138
+ export declare const DEV_EDITOR_FRAME_ATTR = "data-twilight-editor";
139
+ /** True inside the editor's frame, where the storefront hides its own dev button. */
140
+ export declare function isEditorFrame(): boolean;
141
+ /** Dev-server endpoint the editor saves through. */
142
+ export declare const DEV_PREVIEW_ENDPOINT = "/__twilight/preview";
143
+ /**
144
+ * Where a picked image goes: the dev server keeps it in `twilight-preview-assets/`
145
+ * (gitignored, next to twilight.json) and serves it back from under this path,
146
+ * so the saved state holds a short URL rather than the image itself.
147
+ */
148
+ export declare const DEV_PREVIEW_IMAGE_ENDPOINT = "/__twilight/preview/image";
149
+ export declare const DEV_PREVIEW_IMAGE_MAX_BYTES: number;
150
+ /** Dev-server event that hands a save to the other open tabs. */
151
+ export declare const DEV_PREVIEW_EVENT = "twilight:preview";
152
+ /** Where `virtual:twilight/schema` puts the saved state before the app renders. */
153
+ export declare const DEV_PREVIEW_GLOBAL = "__twilightDevPreview__";
154
+ export declare const EMPTY_PREVIEW_STATE: DevPreviewState;
155
+ /**
156
+ * Coerce anything (a hand-edited file, a request body) into a valid state, or
157
+ * `null` when it isn't one at all. Blocks without a path are dropped and
158
+ * missing ids are filled, so a bad entry can't break the home page.
159
+ */
160
+ export declare function normalizePreviewState(raw: unknown): DevPreviewState | null;
41
161
  /** The shape the vite plugin ships when there is no schema (prod / missing file). */
42
162
  export declare const EMPTY_DEV_SCHEMA: DevSchema;
43
163
  //# sourceMappingURL=schema-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-types.d.ts","sourceRoot":"","sources":["../../src/dev/schema-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gEAAgE;AAChE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,2EAA2E;IAC3E,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,gEAAgE;IAChE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,0CAA0C;IAC1C,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,iEAAiE;IACjE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,qDAAqD;IACrD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC5D;AAED,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,EAAE,SAK9B,CAAC"}
1
+ {"version":3,"file":"schema-types.d.ts","sourceRoot":"","sources":["../../src/dev/schema-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Runs in the editor's frame (the storefront), which has the engine's API
3
+ * client set up for the dev store: answers the editor's pickers with the real
4
+ * store's products, categories, brands and blog. Loaded with `import()` on the
5
+ * first lookup, so a storefront never carries it.
6
+ *
7
+ * Each item's `data` is what a block receives for it, in the API's shape: a
8
+ * product block reads only the ids and fetches the rest, while categories and
9
+ * brands are drawn from what is saved.
10
+ */
11
+ import { type DevLookupItem, type DevLookupSource } from './schema-types';
12
+ export declare function lookupInStore(source: DevLookupSource, query: string): Promise<DevLookupItem[]>;
13
+ //# sourceMappingURL=store-lookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-lookup.d.ts","sourceRoot":"","sources":["../../src/dev/store-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAAwB,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA4HhG,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAI9F"}
@@ -0,0 +1,29 @@
1
+ export { RouteDocumentSync, TanStackDocumentSync, tanstackDocumentAdapter, useTanstackDocumentAttrs } from './chunk-J3G4ZD76.js';
2
+ import './chunk-Z4Y55HWX.js';
3
+ import './chunk-N2A72R2I.js';
4
+ import './chunk-TIPR4JUO.js';
5
+ import './chunk-G3UTLICK.js';
6
+ import './chunk-NZRJOAA7.js';
7
+ import './chunk-56T47K7P.js';
8
+ import './chunk-ZEGNYJOR.js';
9
+ import './chunk-RV54D2D7.js';
10
+ import './chunk-IU4KTCS3.js';
11
+ import './chunk-W2LNKEBF.js';
12
+ import './chunk-GD26FI4J.js';
13
+ import './chunk-4SZZPXM2.js';
14
+ import './chunk-RWBTMHLR.js';
15
+ import './chunk-OUW6WESU.js';
16
+ import './chunk-JWXJPJBO.js';
17
+ import './chunk-CW625T2E.js';
18
+ import './chunk-VWVCSD3N.js';
19
+ import './chunk-6EQ7G3SZ.js';
20
+ import './chunk-TYNZ5B2B.js';
21
+ import './chunk-EWLVLDRP.js';
22
+ import './chunk-2FKZAAV7.js';
23
+ import './chunk-FO4WVGUQ.js';
24
+ import './chunk-N2S25NXP.js';
25
+ import './chunk-T72DAX7R.js';
26
+ import './chunk-DF6FBKDN.js';
27
+ import './chunk-DGUM43GV.js';
28
+ //# sourceMappingURL=document-class-2RROXH4K.js.map
29
+ //# sourceMappingURL=document-class-2RROXH4K.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-BRRNAIKV.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-2RROXH4K.js"}