@salla.sa/twilight-theme-engine 1.0.126 → 1.0.128

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 (276) hide show
  1. package/dist/{AddToCartForm-BY24SGTR.js → AddToCartForm-NBU3MIEW.js} +3 -3
  2. package/dist/{AddToCartForm-BY24SGTR.js.map → AddToCartForm-NBU3MIEW.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-UAQ6266M.js → BlogAuthorPage-4HGFVIG2.js} +17 -16
  4. package/dist/BlogAuthorPage-4HGFVIG2.js.map +1 -0
  5. package/dist/{BlogCategoryPage-UX5OZZRZ.js → BlogCategoryPage-67TZRH3C.js} +17 -16
  6. package/dist/BlogCategoryPage-67TZRH3C.js.map +1 -0
  7. package/dist/{BlogPage-AAITQ3UZ.js → BlogPage-HINCPIQO.js} +15 -14
  8. package/dist/BlogPage-HINCPIQO.js.map +1 -0
  9. package/dist/{BlogSinglePage-R7VG3WNP.js → BlogSinglePage-4BWHLJU6.js} +15 -14
  10. package/dist/BlogSinglePage-4BWHLJU6.js.map +1 -0
  11. package/dist/{BlogTagPage-YCJL3FNS.js → BlogTagPage-BGPLVWGM.js} +17 -16
  12. package/dist/BlogTagPage-BGPLVWGM.js.map +1 -0
  13. package/dist/{BrandsPage-4M4J7YH5.js → BrandsPage-2NC3RCZK.js} +16 -15
  14. package/dist/BrandsPage-2NC3RCZK.js.map +1 -0
  15. package/dist/{Breadcrumb-WB5NXLLA.js → Breadcrumb-CCYDVGCS.js} +15 -14
  16. package/dist/Breadcrumb-CCYDVGCS.js.map +1 -0
  17. package/dist/{CartItem-UWCMEGW7.js → CartItem-M5PC54CM.js} +15 -14
  18. package/dist/CartItem-M5PC54CM.js.map +1 -0
  19. package/dist/{CartSummary-TK55II7A.js → CartSummary-YQI7XI4D.js} +15 -14
  20. package/dist/CartSummary-YQI7XI4D.js.map +1 -0
  21. package/dist/{Copyright-PHLEOCO4.js → Copyright-67E3ANPE.js} +3 -3
  22. package/dist/{Copyright-PHLEOCO4.js.map → Copyright-67E3ANPE.js.map} +1 -1
  23. package/dist/{CustomerLayout-BCTFI56B.js → CustomerLayout-HPLKOG7R.js} +15 -14
  24. package/dist/CustomerLayout-HPLKOG7R.js.map +1 -0
  25. package/dist/{Footer-AXIXSATN.js → Footer-56IXUTHF.js} +4 -4
  26. package/dist/{Footer-AXIXSATN.js.map → Footer-56IXUTHF.js.map} +1 -1
  27. package/dist/{Header-5GD53HC5.js → Header-67Q5OA63.js} +9 -8
  28. package/dist/{Header-5GD53HC5.js.map → Header-67Q5OA63.js.map} +1 -1
  29. package/dist/{LoyaltyPage-MBYLZF7B.js → LoyaltyPage-GC7B5FXF.js} +15 -14
  30. package/dist/LoyaltyPage-GC7B5FXF.js.map +1 -0
  31. package/dist/{LoyaltyPointsPage-SFAL3TOO.js → LoyaltyPointsPage-UAZQ2GZT.js} +7 -6
  32. package/dist/LoyaltyPointsPage-UAZQ2GZT.js.map +1 -0
  33. package/dist/{MainMenu-VEZTUNCZ.js → MainMenu-7SXJ2DU4.js} +6 -5
  34. package/dist/MainMenu-7SXJ2DU4.js.map +1 -0
  35. package/dist/{MasterLayout-TFHNWIRE.js → MasterLayout-53MYQBTT.js} +15 -14
  36. package/dist/{MasterLayout-TFHNWIRE.js.map → MasterLayout-53MYQBTT.js.map} +1 -1
  37. package/dist/{MobileMenu-JWD22FVU.js → MobileMenu-U6W2XQYI.js} +16 -15
  38. package/dist/MobileMenu-U6W2XQYI.js.map +1 -0
  39. package/dist/{NotificationsPage-QVE7AOCV.js → NotificationsPage-2WFW7GCV.js} +15 -14
  40. package/dist/NotificationsPage-2WFW7GCV.js.map +1 -0
  41. package/dist/{OrderSinglePage-QSNZVQ22.js → OrderSinglePage-VN3IBWOO.js} +16 -15
  42. package/dist/OrderSinglePage-VN3IBWOO.js.map +1 -0
  43. package/dist/{OrdersPage-WGIHZJNJ.js → OrdersPage-NOUGRTHI.js} +15 -14
  44. package/dist/OrdersPage-NOUGRTHI.js.map +1 -0
  45. package/dist/{PageSingle-3HXGOYLZ.js → PageSingle-MP5THOR4.js} +3 -3
  46. package/dist/{PageSingle-3HXGOYLZ.js.map → PageSingle-MP5THOR4.js.map} +1 -1
  47. package/dist/{ProductDetails-ALVRCBP4.js → ProductDetails-GONQFVV2.js} +5 -4
  48. package/dist/ProductDetails-GONQFVV2.js.map +1 -0
  49. package/dist/{ProfilePage-AVJYAQOG.js → ProfilePage-RHK3OHFF.js} +15 -14
  50. package/dist/ProfilePage-RHK3OHFF.js.map +1 -0
  51. package/dist/{ReviewsPage-ULGQMLGH.js → ReviewsPage-3PODTNEP.js} +3 -3
  52. package/dist/{ReviewsPage-ULGQMLGH.js.map → ReviewsPage-3PODTNEP.js.map} +1 -1
  53. package/dist/{SeoCartWidget-5WY6AV2F.js → SeoCartWidget-MHOPTGWV.js} +15 -14
  54. package/dist/SeoCartWidget-MHOPTGWV.js.map +1 -0
  55. package/dist/{SettingsPage-ZHTSKKBD.js → SettingsPage-RLNSTOCG.js} +15 -14
  56. package/dist/SettingsPage-RLNSTOCG.js.map +1 -0
  57. package/dist/{StoreClosedNotification-5V7QGKMC.js → StoreClosedNotification-AUQCK2MP.js} +16 -15
  58. package/dist/{StoreClosedNotification-5V7QGKMC.js.map → StoreClosedNotification-AUQCK2MP.js.map} +1 -1
  59. package/dist/{TestimonialsPage-7YS7QRTY.js → TestimonialsPage-GXKXWGDA.js} +3 -3
  60. package/dist/{TestimonialsPage-7YS7QRTY.js.map → TestimonialsPage-GXKXWGDA.js.map} +1 -1
  61. package/dist/{ThankYouPage-PLCUI7LC.js → ThankYouPage-GILEXBPL.js} +15 -14
  62. package/dist/ThankYouPage-GILEXBPL.js.map +1 -0
  63. package/dist/{WalletPage-C6ZFJTSA.js → WalletPage-4OOHX65H.js} +16 -15
  64. package/dist/WalletPage-4OOHX65H.js.map +1 -0
  65. package/dist/{WishlistPage-3CIW7AIZ.js → WishlistPage-Z2TPPFFM.js} +17 -16
  66. package/dist/WishlistPage-Z2TPPFFM.js.map +1 -0
  67. package/dist/api/advertisement.js +3 -2
  68. package/dist/api/apps.js +3 -2
  69. package/dist/api/blog.js +4 -3
  70. package/dist/api/brands.js +4 -3
  71. package/dist/api/cart.js +4 -3
  72. package/dist/api/category.js +4 -3
  73. package/dist/api/client.d.ts.map +1 -1
  74. package/dist/api/client.js +2 -1
  75. package/dist/api/dev-settings-cache.d.ts +50 -0
  76. package/dist/api/dev-settings-cache.d.ts.map +1 -0
  77. package/dist/api/home.js +3 -2
  78. package/dist/api/loyalty.js +4 -3
  79. package/dist/api/menu.js +3 -2
  80. package/dist/api/notification.js +3 -2
  81. package/dist/api/order.js +4 -3
  82. package/dist/api/page.js +4 -3
  83. package/dist/api/product.js +4 -3
  84. package/dist/api/profile.js +2 -1
  85. package/dist/api/profile.js.map +1 -1
  86. package/dist/api/store.d.ts +6 -0
  87. package/dist/api/store.d.ts.map +1 -1
  88. package/dist/api/store.js +3 -2
  89. package/dist/api/translations.js +3 -2
  90. package/dist/api/user.js +3 -2
  91. package/dist/api/wallet.js +3 -2
  92. package/dist/api/wishlist.js +5 -4
  93. package/dist/{chunk-SGET4UYI.js → chunk-2VRMQZXF.js} +3 -3
  94. package/dist/{chunk-SGET4UYI.js.map → chunk-2VRMQZXF.js.map} +1 -1
  95. package/dist/{chunk-A6AAG7U6.js → chunk-3FMJHVRY.js} +4 -4
  96. package/dist/{chunk-A6AAG7U6.js.map → chunk-3FMJHVRY.js.map} +1 -1
  97. package/dist/{chunk-KKOFHYTI.js → chunk-3OGFV27B.js} +3 -3
  98. package/dist/{chunk-KKOFHYTI.js.map → chunk-3OGFV27B.js.map} +1 -1
  99. package/dist/{chunk-UHCNMJDI.js → chunk-3U6BZUQL.js} +7 -7
  100. package/dist/{chunk-UHCNMJDI.js.map → chunk-3U6BZUQL.js.map} +1 -1
  101. package/dist/{chunk-MHLKLADI.js → chunk-4LR7N76Q.js} +52 -14
  102. package/dist/chunk-4LR7N76Q.js.map +1 -0
  103. package/dist/{chunk-FN2GQ2B5.js → chunk-5GCOUJ7T.js} +3 -3
  104. package/dist/{chunk-FN2GQ2B5.js.map → chunk-5GCOUJ7T.js.map} +1 -1
  105. package/dist/{chunk-6PK4GITC.js → chunk-5U7LPEFE.js} +3 -3
  106. package/dist/{chunk-6PK4GITC.js.map → chunk-5U7LPEFE.js.map} +1 -1
  107. package/dist/{chunk-IGGIH6GL.js → chunk-6GDNC6DS.js} +3 -3
  108. package/dist/{chunk-IGGIH6GL.js.map → chunk-6GDNC6DS.js.map} +1 -1
  109. package/dist/{chunk-NHJ5U6WK.js → chunk-6NT6RC2H.js} +3 -3
  110. package/dist/{chunk-NHJ5U6WK.js.map → chunk-6NT6RC2H.js.map} +1 -1
  111. package/dist/{chunk-WFSKX5AI.js → chunk-7SBSV5DD.js} +3 -3
  112. package/dist/{chunk-WFSKX5AI.js.map → chunk-7SBSV5DD.js.map} +1 -1
  113. package/dist/{chunk-TNUK62YF.js → chunk-CGABIBZZ.js} +4 -4
  114. package/dist/{chunk-TNUK62YF.js.map → chunk-CGABIBZZ.js.map} +1 -1
  115. package/dist/{chunk-WBDU6KDP.js → chunk-CN4U4EWY.js} +4 -4
  116. package/dist/{chunk-WBDU6KDP.js.map → chunk-CN4U4EWY.js.map} +1 -1
  117. package/dist/{chunk-XRDQAJW5.js → chunk-DI463VGL.js} +3 -3
  118. package/dist/{chunk-XRDQAJW5.js.map → chunk-DI463VGL.js.map} +1 -1
  119. package/dist/{chunk-BWTUGXHI.js → chunk-DJN6JAF7.js} +5 -5
  120. package/dist/{chunk-BWTUGXHI.js.map → chunk-DJN6JAF7.js.map} +1 -1
  121. package/dist/{chunk-53IXPTVY.js → chunk-EXK6VVXU.js} +4 -4
  122. package/dist/{chunk-53IXPTVY.js.map → chunk-EXK6VVXU.js.map} +1 -1
  123. package/dist/{chunk-5SJRY6P3.js → chunk-EZK2WD75.js} +4 -4
  124. package/dist/{chunk-5SJRY6P3.js.map → chunk-EZK2WD75.js.map} +1 -1
  125. package/dist/{chunk-IM5NMPNU.js → chunk-FWGHTOGZ.js} +7 -7
  126. package/dist/{chunk-IM5NMPNU.js.map → chunk-FWGHTOGZ.js.map} +1 -1
  127. package/dist/{chunk-RE4QQM4Q.js → chunk-GFOAMXSO.js} +3 -3
  128. package/dist/{chunk-RE4QQM4Q.js.map → chunk-GFOAMXSO.js.map} +1 -1
  129. package/dist/{chunk-4C76FZV4.js → chunk-GN5V4IQI.js} +4 -4
  130. package/dist/{chunk-4C76FZV4.js.map → chunk-GN5V4IQI.js.map} +1 -1
  131. package/dist/{chunk-KEOCLT62.js → chunk-HAS46CRI.js} +8 -5
  132. package/dist/chunk-HAS46CRI.js.map +1 -0
  133. package/dist/{chunk-TCRZSLXH.js → chunk-HRDCUTC6.js} +6 -6
  134. package/dist/{chunk-TCRZSLXH.js.map → chunk-HRDCUTC6.js.map} +1 -1
  135. package/dist/{chunk-GLE6TNJ3.js → chunk-HZIQK63A.js} +3 -3
  136. package/dist/{chunk-GLE6TNJ3.js.map → chunk-HZIQK63A.js.map} +1 -1
  137. package/dist/{chunk-LWPIGNCW.js → chunk-JAP5KTIG.js} +4 -4
  138. package/dist/{chunk-LWPIGNCW.js.map → chunk-JAP5KTIG.js.map} +1 -1
  139. package/dist/{chunk-JAKLD546.js → chunk-JUKKXGHR.js} +3 -3
  140. package/dist/{chunk-JAKLD546.js.map → chunk-JUKKXGHR.js.map} +1 -1
  141. package/dist/{chunk-4VYKXIYA.js → chunk-KNTHVSUL.js} +8 -7
  142. package/dist/chunk-KNTHVSUL.js.map +1 -0
  143. package/dist/{chunk-A6IKHCIA.js → chunk-L36ZEKBI.js} +4 -4
  144. package/dist/{chunk-A6IKHCIA.js.map → chunk-L36ZEKBI.js.map} +1 -1
  145. package/dist/chunk-L4FKJ3ZN.js +14 -0
  146. package/dist/{chunk-UE65NYZF.js.map → chunk-L4FKJ3ZN.js.map} +1 -1
  147. package/dist/{chunk-JL7MKSCD.js → chunk-LIQHWHYV.js} +10 -10
  148. package/dist/{chunk-JL7MKSCD.js.map → chunk-LIQHWHYV.js.map} +1 -1
  149. package/dist/{chunk-KDV6WZYJ.js → chunk-M6Z7KIDX.js} +3 -3
  150. package/dist/{chunk-KDV6WZYJ.js.map → chunk-M6Z7KIDX.js.map} +1 -1
  151. package/dist/{chunk-HFCZIPYO.js → chunk-O3BZBI27.js} +3 -3
  152. package/dist/{chunk-HFCZIPYO.js.map → chunk-O3BZBI27.js.map} +1 -1
  153. package/dist/{chunk-47BPYZJF.js → chunk-OOQTZ7N7.js} +3 -3
  154. package/dist/{chunk-47BPYZJF.js.map → chunk-OOQTZ7N7.js.map} +1 -1
  155. package/dist/{chunk-R2FXTCRK.js → chunk-QLFRNPPF.js} +15 -14
  156. package/dist/chunk-QLFRNPPF.js.map +1 -0
  157. package/dist/{chunk-75STIRBZ.js → chunk-RA5O7L7Q.js} +4 -4
  158. package/dist/{chunk-75STIRBZ.js.map → chunk-RA5O7L7Q.js.map} +1 -1
  159. package/dist/{chunk-5LP2K2J7.js → chunk-S7QZUBXM.js} +112 -6
  160. package/dist/chunk-S7QZUBXM.js.map +1 -0
  161. package/dist/{chunk-4ZYJDSYQ.js → chunk-U2UDXLAE.js} +3 -3
  162. package/dist/{chunk-4ZYJDSYQ.js.map → chunk-U2UDXLAE.js.map} +1 -1
  163. package/dist/{chunk-CKH5HDHS.js → chunk-UGJ24VNF.js} +4 -4
  164. package/dist/{chunk-CKH5HDHS.js.map → chunk-UGJ24VNF.js.map} +1 -1
  165. package/dist/{chunk-Z76YTG4W.js → chunk-UWE2QL3O.js} +3 -3
  166. package/dist/{chunk-Z76YTG4W.js.map → chunk-UWE2QL3O.js.map} +1 -1
  167. package/dist/{chunk-GHLPK63Q.js → chunk-XCS62X6X.js} +7 -7
  168. package/dist/{chunk-GHLPK63Q.js.map → chunk-XCS62X6X.js.map} +1 -1
  169. package/dist/chunk-Z5M4YYWT.js +9 -0
  170. package/dist/chunk-Z5M4YYWT.js.map +1 -0
  171. package/dist/{chunk-ANLG2WBG.js → chunk-ZWV6YNIB.js} +4 -4
  172. package/dist/{chunk-ANLG2WBG.js.map → chunk-ZWV6YNIB.js.map} +1 -1
  173. package/dist/components/cart/index.js +1 -1
  174. package/dist/components/common/index.js +1 -1
  175. package/dist/components/drawer/index.js +13 -12
  176. package/dist/components/home/HomePageRenderer.d.ts.map +1 -1
  177. package/dist/components/home/index.js +17 -16
  178. package/dist/components/layout/index.js +5 -4
  179. package/dist/components/product/index.js +14 -13
  180. package/dist/components/store/index.js +14 -13
  181. package/dist/dev/dev-settings-store.d.ts +20 -0
  182. package/dist/dev/dev-settings-store.d.ts.map +1 -1
  183. package/dist/dev/editor/ThemeEditor.d.ts.map +1 -1
  184. package/dist/dev/editor/i18n.d.ts +3 -0
  185. package/dist/dev/editor/i18n.d.ts.map +1 -1
  186. package/dist/dev/editor/index.js +64 -4
  187. package/dist/dev/editor/index.js.map +1 -1
  188. package/dist/dev/editor/relative-time.d.ts +8 -0
  189. package/dist/dev/editor/relative-time.d.ts.map +1 -0
  190. package/dist/dev/editor/styles.d.ts +1 -1
  191. package/dist/dev/editor/styles.d.ts.map +1 -1
  192. package/dist/dev/index.js +1 -1
  193. package/dist/{document-class-P2H6HKXA.js → document-class-DSRV5LZK.js} +12 -11
  194. package/dist/{document-class-P2H6HKXA.js.map → document-class-DSRV5LZK.js.map} +1 -1
  195. package/dist/hooks/index.js +13 -12
  196. package/dist/hooks/useGtm.js +13 -12
  197. package/dist/hooks/useMoney.js +13 -12
  198. package/dist/hooks/useStore.js +13 -12
  199. package/dist/hooks/useUser.js +4 -3
  200. package/dist/index.js +13 -12
  201. package/dist/index.js.map +1 -1
  202. package/dist/{navigation-4STP3ZMK.js → navigation-ATD4DRST.js} +5 -4
  203. package/dist/navigation-ATD4DRST.js.map +1 -0
  204. package/dist/{navigation-6Y2SKWH3.js → navigation-XCZMJSNS.js} +6 -5
  205. package/dist/{navigation-6Y2SKWH3.js.map → navigation-XCZMJSNS.js.map} +1 -1
  206. package/dist/{not-found-LLCXGKVS.js → not-found-ZE4Y7RLW.js} +16 -15
  207. package/dist/not-found-ZE4Y7RLW.js.map +1 -0
  208. package/dist/providers/index.js +13 -12
  209. package/dist/providers/twilight-init.d.ts.map +1 -1
  210. package/dist/routes/account/orders.js +5 -4
  211. package/dist/routes/account.js +14 -13
  212. package/dist/routes/account.js.map +1 -1
  213. package/dist/routes/blog.js +9 -8
  214. package/dist/routes/blog.js.map +1 -1
  215. package/dist/routes/brands.js +5 -4
  216. package/dist/routes/brands.js.map +1 -1
  217. package/dist/routes/cart.js +21 -20
  218. package/dist/routes/cart.js.map +1 -1
  219. package/dist/routes/home.js +18 -17
  220. package/dist/routes/index.js +4 -3
  221. package/dist/routes/loyalty.js +6 -5
  222. package/dist/routes/loyalty.js.map +1 -1
  223. package/dist/routes/page.js +5 -4
  224. package/dist/routes/page.js.map +1 -1
  225. package/dist/routes/product-listing.js +19 -18
  226. package/dist/routes/product-listing.js.map +1 -1
  227. package/dist/routes/product.js +17 -16
  228. package/dist/routes/product.js.map +1 -1
  229. package/dist/routes/seo-redirects.js +4 -3
  230. package/dist/routes/testimonials.js +2 -2
  231. package/dist/routes/thank-you.js +5 -4
  232. package/dist/routes/thank-you.js.map +1 -1
  233. package/dist/skeleton.js +18 -17
  234. package/dist/{store-lookup-XKL42Y4H.js → store-lookup-TG6RV6NV.js} +9 -8
  235. package/dist/store-lookup-TG6RV6NV.js.map +1 -0
  236. package/dist/tanstack.js +12 -11
  237. package/dist/tanstack.js.map +1 -1
  238. package/dist/utils/dev-settings-refresh.d.ts +14 -0
  239. package/dist/utils/dev-settings-refresh.d.ts.map +1 -0
  240. package/dist/utils/index.js +3 -2
  241. package/dist/utils/index.js.map +1 -1
  242. package/package.json +1 -1
  243. package/tailwind/components/home/HomePageRenderer.tsx.txt +5 -2
  244. package/dist/BlogAuthorPage-UAQ6266M.js.map +0 -1
  245. package/dist/BlogCategoryPage-UX5OZZRZ.js.map +0 -1
  246. package/dist/BlogPage-AAITQ3UZ.js.map +0 -1
  247. package/dist/BlogSinglePage-R7VG3WNP.js.map +0 -1
  248. package/dist/BlogTagPage-YCJL3FNS.js.map +0 -1
  249. package/dist/BrandsPage-4M4J7YH5.js.map +0 -1
  250. package/dist/Breadcrumb-WB5NXLLA.js.map +0 -1
  251. package/dist/CartItem-UWCMEGW7.js.map +0 -1
  252. package/dist/CartSummary-TK55II7A.js.map +0 -1
  253. package/dist/CustomerLayout-BCTFI56B.js.map +0 -1
  254. package/dist/LoyaltyPage-MBYLZF7B.js.map +0 -1
  255. package/dist/LoyaltyPointsPage-SFAL3TOO.js.map +0 -1
  256. package/dist/MainMenu-VEZTUNCZ.js.map +0 -1
  257. package/dist/MobileMenu-JWD22FVU.js.map +0 -1
  258. package/dist/NotificationsPage-QVE7AOCV.js.map +0 -1
  259. package/dist/OrderSinglePage-QSNZVQ22.js.map +0 -1
  260. package/dist/OrdersPage-WGIHZJNJ.js.map +0 -1
  261. package/dist/ProductDetails-ALVRCBP4.js.map +0 -1
  262. package/dist/ProfilePage-AVJYAQOG.js.map +0 -1
  263. package/dist/SeoCartWidget-5WY6AV2F.js.map +0 -1
  264. package/dist/SettingsPage-ZHTSKKBD.js.map +0 -1
  265. package/dist/ThankYouPage-PLCUI7LC.js.map +0 -1
  266. package/dist/WalletPage-C6ZFJTSA.js.map +0 -1
  267. package/dist/WishlistPage-3CIW7AIZ.js.map +0 -1
  268. package/dist/chunk-4VYKXIYA.js.map +0 -1
  269. package/dist/chunk-5LP2K2J7.js.map +0 -1
  270. package/dist/chunk-KEOCLT62.js.map +0 -1
  271. package/dist/chunk-MHLKLADI.js.map +0 -1
  272. package/dist/chunk-R2FXTCRK.js.map +0 -1
  273. package/dist/chunk-UE65NYZF.js +0 -14
  274. package/dist/navigation-4STP3ZMK.js.map +0 -1
  275. package/dist/not-found-LLCXGKVS.js.map +0 -1
  276. package/dist/store-lookup-XKL42Y4H.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ /**
2
+ * How long ago `then` was, in the editor's language: "5 minutes ago", "قبل 5 دقائق".
3
+ * Arabic keeps Latin digits, like the rest of the editor. Rounded down, so a time
4
+ * just short of an hour still reads in minutes; a clock running behind the dev
5
+ * server's reads as now rather than in the future.
6
+ */
7
+ export declare function timeAgo(then: number, now: number, locale: string): string;
8
+ //# sourceMappingURL=relative-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relative-time.d.ts","sourceRoot":"","sources":["../../../src/dev/editor/relative-time.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAYzE"}
@@ -4,5 +4,5 @@
4
4
  * so nothing it renders could match the theme's CSS by accident. Colors follow
5
5
  * the Salla dashboard's editor: a teal accent on white, a dotted canvas.
6
6
  */
7
- export declare const EDITOR_CSS = "\n:root {\n --te-accent: #0d9488;\n --te-accent-soft: #e6f6f4;\n --te-text: #1f2937;\n --te-sub: #6b7280;\n --te-faint: #9ca3af;\n --te-border: #e5e7eb;\n --te-row: #f3f4f6;\n --te-bg: #ffffff;\n --te-canvas: #f6f7f9;\n --te-danger: #dc2626;\n --te-warn-bg: #fef3c7;\n --te-warn: #b45309;\n --te-rail: 56px;\n --te-panel: 385px;\n --te-top: 52px;\n}\n* { box-sizing: border-box; }\n[dir='rtl'] { --te-back-flip: -1; }\nhtml, body, #root { height: 100%; margin: 0; }\nbody {\n font-family: 'PingARLT', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: var(--te-text);\n background: var(--te-bg);\n font-size: 13px;\n}\nbutton { font: inherit; color: inherit; }\ncode { font-size: 11.5px; background: var(--te-row); padding: 1px 4px; border-radius: 4px; }\n\n.te-shell { display: grid; grid-template-rows: var(--te-top) 1fr; height: 100%; }\n.te-body { display: flex; min-height: 0; position: relative; }\n\n/* Top bar */\n.te-top {\n display: flex; align-items: center; gap: 12px; padding: 0 14px;\n border-bottom: 1px solid var(--te-border); background: var(--te-bg);\n}\n.te-top__start, .te-top__end { flex: 1; display: flex; align-items: center; gap: 10px; min-width: 0; }\n.te-top__end { justify-content: flex-end; }\n.te-theme-name { font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.te-badge {\n font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px;\n background: var(--te-warn-bg); color: var(--te-warn); white-space: nowrap;\n}\n.te-pill {\n display: flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: 8px;\n border: 1px solid var(--te-border); color: var(--te-sub); white-space: nowrap; max-width: 260px;\n overflow: hidden; text-overflow: ellipsis; direction: ltr;\n}\n.te-status { font-size: 12px; color: var(--te-faint); white-space: nowrap; display: flex; align-items: center; gap: 6px; }\n.te-status--error { color: var(--te-danger); }\n.te-dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }\n\n.te-segment { display: flex; padding: 3px; gap: 2px; background: var(--te-row); border-radius: 10px; }\n.te-segment button {\n display: flex; align-items: center; justify-content: center; width: 36px; height: 30px;\n border: none; border-radius: 8px; background: transparent; color: var(--te-sub); cursor: pointer;\n}\n.te-segment button[aria-pressed='true'] { background: var(--te-bg); color: var(--te-text); box-shadow: 0 1px 2px rgba(0,0,0,.08); }\n.te-segment--text button { width: auto; padding: 0 10px; font-size: 12px; font-weight: 600; }\n\n.te-icon-btn {\n display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px;\n border: 1px solid var(--te-border); border-radius: 8px; background: var(--te-bg);\n color: var(--te-sub); cursor: pointer; text-decoration: none; flex: none;\n}\n.te-icon-btn:hover { color: var(--te-text); background: var(--te-row); }\n.te-icon-btn--bare { border-color: transparent; background: transparent; width: 28px; height: 28px; }\n.te-icon-btn--danger:hover { color: var(--te-danger); }\n.te-icon-btn:disabled { opacity: .35; cursor: default; }\n\n.te-switch {\n display: inline-flex; align-items: center; gap: 8px; border: none; background: none;\n cursor: pointer; font-size: 12px; font-weight: 600; color: var(--te-sub); white-space: nowrap;\n}\n.te-switch__track {\n width: 34px; height: 20px; border-radius: 999px; background: #d1d5db; position: relative; transition: background .15s;\n}\n.te-switch__track::after {\n content: ''; position: absolute; top: 2px; inset-inline-start: 2px; width: 16px; height: 16px;\n border-radius: 50%; background: #fff; transition: inset-inline-start .15s; box-shadow: 0 1px 2px rgba(0,0,0,.2);\n}\n.te-switch[aria-checked='true'] { color: var(--te-accent); }\n.te-switch[aria-checked='true'] .te-switch__track { background: var(--te-accent); }\n.te-switch[aria-checked='true'] .te-switch__track::after { inset-inline-start: 16px; }\n\n/* Icon rail + panel (start side: the right in Arabic, like the dashboard) */\n.te-rail {\n width: var(--te-rail); flex: none; display: flex; flex-direction: column; align-items: center;\n gap: 6px; padding: 12px 0; border-inline-end: 1px solid var(--te-border); background: var(--te-bg);\n}\n.te-rail button {\n width: 38px; height: 38px; display: flex; align-items: center; justify-content: center;\n border: none; border-radius: 10px; background: transparent; color: var(--te-sub); cursor: pointer;\n}\n.te-rail button:hover { background: var(--te-row); color: var(--te-text); }\n.te-rail button[aria-selected='true'] { background: var(--te-accent-soft); color: var(--te-accent); }\n.te-rail__tabs { display: flex; flex-direction: column; gap: 6px; padding-top: 6px; border-top: 1px solid var(--te-border); }\n\n.te-panel {\n width: var(--te-panel); flex: none; display: flex; flex-direction: column; min-height: 0;\n border-inline-end: 1px solid var(--te-border); background: var(--te-bg);\n}\n.te-panel[hidden] { display: none; }\n.te-panel__head {\n display: flex; align-items: center; gap: 8px; padding: 14px 16px 10px; font-weight: 700; font-size: 14px;\n}\n.te-panel__head span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.te-panel__body { flex: 1; overflow-y: auto; padding: 0 12px 16px; }\n.te-panel__actions { padding: 0 12px 4px; border-top: 1px solid var(--te-border); }\n.te-panel__actions .te-btn { margin-top: 8px; }\n.te-panel__foot { padding: 10px 16px; border-top: 1px solid var(--te-border); font-size: 11.5px; color: var(--te-faint); }\n\n.te-section-title {\n font-size: 11px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase;\n color: var(--te-faint); margin: 14px 4px 6px;\n}\n.te-hint { font-size: 12px; color: var(--te-sub); line-height: 1.6; margin: 8px 4px; }\n.te-note {\n font-size: 12px; line-height: 1.6; margin: 4px 0 10px; padding: 8px 10px; border-radius: 8px;\n background: var(--te-warn-bg); color: var(--te-warn);\n}\n.te-note button { margin-inline-start: 6px; border: none; background: none; color: inherit; font-weight: 700; text-decoration: underline; cursor: pointer; padding: 0; }\n\n/* Block list */\n.te-block {\n display: flex; align-items: center; gap: 8px; padding: 6px 6px; border-radius: 8px;\n border-top: 2px solid transparent; cursor: pointer;\n}\n.te-block:hover { background: var(--te-row); }\n.te-block--over { border-top-color: var(--te-accent); }\n.te-block--dragging { opacity: .4; }\n.te-block--static { cursor: default; }\n.te-block__grip { color: var(--te-faint); cursor: grab; display: flex; }\n.te-block__icon { color: var(--te-sub); display: flex; flex: none; }\n.te-block__title {\n flex: 1; min-width: 0; border: none; background: none; text-align: start; cursor: pointer;\n padding: 4px 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.te-block__tag { font-size: 11px; color: var(--te-faint); }\n.te-block__actions { display: flex; gap: 2px; opacity: 0; }\n.te-block:hover .te-block__actions, .te-block:focus-within .te-block__actions { opacity: 1; }\n\n.te-add {\n display: flex; align-items: center; gap: 8px; width: 100%; margin-top: 6px; padding: 9px 8px;\n border: none; border-radius: 8px; background: none; color: var(--te-accent); font-weight: 600; cursor: pointer; text-align: start;\n}\n.te-add:hover { background: var(--te-accent-soft); }\n\n.te-btn {\n display: inline-flex; align-items: center; justify-content: center; gap: 6px; width: 100%;\n padding: 10px 12px; border-radius: 10px; border: 1px solid var(--te-border); background: var(--te-bg);\n color: var(--te-text); font-weight: 600; cursor: pointer; margin-top: 8px;\n}\n.te-btn:hover { background: var(--te-row); }\n.te-btn--primary { background: var(--te-accent); border-color: var(--te-accent); color: #fff; }\n.te-btn--primary:hover { background: #0f766e; }\n.te-btn--quiet { border-color: transparent; color: var(--te-sub); font-weight: 500; }\n.te-btn--danger { color: var(--te-danger); border-color: var(--te-danger); }\n\n/* Fields */\n.te-field { padding: 10px 4px; border-bottom: 1px solid var(--te-row); }\n.te-field__label { display: block; font-size: 12.5px; color: var(--te-text); margin-bottom: 6px; line-height: 1.5; }\n.te-field--row { display: flex; align-items: center; justify-content: space-between; gap: 10px; cursor: pointer; }\n.te-field > .te-field--row .te-field__label { margin: 0; }\n.te-field--row .te-field__label { margin: 0; flex: 1; }\n.te-input {\n width: 100%; padding: 8px 10px; border: 1px solid var(--te-border); border-radius: 8px;\n background: var(--te-bg); color: var(--te-text); font: inherit;\n}\n.te-input:focus { outline: 2px solid var(--te-accent-soft); border-color: var(--te-accent); }\n.te-field__help { font-size: 11.5px; color: var(--te-faint); line-height: 1.6; margin: 6px 0 0; }\n.te-field__help--error { color: var(--te-danger); }\n.te-field__count { color: var(--te-faint); font-weight: 400; }\ntextarea.te-input { resize: vertical; min-height: 64px; }\n.te-image__preview {\n display: block; width: 100%; max-height: 140px; object-fit: contain; margin-bottom: 8px;\n border-radius: 8px; background: var(--te-row);\n}\n.te-image__pick {\n display: inline-block; margin-top: 6px; font-size: 12px; color: var(--te-accent); font-weight: 600; cursor: pointer;\n}\n.te-items { display: flex; flex-direction: column; gap: 6px; }\n.te-item { border: 1px solid var(--te-border); border-radius: 10px; background: var(--te-bg); }\n.te-item--open { border-color: var(--te-accent); }\n.te-item__head { display: flex; align-items: center; gap: 2px; padding: 4px 6px 4px 4px; }\n.te-item__title {\n flex: 1; min-width: 0; border: none; background: none; cursor: pointer; text-align: start;\n padding: 6px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.te-item__body { padding: 0 10px 6px; border-top: 1px solid var(--te-row); }\n.te-field__help--warn { color: var(--te-warn); background: var(--te-warn-bg); padding: 6px 8px; border-radius: 6px; }\n.te-input--spaced { margin-top: 8px; }\n.te-search--small { margin: 8px 0; }\n.te-search--small input { padding: 8px 0; }\n.te-lookup { margin-top: 6px; }\n.te-lookup__results { list-style: none; margin: 4px 0 0; padding: 0; max-height: 260px; overflow-y: auto; }\n.te-lookup__item {\n display: flex; align-items: center; gap: 10px; width: 100%; padding: 6px; border: none; border-radius: 8px;\n background: none; cursor: pointer; text-align: start;\n}\n.te-lookup__item:hover { background: var(--te-row); }\n.te-lookup__item:disabled { opacity: .45; cursor: default; }\n.te-lookup__item img, .te-chip img, .te-lookup__noimage {\n width: 32px; height: 32px; border-radius: 6px; object-fit: cover; flex: none; background: var(--te-row);\n}\n.te-chips { list-style: none; margin: 0 0 4px; padding: 0; display: flex; flex-direction: column; gap: 6px; }\n.te-chip { display: flex; align-items: center; gap: 8px; padding: 4px 4px 4px 6px; border: 1px solid var(--te-border); border-radius: 10px; }\n.te-chip__name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.te-add:disabled { opacity: .4; cursor: default; background: none; }\n.te-field__readonly { font-size: 11.5px; color: var(--te-faint); font-style: italic; }\n.te-checkbox { width: 16px; height: 16px; accent-color: var(--te-accent); cursor: pointer; flex: none; }\n\n/* Salla icons (sallaicons.css) inside the editor's own chrome */\n.te-sicon { font-size: 20px; line-height: 1; display: inline-flex; width: 20px; justify-content: center; }\n\n/* Add-element drawer: beside the panel, over the preview */\n.te-drawer {\n /* reset what browsers give a <dialog> */\n margin: 0; padding: 0; border: none; max-width: none; max-height: none; height: auto; color: inherit;\n position: absolute; top: 0; bottom: 0; z-index: 5;\n inset-inline-start: calc(var(--te-rail) + var(--te-panel));\n width: min(760px, calc(100% - var(--te-rail) - var(--te-panel)));\n display: flex; flex-direction: column; background: var(--te-bg);\n border-inline-end: 1px solid var(--te-border); box-shadow: 0 12px 40px rgba(0,0,0,.12);\n}\n.te-drawer__head { display: flex; align-items: center; gap: 10px; padding: 16px 20px 8px; }\n.te-drawer__head h2 { flex: 1; margin: 0; font-size: 18px; }\n.te-icon-btn--danger-outline { color: var(--te-danger); border-color: #fca5a5; }\n.te-icon-btn--danger-outline:hover { color: var(--te-danger); background: #fef2f2; }\n.te-search {\n display: flex; align-items: center; gap: 8px; margin: 8px 20px 14px; padding: 0 12px;\n border: 1px solid var(--te-border); border-radius: 10px; color: var(--te-faint);\n}\n.te-search:focus-within { border-color: var(--te-accent); }\n.te-search input { flex: 1; border: none; outline: none; padding: 11px 0; font: inherit; color: var(--te-text); background: none; }\n.te-drawer__body { flex: 1; overflow-y: auto; padding: 0 20px 20px; }\n.te-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 14px; }\n.te-card {\n display: flex; flex-direction: column; text-align: start; padding: 0; overflow: hidden; cursor: pointer;\n border: 1px solid var(--te-border); border-radius: 12px; background: var(--te-bg);\n}\n.te-card:hover, .te-card:focus-visible { border-color: var(--te-accent); box-shadow: 0 4px 14px rgba(13,148,136,.12); outline: none; }\n.te-card__title { display: flex; align-items: center; gap: 8px; padding: 12px 14px; font-weight: 600; }\n.te-card__icon { color: #d97706; display: flex; }\n.te-card__preview {\n display: flex; align-items: center; justify-content: center; aspect-ratio: 4 / 3;\n background: var(--te-row); overflow: hidden;\n}\n.te-card__preview img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.te-card__placeholder { color: #cbd5e1; transform: scale(2); display: flex; }\n\n/* Canvas */\n.te-canvas {\n flex: 1; min-width: 0; display: flex; justify-content: center; padding: 20px; overflow: auto;\n background-color: var(--te-canvas);\n background-image: radial-gradient(#d9dce1 1px, transparent 1px);\n background-size: 16px 16px;\n}\n.te-frame {\n border: none; background: #fff; height: 100%; display: block;\n border-radius: 12px; box-shadow: 0 1px 3px rgba(0,0,0,.08), 0 8px 24px rgba(0,0,0,.06);\n transition: width .2s ease;\n}\n.te-frame--desktop { width: 100%; }\n.te-canvas--mobile { align-items: center; }\n/* A typical phone screen (390\u00D7844), never taller than the canvas. */\n.te-frame--mobile {\n width: 390px; height: min(844px, 100%); flex: none;\n border-radius: 36px; border: 10px solid #111827;\n}\n";
7
+ export declare const EDITOR_CSS = "\n:root {\n --te-accent: #0d9488;\n --te-accent-soft: #e6f6f4;\n --te-text: #1f2937;\n --te-sub: #6b7280;\n --te-faint: #9ca3af;\n --te-border: #e5e7eb;\n --te-row: #f3f4f6;\n --te-bg: #ffffff;\n --te-canvas: #f6f7f9;\n --te-danger: #dc2626;\n --te-warn-bg: #fef3c7;\n --te-warn: #b45309;\n --te-rail: 56px;\n --te-panel: 385px;\n --te-top: 52px;\n}\n* { box-sizing: border-box; }\n[dir='rtl'] { --te-back-flip: -1; }\nhtml, body, #root { height: 100%; margin: 0; }\nbody {\n font-family: 'PingARLT', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: var(--te-text);\n background: var(--te-bg);\n font-size: 13px;\n}\nbutton { font: inherit; color: inherit; }\ncode { font-size: 11.5px; background: var(--te-row); padding: 1px 4px; border-radius: 4px; }\n\n.te-shell { display: grid; grid-template-rows: var(--te-top) 1fr; height: 100%; }\n.te-body { display: flex; min-height: 0; position: relative; }\n\n/* Top bar */\n.te-top {\n display: flex; align-items: center; gap: 12px; padding: 0 14px;\n border-bottom: 1px solid var(--te-border); background: var(--te-bg);\n}\n.te-top__start, .te-top__end { flex: 1; display: flex; align-items: center; gap: 10px; min-width: 0; }\n.te-top__end { justify-content: flex-end; }\n.te-theme-name { font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.te-badge {\n font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px;\n background: var(--te-warn-bg); color: var(--te-warn); white-space: nowrap;\n}\n.te-pill {\n display: flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: 8px;\n border: 1px solid var(--te-border); color: var(--te-sub); white-space: nowrap; max-width: 260px;\n overflow: hidden; text-overflow: ellipsis; direction: ltr;\n}\n.te-status { font-size: 12px; color: var(--te-faint); white-space: nowrap; display: flex; align-items: center; gap: 6px; }\n.te-status--error { color: var(--te-danger); }\n.te-dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }\n\n.te-segment { display: flex; padding: 3px; gap: 2px; background: var(--te-row); border-radius: 10px; }\n.te-segment button {\n display: flex; align-items: center; justify-content: center; width: 36px; height: 30px;\n border: none; border-radius: 8px; background: transparent; color: var(--te-sub); cursor: pointer;\n}\n.te-segment button[aria-pressed='true'] { background: var(--te-bg); color: var(--te-text); box-shadow: 0 1px 2px rgba(0,0,0,.08); }\n.te-segment--text button { width: auto; padding: 0 10px; font-size: 12px; font-weight: 600; }\n\n.te-icon-btn {\n display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px;\n border: 1px solid var(--te-border); border-radius: 8px; background: var(--te-bg);\n color: var(--te-sub); cursor: pointer; text-decoration: none; flex: none;\n}\n.te-icon-btn:hover { color: var(--te-text); background: var(--te-row); }\n.te-icon-btn--bare { border-color: transparent; background: transparent; width: 28px; height: 28px; }\n.te-icon-btn--danger:hover { color: var(--te-danger); }\n.te-icon-btn:disabled { opacity: .35; cursor: default; }\n\n.te-switch {\n display: inline-flex; align-items: center; gap: 8px; border: none; background: none;\n cursor: pointer; font-size: 12px; font-weight: 600; color: var(--te-sub); white-space: nowrap;\n}\n.te-switch__track {\n width: 34px; height: 20px; border-radius: 999px; background: #d1d5db; position: relative; transition: background .15s;\n}\n.te-switch__track::after {\n content: ''; position: absolute; top: 2px; inset-inline-start: 2px; width: 16px; height: 16px;\n border-radius: 50%; background: #fff; transition: inset-inline-start .15s; box-shadow: 0 1px 2px rgba(0,0,0,.2);\n}\n.te-switch[aria-checked='true'] { color: var(--te-accent); }\n.te-switch[aria-checked='true'] .te-switch__track { background: var(--te-accent); }\n.te-switch[aria-checked='true'] .te-switch__track::after { inset-inline-start: 16px; }\n\n/* Icon rail + panel (start side: the right in Arabic, like the dashboard) */\n.te-rail {\n width: var(--te-rail); flex: none; display: flex; flex-direction: column; align-items: center;\n gap: 6px; padding: 12px 0; border-inline-end: 1px solid var(--te-border); background: var(--te-bg);\n}\n.te-rail button {\n width: 38px; height: 38px; display: flex; align-items: center; justify-content: center;\n border: none; border-radius: 10px; background: transparent; color: var(--te-sub); cursor: pointer;\n}\n.te-rail button:hover { background: var(--te-row); color: var(--te-text); }\n.te-rail button[aria-selected='true'] { background: var(--te-accent-soft); color: var(--te-accent); }\n.te-rail__tabs { display: flex; flex-direction: column; gap: 6px; padding-top: 6px; border-top: 1px solid var(--te-border); }\n\n.te-panel {\n width: var(--te-panel); flex: none; display: flex; flex-direction: column; min-height: 0;\n border-inline-end: 1px solid var(--te-border); background: var(--te-bg);\n}\n.te-panel[hidden] { display: none; }\n.te-panel__head {\n display: flex; align-items: center; gap: 8px; padding: 14px 16px 10px; font-weight: 700; font-size: 14px;\n}\n.te-panel__head span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.te-panel__body { flex: 1; overflow-y: auto; padding: 0 12px 16px; }\n.te-panel__actions { padding: 0 12px 4px; border-top: 1px solid var(--te-border); }\n.te-panel__actions .te-btn { margin-top: 8px; }\n.te-panel__foot { padding: 10px 16px; border-top: 1px solid var(--te-border); font-size: 11.5px; color: var(--te-faint); }\n.te-panel__foot--fresh { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; line-height: 1.5; }\n.te-panel__fetched { color: var(--te-sub); }\n.te-link-btn { border: none; background: none; padding: 0; font: inherit; font-weight: 700; color: var(--te-accent); cursor: pointer; }\n.te-link-btn:hover { text-decoration: underline; }\n\n.te-section-title {\n font-size: 11px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase;\n color: var(--te-faint); margin: 14px 4px 6px;\n}\n.te-hint { font-size: 12px; color: var(--te-sub); line-height: 1.6; margin: 8px 4px; }\n.te-note {\n font-size: 12px; line-height: 1.6; margin: 4px 0 10px; padding: 8px 10px; border-radius: 8px;\n background: var(--te-warn-bg); color: var(--te-warn);\n}\n.te-note button { margin-inline-start: 6px; border: none; background: none; color: inherit; font-weight: 700; text-decoration: underline; cursor: pointer; padding: 0; }\n\n/* Block list */\n.te-block {\n display: flex; align-items: center; gap: 8px; padding: 6px 6px; border-radius: 8px;\n border-top: 2px solid transparent; cursor: pointer;\n}\n.te-block:hover { background: var(--te-row); }\n.te-block--over { border-top-color: var(--te-accent); }\n.te-block--dragging { opacity: .4; }\n.te-block--static { cursor: default; }\n.te-block__grip { color: var(--te-faint); cursor: grab; display: flex; }\n.te-block__icon { color: var(--te-sub); display: flex; flex: none; }\n.te-block__title {\n flex: 1; min-width: 0; border: none; background: none; text-align: start; cursor: pointer;\n padding: 4px 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.te-block__tag { font-size: 11px; color: var(--te-faint); }\n.te-block__actions { display: flex; gap: 2px; opacity: 0; }\n.te-block:hover .te-block__actions, .te-block:focus-within .te-block__actions { opacity: 1; }\n\n.te-add {\n display: flex; align-items: center; gap: 8px; width: 100%; margin-top: 6px; padding: 9px 8px;\n border: none; border-radius: 8px; background: none; color: var(--te-accent); font-weight: 600; cursor: pointer; text-align: start;\n}\n.te-add:hover { background: var(--te-accent-soft); }\n\n.te-btn {\n display: inline-flex; align-items: center; justify-content: center; gap: 6px; width: 100%;\n padding: 10px 12px; border-radius: 10px; border: 1px solid var(--te-border); background: var(--te-bg);\n color: var(--te-text); font-weight: 600; cursor: pointer; margin-top: 8px;\n}\n.te-btn:hover { background: var(--te-row); }\n.te-btn--primary { background: var(--te-accent); border-color: var(--te-accent); color: #fff; }\n.te-btn--primary:hover { background: #0f766e; }\n.te-btn--quiet { border-color: transparent; color: var(--te-sub); font-weight: 500; }\n.te-btn--danger { color: var(--te-danger); border-color: var(--te-danger); }\n\n/* Fields */\n.te-field { padding: 10px 4px; border-bottom: 1px solid var(--te-row); }\n.te-field__label { display: block; font-size: 12.5px; color: var(--te-text); margin-bottom: 6px; line-height: 1.5; }\n.te-field--row { display: flex; align-items: center; justify-content: space-between; gap: 10px; cursor: pointer; }\n.te-field > .te-field--row .te-field__label { margin: 0; }\n.te-field--row .te-field__label { margin: 0; flex: 1; }\n.te-input {\n width: 100%; padding: 8px 10px; border: 1px solid var(--te-border); border-radius: 8px;\n background: var(--te-bg); color: var(--te-text); font: inherit;\n}\n.te-input:focus { outline: 2px solid var(--te-accent-soft); border-color: var(--te-accent); }\n.te-field__help { font-size: 11.5px; color: var(--te-faint); line-height: 1.6; margin: 6px 0 0; }\n.te-field__help--error { color: var(--te-danger); }\n.te-field__count { color: var(--te-faint); font-weight: 400; }\ntextarea.te-input { resize: vertical; min-height: 64px; }\n.te-image__preview {\n display: block; width: 100%; max-height: 140px; object-fit: contain; margin-bottom: 8px;\n border-radius: 8px; background: var(--te-row);\n}\n.te-image__pick {\n display: inline-block; margin-top: 6px; font-size: 12px; color: var(--te-accent); font-weight: 600; cursor: pointer;\n}\n.te-items { display: flex; flex-direction: column; gap: 6px; }\n.te-item { border: 1px solid var(--te-border); border-radius: 10px; background: var(--te-bg); }\n.te-item--open { border-color: var(--te-accent); }\n.te-item__head { display: flex; align-items: center; gap: 2px; padding: 4px 6px 4px 4px; }\n.te-item__title {\n flex: 1; min-width: 0; border: none; background: none; cursor: pointer; text-align: start;\n padding: 6px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.te-item__body { padding: 0 10px 6px; border-top: 1px solid var(--te-row); }\n.te-field__help--warn { color: var(--te-warn); background: var(--te-warn-bg); padding: 6px 8px; border-radius: 6px; }\n.te-input--spaced { margin-top: 8px; }\n.te-search--small { margin: 8px 0; }\n.te-search--small input { padding: 8px 0; }\n.te-lookup { margin-top: 6px; }\n.te-lookup__results { list-style: none; margin: 4px 0 0; padding: 0; max-height: 260px; overflow-y: auto; }\n.te-lookup__item {\n display: flex; align-items: center; gap: 10px; width: 100%; padding: 6px; border: none; border-radius: 8px;\n background: none; cursor: pointer; text-align: start;\n}\n.te-lookup__item:hover { background: var(--te-row); }\n.te-lookup__item:disabled { opacity: .45; cursor: default; }\n.te-lookup__item img, .te-chip img, .te-lookup__noimage {\n width: 32px; height: 32px; border-radius: 6px; object-fit: cover; flex: none; background: var(--te-row);\n}\n.te-chips { list-style: none; margin: 0 0 4px; padding: 0; display: flex; flex-direction: column; gap: 6px; }\n.te-chip { display: flex; align-items: center; gap: 8px; padding: 4px 4px 4px 6px; border: 1px solid var(--te-border); border-radius: 10px; }\n.te-chip__name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.te-add:disabled { opacity: .4; cursor: default; background: none; }\n.te-field__readonly { font-size: 11.5px; color: var(--te-faint); font-style: italic; }\n.te-checkbox { width: 16px; height: 16px; accent-color: var(--te-accent); cursor: pointer; flex: none; }\n\n/* Salla icons (sallaicons.css) inside the editor's own chrome */\n.te-sicon { font-size: 20px; line-height: 1; display: inline-flex; width: 20px; justify-content: center; }\n\n/* Add-element drawer: beside the panel, over the preview */\n.te-drawer {\n /* reset what browsers give a <dialog> */\n margin: 0; padding: 0; border: none; max-width: none; max-height: none; height: auto; color: inherit;\n position: absolute; top: 0; bottom: 0; z-index: 5;\n inset-inline-start: calc(var(--te-rail) + var(--te-panel));\n width: min(760px, calc(100% - var(--te-rail) - var(--te-panel)));\n display: flex; flex-direction: column; background: var(--te-bg);\n border-inline-end: 1px solid var(--te-border); box-shadow: 0 12px 40px rgba(0,0,0,.12);\n}\n.te-drawer__head { display: flex; align-items: center; gap: 10px; padding: 16px 20px 8px; }\n.te-drawer__head h2 { flex: 1; margin: 0; font-size: 18px; }\n.te-icon-btn--danger-outline { color: var(--te-danger); border-color: #fca5a5; }\n.te-icon-btn--danger-outline:hover { color: var(--te-danger); background: #fef2f2; }\n.te-search {\n display: flex; align-items: center; gap: 8px; margin: 8px 20px 14px; padding: 0 12px;\n border: 1px solid var(--te-border); border-radius: 10px; color: var(--te-faint);\n}\n.te-search:focus-within { border-color: var(--te-accent); }\n.te-search input { flex: 1; border: none; outline: none; padding: 11px 0; font: inherit; color: var(--te-text); background: none; }\n.te-drawer__body { flex: 1; overflow-y: auto; padding: 0 20px 20px; }\n.te-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 14px; }\n.te-card {\n display: flex; flex-direction: column; text-align: start; padding: 0; overflow: hidden; cursor: pointer;\n border: 1px solid var(--te-border); border-radius: 12px; background: var(--te-bg);\n}\n.te-card:hover, .te-card:focus-visible { border-color: var(--te-accent); box-shadow: 0 4px 14px rgba(13,148,136,.12); outline: none; }\n.te-card__title { display: flex; align-items: center; gap: 8px; padding: 12px 14px; font-weight: 600; }\n.te-card__icon { color: #d97706; display: flex; }\n.te-card__preview {\n display: flex; align-items: center; justify-content: center; aspect-ratio: 4 / 3;\n background: var(--te-row); overflow: hidden;\n}\n.te-card__preview img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.te-card__placeholder { color: #cbd5e1; transform: scale(2); display: flex; }\n\n/* Canvas */\n.te-canvas {\n flex: 1; min-width: 0; display: flex; justify-content: center; padding: 20px; overflow: auto;\n background-color: var(--te-canvas);\n background-image: radial-gradient(#d9dce1 1px, transparent 1px);\n background-size: 16px 16px;\n}\n.te-frame {\n border: none; background: #fff; height: 100%; display: block;\n border-radius: 12px; box-shadow: 0 1px 3px rgba(0,0,0,.08), 0 8px 24px rgba(0,0,0,.06);\n transition: width .2s ease;\n}\n.te-frame--desktop { width: 100%; }\n.te-canvas--mobile { align-items: center; }\n/* A typical phone screen (390\u00D7844), never taller than the canvas. */\n.te-frame--mobile {\n width: 390px; height: min(844px, 100%); flex: none;\n border-radius: 36px; border: 10px solid #111827;\n}\n";
8
8
  //# sourceMappingURL=styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/dev/editor/styles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,UAAU,m3cAgRtB,CAAC"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/dev/editor/styles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,UAAU,stdAoRtB,CAAC"}
package/dist/dev/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useDevSettingsState } from '../chunk-MHLKLADI.js';
1
+ import { useDevSettingsState } from '../chunk-4LR7N76Q.js';
2
2
  import { isEditorFrame, DEV_EDITOR_PATH } from '../chunk-OXMUPNMH.js';
3
3
  import '../chunk-FHU2MXZA.js';
4
4
  import '../chunk-7VNVCHID.js';
@@ -1,22 +1,23 @@
1
- export { RouteDocumentSync, TanStackDocumentSync, tanstackDocumentAdapter, useTanstackDocumentAttrs } from './chunk-JL7MKSCD.js';
1
+ export { RouteDocumentSync, TanStackDocumentSync, tanstackDocumentAdapter, useTanstackDocumentAttrs } from './chunk-LIQHWHYV.js';
2
2
  import './chunk-Z4Y55HWX.js';
3
3
  import './chunk-EHTLXK5F.js';
4
- import './chunk-IGGIH6GL.js';
5
- import './chunk-KEOCLT62.js';
6
- import './chunk-KDV6WZYJ.js';
7
- import './chunk-TNUK62YF.js';
4
+ import './chunk-6GDNC6DS.js';
5
+ import './chunk-HAS46CRI.js';
6
+ import './chunk-M6Z7KIDX.js';
7
+ import './chunk-CGABIBZZ.js';
8
8
  import './chunk-KQEBYXYB.js';
9
9
  import './chunk-JYV25VNZ.js';
10
- import './chunk-RE4QQM4Q.js';
10
+ import './chunk-GFOAMXSO.js';
11
11
  import './chunk-5FJFN3IW.js';
12
12
  import './chunk-GD26FI4J.js';
13
13
  import './chunk-OM2GRPDH.js';
14
- import './chunk-GLE6TNJ3.js';
14
+ import './chunk-HZIQK63A.js';
15
15
  import './chunk-OUW6WESU.js';
16
16
  import './chunk-JWXJPJBO.js';
17
17
  import './chunk-CW625T2E.js';
18
- import './chunk-FN2GQ2B5.js';
19
- import './chunk-5LP2K2J7.js';
18
+ import './chunk-5GCOUJ7T.js';
19
+ import './chunk-S7QZUBXM.js';
20
+ import './chunk-Z5M4YYWT.js';
20
21
  import './chunk-TYNZ5B2B.js';
21
22
  import './chunk-2TLIULJZ.js';
22
23
  import './chunk-GYXUYHKO.js';
@@ -25,5 +26,5 @@ import './chunk-7VNVCHID.js';
25
26
  import './chunk-T72DAX7R.js';
26
27
  import './chunk-DF6FBKDN.js';
27
28
  import './chunk-DGUM43GV.js';
28
- //# sourceMappingURL=document-class-P2H6HKXA.js.map
29
- //# sourceMappingURL=document-class-P2H6HKXA.js.map
29
+ //# sourceMappingURL=document-class-DSRV5LZK.js.map
30
+ //# sourceMappingURL=document-class-DSRV5LZK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-P2H6HKXA.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"document-class-DSRV5LZK.js"}
@@ -1,22 +1,22 @@
1
- export { registerDefaultHooks, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore } from '../chunk-R2FXTCRK.js';
1
+ export { registerDefaultHooks, useBreadcrumbs, useDate, useGtm, useMoney, useNumber, useOpeningHours, usePageConfig, useStore } from '../chunk-QLFRNPPF.js';
2
2
  import '../chunk-MVNWWZWQ.js';
3
- import '../chunk-GHLPK63Q.js';
4
- import '../chunk-6PK4GITC.js';
3
+ import '../chunk-XCS62X6X.js';
4
+ import '../chunk-5U7LPEFE.js';
5
5
  import '../chunk-KQEBYXYB.js';
6
6
  import '../chunk-JYV25VNZ.js';
7
- import '../chunk-MHLKLADI.js';
7
+ import '../chunk-4LR7N76Q.js';
8
8
  import '../chunk-OXMUPNMH.js';
9
- import '../chunk-RE4QQM4Q.js';
9
+ import '../chunk-GFOAMXSO.js';
10
10
  import '../chunk-VVZNW5CB.js';
11
11
  import '../chunk-5FJFN3IW.js';
12
12
  import '../chunk-GD26FI4J.js';
13
13
  import '../chunk-OM2GRPDH.js';
14
- import '../chunk-GLE6TNJ3.js';
14
+ import '../chunk-HZIQK63A.js';
15
15
  import '../chunk-OUW6WESU.js';
16
16
  export { useComments } from '../chunk-BK5TBUGG.js';
17
17
  export { useHook } from '../chunk-HI5V5X3S.js';
18
- export { useUser } from '../chunk-4ZYJDSYQ.js';
19
- import '../chunk-NHJ5U6WK.js';
18
+ export { useUser } from '../chunk-U2UDXLAE.js';
19
+ import '../chunk-6NT6RC2H.js';
20
20
  export { HookName } from '../chunk-MVT5AF2A.js';
21
21
  export { useAsset } from '../chunk-Z653O7MX.js';
22
22
  import '../chunk-ZCH7W7DZ.js';
@@ -27,15 +27,16 @@ export { useHostAttributes } from '../chunk-7V36I5GT.js';
27
27
  export { useCoupon } from '../chunk-6WI7R2BD.js';
28
28
  export { useWishlist } from '../chunk-JGVEGQHJ.js';
29
29
  export { useBlogLike } from '../chunk-OAMIDZKW.js';
30
- import '../chunk-SGET4UYI.js';
30
+ import '../chunk-2VRMQZXF.js';
31
31
  import '../chunk-OQIIJRAS.js';
32
32
  import '../chunk-V2ZDTY6H.js';
33
- import '../chunk-FN2GQ2B5.js';
33
+ import '../chunk-5GCOUJ7T.js';
34
34
  export { HookSlot, useIsClient } from '../chunk-5XDPAKF5.js';
35
35
  export { HookRegistry, defineHooks, hookRegistry } from '../chunk-GCPEMNSU.js';
36
- import '../chunk-5LP2K2J7.js';
36
+ import '../chunk-S7QZUBXM.js';
37
+ import '../chunk-Z5M4YYWT.js';
37
38
  import '../chunk-TYNZ5B2B.js';
38
- import '../chunk-JAKLD546.js';
39
+ import '../chunk-JUKKXGHR.js';
39
40
  import '../chunk-AXW67SY7.js';
40
41
  import '../chunk-BYMOPN2S.js';
41
42
  import '../chunk-SKLEJJ6M.js';
@@ -1,22 +1,22 @@
1
- export { useGtm } from '../chunk-R2FXTCRK.js';
1
+ export { useGtm } from '../chunk-QLFRNPPF.js';
2
2
  import '../chunk-MVNWWZWQ.js';
3
- import '../chunk-GHLPK63Q.js';
4
- import '../chunk-6PK4GITC.js';
3
+ import '../chunk-XCS62X6X.js';
4
+ import '../chunk-5U7LPEFE.js';
5
5
  import '../chunk-KQEBYXYB.js';
6
6
  import '../chunk-JYV25VNZ.js';
7
- import '../chunk-MHLKLADI.js';
7
+ import '../chunk-4LR7N76Q.js';
8
8
  import '../chunk-OXMUPNMH.js';
9
- import '../chunk-RE4QQM4Q.js';
9
+ import '../chunk-GFOAMXSO.js';
10
10
  import '../chunk-VVZNW5CB.js';
11
11
  import '../chunk-5FJFN3IW.js';
12
12
  import '../chunk-GD26FI4J.js';
13
13
  import '../chunk-OM2GRPDH.js';
14
- import '../chunk-GLE6TNJ3.js';
14
+ import '../chunk-HZIQK63A.js';
15
15
  import '../chunk-OUW6WESU.js';
16
16
  import '../chunk-BK5TBUGG.js';
17
17
  import '../chunk-HI5V5X3S.js';
18
- import '../chunk-4ZYJDSYQ.js';
19
- import '../chunk-NHJ5U6WK.js';
18
+ import '../chunk-U2UDXLAE.js';
19
+ import '../chunk-6NT6RC2H.js';
20
20
  import '../chunk-MVT5AF2A.js';
21
21
  import '../chunk-Z653O7MX.js';
22
22
  import '../chunk-ZCH7W7DZ.js';
@@ -27,15 +27,16 @@ import '../chunk-7V36I5GT.js';
27
27
  import '../chunk-6WI7R2BD.js';
28
28
  import '../chunk-JGVEGQHJ.js';
29
29
  import '../chunk-OAMIDZKW.js';
30
- import '../chunk-SGET4UYI.js';
30
+ import '../chunk-2VRMQZXF.js';
31
31
  import '../chunk-OQIIJRAS.js';
32
32
  import '../chunk-V2ZDTY6H.js';
33
- import '../chunk-FN2GQ2B5.js';
33
+ import '../chunk-5GCOUJ7T.js';
34
34
  import '../chunk-5XDPAKF5.js';
35
35
  import '../chunk-GCPEMNSU.js';
36
- import '../chunk-5LP2K2J7.js';
36
+ import '../chunk-S7QZUBXM.js';
37
+ import '../chunk-Z5M4YYWT.js';
37
38
  import '../chunk-TYNZ5B2B.js';
38
- import '../chunk-JAKLD546.js';
39
+ import '../chunk-JUKKXGHR.js';
39
40
  import '../chunk-AXW67SY7.js';
40
41
  import '../chunk-BYMOPN2S.js';
41
42
  import '../chunk-SKLEJJ6M.js';
@@ -1,22 +1,22 @@
1
- export { useMoney } from '../chunk-R2FXTCRK.js';
1
+ export { useMoney } from '../chunk-QLFRNPPF.js';
2
2
  import '../chunk-MVNWWZWQ.js';
3
- import '../chunk-GHLPK63Q.js';
4
- import '../chunk-6PK4GITC.js';
3
+ import '../chunk-XCS62X6X.js';
4
+ import '../chunk-5U7LPEFE.js';
5
5
  import '../chunk-KQEBYXYB.js';
6
6
  import '../chunk-JYV25VNZ.js';
7
- import '../chunk-MHLKLADI.js';
7
+ import '../chunk-4LR7N76Q.js';
8
8
  import '../chunk-OXMUPNMH.js';
9
- import '../chunk-RE4QQM4Q.js';
9
+ import '../chunk-GFOAMXSO.js';
10
10
  import '../chunk-VVZNW5CB.js';
11
11
  import '../chunk-5FJFN3IW.js';
12
12
  import '../chunk-GD26FI4J.js';
13
13
  import '../chunk-OM2GRPDH.js';
14
- import '../chunk-GLE6TNJ3.js';
14
+ import '../chunk-HZIQK63A.js';
15
15
  import '../chunk-OUW6WESU.js';
16
16
  import '../chunk-BK5TBUGG.js';
17
17
  import '../chunk-HI5V5X3S.js';
18
- import '../chunk-4ZYJDSYQ.js';
19
- import '../chunk-NHJ5U6WK.js';
18
+ import '../chunk-U2UDXLAE.js';
19
+ import '../chunk-6NT6RC2H.js';
20
20
  import '../chunk-MVT5AF2A.js';
21
21
  import '../chunk-Z653O7MX.js';
22
22
  import '../chunk-ZCH7W7DZ.js';
@@ -27,15 +27,16 @@ import '../chunk-7V36I5GT.js';
27
27
  import '../chunk-6WI7R2BD.js';
28
28
  import '../chunk-JGVEGQHJ.js';
29
29
  import '../chunk-OAMIDZKW.js';
30
- import '../chunk-SGET4UYI.js';
30
+ import '../chunk-2VRMQZXF.js';
31
31
  import '../chunk-OQIIJRAS.js';
32
32
  import '../chunk-V2ZDTY6H.js';
33
- import '../chunk-FN2GQ2B5.js';
33
+ import '../chunk-5GCOUJ7T.js';
34
34
  import '../chunk-5XDPAKF5.js';
35
35
  import '../chunk-GCPEMNSU.js';
36
- import '../chunk-5LP2K2J7.js';
36
+ import '../chunk-S7QZUBXM.js';
37
+ import '../chunk-Z5M4YYWT.js';
37
38
  import '../chunk-TYNZ5B2B.js';
38
- import '../chunk-JAKLD546.js';
39
+ import '../chunk-JUKKXGHR.js';
39
40
  import '../chunk-AXW67SY7.js';
40
41
  import '../chunk-BYMOPN2S.js';
41
42
  import '../chunk-SKLEJJ6M.js';
@@ -1,22 +1,22 @@
1
- export { useStore } from '../chunk-R2FXTCRK.js';
1
+ export { useStore } from '../chunk-QLFRNPPF.js';
2
2
  import '../chunk-MVNWWZWQ.js';
3
- import '../chunk-GHLPK63Q.js';
4
- import '../chunk-6PK4GITC.js';
3
+ import '../chunk-XCS62X6X.js';
4
+ import '../chunk-5U7LPEFE.js';
5
5
  import '../chunk-KQEBYXYB.js';
6
6
  import '../chunk-JYV25VNZ.js';
7
- import '../chunk-MHLKLADI.js';
7
+ import '../chunk-4LR7N76Q.js';
8
8
  import '../chunk-OXMUPNMH.js';
9
- import '../chunk-RE4QQM4Q.js';
9
+ import '../chunk-GFOAMXSO.js';
10
10
  import '../chunk-VVZNW5CB.js';
11
11
  import '../chunk-5FJFN3IW.js';
12
12
  import '../chunk-GD26FI4J.js';
13
13
  import '../chunk-OM2GRPDH.js';
14
- import '../chunk-GLE6TNJ3.js';
14
+ import '../chunk-HZIQK63A.js';
15
15
  import '../chunk-OUW6WESU.js';
16
16
  import '../chunk-BK5TBUGG.js';
17
17
  import '../chunk-HI5V5X3S.js';
18
- import '../chunk-4ZYJDSYQ.js';
19
- import '../chunk-NHJ5U6WK.js';
18
+ import '../chunk-U2UDXLAE.js';
19
+ import '../chunk-6NT6RC2H.js';
20
20
  import '../chunk-MVT5AF2A.js';
21
21
  import '../chunk-Z653O7MX.js';
22
22
  import '../chunk-ZCH7W7DZ.js';
@@ -27,15 +27,16 @@ import '../chunk-7V36I5GT.js';
27
27
  import '../chunk-6WI7R2BD.js';
28
28
  import '../chunk-JGVEGQHJ.js';
29
29
  import '../chunk-OAMIDZKW.js';
30
- import '../chunk-SGET4UYI.js';
30
+ import '../chunk-2VRMQZXF.js';
31
31
  import '../chunk-OQIIJRAS.js';
32
32
  import '../chunk-V2ZDTY6H.js';
33
- import '../chunk-FN2GQ2B5.js';
33
+ import '../chunk-5GCOUJ7T.js';
34
34
  import '../chunk-5XDPAKF5.js';
35
35
  import '../chunk-GCPEMNSU.js';
36
- import '../chunk-5LP2K2J7.js';
36
+ import '../chunk-S7QZUBXM.js';
37
+ import '../chunk-Z5M4YYWT.js';
37
38
  import '../chunk-TYNZ5B2B.js';
38
- import '../chunk-JAKLD546.js';
39
+ import '../chunk-JUKKXGHR.js';
39
40
  import '../chunk-AXW67SY7.js';
40
41
  import '../chunk-BYMOPN2S.js';
41
42
  import '../chunk-SKLEJJ6M.js';
@@ -1,6 +1,7 @@
1
- export { useUser } from '../chunk-4ZYJDSYQ.js';
2
- import '../chunk-NHJ5U6WK.js';
3
- import '../chunk-5LP2K2J7.js';
1
+ export { useUser } from '../chunk-U2UDXLAE.js';
2
+ import '../chunk-6NT6RC2H.js';
3
+ import '../chunk-S7QZUBXM.js';
4
+ import '../chunk-Z5M4YYWT.js';
4
5
  import '../chunk-GYXUYHKO.js';
5
6
  import '../chunk-FHU2MXZA.js';
6
7
  import '../chunk-7VNVCHID.js';
package/dist/index.js CHANGED
@@ -1,24 +1,24 @@
1
1
  import { registry } from './chunk-Y32RHCOH.js';
2
2
  export { ComponentRegistry, registry } from './chunk-Y32RHCOH.js';
3
- export { TwilightProvider } from './chunk-R2FXTCRK.js';
3
+ export { TwilightProvider } from './chunk-QLFRNPPF.js';
4
4
  import './chunk-MVNWWZWQ.js';
5
- import './chunk-GHLPK63Q.js';
6
- import './chunk-6PK4GITC.js';
5
+ import './chunk-XCS62X6X.js';
6
+ import './chunk-5U7LPEFE.js';
7
7
  import './chunk-KQEBYXYB.js';
8
8
  import './chunk-JYV25VNZ.js';
9
- import './chunk-MHLKLADI.js';
9
+ import './chunk-4LR7N76Q.js';
10
10
  import './chunk-OXMUPNMH.js';
11
- import './chunk-RE4QQM4Q.js';
11
+ import './chunk-GFOAMXSO.js';
12
12
  import './chunk-VVZNW5CB.js';
13
13
  import './chunk-5FJFN3IW.js';
14
14
  import './chunk-GD26FI4J.js';
15
15
  import './chunk-OM2GRPDH.js';
16
- export { useIsBlog, useIsBrands, useIsCart, useIsCustomer, useIsHome, useIsProduct, useIsSearch, useRouteId } from './chunk-GLE6TNJ3.js';
16
+ export { useIsBlog, useIsBrands, useIsCart, useIsCustomer, useIsHome, useIsProduct, useIsSearch, useRouteId } from './chunk-HZIQK63A.js';
17
17
  export { RouteId } from './chunk-OUW6WESU.js';
18
18
  import './chunk-BK5TBUGG.js';
19
19
  import './chunk-HI5V5X3S.js';
20
- import './chunk-4ZYJDSYQ.js';
21
- import './chunk-NHJ5U6WK.js';
20
+ import './chunk-U2UDXLAE.js';
21
+ import './chunk-6NT6RC2H.js';
22
22
  export { HookName } from './chunk-MVT5AF2A.js';
23
23
  import './chunk-Z653O7MX.js';
24
24
  import './chunk-ZCH7W7DZ.js';
@@ -29,15 +29,16 @@ import './chunk-7V36I5GT.js';
29
29
  import './chunk-6WI7R2BD.js';
30
30
  import './chunk-JGVEGQHJ.js';
31
31
  import './chunk-OAMIDZKW.js';
32
- import './chunk-SGET4UYI.js';
32
+ import './chunk-2VRMQZXF.js';
33
33
  import './chunk-OQIIJRAS.js';
34
34
  import './chunk-V2ZDTY6H.js';
35
- import './chunk-FN2GQ2B5.js';
35
+ import './chunk-5GCOUJ7T.js';
36
36
  import './chunk-5XDPAKF5.js';
37
37
  import './chunk-GCPEMNSU.js';
38
- import './chunk-5LP2K2J7.js';
38
+ import './chunk-S7QZUBXM.js';
39
+ import './chunk-Z5M4YYWT.js';
39
40
  import './chunk-TYNZ5B2B.js';
40
- import './chunk-JAKLD546.js';
41
+ import './chunk-JUKKXGHR.js';
41
42
  import './chunk-AXW67SY7.js';
42
43
  import './chunk-BYMOPN2S.js';
43
44
  import './chunk-SKLEJJ6M.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Component.tsx","../src/components/useComponent.ts","../src/components/defineComponent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASO,SAAS,UAAU,EAAE,IAAA,EAAM,WAAW,IAAA,EAAM,GAAG,OAAM,EAAoC;AAC9F,EAAA,MAAM,iBAAA,GAAoB,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AAE/C,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,aAAA,EAAe;AAC1C,MAAA,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,CAAA,YAAA,EAAe,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAAA,IACzE;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,uBAAO,GAAA,CAAC,iBAAA,EAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AACvC;;;ACjBO,SAAS,aAA0C,IAAA,EAAuC;AAC/F,EAAA,OAAO,QAAA,CAAS,QAAW,IAAI,CAAA;AACjC;AAEO,SAAS,qBACd,IAAA,EACyB;AACzB,EAAA,OAAO,QAAA,CAAS,YAAe,IAAI,CAAA;AACrC;;;ACFO,SAAS,gBACd,MAAA,EACkB;AAClB,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,SAAS,CAAA;AAAA,EACjD,CAAA,MAAO;AACL,IAAA,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,SAAS,CAAA;AAAA,EACjD;AAEA,EAAA,OAAO,MAAA,CAAO,SAAA;AAChB;AAEO,SAAS,mBAAmB,UAAA,EAAiD;AAClF,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC1D,IAAA,QAAA,CAAS,QAAA,CAAS,MAAM,SAAS,CAAA;AAAA,EACnC;AACF;AAEO,SAAS,mBAAmB,UAAA,EAAiD;AAClF,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC1D,IAAA,QAAA,CAAS,QAAA,CAAS,MAAM,SAAS,CAAA;AAAA,EACnC;AACF","file":"index.js","sourcesContent":["import React from 'react';\nimport { registry } from './ComponentRegistry';\n\nexport interface ComponentProps {\n name: string;\n fallback?: React.ReactNode;\n [key: string]: unknown;\n}\n\nexport function Component({ name, fallback = null, ...props }: ComponentProps): React.ReactNode {\n const ResolvedComponent = registry.resolve(name);\n\n if (!ResolvedComponent) {\n if (process.env.NODE_ENV === 'development') {\n window.salla?.logger?.warn(`Component::\"${name}\" not found in registry`);\n }\n return fallback;\n }\n\n return <ResolvedComponent {...props} />;\n}\n","import { registry } from './ComponentRegistry';\nimport type { ComponentType } from '../types';\n\nexport function useComponent<P = Record<string, unknown>>(name: string): ComponentType<P> | null {\n return registry.resolve<P>(name);\n}\n\nexport function useOriginalComponent<P = Record<string, unknown>>(\n name: string\n): ComponentType<P> | null {\n return registry.getOriginal<P>(name);\n}\n","import { registry } from './ComponentRegistry';\nimport type { ComponentType } from '../types';\n\ninterface DefineComponentConfig<P = Record<string, unknown>> {\n name: string;\n component: ComponentType<P>;\n override?: boolean;\n}\n\nexport function defineComponent<P = Record<string, unknown>>(\n config: DefineComponentConfig<P>\n): ComponentType<P> {\n if (config.override) {\n registry.override(config.name, config.component);\n } else {\n registry.register(config.name, config.component);\n }\n\n return config.component;\n}\n\nexport function registerComponents(components: Record<string, ComponentType>): void {\n for (const [name, component] of Object.entries(components)) {\n registry.register(name, component);\n }\n}\n\nexport function overrideComponents(components: Record<string, ComponentType>): void {\n for (const [name, component] of Object.entries(components)) {\n registry.override(name, component);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/components/Component.tsx","../src/components/useComponent.ts","../src/components/defineComponent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASO,SAAS,UAAU,EAAE,IAAA,EAAM,WAAW,IAAA,EAAM,GAAG,OAAM,EAAoC;AAC9F,EAAA,MAAM,iBAAA,GAAoB,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AAE/C,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,aAAA,EAAe;AAC1C,MAAA,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,CAAA,YAAA,EAAe,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAAA,IACzE;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,uBAAO,GAAA,CAAC,iBAAA,EAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AACvC;;;ACjBO,SAAS,aAA0C,IAAA,EAAuC;AAC/F,EAAA,OAAO,QAAA,CAAS,QAAW,IAAI,CAAA;AACjC;AAEO,SAAS,qBACd,IAAA,EACyB;AACzB,EAAA,OAAO,QAAA,CAAS,YAAe,IAAI,CAAA;AACrC;;;ACFO,SAAS,gBACd,MAAA,EACkB;AAClB,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,SAAS,CAAA;AAAA,EACjD,CAAA,MAAO;AACL,IAAA,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,SAAS,CAAA;AAAA,EACjD;AAEA,EAAA,OAAO,MAAA,CAAO,SAAA;AAChB;AAEO,SAAS,mBAAmB,UAAA,EAAiD;AAClF,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC1D,IAAA,QAAA,CAAS,QAAA,CAAS,MAAM,SAAS,CAAA;AAAA,EACnC;AACF;AAEO,SAAS,mBAAmB,UAAA,EAAiD;AAClF,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC1D,IAAA,QAAA,CAAS,QAAA,CAAS,MAAM,SAAS,CAAA;AAAA,EACnC;AACF","file":"index.js","sourcesContent":["import React from 'react';\nimport { registry } from './ComponentRegistry';\n\nexport interface ComponentProps {\n name: string;\n fallback?: React.ReactNode;\n [key: string]: unknown;\n}\n\nexport function Component({ name, fallback = null, ...props }: ComponentProps): React.ReactNode {\n const ResolvedComponent = registry.resolve(name);\n\n if (!ResolvedComponent) {\n if (process.env.NODE_ENV === 'development') {\n window.salla?.logger?.warn(`Component::\"${name}\" not found in registry`);\n }\n return fallback;\n }\n\n return <ResolvedComponent {...props} />;\n}\n","import { registry } from './ComponentRegistry';\nimport type { ComponentType } from '../types';\n\nexport function useComponent<P = Record<string, unknown>>(name: string): ComponentType<P> | null {\n return registry.resolve<P>(name);\n}\n\nexport function useOriginalComponent<P = Record<string, unknown>>(\n name: string\n): ComponentType<P> | null {\n return registry.getOriginal<P>(name);\n}\n","import { registry } from './ComponentRegistry';\nimport type { ComponentType } from '../types';\n\ninterface DefineComponentConfig<P = Record<string, unknown>> {\n name: string;\n component: ComponentType<P>;\n override?: boolean;\n}\n\nexport function defineComponent<P = Record<string, unknown>>(\n config: DefineComponentConfig<P>\n): ComponentType<P> {\n if (config.override) {\n registry.override(config.name, config.component);\n } else {\n registry.register(config.name, config.component);\n }\n\n return config.component;\n}\n\nexport function registerComponents(components: Record<string, ComponentType>): void {\n for (const [name, component] of Object.entries(components)) {\n registry.register(name, component);\n }\n}\n\nexport function overrideComponents(components: Record<string, ComponentType>): void {\n for (const [name, component] of Object.entries(components)) {\n registry.override(name, component);\n }\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { NextJsLinkAdapter } from './chunk-HTGBIA7K.js';
2
- import { NavigationProvider, defaultNavigate } from './chunk-GLE6TNJ3.js';
2
+ import { NavigationProvider, defaultNavigate } from './chunk-HZIQK63A.js';
3
3
  import './chunk-OUW6WESU.js';
4
- import './chunk-5LP2K2J7.js';
4
+ import './chunk-S7QZUBXM.js';
5
+ import './chunk-Z5M4YYWT.js';
5
6
  import { LinkProvider } from './chunk-BYMOPN2S.js';
6
7
  import './chunk-2TLIULJZ.js';
7
8
  import './chunk-GYXUYHKO.js';
@@ -17,5 +18,5 @@ function NavigationSetup({ children }) {
17
18
  }
18
19
 
19
20
  export { NavigationSetup };
20
- //# sourceMappingURL=navigation-4STP3ZMK.js.map
21
- //# sourceMappingURL=navigation-4STP3ZMK.js.map
21
+ //# sourceMappingURL=navigation-ATD4DRST.js.map
22
+ //# sourceMappingURL=navigation-ATD4DRST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nextjs/navigation.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AASO,SAAS,eAAA,CAAgB,EAAE,QAAA,EAAS,EAA4B;AACrE,EAAA,uBACE,GAAA,CAAC,sBAAmB,QAAA,EAAU,eAAA,EAC5B,8BAAC,YAAA,EAAA,EAAa,OAAA,EAAS,iBAAA,EAAoB,QAAA,EAAS,CAAA,EACtD,CAAA;AAEJ","file":"navigation-ATD4DRST.js","sourcesContent":["import { NavigationProvider, defaultNavigate } from '../providers/NavigationProvider';\nimport { LinkProvider } from '../providers/LinkProvider';\nimport { NextJsLinkAdapter } from './link';\nimport type { ReactNode } from 'react';\n\n/**\n * Next.js navigation setup - wraps children with NavigationProvider and LinkProvider.\n * Called by TwilightProvider when client.framework === 'nextjs'.\n */\nexport function NavigationSetup({ children }: { children: ReactNode }) {\n return (\n <NavigationProvider navigate={defaultNavigate}>\n <LinkProvider adapter={NextJsLinkAdapter}>{children}</LinkProvider>\n </NavigationProvider>\n );\n}\n"]}
@@ -1,7 +1,8 @@
1
- export { NavigationSetup, TanStackNavigationProvider } from './chunk-47BPYZJF.js';
2
- import './chunk-GLE6TNJ3.js';
1
+ export { NavigationSetup, TanStackNavigationProvider } from './chunk-OOQTZ7N7.js';
2
+ import './chunk-HZIQK63A.js';
3
3
  import './chunk-OUW6WESU.js';
4
- import './chunk-5LP2K2J7.js';
4
+ import './chunk-S7QZUBXM.js';
5
+ import './chunk-Z5M4YYWT.js';
5
6
  import './chunk-BYMOPN2S.js';
6
7
  import './chunk-2TLIULJZ.js';
7
8
  import './chunk-GYXUYHKO.js';
@@ -10,5 +11,5 @@ import './chunk-7VNVCHID.js';
10
11
  import './chunk-T72DAX7R.js';
11
12
  import './chunk-DF6FBKDN.js';
12
13
  import './chunk-DGUM43GV.js';
13
- //# sourceMappingURL=navigation-6Y2SKWH3.js.map
14
- //# sourceMappingURL=navigation-6Y2SKWH3.js.map
14
+ //# sourceMappingURL=navigation-XCZMJSNS.js.map
15
+ //# sourceMappingURL=navigation-XCZMJSNS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"navigation-6Y2SKWH3.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"navigation-XCZMJSNS.js"}
@@ -1,23 +1,23 @@
1
- import { product } from './chunk-TNUK62YF.js';
2
- import './chunk-R2FXTCRK.js';
1
+ import { product } from './chunk-CGABIBZZ.js';
2
+ import './chunk-QLFRNPPF.js';
3
3
  import './chunk-MVNWWZWQ.js';
4
- import './chunk-GHLPK63Q.js';
5
- import './chunk-6PK4GITC.js';
4
+ import './chunk-XCS62X6X.js';
5
+ import './chunk-5U7LPEFE.js';
6
6
  import './chunk-KQEBYXYB.js';
7
7
  import './chunk-JYV25VNZ.js';
8
- import './chunk-MHLKLADI.js';
8
+ import './chunk-4LR7N76Q.js';
9
9
  import './chunk-OXMUPNMH.js';
10
- import './chunk-RE4QQM4Q.js';
10
+ import './chunk-GFOAMXSO.js';
11
11
  import './chunk-VVZNW5CB.js';
12
12
  import './chunk-5FJFN3IW.js';
13
13
  import './chunk-GD26FI4J.js';
14
14
  import './chunk-OM2GRPDH.js';
15
- import { useLocation, useNavigate } from './chunk-GLE6TNJ3.js';
15
+ import { useLocation, useNavigate } from './chunk-HZIQK63A.js';
16
16
  import './chunk-OUW6WESU.js';
17
17
  import './chunk-BK5TBUGG.js';
18
18
  import './chunk-HI5V5X3S.js';
19
- import './chunk-4ZYJDSYQ.js';
20
- import './chunk-NHJ5U6WK.js';
19
+ import './chunk-U2UDXLAE.js';
20
+ import './chunk-6NT6RC2H.js';
21
21
  import './chunk-MVT5AF2A.js';
22
22
  import './chunk-Z653O7MX.js';
23
23
  import './chunk-ZCH7W7DZ.js';
@@ -28,15 +28,16 @@ import './chunk-7V36I5GT.js';
28
28
  import './chunk-6WI7R2BD.js';
29
29
  import './chunk-JGVEGQHJ.js';
30
30
  import './chunk-OAMIDZKW.js';
31
- import './chunk-SGET4UYI.js';
31
+ import './chunk-2VRMQZXF.js';
32
32
  import './chunk-OQIIJRAS.js';
33
33
  import './chunk-V2ZDTY6H.js';
34
- import './chunk-FN2GQ2B5.js';
34
+ import './chunk-5GCOUJ7T.js';
35
35
  import { HookSlot } from './chunk-5XDPAKF5.js';
36
36
  import './chunk-GCPEMNSU.js';
37
- import './chunk-5LP2K2J7.js';
37
+ import './chunk-S7QZUBXM.js';
38
+ import './chunk-Z5M4YYWT.js';
38
39
  import { useTranslation } from './chunk-TYNZ5B2B.js';
39
- import { LazyErrorPage } from './chunk-JAKLD546.js';
40
+ import { LazyErrorPage } from './chunk-JUKKXGHR.js';
40
41
  import './chunk-AXW67SY7.js';
41
42
  import './chunk-BYMOPN2S.js';
42
43
  import './chunk-SKLEJJ6M.js';
@@ -153,5 +154,5 @@ function NotFoundPage(props = {}) {
153
154
  }
154
155
 
155
156
  export { NotFoundPage };
156
- //# sourceMappingURL=not-found-LLCXGKVS.js.map
157
- //# sourceMappingURL=not-found-LLCXGKVS.js.map
157
+ //# sourceMappingURL=not-found-ZE4Y7RLW.js.map
158
+ //# sourceMappingURL=not-found-ZE4Y7RLW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/routes/product-short-link.ts","../src/routes/not-found.tsx"],"names":[],"mappings":"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","file":"not-found-ZE4Y7RLW.js","sourcesContent":["import { useEffect, useState } from 'react';\nimport { product } from '../api/product';\nimport { isLocale } from '../providers/locale-constants';\nimport { useLocation, useNavigate } from '../providers/NavigationProvider';\n\n/** Short codes are 5-10 letters/digits (e.g. `lvXvzln`). */\nconst SHORT_CODE = /^[A-Za-z0-9]{5,10}$/;\n\n/**\n * The product short code in a path shaped `/{locale}/{code}` or `/{code}` (the\n * store base is already stripped from the router's location), plus the locale\n * segment to keep when redirecting. `null` for any other path.\n */\nexport function parseShortLinkPath(pathname: string): { code: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n if (segments.length === 2 && isLocale(segments[0]) && SHORT_CODE.test(segments[1])) {\n return { code: segments[1], locale: segments[0] };\n }\n if (segments.length === 1 && !isLocale(segments[0]) && SHORT_CODE.test(segments[0])) {\n return { code: segments[0] };\n }\n return null;\n}\n\n/** A product URL in the stores' \"new URLs\" format: `{sku}-{name}`, or `p{id}-{name}` without a SKU. */\nconst PRODUCT_KEY = /^([0-9A-Za-z]+)-./;\n\n/** The `{sku}` or `p{id}` key of `/{locale}/{sku}-{name}` or `/{sku}-{name}`, with that locale. */\nexport function parseProductKeyPath(pathname: string): { key: string; locale?: string } | null {\n const segments = pathname.split('/').filter(Boolean);\n const hasLocale = segments.length === 2 && isLocale(segments[0]);\n if (!hasLocale && (segments.length !== 1 || isLocale(segments[0]))) return null;\n const key = segments[segments.length - 1].match(PRODUCT_KEY)?.[1];\n if (!key) return null;\n return hasLocale ? { key, locale: segments[0] } : { key };\n}\n\nfunction productKeyOf(url: string | undefined): string | undefined {\n try {\n const last = new URL(url ?? '').pathname.split('/').filter(Boolean).pop() ?? '';\n return last.match(PRODUCT_KEY)?.[1];\n } catch {\n return undefined;\n }\n}\n\n/** Like Laravel: `p{id}` is the id; anything else is a SKU, which only search can find. */\nasync function findByProductKey(key: string): Promise<number | null> {\n const id = key.match(/^p(\\d+)$/)?.[1];\n if (id) return Number(id);\n const { items } = await product.list({ source: 'search', keyword: key, perPage: 50 });\n const found = items.find((item) => productKeyOf(item.url) === key);\n return found ? Number(found.id) : null;\n}\n\n/** The SEO slug from a product URL (`…/{slug}/p{id}`), `-` when it has none. */\nexport function slugFromProductUrl(url: string | undefined): string {\n try {\n const segments = new URL(url ?? '').pathname.split('/').filter(Boolean);\n const last = segments[segments.length - 1] ?? '';\n return /^p\\d+$/.test(last) && segments.length > 1 ? segments[segments.length - 2] : '-';\n } catch {\n return '-';\n }\n}\n\n/**\n * Resolves a product URL that matched no route, a short link (`/ar/lvXvzln`) or\n * a \"new URLs\" one (`/ar/1213asa-chocolate`), and replaces the URL with the\n * product's page. Returns `true` while a lookup is in flight (so the 404 isn't\n * flashed); settles to `false` when the path is neither or doesn't resolve.\n */\nexport function useProductShortLink(): boolean {\n const { pathname } = useLocation();\n const navigate = useNavigate();\n const shortLink = parseShortLinkPath(pathname);\n const productKey = parseProductKeyPath(pathname);\n const lookup = shortLink?.code ?? productKey?.key;\n const locale = shortLink?.locale ?? productKey?.locale;\n const isShortLink = !!shortLink;\n const [failed, setFailed] = useState<string | null>(null);\n\n useEffect(() => {\n if (!lookup) return;\n let cancelled = false;\n const productPath = isShortLink\n ? product\n .find(lookup)\n .then((found) => (found?.id ? `${slugFromProductUrl(found.url)}/p${found.id}` : null))\n : findByProductKey(lookup).then((id) => (id ? `-/p${id}` : null));\n productPath\n .then((path) => {\n if (cancelled) return;\n if (!path) return setFailed(lookup);\n navigate(`${locale ? `/${locale}` : ''}/${path}`, { replace: true });\n })\n .catch(() => !cancelled && setFailed(lookup));\n return () => {\n cancelled = true;\n };\n }, [lookup, isShortLink, locale, navigate]);\n\n return !!lookup && failed !== lookup;\n}\n","import type { ComponentType, ReactNode } from 'react';\nimport { HookSlot } from '../hooks';\nimport { useTranslation } from '../providers/I18nProvider';\nimport { ErrorPage } from '../components/common';\nimport { useProductShortLink } from './product-short-link';\n\nexport interface NotFoundPageProps {\n title?: string;\n message?: string;\n showHomeLink?: boolean;\n homeLinkText?: string;\n LinkComponent?: ComponentType<{\n to: string;\n className?: string;\n style?: React.CSSProperties;\n children: ReactNode;\n }>;\n}\n\nexport function NotFoundPage(props: NotFoundPageProps = {}) {\n const { t } = useTranslation();\n // A product short link (`/ar/lvXvzln`) or \"new URLs\" link (`/ar/1213asa-name`) matches no route; resolve it instead of 404ing.\n const resolvingShortLink = useProductShortLink();\n\n const {\n title = t('common.errors.404') || 'Page Not Found',\n message = t('common.errors.error_occurred') ||\n 'The page you are looking for does not exist or has been moved.',\n showHomeLink = true,\n homeLinkText = t('common.elements.back_home') || 'Back to Home',\n LinkComponent,\n } = props;\n\n if (resolvingShortLink) return null;\n\n return (\n <ErrorPage\n code={404}\n title={title}\n message={message}\n showAction={showHomeLink}\n actionText={homeLinkText}\n LinkComponent={LinkComponent}\n >\n <HookSlot name=\"notfound:start\" />\n <HookSlot name=\"notfound:content\" />\n <HookSlot name=\"notfound:end\" />\n </ErrorPage>\n );\n}\n"]}