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

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 (231) hide show
  1. package/dist/{AddToCartForm-7C5NJOT3.js → AddToCartForm-BY24SGTR.js} +3 -3
  2. package/dist/{AddToCartForm-7C5NJOT3.js.map → AddToCartForm-BY24SGTR.js.map} +1 -1
  3. package/dist/{BlogAuthorPage-T5AQINIT.js → BlogAuthorPage-UAQ6266M.js} +17 -17
  4. package/dist/{BlogAuthorPage-T5AQINIT.js.map → BlogAuthorPage-UAQ6266M.js.map} +1 -1
  5. package/dist/{BlogCategoryPage-NNDOLC3G.js → BlogCategoryPage-UX5OZZRZ.js} +17 -17
  6. package/dist/{BlogCategoryPage-NNDOLC3G.js.map → BlogCategoryPage-UX5OZZRZ.js.map} +1 -1
  7. package/dist/{BlogPage-F52ASL2W.js → BlogPage-AAITQ3UZ.js} +15 -15
  8. package/dist/{BlogPage-F52ASL2W.js.map → BlogPage-AAITQ3UZ.js.map} +1 -1
  9. package/dist/{BlogSinglePage-33OTX2SH.js → BlogSinglePage-R7VG3WNP.js} +15 -15
  10. package/dist/{BlogSinglePage-33OTX2SH.js.map → BlogSinglePage-R7VG3WNP.js.map} +1 -1
  11. package/dist/{BlogTagPage-DOTS5CLM.js → BlogTagPage-YCJL3FNS.js} +17 -17
  12. package/dist/{BlogTagPage-DOTS5CLM.js.map → BlogTagPage-YCJL3FNS.js.map} +1 -1
  13. package/dist/{BrandsPage-R5DRBHNZ.js → BrandsPage-4M4J7YH5.js} +16 -16
  14. package/dist/{BrandsPage-R5DRBHNZ.js.map → BrandsPage-4M4J7YH5.js.map} +1 -1
  15. package/dist/{Breadcrumb-4YXIEAFY.js → Breadcrumb-WB5NXLLA.js} +15 -15
  16. package/dist/{Breadcrumb-4YXIEAFY.js.map → Breadcrumb-WB5NXLLA.js.map} +1 -1
  17. package/dist/{CartItem-KMQJU6BO.js → CartItem-UWCMEGW7.js} +15 -15
  18. package/dist/{CartItem-KMQJU6BO.js.map → CartItem-UWCMEGW7.js.map} +1 -1
  19. package/dist/{CartSummary-EW6Q6JS7.js → CartSummary-TK55II7A.js} +15 -15
  20. package/dist/{CartSummary-EW6Q6JS7.js.map → CartSummary-TK55II7A.js.map} +1 -1
  21. package/dist/{Copyright-AVJL3KJR.js → Copyright-PHLEOCO4.js} +3 -3
  22. package/dist/{Copyright-AVJL3KJR.js.map → Copyright-PHLEOCO4.js.map} +1 -1
  23. package/dist/{CustomerLayout-5343GESW.js → CustomerLayout-BCTFI56B.js} +15 -15
  24. package/dist/{CustomerLayout-5343GESW.js.map → CustomerLayout-BCTFI56B.js.map} +1 -1
  25. package/dist/{Footer-ODWJ3HQH.js → Footer-AXIXSATN.js} +4 -4
  26. package/dist/{Footer-ODWJ3HQH.js.map → Footer-AXIXSATN.js.map} +1 -1
  27. package/dist/{Header-VQJILH5R.js → Header-5GD53HC5.js} +8 -8
  28. package/dist/{Header-VQJILH5R.js.map → Header-5GD53HC5.js.map} +1 -1
  29. package/dist/{LiveEditorBar-WSASAFCL.js → LiveEditorBar-IQLFFBHE.js} +38 -11
  30. package/dist/LiveEditorBar-IQLFFBHE.js.map +1 -0
  31. package/dist/{LoyaltyPage-HDEWDV6M.js → LoyaltyPage-MBYLZF7B.js} +15 -15
  32. package/dist/{LoyaltyPage-HDEWDV6M.js.map → LoyaltyPage-MBYLZF7B.js.map} +1 -1
  33. package/dist/{LoyaltyPointsPage-5ZML2PHB.js → LoyaltyPointsPage-SFAL3TOO.js} +6 -6
  34. package/dist/{LoyaltyPointsPage-5ZML2PHB.js.map → LoyaltyPointsPage-SFAL3TOO.js.map} +1 -1
  35. package/dist/{MainMenu-YTGZSTRC.js → MainMenu-VEZTUNCZ.js} +5 -5
  36. package/dist/{MainMenu-YTGZSTRC.js.map → MainMenu-VEZTUNCZ.js.map} +1 -1
  37. package/dist/{MasterLayout-ITSFTBZD.js → MasterLayout-TFHNWIRE.js} +15 -15
  38. package/dist/{MasterLayout-ITSFTBZD.js.map → MasterLayout-TFHNWIRE.js.map} +1 -1
  39. package/dist/{MobileMenu-FJTSMNGS.js → MobileMenu-JWD22FVU.js} +16 -16
  40. package/dist/{MobileMenu-FJTSMNGS.js.map → MobileMenu-JWD22FVU.js.map} +1 -1
  41. package/dist/{NotificationsPage-EVQ7KTKD.js → NotificationsPage-QVE7AOCV.js} +15 -15
  42. package/dist/{NotificationsPage-EVQ7KTKD.js.map → NotificationsPage-QVE7AOCV.js.map} +1 -1
  43. package/dist/{OrderSinglePage-IJQ2BW6N.js → OrderSinglePage-QSNZVQ22.js} +16 -16
  44. package/dist/{OrderSinglePage-IJQ2BW6N.js.map → OrderSinglePage-QSNZVQ22.js.map} +1 -1
  45. package/dist/{OrdersPage-5PW3D7NP.js → OrdersPage-WGIHZJNJ.js} +15 -15
  46. package/dist/{OrdersPage-5PW3D7NP.js.map → OrdersPage-WGIHZJNJ.js.map} +1 -1
  47. package/dist/{PageSingle-DQA45NP5.js → PageSingle-3HXGOYLZ.js} +3 -3
  48. package/dist/{PageSingle-DQA45NP5.js.map → PageSingle-3HXGOYLZ.js.map} +1 -1
  49. package/dist/{ProductDetails-IAJZJOPE.js → ProductDetails-ALVRCBP4.js} +4 -4
  50. package/dist/{ProductDetails-IAJZJOPE.js.map → ProductDetails-ALVRCBP4.js.map} +1 -1
  51. package/dist/{ProfilePage-7SEMN3OY.js → ProfilePage-AVJYAQOG.js} +15 -15
  52. package/dist/{ProfilePage-7SEMN3OY.js.map → ProfilePage-AVJYAQOG.js.map} +1 -1
  53. package/dist/{ReviewsPage-HEC24XWB.js → ReviewsPage-ULGQMLGH.js} +3 -3
  54. package/dist/{ReviewsPage-HEC24XWB.js.map → ReviewsPage-ULGQMLGH.js.map} +1 -1
  55. package/dist/{SeoCartWidget-VZ2VAKQ6.js → SeoCartWidget-5WY6AV2F.js} +15 -15
  56. package/dist/{SeoCartWidget-VZ2VAKQ6.js.map → SeoCartWidget-5WY6AV2F.js.map} +1 -1
  57. package/dist/{SettingsPage-7N2V7IXZ.js → SettingsPage-ZHTSKKBD.js} +15 -15
  58. package/dist/{SettingsPage-7N2V7IXZ.js.map → SettingsPage-ZHTSKKBD.js.map} +1 -1
  59. package/dist/{StoreClosedNotification-XMX4T26T.js → StoreClosedNotification-5V7QGKMC.js} +16 -16
  60. package/dist/{StoreClosedNotification-XMX4T26T.js.map → StoreClosedNotification-5V7QGKMC.js.map} +1 -1
  61. package/dist/{TestimonialsPage-TD7G4REM.js → TestimonialsPage-7YS7QRTY.js} +3 -3
  62. package/dist/{TestimonialsPage-TD7G4REM.js.map → TestimonialsPage-7YS7QRTY.js.map} +1 -1
  63. package/dist/{ThankYouPage-23Y5VNJL.js → ThankYouPage-PLCUI7LC.js} +15 -15
  64. package/dist/{ThankYouPage-23Y5VNJL.js.map → ThankYouPage-PLCUI7LC.js.map} +1 -1
  65. package/dist/{WalletPage-QOEE4C73.js → WalletPage-C6ZFJTSA.js} +16 -16
  66. package/dist/{WalletPage-QOEE4C73.js.map → WalletPage-C6ZFJTSA.js.map} +1 -1
  67. package/dist/{WishlistPage-YTN4SYZA.js → WishlistPage-3CIW7AIZ.js} +17 -17
  68. package/dist/{WishlistPage-YTN4SYZA.js.map → WishlistPage-3CIW7AIZ.js.map} +1 -1
  69. package/dist/api/advertisement.js +2 -2
  70. package/dist/api/apps.js +2 -2
  71. package/dist/api/blog.js +3 -3
  72. package/dist/api/brands.js +3 -3
  73. package/dist/api/cart.js +3 -3
  74. package/dist/api/category.js +3 -3
  75. package/dist/api/client.js +1 -1
  76. package/dist/api/home.js +2 -2
  77. package/dist/api/loyalty.js +3 -3
  78. package/dist/api/menu.js +2 -2
  79. package/dist/api/notification.js +2 -2
  80. package/dist/api/order.js +3 -3
  81. package/dist/api/page.js +3 -3
  82. package/dist/api/product.js +3 -3
  83. package/dist/api/profile.js +1 -1
  84. package/dist/api/store.js +2 -2
  85. package/dist/api/translations.js +2 -2
  86. package/dist/api/user.js +2 -2
  87. package/dist/api/wallet.js +2 -2
  88. package/dist/api/wishlist.js +4 -4
  89. package/dist/{chunk-IFPTZL77.js → chunk-47BPYZJF.js} +3 -3
  90. package/dist/{chunk-IFPTZL77.js.map → chunk-47BPYZJF.js.map} +1 -1
  91. package/dist/{chunk-N4M5Y3CH.js → chunk-4C76FZV4.js} +4 -4
  92. package/dist/{chunk-N4M5Y3CH.js.map → chunk-4C76FZV4.js.map} +1 -1
  93. package/dist/{chunk-ZHW5KZJM.js → chunk-4VYKXIYA.js} +12 -8
  94. package/dist/chunk-4VYKXIYA.js.map +1 -0
  95. package/dist/{chunk-E5JIVIBY.js → chunk-4ZYJDSYQ.js} +3 -3
  96. package/dist/{chunk-E5JIVIBY.js.map → chunk-4ZYJDSYQ.js.map} +1 -1
  97. package/dist/{chunk-XO4S6BKT.js → chunk-53IXPTVY.js} +4 -4
  98. package/dist/{chunk-XO4S6BKT.js.map → chunk-53IXPTVY.js.map} +1 -1
  99. package/dist/{chunk-WNV73ZFT.js → chunk-5LP2K2J7.js} +3 -3
  100. package/dist/{chunk-WNV73ZFT.js.map → chunk-5LP2K2J7.js.map} +1 -1
  101. package/dist/{chunk-AS4A6I5D.js → chunk-5SJRY6P3.js} +4 -4
  102. package/dist/{chunk-AS4A6I5D.js.map → chunk-5SJRY6P3.js.map} +1 -1
  103. package/dist/{chunk-I44YRS6T.js → chunk-6PK4GITC.js} +3 -3
  104. package/dist/{chunk-I44YRS6T.js.map → chunk-6PK4GITC.js.map} +1 -1
  105. package/dist/{chunk-RMKB3MJS.js → chunk-75STIRBZ.js} +4 -4
  106. package/dist/{chunk-RMKB3MJS.js.map → chunk-75STIRBZ.js.map} +1 -1
  107. package/dist/{chunk-6MF7FWER.js → chunk-A6AAG7U6.js} +4 -4
  108. package/dist/{chunk-6MF7FWER.js.map → chunk-A6AAG7U6.js.map} +1 -1
  109. package/dist/{chunk-Z3MSALIT.js → chunk-A6IKHCIA.js} +4 -4
  110. package/dist/{chunk-Z3MSALIT.js.map → chunk-A6IKHCIA.js.map} +1 -1
  111. package/dist/{chunk-XAG4TLX4.js → chunk-ANLG2WBG.js} +4 -4
  112. package/dist/{chunk-XAG4TLX4.js.map → chunk-ANLG2WBG.js.map} +1 -1
  113. package/dist/{chunk-NPSABKKR.js → chunk-BWTUGXHI.js} +5 -5
  114. package/dist/{chunk-NPSABKKR.js.map → chunk-BWTUGXHI.js.map} +1 -1
  115. package/dist/{chunk-DRV4QRIS.js → chunk-CKH5HDHS.js} +4 -4
  116. package/dist/{chunk-DRV4QRIS.js.map → chunk-CKH5HDHS.js.map} +1 -1
  117. package/dist/{chunk-5EKTGKJY.js → chunk-FN2GQ2B5.js} +3 -3
  118. package/dist/{chunk-5EKTGKJY.js.map → chunk-FN2GQ2B5.js.map} +1 -1
  119. package/dist/{chunk-7NOGCBED.js → chunk-GHLPK63Q.js} +7 -7
  120. package/dist/{chunk-7NOGCBED.js.map → chunk-GHLPK63Q.js.map} +1 -1
  121. package/dist/{chunk-J52AQPKU.js → chunk-GLE6TNJ3.js} +3 -3
  122. package/dist/{chunk-J52AQPKU.js.map → chunk-GLE6TNJ3.js.map} +1 -1
  123. package/dist/{chunk-PNAWYJP2.js → chunk-HFCZIPYO.js} +3 -3
  124. package/dist/{chunk-PNAWYJP2.js.map → chunk-HFCZIPYO.js.map} +1 -1
  125. package/dist/{chunk-PCGKPANV.js → chunk-IGGIH6GL.js} +3 -3
  126. package/dist/{chunk-PCGKPANV.js.map → chunk-IGGIH6GL.js.map} +1 -1
  127. package/dist/{chunk-2QJXTJCF.js → chunk-IM5NMPNU.js} +7 -7
  128. package/dist/{chunk-2QJXTJCF.js.map → chunk-IM5NMPNU.js.map} +1 -1
  129. package/dist/{chunk-VEY7PJK7.js → chunk-JAKLD546.js} +3 -3
  130. package/dist/{chunk-VEY7PJK7.js.map → chunk-JAKLD546.js.map} +1 -1
  131. package/dist/{chunk-TLH4C6H4.js → chunk-JL7MKSCD.js} +10 -10
  132. package/dist/{chunk-TLH4C6H4.js.map → chunk-JL7MKSCD.js.map} +1 -1
  133. package/dist/{chunk-R2LXUFTW.js → chunk-KDV6WZYJ.js} +3 -3
  134. package/dist/{chunk-R2LXUFTW.js.map → chunk-KDV6WZYJ.js.map} +1 -1
  135. package/dist/{chunk-CDLT7UJB.js → chunk-KEOCLT62.js} +3 -3
  136. package/dist/{chunk-CDLT7UJB.js.map → chunk-KEOCLT62.js.map} +1 -1
  137. package/dist/{chunk-N7EFUGP4.js → chunk-KKOFHYTI.js} +3 -3
  138. package/dist/{chunk-N7EFUGP4.js.map → chunk-KKOFHYTI.js.map} +1 -1
  139. package/dist/{chunk-4HV2MRZD.js → chunk-LWPIGNCW.js} +4 -4
  140. package/dist/{chunk-4HV2MRZD.js.map → chunk-LWPIGNCW.js.map} +1 -1
  141. package/dist/{chunk-EFMAJAIS.js → chunk-MHLKLADI.js} +3 -3
  142. package/dist/{chunk-EFMAJAIS.js.map → chunk-MHLKLADI.js.map} +1 -1
  143. package/dist/{chunk-PDIFXQDX.js → chunk-MVNWWZWQ.js} +23 -4
  144. package/dist/chunk-MVNWWZWQ.js.map +1 -0
  145. package/dist/{chunk-XCIMWJ7P.js → chunk-NHJ5U6WK.js} +3 -3
  146. package/dist/{chunk-XCIMWJ7P.js.map → chunk-NHJ5U6WK.js.map} +1 -1
  147. package/dist/{chunk-IIVUBE4K.js → chunk-R2FXTCRK.js} +23 -22
  148. package/dist/chunk-R2FXTCRK.js.map +1 -0
  149. package/dist/{chunk-ICKIPKCC.js → chunk-RE4QQM4Q.js} +3 -3
  150. package/dist/{chunk-ICKIPKCC.js.map → chunk-RE4QQM4Q.js.map} +1 -1
  151. package/dist/{chunk-QUDLGIR6.js → chunk-SGET4UYI.js} +3 -3
  152. package/dist/{chunk-QUDLGIR6.js.map → chunk-SGET4UYI.js.map} +1 -1
  153. package/dist/{chunk-MHBBN7O6.js → chunk-TCRZSLXH.js} +6 -6
  154. package/dist/{chunk-MHBBN7O6.js.map → chunk-TCRZSLXH.js.map} +1 -1
  155. package/dist/{chunk-JN4EYPHY.js → chunk-TNUK62YF.js} +4 -4
  156. package/dist/{chunk-JN4EYPHY.js.map → chunk-TNUK62YF.js.map} +1 -1
  157. package/dist/chunk-UE65NYZF.js +14 -0
  158. package/dist/{chunk-QTTABDVW.js.map → chunk-UE65NYZF.js.map} +1 -1
  159. package/dist/{chunk-COF5OFQX.js → chunk-UHCNMJDI.js} +7 -7
  160. package/dist/{chunk-COF5OFQX.js.map → chunk-UHCNMJDI.js.map} +1 -1
  161. package/dist/{chunk-3EYNFA67.js → chunk-WBDU6KDP.js} +4 -4
  162. package/dist/{chunk-3EYNFA67.js.map → chunk-WBDU6KDP.js.map} +1 -1
  163. package/dist/{chunk-74EGP2KE.js → chunk-WFSKX5AI.js} +3 -3
  164. package/dist/{chunk-74EGP2KE.js.map → chunk-WFSKX5AI.js.map} +1 -1
  165. package/dist/{chunk-K5TWJICH.js → chunk-XRDQAJW5.js} +3 -3
  166. package/dist/{chunk-K5TWJICH.js.map → chunk-XRDQAJW5.js.map} +1 -1
  167. package/dist/{chunk-4SKMLRLX.js → chunk-Z76YTG4W.js} +3 -3
  168. package/dist/{chunk-4SKMLRLX.js.map → chunk-Z76YTG4W.js.map} +1 -1
  169. package/dist/components/cart/index.js +1 -1
  170. package/dist/components/common/index.js +1 -1
  171. package/dist/components/drawer/index.js +13 -13
  172. package/dist/components/home/HomePageRenderer.d.ts.map +1 -1
  173. package/dist/components/home/index.js +17 -17
  174. package/dist/components/layout/index.js +4 -4
  175. package/dist/components/live-editor/LiveEditorBar.d.ts +5 -1
  176. package/dist/components/live-editor/LiveEditorBar.d.ts.map +1 -1
  177. package/dist/components/live-editor/frame.d.ts +7 -0
  178. package/dist/components/live-editor/frame.d.ts.map +1 -1
  179. package/dist/components/live-editor/index.d.ts.map +1 -1
  180. package/dist/components/product/index.js +14 -14
  181. package/dist/components/store/index.js +14 -14
  182. package/dist/dev/editor/ThemeEditor.d.ts.map +1 -1
  183. package/dist/dev/editor/index.js +108 -26
  184. package/dist/dev/editor/index.js.map +1 -1
  185. package/dist/dev/editor/live-actions.d.ts +19 -0
  186. package/dist/dev/editor/live-actions.d.ts.map +1 -0
  187. package/dist/dev/index.js +1 -1
  188. package/dist/{document-class-QZGAXN2W.js → document-class-P2H6HKXA.js} +11 -11
  189. package/dist/{document-class-QZGAXN2W.js.map → document-class-P2H6HKXA.js.map} +1 -1
  190. package/dist/hooks/index.js +13 -13
  191. package/dist/hooks/useGtm.js +13 -13
  192. package/dist/hooks/useMoney.js +13 -13
  193. package/dist/hooks/useStore.js +13 -13
  194. package/dist/hooks/useUser.js +3 -3
  195. package/dist/index.js +13 -13
  196. package/dist/{navigation-3SFDZIDH.js → navigation-4STP3ZMK.js} +4 -4
  197. package/dist/{navigation-3SFDZIDH.js.map → navigation-4STP3ZMK.js.map} +1 -1
  198. package/dist/{navigation-WAAWAQV2.js → navigation-6Y2SKWH3.js} +5 -5
  199. package/dist/{navigation-WAAWAQV2.js.map → navigation-6Y2SKWH3.js.map} +1 -1
  200. package/dist/{not-found-DJOWWOUH.js → not-found-LLCXGKVS.js} +16 -16
  201. package/dist/{not-found-DJOWWOUH.js.map → not-found-LLCXGKVS.js.map} +1 -1
  202. package/dist/providers/index.js +13 -13
  203. package/dist/routes/account/orders.js +4 -4
  204. package/dist/routes/account.js +13 -13
  205. package/dist/routes/blog.js +8 -8
  206. package/dist/routes/brands.js +4 -4
  207. package/dist/routes/cart.js +21 -21
  208. package/dist/routes/home.js +18 -18
  209. package/dist/routes/index.js +3 -3
  210. package/dist/routes/loyalty.js +5 -5
  211. package/dist/routes/page.js +4 -4
  212. package/dist/routes/product-listing.js +19 -19
  213. package/dist/routes/product.js +17 -17
  214. package/dist/routes/seo-redirects.js +3 -3
  215. package/dist/routes/testimonials.js +2 -2
  216. package/dist/routes/thank-you.js +4 -4
  217. package/dist/skeleton.js +18 -18
  218. package/dist/{store-lookup-UONSSGJ3.js → store-lookup-XKL42Y4H.js} +8 -8
  219. package/dist/{store-lookup-UONSSGJ3.js.map → store-lookup-XKL42Y4H.js.map} +1 -1
  220. package/dist/tanstack.js +11 -11
  221. package/dist/utils/index.js +2 -2
  222. package/package.json +1 -1
  223. package/tailwind/components/home/HomePageRenderer.tsx.txt +13 -6
  224. package/tailwind/components/live-editor/LiveEditorBar.tsx.txt +51 -8
  225. package/tailwind/components/live-editor/frame.ts.txt +34 -1
  226. package/tailwind/components/live-editor/index.tsx.txt +9 -7
  227. package/dist/LiveEditorBar-WSASAFCL.js.map +0 -1
  228. package/dist/chunk-IIVUBE4K.js.map +0 -1
  229. package/dist/chunk-PDIFXQDX.js.map +0 -1
  230. package/dist/chunk-QTTABDVW.js +0 -14
  231. package/dist/chunk-ZHW5KZJM.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/dev/editor/i18n.ts","../../../src/dev/editor/icons.tsx","../../../src/dev/editor/catalog.tsx","../../../src/dev/editor/AddElementDrawer.tsx","../../../src/dev/editor/lookup.ts","../../../src/dev/editor/pickers.tsx","../../../src/dev/editor/fields.tsx","../../../src/dev/editor/BuilderPanel.tsx","../../../src/dev/editor/SettingsPanel.tsx","../../../src/dev/editor/paths.ts","../../../src/dev/editor/styles.ts","../../../src/dev/editor/ThemeEditor.tsx","../../../src/dev/editor/mount.tsx"],"names":["jsx","jsxs","useId","useRef","useState","useEffect","pick","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The editor's own strings. It follows the storefront's language (the locale in\n * the framed page's path), like the dashboard editor follows the merchant's, so\n * an Arabic store gets an Arabic, right-to-left editor.\n */\n\nconst en = {\n homePage: 'Home page',\n builder: 'Page elements',\n showPanel: 'Show the side panel',\n hidePanel: 'Hide the side panel',\n settings: 'Theme settings',\n addElement: 'Add new element',\n pickFromStore: 'Choose from the store',\n change: 'Change',\n done: 'Done',\n searchStore: 'Search the store',\n searching: 'Searching…',\n noResults: 'Nothing found.',\n sampleNotice: 'Sample data: the dev store has none of these, or could not be reached.',\n sampleProducts:\n \"Sample products only show how the field works: the block fetches products from the store, so it can't display them.\",\n linkTo: 'Link to',\n typeUrl: 'URL',\n searchElements: 'Search elements',\n noMatches: 'No element matches that search.',\n close: 'Close',\n cancel: 'Cancel',\n storeLayoutHint:\n \"The home page shows the store's elements. Customize it to add, remove and reorder elements here.\",\n customize: 'Customize page elements',\n startEmpty: 'Start from an empty page',\n backToStore: \"Back to the store's elements\",\n confirm: 'Click again to confirm',\n noBlocks: 'No elements yet.',\n noFields: 'No editable fields.',\n storeBlock: 'store',\n notDeclared: \"Not declared in twilight.json, so it renders with the store's data as-is.\",\n back: 'Back',\n duplicate: 'Duplicate',\n remove: 'Remove',\n moveUp: 'Move up',\n moveDown: 'Move down',\n mobile: 'Mobile',\n desktop: 'Desktop',\n preview: 'Preview',\n saving: 'Saving…',\n saved: 'Saved',\n saveError: 'Could not save',\n savedTo: 'Changes save to',\n openStorefront: 'Open the storefront in a new tab',\n reload: 'Reload the preview',\n notHome: 'You are not on the home page.',\n goHome: 'Go to it',\n previewOff: 'Preview is off: turn it on to see your changes.',\n resetSettings: 'Reset settings to twilight.json defaults',\n noSettings: 'twilight.json declares no settings.',\n waitingForStore: 'Loading the home page…',\n items: (n: number) => `${n} item${n === 1 ? '' : 's'}`,\n item: 'Item',\n language: 'Language',\n outOfRange: (min?: number, max?: number) =>\n min !== undefined && max !== undefined\n ? `Between ${min} and ${max}.`\n : min !== undefined\n ? `At least ${min}.`\n : `At most ${max}.`,\n uploading: 'Uploading…',\n uploadFailed: 'Could not upload that image.',\n addItem: (label: string) => `Add ${label}`,\n minItems: (n: number) => `Needs at least ${n}.`,\n chooseImage: 'Choose an image from your computer',\n imageTooLarge: 'That image is over 5 MB. Use a smaller one, or paste its URL.',\n};\n\nexport type EditorStrings = typeof en;\n\nconst ar: EditorStrings = {\n homePage: 'الصفحة الرئيسية',\n builder: 'عناصر الصفحة',\n showPanel: 'إظهار القائمة الجانبية',\n hidePanel: 'إخفاء القائمة الجانبية',\n settings: 'إعدادات الثيم',\n addElement: 'إضافة عنصر جديد',\n pickFromStore: 'اختيار من المتجر',\n change: 'تغيير',\n done: 'تم',\n searchStore: 'ابحث في المتجر',\n searching: 'جارٍ البحث…',\n noResults: 'لا توجد نتائج.',\n sampleNotice: 'بيانات تجريبية: لا يحتوي متجر التطوير على هذه العناصر، أو تعذّر الوصول إليه.',\n sampleProducts:\n 'المنتجات التجريبية لتجربة الحقل فقط: العنصر يجلب المنتجات من المتجر، فلن يعرضها.',\n linkTo: 'الرابط إلى',\n typeUrl: 'رابط',\n searchElements: 'ابحث في العناصر',\n noMatches: 'لا يوجد عنصر يطابق البحث.',\n close: 'إغلاق',\n cancel: 'إلغاء',\n storeLayoutHint: 'تعرض الصفحة عناصر المتجر. خصّصها لتضيف العناصر وتحذفها وترتّبها من هنا.',\n customize: 'تخصيص عناصر الصفحة',\n startEmpty: 'البدء بصفحة فارغة',\n backToStore: 'العودة إلى عناصر المتجر',\n confirm: 'اضغط مرة أخرى للتأكيد',\n noBlocks: 'لا توجد عناصر بعد.',\n noFields: 'لا توجد حقول قابلة للتعديل.',\n storeBlock: 'من المتجر',\n notDeclared: 'غير معرّف في twilight.json، لذا يُعرض ببيانات المتجر كما هي.',\n back: 'رجوع',\n duplicate: 'تكرار',\n remove: 'حذف',\n moveUp: 'تحريك لأعلى',\n moveDown: 'تحريك لأسفل',\n mobile: 'الجوال',\n desktop: 'سطح المكتب',\n preview: 'المعاينة',\n saving: 'جارٍ الحفظ…',\n saved: 'تم الحفظ',\n saveError: 'تعذّر الحفظ',\n savedTo: 'تُحفظ التغييرات في',\n openStorefront: 'فتح المتجر في تبويب جديد',\n reload: 'إعادة تحميل المعاينة',\n notHome: 'أنت لست في الصفحة الرئيسية.',\n goHome: 'الذهاب إليها',\n previewOff: 'المعاينة متوقفة: فعّلها لترى تغييراتك.',\n resetSettings: 'استعادة الإعدادات الافتراضية من twilight.json',\n noSettings: 'لا يعرّف twilight.json أي إعدادات.',\n waitingForStore: 'جارٍ تحميل الصفحة الرئيسية…',\n items: (n: number) => `${n} عنصر`,\n item: 'عنصر',\n language: 'اللغة',\n outOfRange: (min?: number, max?: number) =>\n min !== undefined && max !== undefined\n ? `بين ${min} و ${max}.`\n : min !== undefined\n ? `${min} على الأقل.`\n : `${max} على الأكثر.`,\n uploading: 'جارٍ الرفع…',\n uploadFailed: 'تعذّر رفع الصورة.',\n addItem: (label: string) => `إضافة ${label}`,\n minItems: (n: number) => `يلزم ${n} على الأقل.`,\n chooseImage: 'اختيار صورة من جهازك',\n imageTooLarge: 'حجم الصورة أكبر من 5 ميجابايت. استخدم صورة أصغر أو الصق رابطها.',\n};\n\nconst STRINGS: Record<string, EditorStrings> = { ar, en };\n\nexport function stringsFor(locale: string): EditorStrings {\n return STRINGS[locale] ?? en;\n}\n\n/** Pick a `{ ar, en }` value in the editor's language, falling back to any. */\nexport function pick(values: Record<string, string> | undefined, locale: string): string {\n if (!values) return '';\n return values[locale] ?? values.ar ?? values.en ?? Object.values(values)[0] ?? '';\n}\n","/** Stroke icons for the editor chrome, 20px on a 24 grid, `currentColor`. */\n\nimport type { ReactElement, ReactNode } from 'react';\n\nfunction Icon({ children, size = 20 }: { children: ReactNode; size?: number }): ReactElement {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.7}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\n\nexport const HomeIcon = () => (\n <Icon>\n <path d=\"M3 10.5 12 3l9 7.5\" />\n <path d=\"M5 9v10a1 1 0 0 0 1 1h4v-6h4v6h4a1 1 0 0 0 1-1V9\" />\n </Icon>\n);\n\n/** A sidebar beside the page: its bar sits at the inline start, so it flips with the direction. */\nexport const SidebarIcon = () => (\n <span style={{ display: 'flex', transform: 'scaleX(var(--te-back-flip, 1))' }}>\n <Icon>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M9 4v16\" />\n </Icon>\n </span>\n);\n\nexport const PaletteIcon = () => (\n <Icon>\n <path d=\"M12 3a9 9 0 1 0 0 18c1 0 1.5-.8 1.5-1.6 0-1.3-1-1.6-1-2.6 0-.9.7-1.3 1.6-1.3H16a5 5 0 0 0 5-5C21 6.5 17 3 12 3Z\" />\n <circle cx=\"7.5\" cy=\"11\" r=\"1\" />\n <circle cx=\"10\" cy=\"7\" r=\"1\" />\n <circle cx=\"15\" cy=\"7.5\" r=\"1\" />\n </Icon>\n);\n\nexport const PhoneIcon = () => (\n <Icon>\n <rect x=\"7\" y=\"3\" width=\"10\" height=\"18\" rx=\"2\" />\n <path d=\"M11 17.5h2\" />\n </Icon>\n);\n\nexport const DesktopIcon = () => (\n <Icon>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"12\" rx=\"2\" />\n <path d=\"M8 20h8M12 16v4\" />\n </Icon>\n);\n\nexport const PlusCircleIcon = () => (\n <Icon>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 8v8M8 12h8\" />\n </Icon>\n);\n\nexport const GripIcon = () => (\n <Icon size={16}>\n <circle cx=\"9\" cy=\"6\" r=\"1\" />\n <circle cx=\"15\" cy=\"6\" r=\"1\" />\n <circle cx=\"9\" cy=\"12\" r=\"1\" />\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\n <circle cx=\"9\" cy=\"18\" r=\"1\" />\n <circle cx=\"15\" cy=\"18\" r=\"1\" />\n </Icon>\n);\n\nexport const BlockIcon = () => (\n <Icon>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <circle cx=\"9\" cy=\"10\" r=\"1.5\" />\n <path d=\"m21 16-5-5-8 8\" />\n </Icon>\n);\n\nexport const CopyIcon = () => (\n <Icon size={16}>\n <rect x=\"8\" y=\"8\" width=\"12\" height=\"12\" rx=\"2\" />\n <path d=\"M16 8V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2\" />\n </Icon>\n);\n\nexport const TrashIcon = () => (\n <Icon size={16}>\n <path d=\"M4 7h16M10 11v6M14 11v6M6 7l1 12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2l1-12M9 7V4h6v3\" />\n </Icon>\n);\n\nexport const ArrowUpIcon = () => (\n <Icon size={16}>\n <path d=\"M12 19V5M6 11l6-6 6 6\" />\n </Icon>\n);\n\nexport const ArrowDownIcon = () => (\n <Icon size={16}>\n <path d=\"M12 5v14M6 13l6 6 6-6\" />\n </Icon>\n);\n\n/** Points to the inline start: flips with the document direction. */\nexport const BackIcon = () => (\n <span style={{ display: 'flex', transform: 'scaleX(var(--te-back-flip, 1))' }}>\n <Icon>\n <path d=\"M15 6l-6 6 6 6\" />\n </Icon>\n </span>\n);\n\nexport const ReloadIcon = () => (\n <Icon size={18}>\n <path d=\"M20 11a8 8 0 1 0-2.3 5.7M20 4v7h-7\" />\n </Icon>\n);\n\nexport const ExternalIcon = () => (\n <Icon size={18}>\n <path d=\"M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5\" />\n </Icon>\n);\n\nexport const CloseIcon = () => (\n <Icon size={18}>\n <path d=\"M6 6l12 12M18 6 6 18\" />\n </Icon>\n);\n\nexport const SearchIcon = () => (\n <Icon size={18}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m20 20-3.5-3.5\" />\n </Icon>\n);\n","/** Looking up and labelling twilight.json components, shared by the page list and the add drawer. */\n\nimport type { ReactElement } from 'react';\nimport type { DevSchema, DevSchemaComponent } from '../schema-types';\nimport { blockPath } from '../dev-settings-store';\nimport { pick } from './i18n';\nimport { BlockIcon } from './icons';\n\nexport function componentFor(\n schema: DevSchema,\n path: string | undefined\n): DevSchemaComponent | undefined {\n return path ? schema.components.find((c) => blockPath(c.path) === blockPath(path)) : undefined;\n}\n\nexport function titleOf(\n component: DevSchemaComponent | undefined,\n path: string,\n locale: string\n): string {\n if (!component) return path;\n return pick(component.titles, locale) || component.title;\n}\n\n/** The component's own Salla icon (`sallaicons.css` is loaded by the editor page), else a generic one. */\nexport function ComponentIcon({\n component,\n}: {\n component: DevSchemaComponent | undefined;\n}): ReactElement {\n if (!component?.icon) return <BlockIcon />;\n return <i className={`te-sicon ${component.icon}`} aria-hidden />;\n}\n","/**\n * \"Add new element\": a wide drawer beside the side panel, over the preview,\n * like the dashboard's. Every twilight.json component as a card with its\n * preview image (`image`) and icon, filtered by a search box.\n */\n\nimport { useEffect, useId, useMemo, useRef, useState, type ReactElement } from 'react';\nimport type { DevSchema, DevSchemaComponent } from '../schema-types';\nimport { ComponentIcon, titleOf } from './catalog';\nimport type { EditorStrings } from './i18n';\nimport { CloseIcon, SearchIcon } from './icons';\n\nexport interface AddElementDrawerProps {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n onPick: (path: string) => void;\n onClose: () => void;\n}\n\n/** Every spelling a search might use: both titles and the path. */\nfunction haystack(component: DevSchemaComponent): string {\n return [component.title, ...Object.values(component.titles ?? {}), component.path]\n .join(' ')\n .toLowerCase();\n}\n\nfunction Card({\n component,\n locale,\n onPick,\n}: {\n component: DevSchemaComponent;\n locale: string;\n onPick: () => void;\n}) {\n const [broken, setBroken] = useState(false);\n const title = titleOf(component, component.path, locale);\n return (\n <button type=\"button\" className=\"te-card\" onClick={onPick}>\n <span className=\"te-card__title\">\n <span className=\"te-card__icon\">\n <ComponentIcon component={component} />\n </span>\n {title}\n </span>\n <span className=\"te-card__preview\">\n {component.image && !broken ? (\n <img src={component.image} alt=\"\" loading=\"lazy\" onError={() => setBroken(true)} />\n ) : (\n <span className=\"te-card__placeholder\">\n <ComponentIcon component={component} />\n </span>\n )}\n </span>\n </button>\n );\n}\n\nexport function AddElementDrawer({\n schema,\n t,\n locale,\n onPick,\n onClose,\n}: AddElementDrawerProps): ReactElement {\n const searchId = useId();\n const [query, setQuery] = useState('');\n const search = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n search.current?.focus();\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onClose();\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [onClose]);\n\n // Each component's searchable text, built once per schema rather than per keystroke and word.\n const indexed = useMemo(\n () => schema.components.map((component) => ({ component, text: haystack(component) })),\n [schema.components]\n );\n const shown = useMemo(() => {\n const words = query.trim().toLowerCase().split(/\\s+/).filter(Boolean);\n if (!words.length) return schema.components;\n return indexed\n .filter(({ text }) => words.every((word) => text.includes(word)))\n .map(({ component }) => component);\n }, [schema.components, indexed, query]);\n\n return (\n // A non-modal <dialog>, open as rendered: the preview beside it stays usable.\n <dialog open className=\"te-drawer\" aria-label={t.addElement}>\n <header className=\"te-drawer__head\">\n <h2>{t.addElement}</h2>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--danger-outline\"\n aria-label={t.close}\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n </header>\n <label className=\"te-search\" htmlFor={searchId}>\n <SearchIcon />\n <input\n ref={search}\n id={searchId}\n type=\"search\"\n placeholder={t.searchElements}\n aria-label={t.searchElements}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n />\n </label>\n <div className=\"te-drawer__body\">\n {shown.length === 0 ? (\n <p className=\"te-hint\">{t.noMatches}</p>\n ) : (\n <div className=\"te-cards\">\n {shown.map((component) => (\n <Card\n key={component.path}\n component={component}\n locale={locale}\n onPick={() => onPick(component.path)}\n />\n ))}\n </div>\n )}\n </div>\n </dialog>\n );\n}\n","/**\n * What a picker searches: the real dev store through the frame\n * (`devSettingsStore.lookup`), or, when that can't answer or the store has\n * none, samples so the field can still be tried. Samples are marked, and their\n * ids are strings, never a store's numbers: a product block fetches products by\n * id, so a sample product shows the field working but renders nothing.\n */\n\nimport type { DevLookupItem, DevLookupSource } from '../schema-types';\nimport { devSettingsStore } from '../dev-settings-store';\n\nexport interface LookupOutcome {\n items: DevLookupItem[];\n /** The items are samples, not the store's. */\n sample: boolean;\n}\n\nconst COLORS = ['#0d9488', '#7c3aed', '#d97706', '#2563eb', '#db2777', '#059669'];\n\n/** A small square picture with the item's initial, so samples need no network. */\nfunction placeholder(name: string, index: number): string {\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"120\" height=\"120\">` +\n `<rect width=\"120\" height=\"120\" fill=\"${COLORS[index % COLORS.length]}\"/>` +\n `<text x=\"60\" y=\"76\" font-size=\"48\" font-family=\"sans-serif\" fill=\"#fff\" text-anchor=\"middle\">` +\n `${name.slice(0, 1)}</text></svg>`;\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\n}\n\nconst NAMES: Record<DevLookupSource, string[]> = {\n products: [\n 'Sample shirt',\n 'Sample sneakers',\n 'Sample watch',\n 'Sample bag',\n 'Sample perfume',\n 'Sample lamp',\n ],\n categories: ['Clothing', 'Shoes', 'Accessories', 'Home', 'Beauty', 'Electronics'],\n brands: ['Northwind', 'Contoso', 'Fabrikam', 'Tailspin', 'Litware', 'Adventure Works'],\n blog_articles: ['How to choose a gift', 'Spring collection notes', 'Care guide'],\n blog_categories: ['News', 'Guides', 'Stories'],\n};\n\nconst PATHS: Record<DevLookupSource, string> = {\n products: '/p',\n categories: '/c',\n brands: '/brands',\n blog_articles: '/blog',\n blog_categories: '/blog/category',\n};\n\nfunction sampleItem(source: DevLookupSource, name: string, index: number): DevLookupItem {\n const id = `sample-${source}-${index + 1}`;\n const url = `${PATHS[source]}/${id}`;\n const image = placeholder(name, index);\n const data: Record<string, unknown> = { id, name, url, sample: true };\n if (source === 'brands') data.logo = image;\n else if (source !== 'blog_categories') data.image = image;\n return { id, name, url, image, data };\n}\n\nexport function sampleItems(source: DevLookupSource, query = ''): DevLookupItem[] {\n const q = query.trim().toLowerCase();\n return (NAMES[source] ?? [])\n .map((name, index) => sampleItem(source, name, index))\n .filter((item) => !q || item.name.toLowerCase().includes(q));\n}\n\n/** Sources the store answered with nothing at all: searching them filters the samples. */\nconst emptyInStore = new Set<DevLookupSource>();\n\nexport async function searchSource(source: DevLookupSource, query: string): Promise<LookupOutcome> {\n try {\n const items = await devSettingsStore.lookup(source, query);\n if (items.length > 0) {\n emptyInStore.delete(source);\n return { items, sample: false };\n }\n // An empty store has nothing to pick: offer samples, and keep filtering them\n // as the developer types. A search a populated store can't match is a real answer.\n if (!query.trim()) emptyInStore.add(source);\n if (emptyInStore.has(source)) return { items: sampleItems(source, query), sample: true };\n return { items: [], sample: false };\n } catch {\n return { items: sampleItems(source, query), sample: true };\n }\n}\n\n/** Forget what the store had, e.g. between tests or after switching stores. */\nexport function resetStoreKnowledge(): void {\n emptyInStore.clear();\n}\n\n/** Link kinds a picker can search for; the rest are fixed pages or typed URLs. */\nexport const LINK_LOOKUPS: Partial<Record<string, DevLookupSource>> = {\n products: 'products',\n categories: 'categories',\n brands: 'brands',\n blog_articles: 'blog_articles',\n blog_categories: 'blog_categories',\n};\n\n/** Link kinds that point at one fixed storefront page. */\nexport const FIXED_LINKS: Partial<Record<string, string>> = {\n offers_link: '/offers',\n brands_link: '/brands',\n blog_link: '/blog',\n};\n","/**\n * Fields that pick from the store: `entities` (products, categories, brands)\n * and `link` (a URL to a product, category, page… or typed). Both search the\n * dev store through the frame and fall back to samples (see `lookup.ts`).\n */\n\nimport { useEffect, useId, useRef, useState, type ReactElement } from 'react';\nimport type { DevLookupItem, DevLookupSource } from '../schema-types';\nimport type { FieldProps } from './fields';\nimport type { EditorStrings } from './i18n';\nimport { FIXED_LINKS, LINK_LOOKUPS, searchSource, type LookupOutcome } from './lookup';\nimport { CloseIcon, PlusCircleIcon, SearchIcon } from './icons';\n\n/** Wait for a pause in typing before asking the store. */\nconst SEARCH_DELAY_MS = 250;\n\ntype Row = Record<string, unknown>;\n\nfunction rowId(row: unknown): string | number | undefined {\n const id = (row as Row | null)?.id;\n return typeof id === 'string' || typeof id === 'number' ? id : undefined;\n}\n\n/**\n * An id to compare by: the store sends some ids as numeric strings and blocks\n * save them as numbers, so `\"677\"` and `677` are the same product.\n */\nfunction idKey(id: string | number | undefined): string | undefined {\n return id === undefined ? undefined : String(id);\n}\n\n/** Keys for the picked chips: the item's id, numbered if it repeats; the name when it has none. */\nfunction chipKeys(rows: unknown[]): string[] {\n const seen = new Map<string, number>();\n return rows.map((row) => {\n const base = idKey(rowId(row)) ?? `name:${rowName(row)}`;\n const n = (seen.get(base) ?? 0) + 1;\n seen.set(base, n);\n return n === 1 ? base : `${base}#${n}`;\n });\n}\n\nfunction rowName(row: unknown): string {\n const name = (row as Row | null)?.name;\n return typeof name === 'string' ? name : String(rowId(row) ?? '');\n}\n\nfunction rowImage(row: unknown): string | undefined {\n const r = (row as Row | null) ?? {};\n const image = r.image ?? r.logo;\n return typeof image === 'string' && image ? image : undefined;\n}\n\n/** A search box over one store list, with its results. */\nfunction LookupSearch({\n source,\n t,\n isPicked,\n onPick,\n}: {\n source: DevLookupSource;\n t: EditorStrings;\n isPicked?: (item: DevLookupItem) => boolean;\n onPick: (item: DevLookupItem) => void;\n}) {\n const id = useId();\n const input = useRef<HTMLInputElement>(null);\n const [query, setQuery] = useState('');\n const [outcome, setOutcome] = useState<LookupOutcome | null>(null);\n const [searching, setSearching] = useState(true);\n\n // Opened by the developer's own click on \"Choose from the store\": put them in the box.\n useEffect(() => {\n input.current?.focus();\n }, []);\n\n useEffect(() => {\n let current = true;\n setSearching(true);\n const timer = setTimeout(() => {\n void searchSource(source, query).then((result) => {\n if (!current) return;\n setOutcome(result);\n setSearching(false);\n });\n }, SEARCH_DELAY_MS);\n return () => {\n current = false;\n clearTimeout(timer);\n };\n }, [source, query]);\n\n return (\n <div className=\"te-lookup\">\n <label className=\"te-search te-search--small\" htmlFor={id}>\n <SearchIcon />\n <input\n ref={input}\n id={id}\n type=\"search\"\n placeholder={t.searchStore}\n aria-label={t.searchStore}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n />\n </label>\n {outcome?.sample && (\n <p className=\"te-field__help te-field__help--warn\">\n {source === 'products' ? t.sampleProducts : t.sampleNotice}\n </p>\n )}\n {searching && <p className=\"te-field__help\">{t.searching}</p>}\n {!searching && outcome?.items.length === 0 && <p className=\"te-field__help\">{t.noResults}</p>}\n <ul className=\"te-lookup__results\">\n {outcome?.items.map((item) => {\n const picked = isPicked?.(item) ?? false;\n return (\n <li key={String(item.id)}>\n <button\n type=\"button\"\n className=\"te-lookup__item\"\n disabled={picked}\n aria-pressed={picked}\n onClick={() => onPick(item)}\n >\n {item.image ? (\n <img src={item.image} alt=\"\" loading=\"lazy\" />\n ) : (\n <span className=\"te-lookup__noimage\" />\n )}\n <span>{item.name}</span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\n/** Products, categories, brands or blog entries, in order, as the API hands them to a block. */\nexport function EntitiesField({ field, value, onChange, t }: FieldProps): ReactElement {\n const rows: unknown[] = Array.isArray(value) ? value : [];\n const [adding, setAdding] = useState(false);\n const max = field.multiple ? (field.max ?? Infinity) : 1;\n const min = field.min ?? 0;\n const source = field.source ?? 'products';\n const pickedIds = new Set(rows.map((row) => idKey(rowId(row))));\n const keys = chipKeys(rows);\n\n const pick = (item: DevLookupItem) => {\n if (!field.multiple) {\n onChange([item.data]);\n setAdding(false);\n return;\n }\n // Another tab may have filled the list while this picker stayed open.\n if (rows.length >= max) {\n setAdding(false);\n return;\n }\n const next = [...rows, item.data];\n onChange(next);\n if (next.length >= max) setAdding(false);\n };\n\n return (\n <div className=\"te-field\">\n <div className=\"te-field__label\">\n {field.label} {field.multiple && <span className=\"te-field__count\">({rows.length})</span>}\n </div>\n {field.description && <p className=\"te-field__help\">{field.description}</p>}\n {rows.length > 0 && (\n <ul className=\"te-chips\">\n {rows.map((row, index) => {\n const name = rowName(row);\n const image = rowImage(row);\n return (\n <li key={keys[index]} className=\"te-chip\">\n {image ? <img src={image} alt=\"\" /> : <span className=\"te-lookup__noimage\" />}\n <span className=\"te-chip__name\">{name}</span>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare te-icon-btn--danger\"\n aria-label={`${t.remove}: ${name}`}\n disabled={rows.length <= min}\n onClick={() => onChange(rows.filter((_, i) => i !== index))}\n >\n <CloseIcon />\n </button>\n </li>\n );\n })}\n </ul>\n )}\n {adding ? (\n <>\n <LookupSearch\n source={source}\n t={t}\n isPicked={(item) => field.multiple === true && pickedIds.has(idKey(item.id))}\n onPick={pick}\n />\n <button type=\"button\" className=\"te-btn te-btn--quiet\" onClick={() => setAdding(false)}>\n {t.done}\n </button>\n </>\n ) : (\n <button\n type=\"button\"\n className=\"te-add\"\n disabled={field.multiple === true && rows.length >= max}\n onClick={() => setAdding(true)}\n >\n <PlusCircleIcon />\n {field.multiple || rows.length === 0 ? t.pickFromStore : t.change}\n </button>\n )}\n {rows.length < min && (\n <p className=\"te-field__help te-field__help--error\">{t.minItems(min)}</p>\n )}\n </div>\n );\n}\n\n/** Which kind of link a saved URL most likely is, for showing it again. */\nfunction kindOf(url: string, kinds: string[]): string {\n const fixed = Object.entries(FIXED_LINKS).find(([, path]) => path === url)?.[0];\n if (fixed && kinds.includes(fixed)) return fixed;\n return kinds.includes('custom') ? 'custom' : (kinds[0] ?? 'custom');\n}\n\n/** Under a link: where it points now (when not typed in a box), then the field's own note. */\nfunction LinkNotes({ url, description }: { url: string; description?: string }) {\n return (\n <>\n {url && (\n <p className=\"te-field__help\" dir=\"ltr\">\n {url}\n </p>\n )}\n {description && <p className=\"te-field__help\">{description}</p>}\n </>\n );\n}\n\n/** A link: pick its kind, then the thing it points at, or type the URL. */\nexport function LinkField({ field, value, onChange, t }: FieldProps): ReactElement {\n const typeId = useId();\n const urlId = useId();\n const url = typeof value === 'string' ? value : '';\n const kinds = field.linkSources?.map((o) => o.value) ?? ['custom'];\n const [kind, setKind] = useState(() => kindOf(url, kinds));\n const [searching, setSearching] = useState(false);\n const lookup = LINK_LOOKUPS[kind];\n const fixed = FIXED_LINKS[kind];\n\n return (\n <div className=\"te-field\">\n <label className=\"te-field__label\" htmlFor={typeId}>\n {field.label}\n </label>\n <select\n id={typeId}\n className=\"te-input\"\n aria-label={`${field.label}: ${t.linkTo}`}\n value={kind}\n onChange={(e) => {\n const next = e.target.value;\n setKind(next);\n setSearching(LINK_LOOKUPS[next] !== undefined);\n if (FIXED_LINKS[next]) onChange(FIXED_LINKS[next]);\n }}\n >\n {(field.linkSources ?? [{ label: t.typeUrl, value: 'custom' }]).map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n {lookup && searching && (\n <LookupSearch\n source={lookup}\n t={t}\n onPick={(item) => {\n onChange(item.url ?? '');\n setSearching(false);\n }}\n />\n )}\n {lookup && !searching && (\n <button type=\"button\" className=\"te-add\" onClick={() => setSearching(true)}>\n <SearchIcon />\n {url ? t.change : t.pickFromStore}\n </button>\n )}\n {!lookup && !fixed && (\n <input\n id={urlId}\n type=\"text\"\n dir=\"ltr\"\n className=\"te-input te-input--spaced\"\n aria-label={`${field.label}: URL`}\n placeholder=\"https://\"\n value={url}\n onChange={(e) => onChange(e.target.value)}\n />\n )}\n <LinkNotes url={lookup || fixed ? url : ''} description={field.description} />\n </div>\n );\n}\n","/**\n * One editable twilight.json field, laid out like the dashboard's form: label\n * above control, the field's description under it. A collection renders its\n * items as collapsible cards, each made of the same fields.\n */\n\nimport { useEffect, useId, useRef, useState, type ReactElement, type ReactNode } from 'react';\nimport {\n conditionsMet,\n DEV_PREVIEW_IMAGE_ENDPOINT,\n DEV_PREVIEW_IMAGE_MAX_BYTES,\n type DevSchemaField,\n} from '../schema-types';\nimport { EntitiesField, LinkField } from './pickers';\nimport type { EditorStrings } from './i18n';\nimport { ArrowDownIcon, ArrowUpIcon, PlusCircleIcon, TrashIcon } from './icons';\n\n/** Same cap as the dev server's image endpoint. */\nconst MAX_IMAGE_BYTES = DEV_PREVIEW_IMAGE_MAX_BYTES;\n\ntype Row = Record<string, unknown>;\n\n/** A field's value in a block or collection row, falling back to its twilight.json default. */\nexport function blockValue(\n fields: DevSchemaField[],\n data: Record<string, unknown>,\n id: string\n): unknown {\n return id in data ? data[id] : fields.find((f) => f.id === id)?.default;\n}\n\nexport interface FieldProps {\n field: DevSchemaField;\n value: unknown;\n onChange: (value: unknown) => void;\n t: EditorStrings;\n}\n\nfunction Labeled({\n field,\n htmlFor,\n children,\n}: {\n field: DevSchemaField;\n htmlFor?: string;\n children: ReactNode;\n}) {\n return (\n <div className=\"te-field\">\n <label className=\"te-field__label\" htmlFor={htmlFor}>\n {field.label}\n </label>\n {children}\n {field.description && <p className=\"te-field__help\">{field.description}</p>}\n </div>\n );\n}\n\n/** Whether the component is still mounted, for work that finishes later. */\nfunction useOnScreen() {\n const onScreen = useRef(false);\n useEffect(() => {\n onScreen.current = true;\n return () => {\n onScreen.current = false;\n };\n }, []);\n return onScreen;\n}\n\ntype UploadState = 'idle' | 'uploading' | 'too-large' | 'failed';\n\n/** Store a picked image with the dev server, which answers with the URL it serves it at. */\nasync function uploadImage(file: File): Promise<string> {\n const res = await fetch(DEV_PREVIEW_IMAGE_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': file.type },\n body: file,\n });\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const { url } = (await res.json()) as { url?: unknown };\n if (typeof url !== 'string') throw new Error('no url');\n return url;\n}\n\nfunction ImageField({ field, value, onChange, t }: FieldProps) {\n const id = useId();\n const [upload, setUpload] = useState<UploadState>('idle');\n /** Bumped by every pick and every typed URL: an upload that finishes after either is stale. */\n const latestPick = useRef(0);\n const onScreen = useOnScreen();\n const url = typeof value === 'string' ? value : '';\n const pickImage = async (file: File) => {\n const pick = ++latestPick.current;\n setUpload('uploading');\n try {\n const uploaded = await uploadImage(file);\n // Applied only by the field that asked, while it is still on screen and\n // nothing newer was picked or typed into it; otherwise it would land on\n // whatever the developer has done since.\n if (!onScreen.current || pick !== latestPick.current) return;\n setUpload('idle');\n onChange(uploaded);\n } catch {\n if (onScreen.current && pick === latestPick.current) setUpload('failed');\n }\n };\n const message = {\n idle: null,\n uploading: t.uploading,\n 'too-large': t.imageTooLarge,\n failed: t.uploadFailed,\n }[upload];\n return (\n <Labeled field={field} htmlFor={id}>\n {url && <img className=\"te-image__preview\" src={url} alt=\"\" />}\n <input\n id={id}\n type=\"text\"\n dir=\"ltr\"\n className=\"te-input\"\n placeholder={field.placeholder ?? 'https://'}\n value={url}\n onChange={(e) => {\n latestPick.current += 1;\n setUpload('idle');\n onChange(e.target.value);\n }}\n />\n <label className=\"te-image__pick\">\n {t.chooseImage}\n <input\n type=\"file\"\n accept=\"image/png,image/jpeg,image/webp,image/gif,image/avif\"\n hidden\n onChange={(e) => {\n const file = e.target.files?.[0];\n e.target.value = '';\n if (!file) return;\n if (file.size > MAX_IMAGE_BYTES) {\n setUpload('too-large');\n return;\n }\n void pickImage(file);\n }}\n />\n </label>\n {message && (\n <p className={`te-field__help${upload === 'uploading' ? '' : ' te-field__help--error'}`}>\n {message}\n </p>\n )}\n </Labeled>\n );\n}\n\n/** What to call an item: its label and number, plus its first text value for recognition. */\nfunction itemTitle(field: DevSchemaField, row: Row, index: number, t: EditorStrings): string {\n const name = `${field.itemLabel ?? t.item} ${index + 1}`;\n const textField = field.fields?.find(\n (f) =>\n (f.kind === 'text' || f.kind === 'textarea') && typeof row[f.id] === 'string' && row[f.id]\n );\n return textField ? `${name} · ${String(row[textField.id])}` : name;\n}\n\nfunction newRow(field: DevSchemaField): Row {\n return Object.fromEntries(\n (field.fields ?? []).filter((f) => f.kind !== 'readonly').map((f) => [f.id, f.default])\n );\n}\n\nlet nextItemKey = 0;\nconst newItemKey = () => `item-${nextItemKey++}`;\n\n/**\n * React keys for a collection's rows. Rows carry no id, and an index key would\n * hand one item's input state to its neighbour on a remove or a move, so keep a\n * key per row and edit the keys alongside the rows. Rows changed from outside\n * (a reset, another tab) get fresh keys.\n */\nfunction useRowKeys(count: number): [string[], (keys: string[]) => void] {\n const [keys, setKeys] = useState(() => Array.from({ length: count }, newItemKey));\n if (keys.length !== count) {\n // Adjusting state while rendering, React's pattern for state derived from props.\n const fresh = Array.from({ length: count }, newItemKey);\n setKeys(fresh);\n return [fresh, setKeys];\n }\n return [keys, setKeys];\n}\n\nfunction ItemCard({\n field,\n row,\n index,\n total,\n open,\n t,\n onToggle,\n onMove,\n onRemove,\n onEdit,\n}: {\n field: DevSchemaField;\n row: Row;\n index: number;\n total: number;\n open: boolean;\n t: EditorStrings;\n onToggle: () => void;\n onMove: (to: number) => void;\n onRemove: (() => void) | undefined;\n onEdit: (fieldId: string, value: unknown) => void;\n}) {\n const title = itemTitle(field, row, index, t);\n return (\n <div className={`te-item${open ? ' te-item--open' : ''}`}>\n <div className=\"te-item__head\">\n <button type=\"button\" className=\"te-item__title\" aria-expanded={open} onClick={onToggle}>\n {title}\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.moveUp}: ${title}`}\n disabled={index === 0}\n onClick={() => onMove(index - 1)}\n >\n <ArrowUpIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.moveDown}: ${title}`}\n disabled={index === total - 1}\n onClick={() => onMove(index + 1)}\n >\n <ArrowDownIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare te-icon-btn--danger\"\n aria-label={`${t.remove}: ${title}`}\n disabled={!onRemove}\n onClick={onRemove}\n >\n <TrashIcon />\n </button>\n </div>\n {open && (\n <div className=\"te-item__body\">\n {field.fields\n ?.filter((sub) => conditionsMet(sub, (id) => blockValue(field.fields ?? [], row, id)))\n .map((sub) => (\n <Field\n key={sub.id}\n field={sub}\n t={t}\n value={blockValue(field.fields ?? [], row, sub.id)}\n onChange={(v) => onEdit(sub.id, v)}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction CollectionField({ field, value, onChange, t }: FieldProps) {\n const rows: Row[] = Array.isArray(value) ? (value as Row[]) : [];\n const [keys, setKeys] = useRowKeys(rows.length);\n // The latest rows and keys, for edits that finish later (an image upload):\n // applied to the item by its key on today's rows, never to the rows it began with.\n const latest = useRef({ rows, keys, onChange });\n const onScreen = useOnScreen();\n useEffect(() => {\n latest.current = { rows, keys, onChange };\n });\n const editItem = (key: string, fieldId: string, v: unknown) => {\n if (!onScreen.current) return; // left behind: its rows are no longer today's\n const { rows: now, keys: nowKeys, onChange: report } = latest.current;\n const at = nowKeys.indexOf(key);\n if (at === -1) return; // the item was removed meanwhile\n report(now.map((r, i) => (i === at ? { ...r, [fieldId]: v } : r)));\n };\n const [openKey, setOpenKey] = useState<string | null>(null);\n const min = field.min ?? 0;\n const max = field.max ?? Infinity;\n\n /** Apply the same edit to the rows and their keys. */\n const update = (edit: <T>(list: T[]) => T[]) => {\n setKeys(edit(keys));\n onChange(edit(rows));\n };\n const move = (from: number, to: number) =>\n update((list) => {\n const next = [...list];\n const [item] = next.splice(from, 1);\n next.splice(to, 0, item);\n return next;\n });\n\n return (\n <div className=\"te-field\">\n <div className=\"te-field__label\">\n {field.label} <span className=\"te-field__count\">({rows.length})</span>\n </div>\n {field.description && <p className=\"te-field__help\">{field.description}</p>}\n <div className=\"te-items\">\n {rows.map((row, index) => {\n const key = keys[index];\n return (\n <ItemCard\n key={key}\n field={field}\n row={row}\n index={index}\n total={rows.length}\n open={openKey === key}\n t={t}\n onToggle={() => setOpenKey(openKey === key ? null : key)}\n onMove={(to) => move(index, to)}\n onRemove={\n rows.length > min\n ? () => update((list) => list.filter((_, i) => i !== index))\n : undefined\n }\n onEdit={(fieldId, v) => editItem(key, fieldId, v)}\n />\n );\n })}\n </div>\n <button\n type=\"button\"\n className=\"te-add\"\n disabled={rows.length >= max}\n onClick={() => {\n const key = newItemKey();\n setKeys([...keys, key]);\n onChange([...rows, newRow(field)]);\n setOpenKey(key);\n }}\n >\n <PlusCircleIcon />\n {t.addItem(field.itemLabel ?? t.item)}\n </button>\n {rows.length < min && (\n <p className=\"te-field__help te-field__help--error\">{t.minItems(min)}</p>\n )}\n </div>\n );\n}\n\nfunction ToggleField({ field, value, onChange }: FieldProps) {\n const id = useId();\n return (\n <div className=\"te-field\">\n <label className=\"te-field--row\" htmlFor={id}>\n <span className=\"te-field__label\">{field.label}</span>\n <input\n id={id}\n type=\"checkbox\"\n className=\"te-checkbox\"\n checked={Boolean(value)}\n onChange={(e) => onChange(e.target.checked)}\n />\n </label>\n {field.description && <p className=\"te-field__help\">{field.description}</p>}\n </div>\n );\n}\n\nfunction SelectField({ field, value, onChange }: FieldProps) {\n const id = useId();\n return (\n <Labeled field={field} htmlFor={id}>\n <select\n id={id}\n className=\"te-input\"\n value={value == null ? '' : String(value)}\n onChange={(e) => onChange(e.target.value)}\n >\n {field.options?.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n </Labeled>\n );\n}\n\nfunction TextField({ field, value, onChange }: FieldProps) {\n const id = useId();\n const common = {\n id,\n className: 'te-input',\n placeholder: field.placeholder,\n value: value == null ? '' : String(value),\n };\n return (\n <Labeled field={field} htmlFor={id}>\n {field.kind === 'textarea' ? (\n <textarea {...common} rows={3} onChange={(e) => onChange(e.target.value)} />\n ) : (\n <input {...common} type=\"text\" onChange={(e) => onChange(e.target.value)} />\n )}\n </Labeled>\n );\n}\n\n/** A number within the field's limits, or why not. */\nfunction checkNumber(field: DevSchemaField, raw: string): { value: number | null; ok: boolean } {\n if (raw.trim() === '') return { value: null, ok: true };\n const value = Number(raw);\n const ok =\n Number.isFinite(value) &&\n (field.min === undefined || value >= field.min) &&\n (field.max === undefined || value <= field.max);\n return { value, ok };\n}\n\n/**\n * Keeps what is typed, and only hands a value on while it is within the\n * field's limits; `min`/`max` on the input alone don't stop a typed `9`.\n */\nfunction NumberField({ field, value, onChange, t }: FieldProps) {\n const id = useId();\n const shown = typeof value === 'number' ? String(value) : '';\n const [draft, setDraft] = useState(shown);\n const [seen, setSeen] = useState(shown);\n // The saved value changed from outside (a reset, another tab): show it. Text\n // typed here that isn't valid yet doesn't change the saved value, so it stays.\n if (shown !== seen) {\n setSeen(shown);\n setDraft(shown);\n }\n const { ok } = checkNumber(field, draft);\n return (\n <Labeled field={field} htmlFor={id}>\n <input\n id={id}\n type=\"number\"\n className=\"te-input\"\n min={field.min}\n max={field.max}\n placeholder={field.placeholder}\n aria-invalid={!ok}\n value={draft}\n onChange={(e) => {\n setDraft(e.target.value);\n const checked = checkNumber(field, e.target.value);\n if (checked.ok) onChange(checked.value);\n }}\n />\n {!ok && (\n <p className=\"te-field__help te-field__help--error\">{t.outOfRange(field.min, field.max)}</p>\n )}\n </Labeled>\n );\n}\n\n/** Not editable here: say what's there, since the block still renders with it. */\nfunction ReadonlyField({ field, value, t }: FieldProps) {\n const count = Array.isArray(value) ? `${t.items(value.length)} · ` : '';\n return (\n <div className=\"te-field te-field--row\">\n <span className=\"te-field__label\">{field.label}</span>\n <span className=\"te-field__readonly\">\n {count}\n {field.note ?? '—'}\n </span>\n </div>\n );\n}\n\nconst FIELDS: Record<DevSchemaField['kind'], (props: FieldProps) => ReactElement> = {\n toggle: ToggleField,\n select: SelectField,\n text: TextField,\n textarea: TextField,\n number: NumberField,\n image: ImageField,\n collection: CollectionField,\n entities: EntitiesField,\n link: LinkField,\n readonly: ReadonlyField,\n};\n\nexport function Field(props: FieldProps): ReactElement {\n const Control = FIELDS[props.field.kind] ?? ReadonlyField;\n return <Control {...props} />;\n}\n","/**\n * \"Page elements\": the home page's blocks. Three views, like the dashboard:\n * the list (drag to reorder, add, remove), one block's fields, and the picker\n * of twilight.json components to add.\n */\n\nimport { useState, type ReactElement } from 'react';\nimport {\n conditionsMet,\n type DevPreviewBlock,\n type DevSchema,\n type DevSchemaComponent,\n} from '../schema-types';\nimport { devSettingsStore, useDevEditorMeta, useDevSettingsState } from '../dev-settings-store';\nimport { blockValue, Field } from './fields';\nimport type { EditorStrings } from './i18n';\nimport { ComponentIcon, componentFor, titleOf } from './catalog';\nimport {\n ArrowDownIcon,\n ArrowUpIcon,\n BackIcon,\n CopyIcon,\n GripIcon,\n PlusCircleIcon,\n TrashIcon,\n} from './icons';\n\ninterface PanelProps {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n isHome: boolean;\n onGoHome: () => void;\n /** The block open in the panel, if any. Held by the shell so the add drawer can open a new one. */\n openId: string | null;\n onOpenId: (id: string | null) => void;\n /** Open the drawer of twilight.json components to add. */\n onAddElement: () => void;\n}\n\nfunction PanelHead({ title, onBack, t }: { title: string; onBack?: () => void; t: EditorStrings }) {\n return (\n <div className=\"te-panel__head\">\n {onBack && (\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n onClick={onBack}\n aria-label={t.back}\n >\n <BackIcon />\n </button>\n )}\n <span>{title}</span>\n </div>\n );\n}\n\n/** One row in the list: drag it, open it, or act on it from its hover buttons. */\nfunction BlockRow({\n block,\n index,\n total,\n title,\n component,\n dragging,\n t,\n onOpen,\n onDragStart,\n onDragEnd,\n onDropAt,\n}: {\n block: DevPreviewBlock;\n index: number;\n total: number;\n title: string;\n /** Its twilight.json component; none for a block only the store knows. */\n component: DevSchemaComponent | undefined;\n dragging: boolean;\n t: EditorStrings;\n onOpen: () => void;\n onDragStart: () => void;\n onDragEnd: () => void;\n onDropAt: (index: number) => void;\n}) {\n const [over, setOver] = useState(false);\n const className = ['te-block', over && 'te-block--over', dragging && 'te-block--dragging']\n .filter(Boolean)\n .join(' ');\n return (\n <div\n className={className}\n draggable\n onDragStart={(e) => {\n e.dataTransfer.effectAllowed = 'move';\n onDragStart();\n }}\n onDragEnd={onDragEnd}\n onDragOver={(e) => {\n e.preventDefault();\n setOver(true);\n }}\n onDragLeave={() => setOver(false)}\n onDrop={(e) => {\n e.preventDefault();\n setOver(false);\n onDropAt(index);\n }}\n >\n <span className=\"te-block__grip\">\n <GripIcon />\n </span>\n <span className=\"te-block__icon\">\n <ComponentIcon component={component} />\n </span>\n <button type=\"button\" className=\"te-block__title\" onClick={onOpen}>\n {title}\n {!component && <span className=\"te-block__tag\"> · {t.storeBlock}</span>}\n </button>\n <span className=\"te-block__actions\">\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.moveUp}: ${title}`}\n disabled={index === 0}\n onClick={() => devSettingsStore.moveBlock(block.id, index - 1)}\n >\n <ArrowUpIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.moveDown}: ${title}`}\n disabled={index === total - 1}\n onClick={() => devSettingsStore.moveBlock(block.id, index + 1)}\n >\n <ArrowDownIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.duplicate}: ${title}`}\n onClick={() => devSettingsStore.duplicateBlock(block.id)}\n >\n <CopyIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare te-icon-btn--danger\"\n aria-label={`${t.remove}: ${title}`}\n onClick={() => devSettingsStore.removeBlock(block.id)}\n >\n <TrashIcon />\n </button>\n </span>\n </div>\n );\n}\n\n/**\n * Keys for the store's read-only rows: the block's path, numbered when it\n * repeats (`brands`, `brands#2`). The API sends no id, and the list is never\n * reordered here.\n */\nfunction storeRowKeys(blocks: { path?: string }[]) {\n const seen = new Map<string, number>();\n return blocks.map((block, index) => {\n const path = block.path ?? '';\n const n = (seen.get(path) ?? 0) + 1;\n seen.set(path, n);\n return { key: n === 1 ? path : `${path}#${n}`, block, index };\n });\n}\n\n/** Before the developer takes over: the store's blocks, read-only, and the ways to start. */\nfunction StoreLayout({\n schema,\n t,\n locale,\n isHome,\n}: Pick<PanelProps, 'schema' | 't' | 'locale' | 'isHome'>) {\n const { liveBlocks } = useDevEditorMeta();\n return (\n <>\n <div className=\"te-section-title\">{t.builder}</div>\n {liveBlocks &&\n storeRowKeys(liveBlocks).map(({ key, block, index }) => (\n <div key={key} className=\"te-block te-block--static\">\n <span className=\"te-block__icon\">\n <ComponentIcon component={componentFor(schema, block.path)} />\n </span>\n <button\n type=\"button\"\n className=\"te-block__title\"\n onClick={() => devSettingsStore.focusBlock(index)}\n >\n {titleOf(componentFor(schema, block.path), block.path ?? '', locale)}\n </button>\n </div>\n ))}\n {!liveBlocks && isHome && <p className=\"te-hint\">{t.waitingForStore}</p>}\n <p className=\"te-hint\">{t.storeLayoutHint}</p>\n <button\n type=\"button\"\n className=\"te-btn te-btn--primary\"\n onClick={() => devSettingsStore.customizeLayout(schema)}\n >\n {t.customize}\n </button>\n <button type=\"button\" className=\"te-btn\" onClick={() => devSettingsStore.startEmptyLayout()}>\n {t.startEmpty}\n </button>\n </>\n );\n}\n\nfunction BlockList({\n schema,\n t,\n locale,\n layout,\n onOpen,\n onAdd,\n}: {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n layout: DevPreviewBlock[];\n onOpen: (id: string) => void;\n onAdd: () => void;\n}) {\n const [dragId, setDragId] = useState<string | null>(null);\n return (\n <>\n <div className=\"te-section-title\">{t.builder}</div>\n {layout.length === 0 && <p className=\"te-hint\">{t.noBlocks}</p>}\n {layout.map((block, index) => {\n const component = componentFor(schema, block.path);\n return (\n <BlockRow\n key={block.id}\n block={block}\n index={index}\n total={layout.length}\n title={titleOf(component, block.path, locale)}\n component={component}\n dragging={dragId === block.id}\n t={t}\n onOpen={() => onOpen(block.id)}\n onDragStart={() => setDragId(block.id)}\n onDragEnd={() => setDragId(null)}\n onDropAt={(to) => {\n if (dragId) devSettingsStore.moveBlock(dragId, to);\n setDragId(null);\n }}\n />\n );\n })}\n {schema.components.length > 0 && (\n <button type=\"button\" className=\"te-add\" onClick={onAdd}>\n <PlusCircleIcon />\n {t.addElement}\n </button>\n )}\n </>\n );\n}\n\n/** Pinned under the list: drop the dev layout and show the store's own blocks again. Asks twice. */\nfunction BackToStore({ t }: { t: EditorStrings }) {\n const [confirming, setConfirming] = useState(false);\n return (\n <div className=\"te-panel__actions\">\n <button\n type=\"button\"\n className={`te-btn te-btn--quiet${confirming ? ' te-btn--danger' : ''}`}\n onClick={() => {\n if (!confirming) {\n setConfirming(true);\n return;\n }\n setConfirming(false);\n devSettingsStore.clearLayout();\n }}\n onBlur={() => setConfirming(false)}\n >\n {confirming ? t.confirm : t.backToStore}\n </button>\n </div>\n );\n}\n\nfunction BlockEditor({\n schema,\n t,\n locale,\n block,\n index,\n total,\n onBack,\n}: {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n block: DevPreviewBlock;\n index: number;\n total: number;\n onBack: () => void;\n}) {\n const component = componentFor(schema, block.path);\n const title = titleOf(component, block.path, locale);\n return (\n <>\n <PanelHead title={title} onBack={onBack} t={t} />\n <div className=\"te-panel__body\">\n <div style={{ display: 'flex', gap: 4, margin: '0 4px 6px' }}>\n <button\n type=\"button\"\n className=\"te-icon-btn\"\n aria-label={`${t.moveUp}: ${title}`}\n disabled={index === 0}\n onClick={() => devSettingsStore.moveBlock(block.id, index - 1)}\n >\n <ArrowUpIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn\"\n aria-label={`${t.moveDown}: ${title}`}\n disabled={index === total - 1}\n onClick={() => devSettingsStore.moveBlock(block.id, index + 1)}\n >\n <ArrowDownIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn\"\n aria-label={`${t.duplicate}: ${title}`}\n onClick={() => devSettingsStore.duplicateBlock(block.id)}\n >\n <CopyIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--danger\"\n aria-label={`${t.remove}: ${title}`}\n onClick={() => {\n devSettingsStore.removeBlock(block.id);\n onBack();\n }}\n >\n <TrashIcon />\n </button>\n </div>\n {!component && <p className=\"te-hint\">{t.notDeclared}</p>}\n {component && component.fields.length === 0 && <p className=\"te-hint\">{t.noFields}</p>}\n {component?.fields\n .filter((f) => conditionsMet(f, (id) => blockValue(component.fields, block.fields, id)))\n .map((f) => (\n <Field\n key={f.id}\n field={f}\n t={t}\n value={blockValue(component.fields, block.fields, f.id)}\n onChange={(v) => {\n // An edit you can't see looks broken: editing turns the preview on.\n if (!devSettingsStore.get().enabled) devSettingsStore.enable(schema);\n devSettingsStore.setBlockField(block.id, f.id, v);\n }}\n />\n ))}\n </div>\n </>\n );\n}\n\nexport function BuilderPanel({\n schema,\n t,\n locale,\n isHome,\n onGoHome,\n openId,\n onOpenId,\n onAddElement,\n}: PanelProps): ReactElement {\n const store = useDevSettingsState();\n const layout = store.layout;\n\n const index = layout && openId ? layout.findIndex((block) => block.id === openId) : -1;\n if (layout && index !== -1) {\n return (\n <BlockEditor\n schema={schema}\n t={t}\n locale={locale}\n block={layout[index]}\n index={index}\n total={layout.length}\n onBack={() => onOpenId(null)}\n />\n );\n }\n\n return (\n <>\n <PanelHead title={t.homePage} t={t} />\n <div className=\"te-panel__body\">\n {!isHome && (\n <div className=\"te-note\">\n {t.notHome}\n <button type=\"button\" onClick={onGoHome}>\n {t.goHome}\n </button>\n </div>\n )}\n {layout && !store.enabled && <div className=\"te-note\">{t.previewOff}</div>}\n {layout ? (\n <BlockList\n schema={schema}\n t={t}\n locale={locale}\n layout={layout}\n onOpen={(id) => {\n onOpenId(id);\n devSettingsStore.focusBlock(layout.findIndex((block) => block.id === id));\n }}\n onAdd={onAddElement}\n />\n ) : (\n <StoreLayout schema={schema} t={t} locale={locale} isHome={isHome} />\n )}\n </div>\n {layout && <BackToStore t={t} />}\n </>\n );\n}\n","/** \"Theme settings\": every setting twilight.json declares, merged into the live theme. */\n\nimport type { ReactElement } from 'react';\nimport { conditionsMet, type DevSchema, type DevSchemaField } from '../schema-types';\nimport { devSettingsStore, useDevSettingsState } from '../dev-settings-store';\nimport { Field } from './fields';\nimport type { EditorStrings } from './i18n';\n\nexport function SettingsPanel({\n schema,\n t,\n}: {\n schema: DevSchema;\n t: EditorStrings;\n}): ReactElement {\n const store = useDevSettingsState();\n const valueOf = (f: DevSchemaField) =>\n f.id in store.settings ? store.settings[f.id] : f.default;\n const byId = new Map(schema.settings.map((f) => [f.id, f]));\n // A field whose twilight.json `conditions` don't hold is hidden, like in the dashboard.\n const visible = schema.settings.filter((f) =>\n conditionsMet(f, (id) => {\n const other = byId.get(id);\n return other ? valueOf(other) : store.settings[id];\n })\n );\n\n return (\n <>\n <div className=\"te-panel__head\">\n <span>{t.settings}</span>\n </div>\n <div className=\"te-panel__body\">\n {!store.enabled && <div className=\"te-note\">{t.previewOff}</div>}\n {schema.settings.length === 0 && <p className=\"te-hint\">{t.noSettings}</p>}\n {visible.map((f) => (\n <Field\n key={f.id}\n field={f}\n t={t}\n value={valueOf(f)}\n onChange={(v) => {\n // An edit you can't see looks broken: editing turns the preview on.\n if (!store.enabled) devSettingsStore.enable(schema);\n devSettingsStore.setSetting(f.id, v);\n }}\n />\n ))}\n {schema.settings.length > 0 && (\n <button\n type=\"button\"\n className=\"te-btn te-btn--quiet\"\n onClick={() => devSettingsStore.resetSettings(schema)}\n >\n {t.resetSettings}\n </button>\n )}\n </div>\n </>\n );\n}\n","/**\n * Reading a storefront path from the outside. On a host that serves many stores\n * the store is the first segment (`/3saf.com/ar/cart`, see `utils/store-base.ts`),\n * and only the storefront knows for sure which segment that is: the frame\n * reports its resolved base to the editor (`DevEditorMeta.frameBase`). Until it\n * has, these helpers fall back to finding the language in the first or second\n * segment.\n */\n\nconst LOCALES = ['ar', 'en'] as const;\nexport type EditorLocale = (typeof LOCALES)[number];\n\ninterface ParsedPath {\n /** The store's segment in front of the application path, if any. */\n base: string | null;\n locale: EditorLocale | null;\n /** Segments after the language. */\n rest: string[];\n /** Everything from the first `?` or `#` on, kept as-is. */\n suffix: string;\n}\n\nfunction isLocale(segment: string | undefined): segment is EditorLocale {\n return (LOCALES as readonly string[]).includes(segment ?? '');\n}\n\nfunction splitSuffix(path: string): [string, string] {\n const at = path.search(/[?#]/);\n return at === -1 ? [path, ''] : [path.slice(0, at), path.slice(at)];\n}\n\n/**\n * @param base - the store segment the frame resolved; `undefined` when not known\n * yet (guess from the language's position), `null` when the frame has none.\n */\nexport function parseStorePath(path: string, base?: string | null): ParsedPath {\n const [pathname, suffix] = splitSuffix(path);\n let segments = pathname.split('/').filter(Boolean);\n let storeBase: string | null = null;\n\n if (base !== undefined) {\n if (base && segments[0] === base) {\n storeBase = base;\n segments = segments.slice(1);\n }\n } else if (!isLocale(segments[0]) && isLocale(segments[1])) {\n storeBase = segments[0];\n segments = segments.slice(1);\n }\n\n const locale = isLocale(segments[0]) ? segments[0] : null;\n return { base: storeBase, locale, rest: segments.slice(locale ? 1 : 0), suffix };\n}\n\nfunction join(base: string | null, segments: string[], suffix = ''): string {\n return `/${[...(base ? [base] : []), ...segments].join('/')}${suffix}`;\n}\n\n/**\n * A path on this origin, never anywhere else: `?path=` must not frame another\n * site. Resolving it as a URL catches what a prefix check misses (`/\\evil.com`).\n */\nexport function safePath(raw: string | null | undefined, origin?: string): string {\n if (!raw) return '/ar';\n const here =\n origin ?? (typeof window !== 'undefined' ? window.location.origin : 'http://localhost');\n try {\n const url = new URL(raw, here);\n if (url.origin !== new URL(here).origin) return '/ar';\n return `${url.pathname}${url.search}${url.hash}`;\n } catch {\n return '/ar';\n }\n}\n\n/** The page's language, Arabic (the storefront default) when the path names none. */\nexport function localeOf(path: string, base?: string | null): EditorLocale {\n return parseStorePath(path, base).locale ?? 'ar';\n}\n\nexport function isHomePath(path: string, base?: string | null): boolean {\n return parseStorePath(path, base).rest.length === 0;\n}\n\n/** The same page in another language, on the same store. */\nexport function withLocale(path: string, locale: EditorLocale, base?: string | null): string {\n const parsed = parseStorePath(path, base);\n return join(parsed.base, [locale, ...parsed.rest], parsed.suffix);\n}\n\n/** This store's home page, in this page's language. */\nexport function homeOf(path: string, base?: string | null): string {\n const parsed = parseStorePath(path, base);\n return join(parsed.base, [parsed.locale ?? 'ar']);\n}\n\n/**\n * The address for opening the preview page on its own, in a new tab. The dev\n * server opens the editor for a page load of `/` (see `twilight-schema.plugin`),\n * so the store's root gets `editor=off`; every other page opens as itself.\n */\nexport function standaloneHref(path: string): string {\n const [pathname, suffix] = splitSuffix(path);\n if (pathname !== '/' && pathname !== '') return path;\n const hashAt = suffix.indexOf('#');\n const query = hashAt === -1 ? suffix : suffix.slice(0, hashAt);\n const hash = hashAt === -1 ? '' : suffix.slice(hashAt);\n const params = new URLSearchParams(query.replace(/^\\?/, ''));\n params.set('editor', 'off');\n return `/?${params.toString()}${hash}`;\n}\n","/**\n * The editor's stylesheet. The editor is its own page (`/__twilight/editor`),\n * so it owns the whole document and can use plain class names, prefixed `te-`\n * so nothing it renders could match the theme's CSS by accident. Colors follow\n * the Salla dashboard's editor: a teal accent on white, a dotted canvas.\n */\nexport 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×844), 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`;\n","/**\n * The local theme editor, laid out like the Salla dashboard's: a top bar (theme,\n * page, phone/desktop switch, save state), an icon rail that switches the side\n * panel between the home page's elements and the theme settings, and the\n * storefront in a frame on a dotted canvas.\n *\n * The storefront runs in an iframe so the phone switch is real: the frame's\n * width is the page's viewport, so the theme's own breakpoints apply. Edits\n * reach the frame over the store's `BroadcastChannel` (see\n * `dev-settings-store.ts`); this page never touches the frame's DOM.\n */\n\nimport { useCallback, useEffect, useRef, useState, type ReactElement, type RefObject } from 'react';\nimport { DEV_EDITOR_FRAME_ATTR, type DevSchema } from '../schema-types';\nimport { devSettingsStore, useDevEditorMeta, useDevSettingsState } from '../dev-settings-store';\nimport { AddElementDrawer } from './AddElementDrawer';\nimport { BuilderPanel } from './BuilderPanel';\nimport { SettingsPanel } from './SettingsPanel';\nimport { pick, stringsFor, type EditorStrings } from './i18n';\nimport {\n homeOf,\n isHomePath,\n localeOf,\n safePath,\n standaloneHref,\n withLocale,\n type EditorLocale,\n} from './paths';\nimport {\n DesktopIcon,\n ExternalIcon,\n HomeIcon,\n PaletteIcon,\n PhoneIcon,\n ReloadIcon,\n SidebarIcon,\n} from './icons';\nimport { EDITOR_CSS } from './styles';\n\nexport interface ThemeEditorProps {\n schema: DevSchema;\n /** Storefront path to open first. Default: `?path=` from the URL, else `/ar`. */\n initialPath?: string;\n}\n\ntype Panel = 'builder' | 'settings';\ntype Device = 'mobile' | 'desktop';\n\nconst DEVICE_KEY = 'twilight:editor-device';\nconst PANEL_KEY = 'twilight:editor-panel';\nconst PANEL_ID = 'te-panel';\n/** How often to read the frame's address: client-side navigation fires no load event. */\nconst PATH_POLL_MS = 500;\n\nfunction readDevice(): Device {\n if (typeof window === 'undefined') return 'mobile';\n try {\n return window.localStorage.getItem(DEVICE_KEY) === 'desktop' ? 'desktop' : 'mobile';\n } catch {\n return 'mobile';\n }\n}\n\n/** Whether the developer last hid the side panel, to give the preview the room. */\nfunction readCollapsed(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return window.localStorage.getItem(PANEL_KEY) === 'collapsed';\n } catch {\n return false;\n }\n}\n\nfunction usePanelCollapsed() {\n const [collapsed, setCollapsed] = useState(readCollapsed);\n useEffect(() => {\n try {\n window.localStorage.setItem(PANEL_KEY, collapsed ? 'collapsed' : 'open');\n } catch {\n // A preference, nothing more.\n }\n }, [collapsed]);\n return [collapsed, setCollapsed] as const;\n}\n\nfunction readInitialPath(initialPath: string | undefined): string {\n if (initialPath !== undefined || typeof window === 'undefined') return safePath(initialPath);\n return safePath(new URLSearchParams(window.location.search).get('path'));\n}\n\n/**\n * Where the frame is. `src` only changes when the editor sends the frame\n * somewhere (and remounts it); `path` follows the frame around, and is kept in\n * the editor's own URL so a reload reopens the same page.\n */\nfunction useFramePath(initialPath: string | undefined) {\n const [src, setSrc] = useState(() => readInitialPath(initialPath));\n const [path, setPath] = useState(src);\n const [frameKey, setFrameKey] = useState(0);\n const frameRef = useRef<HTMLIFrameElement>(null);\n\n useEffect(() => {\n const timer = setInterval(() => {\n try {\n const location = frameRef.current?.contentWindow?.location;\n if (!location || location.href === 'about:blank') return;\n const next = `${location.pathname}${location.search}${location.hash}`;\n setPath((current) => (current === next ? current : next));\n } catch {\n // The frame left this origin (an external link): nothing to follow.\n }\n }, PATH_POLL_MS);\n return () => clearInterval(timer);\n }, []);\n\n useEffect(() => {\n const url = new URL(window.location.href);\n url.searchParams.set('path', path);\n window.history.replaceState(null, '', url);\n }, [path]);\n\n const navigate = useCallback((to: string) => {\n setSrc(to);\n setPath(to);\n setFrameKey((key) => key + 1);\n }, []);\n\n // Tell the store which window to talk to (blocks, store base, scroll-to-block).\n useEffect(() => devSettingsStore.connectFrame(() => frameRef.current?.contentWindow ?? null), []);\n\n return { src, path, frameKey, frameRef, navigate };\n}\n\nfunction Rail({\n panel,\n onPanel,\n collapsed,\n onCollapsed,\n t,\n}: {\n panel: Panel;\n onPanel: (panel: Panel) => void;\n collapsed: boolean;\n onCollapsed: (collapsed: boolean) => void;\n t: EditorStrings;\n}) {\n const tabs: [Panel, string, ReactElement][] = [\n ['builder', t.builder, <HomeIcon key=\"builder\" />],\n ['settings', t.settings, <PaletteIcon key=\"settings\" />],\n ];\n const toggle = collapsed ? t.showPanel : t.hidePanel;\n return (\n <nav className=\"te-rail\">\n <button\n type=\"button\"\n aria-expanded={!collapsed}\n aria-controls={PANEL_ID}\n aria-label={toggle}\n title={toggle}\n onClick={() => onCollapsed(!collapsed)}\n >\n <SidebarIcon />\n </button>\n <div className=\"te-rail__tabs\" role=\"tablist\" aria-orientation=\"vertical\">\n {tabs.map(([id, label, icon]) => (\n <button\n key={id}\n type=\"button\"\n role=\"tab\"\n aria-selected={!collapsed && panel === id}\n aria-controls={PANEL_ID}\n aria-label={label}\n title={label}\n onClick={() => onPanel(id)}\n >\n {icon}\n </button>\n ))}\n </div>\n </nav>\n );\n}\n\nfunction SaveStatus({ t }: { t: EditorStrings }) {\n const { saveStatus } = useDevEditorMeta();\n if (saveStatus === 'idle') return null;\n const label = { saving: t.saving, saved: t.saved, error: t.saveError }[saveStatus];\n return (\n <span className={`te-status${saveStatus === 'error' ? ' te-status--error' : ''}`} role=\"status\">\n <span className=\"te-dot\" />\n {label}\n </span>\n );\n}\n\nfunction TopBar({\n schema,\n t,\n locale,\n path,\n device,\n onDevice,\n onLocale,\n onReload,\n}: {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n path: string;\n device: Device;\n onDevice: (device: Device) => void;\n onLocale: (locale: EditorLocale) => void;\n onReload: () => void;\n}) {\n const store = useDevSettingsState();\n const themeName = pick(schema.themeName, locale) || 'Theme';\n return (\n <header className=\"te-top\">\n <div className=\"te-top__start\">\n <span className=\"te-theme-name\">{themeName}</span>\n {/* \"Local\" in every language, as asked: it names the mode, like \"Dev\" would. */}\n <span className=\"te-badge\">Local</span>\n </div>\n\n <div className=\"te-segment\" role=\"group\" aria-label={`${t.mobile} / ${t.desktop}`}>\n <button\n type=\"button\"\n aria-label={t.mobile}\n aria-pressed={device === 'mobile'}\n onClick={() => onDevice('mobile')}\n >\n <PhoneIcon />\n </button>\n <button\n type=\"button\"\n aria-label={t.desktop}\n aria-pressed={device === 'desktop'}\n onClick={() => onDevice('desktop')}\n >\n <DesktopIcon />\n </button>\n </div>\n\n <div className=\"te-top__end\">\n <SaveStatus t={t} />\n <button\n type=\"button\"\n role=\"switch\"\n className=\"te-switch\"\n aria-checked={store.enabled}\n onClick={() =>\n store.enabled ? devSettingsStore.disable() : devSettingsStore.enable(schema)\n }\n >\n <span className=\"te-switch__track\" />\n {t.preview}\n </button>\n <div className=\"te-segment te-segment--text\" role=\"group\" aria-label={t.language}>\n {(['ar', 'en'] as const).map((code) => (\n <button\n key={code}\n type=\"button\"\n aria-pressed={locale === code}\n onClick={() => onLocale(code)}\n >\n {code.toUpperCase()}\n </button>\n ))}\n </div>\n <button\n type=\"button\"\n className=\"te-icon-btn\"\n aria-label={t.reload}\n title={t.reload}\n onClick={onReload}\n >\n <ReloadIcon />\n </button>\n <a\n className=\"te-icon-btn\"\n href={standaloneHref(path)}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={t.openStorefront}\n title={t.openStorefront}\n >\n <ExternalIcon />\n </a>\n </div>\n </header>\n );\n}\n\n/** The storefront, framed at the chosen device's width, on the dotted canvas. */\nfunction PreviewCanvas({\n frameRef,\n frameKey,\n src,\n device,\n title,\n}: {\n frameRef: RefObject<HTMLIFrameElement | null>;\n frameKey: number;\n src: string;\n device: Device;\n title: string;\n}) {\n return (\n <main className={`te-canvas te-canvas--${device}`}>\n {/*\n No `sandbox`: the frame is this dev server's own storefront, and the\n editor needs same-origin access to it (its address, its\n `frameElement`). allow-scripts + allow-same-origin would undo a\n sandbox anyway.\n */}\n <iframe\n key={frameKey}\n ref={frameRef}\n src={src}\n title={title}\n className={`te-frame te-frame--${device}`}\n onLoad={() => devSettingsStore.requestLiveBlocks()}\n {...{ [DEV_EDITOR_FRAME_ATTR]: '' }}\n />\n </main>\n );\n}\n\nexport function ThemeEditor({ schema, initialPath }: ThemeEditorProps): ReactElement {\n const [panel, setPanel] = useState<Panel>('builder');\n const [openId, setOpenId] = useState<string | null>(null);\n const [adding, setAdding] = useState(false);\n const closeAdding = useCallback(() => setAdding(false), []);\n const [device, setDevice] = useState<Device>(readDevice);\n const [collapsed, setCollapsed] = usePanelCollapsed();\n const { src, path, frameKey, frameRef, navigate } = useFramePath(initialPath);\n const { frameBase } = useDevEditorMeta();\n\n const locale = localeOf(path, frameBase);\n const t = stringsFor(locale);\n\n useEffect(() => {\n document.documentElement.lang = locale;\n document.documentElement.dir = locale === 'ar' ? 'rtl' : 'ltr';\n }, [locale]);\n\n useEffect(() => {\n try {\n window.localStorage.setItem(DEVICE_KEY, device);\n } catch {\n // A preference, nothing more.\n }\n }, [device]);\n\n return (\n <div className=\"te-shell\">\n <style>{EDITOR_CSS}</style>\n <TopBar\n schema={schema}\n t={t}\n locale={locale}\n path={path}\n device={device}\n onDevice={setDevice}\n onLocale={(code) => navigate(withLocale(path, code, frameBase))}\n onReload={() => navigate(path)}\n />\n <div className=\"te-body\">\n <Rail\n panel={panel}\n onPanel={(next) => {\n setPanel(next);\n setCollapsed(false);\n setAdding(false);\n }}\n collapsed={collapsed}\n onCollapsed={(next) => {\n setCollapsed(next);\n setAdding(false);\n }}\n t={t}\n />\n {/* Hidden, not unmounted: an open element and the list's scroll survive a toggle. */}\n <aside id={PANEL_ID} className=\"te-panel\" role=\"tabpanel\" hidden={collapsed}>\n {panel === 'builder' ? (\n <BuilderPanel\n schema={schema}\n t={t}\n locale={locale}\n isHome={isHomePath(path, frameBase)}\n onGoHome={() => navigate(homeOf(path, frameBase))}\n openId={openId}\n onOpenId={setOpenId}\n onAddElement={() => setAdding(true)}\n />\n ) : (\n <SettingsPanel schema={schema} t={t} />\n )}\n <div className=\"te-panel__foot\">\n {t.savedTo} <code>twilight.preview.json</code>\n </div>\n </aside>\n <PreviewCanvas\n frameRef={frameRef}\n frameKey={frameKey}\n src={src}\n device={device}\n title={pick(schema.themeName, locale) || 'Storefront'}\n />\n {adding && panel === 'builder' && (\n <AddElementDrawer\n schema={schema}\n t={t}\n locale={locale}\n onClose={closeAdding}\n onPick={(componentPath) => {\n const at = devSettingsStore.get().layout?.length ?? 0;\n setOpenId(devSettingsStore.addBlock(schema, componentPath));\n devSettingsStore.focusBlock(at);\n setAdding(false);\n }}\n />\n )}\n </div>\n </div>\n );\n}\n","/** Entry for the editor page the dev server serves at `/__twilight/editor`. */\n\nimport { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport type { DevSchema } from '../schema-types';\nimport { ThemeEditor } from './ThemeEditor';\n\nexport function mountThemeEditor(container: HTMLElement, schema: DevSchema): () => void {\n const root = createRoot(container);\n root.render(\n <StrictMode>\n <ThemeEditor schema={schema} />\n </StrictMode>\n );\n return () => root.unmount();\n}\n"]}
1
+ {"version":3,"sources":["../../../src/dev/editor/i18n.ts","../../../src/dev/editor/icons.tsx","../../../src/dev/editor/catalog.tsx","../../../src/dev/editor/AddElementDrawer.tsx","../../../src/dev/editor/live-actions.ts","../../../src/dev/editor/lookup.ts","../../../src/dev/editor/pickers.tsx","../../../src/dev/editor/fields.tsx","../../../src/dev/editor/BuilderPanel.tsx","../../../src/dev/editor/SettingsPanel.tsx","../../../src/dev/editor/paths.ts","../../../src/dev/editor/styles.ts","../../../src/dev/editor/ThemeEditor.tsx","../../../src/dev/editor/mount.tsx"],"names":["jsx","jsxs","useRef","useEffect","useId","useState","pick","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * The editor's own strings. It follows the storefront's language (the locale in\n * the framed page's path), like the dashboard editor follows the merchant's, so\n * an Arabic store gets an Arabic, right-to-left editor.\n */\n\nconst en = {\n homePage: 'Home page',\n builder: 'Page elements',\n showPanel: 'Show the side panel',\n hidePanel: 'Hide the side panel',\n settings: 'Theme settings',\n addElement: 'Add new element',\n pickFromStore: 'Choose from the store',\n change: 'Change',\n done: 'Done',\n searchStore: 'Search the store',\n searching: 'Searching…',\n noResults: 'Nothing found.',\n sampleNotice: 'Sample data: the dev store has none of these, or could not be reached.',\n sampleProducts:\n \"Sample products only show how the field works: the block fetches products from the store, so it can't display them.\",\n linkTo: 'Link to',\n typeUrl: 'URL',\n searchElements: 'Search elements',\n noMatches: 'No element matches that search.',\n close: 'Close',\n cancel: 'Cancel',\n storeLayoutHint:\n \"The home page shows the store's elements. Customize it to add, remove and reorder elements here.\",\n customize: 'Customize page elements',\n startEmpty: 'Start from an empty page',\n backToStore: \"Back to the store's elements\",\n confirm: 'Click again to confirm',\n noBlocks: 'No elements yet.',\n noFields: 'No editable fields.',\n storeBlock: 'store',\n notDeclared: \"Not declared in twilight.json, so it renders with the store's data as-is.\",\n back: 'Back',\n duplicate: 'Duplicate',\n remove: 'Remove',\n moveUp: 'Move up',\n moveDown: 'Move down',\n mobile: 'Mobile',\n desktop: 'Desktop',\n preview: 'Preview',\n saving: 'Saving…',\n saved: 'Saved',\n saveError: 'Could not save',\n savedTo: 'Changes save to',\n openStorefront: 'Open the storefront in a new tab',\n reload: 'Reload the preview',\n notHome: 'You are not on the home page.',\n goHome: 'Go to it',\n previewOff: 'Preview is off: turn it on to see your changes.',\n resetSettings: 'Reset settings to twilight.json defaults',\n noSettings: 'twilight.json declares no settings.',\n waitingForStore: 'Loading the home page…',\n items: (n: number) => `${n} item${n === 1 ? '' : 's'}`,\n item: 'Item',\n language: 'Language',\n outOfRange: (min?: number, max?: number) =>\n min !== undefined && max !== undefined\n ? `Between ${min} and ${max}.`\n : min !== undefined\n ? `At least ${min}.`\n : `At most ${max}.`,\n uploading: 'Uploading…',\n uploadFailed: 'Could not upload that image.',\n addItem: (label: string) => `Add ${label}`,\n minItems: (n: number) => `Needs at least ${n}.`,\n chooseImage: 'Choose an image from your computer',\n imageTooLarge: 'That image is over 5 MB. Use a smaller one, or paste its URL.',\n};\n\nexport type EditorStrings = typeof en;\n\nconst ar: EditorStrings = {\n homePage: 'الصفحة الرئيسية',\n builder: 'عناصر الصفحة',\n showPanel: 'إظهار القائمة الجانبية',\n hidePanel: 'إخفاء القائمة الجانبية',\n settings: 'إعدادات الثيم',\n addElement: 'إضافة عنصر جديد',\n pickFromStore: 'اختيار من المتجر',\n change: 'تغيير',\n done: 'تم',\n searchStore: 'ابحث في المتجر',\n searching: 'جارٍ البحث…',\n noResults: 'لا توجد نتائج.',\n sampleNotice: 'بيانات تجريبية: لا يحتوي متجر التطوير على هذه العناصر، أو تعذّر الوصول إليه.',\n sampleProducts:\n 'المنتجات التجريبية لتجربة الحقل فقط: العنصر يجلب المنتجات من المتجر، فلن يعرضها.',\n linkTo: 'الرابط إلى',\n typeUrl: 'رابط',\n searchElements: 'ابحث في العناصر',\n noMatches: 'لا يوجد عنصر يطابق البحث.',\n close: 'إغلاق',\n cancel: 'إلغاء',\n storeLayoutHint: 'تعرض الصفحة عناصر المتجر. خصّصها لتضيف العناصر وتحذفها وترتّبها من هنا.',\n customize: 'تخصيص عناصر الصفحة',\n startEmpty: 'البدء بصفحة فارغة',\n backToStore: 'العودة إلى عناصر المتجر',\n confirm: 'اضغط مرة أخرى للتأكيد',\n noBlocks: 'لا توجد عناصر بعد.',\n noFields: 'لا توجد حقول قابلة للتعديل.',\n storeBlock: 'من المتجر',\n notDeclared: 'غير معرّف في twilight.json، لذا يُعرض ببيانات المتجر كما هي.',\n back: 'رجوع',\n duplicate: 'تكرار',\n remove: 'حذف',\n moveUp: 'تحريك لأعلى',\n moveDown: 'تحريك لأسفل',\n mobile: 'الجوال',\n desktop: 'سطح المكتب',\n preview: 'المعاينة',\n saving: 'جارٍ الحفظ…',\n saved: 'تم الحفظ',\n saveError: 'تعذّر الحفظ',\n savedTo: 'تُحفظ التغييرات في',\n openStorefront: 'فتح المتجر في تبويب جديد',\n reload: 'إعادة تحميل المعاينة',\n notHome: 'أنت لست في الصفحة الرئيسية.',\n goHome: 'الذهاب إليها',\n previewOff: 'المعاينة متوقفة: فعّلها لترى تغييراتك.',\n resetSettings: 'استعادة الإعدادات الافتراضية من twilight.json',\n noSettings: 'لا يعرّف twilight.json أي إعدادات.',\n waitingForStore: 'جارٍ تحميل الصفحة الرئيسية…',\n items: (n: number) => `${n} عنصر`,\n item: 'عنصر',\n language: 'اللغة',\n outOfRange: (min?: number, max?: number) =>\n min !== undefined && max !== undefined\n ? `بين ${min} و ${max}.`\n : min !== undefined\n ? `${min} على الأقل.`\n : `${max} على الأكثر.`,\n uploading: 'جارٍ الرفع…',\n uploadFailed: 'تعذّر رفع الصورة.',\n addItem: (label: string) => `إضافة ${label}`,\n minItems: (n: number) => `يلزم ${n} على الأقل.`,\n chooseImage: 'اختيار صورة من جهازك',\n imageTooLarge: 'حجم الصورة أكبر من 5 ميجابايت. استخدم صورة أصغر أو الصق رابطها.',\n};\n\nconst STRINGS: Record<string, EditorStrings> = { ar, en };\n\nexport function stringsFor(locale: string): EditorStrings {\n return STRINGS[locale] ?? en;\n}\n\n/** Pick a `{ ar, en }` value in the editor's language, falling back to any. */\nexport function pick(values: Record<string, string> | undefined, locale: string): string {\n if (!values) return '';\n return values[locale] ?? values.ar ?? values.en ?? Object.values(values)[0] ?? '';\n}\n","/** Stroke icons for the editor chrome, 20px on a 24 grid, `currentColor`. */\n\nimport type { ReactElement, ReactNode } from 'react';\n\nfunction Icon({ children, size = 20 }: { children: ReactNode; size?: number }): ReactElement {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.7}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n {children}\n </svg>\n );\n}\n\nexport const HomeIcon = () => (\n <Icon>\n <path d=\"M3 10.5 12 3l9 7.5\" />\n <path d=\"M5 9v10a1 1 0 0 0 1 1h4v-6h4v6h4a1 1 0 0 0 1-1V9\" />\n </Icon>\n);\n\n/** A sidebar beside the page: its bar sits at the inline start, so it flips with the direction. */\nexport const SidebarIcon = () => (\n <span style={{ display: 'flex', transform: 'scaleX(var(--te-back-flip, 1))' }}>\n <Icon>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M9 4v16\" />\n </Icon>\n </span>\n);\n\nexport const PaletteIcon = () => (\n <Icon>\n <path d=\"M12 3a9 9 0 1 0 0 18c1 0 1.5-.8 1.5-1.6 0-1.3-1-1.6-1-2.6 0-.9.7-1.3 1.6-1.3H16a5 5 0 0 0 5-5C21 6.5 17 3 12 3Z\" />\n <circle cx=\"7.5\" cy=\"11\" r=\"1\" />\n <circle cx=\"10\" cy=\"7\" r=\"1\" />\n <circle cx=\"15\" cy=\"7.5\" r=\"1\" />\n </Icon>\n);\n\nexport const PhoneIcon = () => (\n <Icon>\n <rect x=\"7\" y=\"3\" width=\"10\" height=\"18\" rx=\"2\" />\n <path d=\"M11 17.5h2\" />\n </Icon>\n);\n\nexport const DesktopIcon = () => (\n <Icon>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"12\" rx=\"2\" />\n <path d=\"M8 20h8M12 16v4\" />\n </Icon>\n);\n\nexport const PlusCircleIcon = () => (\n <Icon>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 8v8M8 12h8\" />\n </Icon>\n);\n\nexport const GripIcon = () => (\n <Icon size={16}>\n <circle cx=\"9\" cy=\"6\" r=\"1\" />\n <circle cx=\"15\" cy=\"6\" r=\"1\" />\n <circle cx=\"9\" cy=\"12\" r=\"1\" />\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\n <circle cx=\"9\" cy=\"18\" r=\"1\" />\n <circle cx=\"15\" cy=\"18\" r=\"1\" />\n </Icon>\n);\n\nexport const BlockIcon = () => (\n <Icon>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <circle cx=\"9\" cy=\"10\" r=\"1.5\" />\n <path d=\"m21 16-5-5-8 8\" />\n </Icon>\n);\n\nexport const CopyIcon = () => (\n <Icon size={16}>\n <rect x=\"8\" y=\"8\" width=\"12\" height=\"12\" rx=\"2\" />\n <path d=\"M16 8V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2\" />\n </Icon>\n);\n\nexport const TrashIcon = () => (\n <Icon size={16}>\n <path d=\"M4 7h16M10 11v6M14 11v6M6 7l1 12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2l1-12M9 7V4h6v3\" />\n </Icon>\n);\n\nexport const ArrowUpIcon = () => (\n <Icon size={16}>\n <path d=\"M12 19V5M6 11l6-6 6 6\" />\n </Icon>\n);\n\nexport const ArrowDownIcon = () => (\n <Icon size={16}>\n <path d=\"M12 5v14M6 13l6 6 6-6\" />\n </Icon>\n);\n\n/** Points to the inline start: flips with the document direction. */\nexport const BackIcon = () => (\n <span style={{ display: 'flex', transform: 'scaleX(var(--te-back-flip, 1))' }}>\n <Icon>\n <path d=\"M15 6l-6 6 6 6\" />\n </Icon>\n </span>\n);\n\nexport const ReloadIcon = () => (\n <Icon size={18}>\n <path d=\"M20 11a8 8 0 1 0-2.3 5.7M20 4v7h-7\" />\n </Icon>\n);\n\nexport const ExternalIcon = () => (\n <Icon size={18}>\n <path d=\"M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5\" />\n </Icon>\n);\n\nexport const CloseIcon = () => (\n <Icon size={18}>\n <path d=\"M6 6l12 12M18 6 6 18\" />\n </Icon>\n);\n\nexport const SearchIcon = () => (\n <Icon size={18}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m20 20-3.5-3.5\" />\n </Icon>\n);\n","/** Looking up and labelling twilight.json components, shared by the page list and the add drawer. */\n\nimport type { ReactElement } from 'react';\nimport type { DevSchema, DevSchemaComponent } from '../schema-types';\nimport { blockPath } from '../dev-settings-store';\nimport { pick } from './i18n';\nimport { BlockIcon } from './icons';\n\nexport function componentFor(\n schema: DevSchema,\n path: string | undefined\n): DevSchemaComponent | undefined {\n return path ? schema.components.find((c) => blockPath(c.path) === blockPath(path)) : undefined;\n}\n\nexport function titleOf(\n component: DevSchemaComponent | undefined,\n path: string,\n locale: string\n): string {\n if (!component) return path;\n return pick(component.titles, locale) || component.title;\n}\n\n/** The component's own Salla icon (`sallaicons.css` is loaded by the editor page), else a generic one. */\nexport function ComponentIcon({\n component,\n}: {\n component: DevSchemaComponent | undefined;\n}): ReactElement {\n if (!component?.icon) return <BlockIcon />;\n return <i className={`te-sicon ${component.icon}`} aria-hidden />;\n}\n","/**\n * \"Add new element\": a wide drawer beside the side panel, over the preview,\n * like the dashboard's. Every twilight.json component as a card with its\n * preview image (`image`) and icon, filtered by a search box.\n */\n\nimport { useEffect, useId, useMemo, useRef, useState, type ReactElement } from 'react';\nimport type { DevSchema, DevSchemaComponent } from '../schema-types';\nimport { ComponentIcon, titleOf } from './catalog';\nimport type { EditorStrings } from './i18n';\nimport { CloseIcon, SearchIcon } from './icons';\n\nexport interface AddElementDrawerProps {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n onPick: (path: string) => void;\n onClose: () => void;\n}\n\n/** Every spelling a search might use: both titles and the path. */\nfunction haystack(component: DevSchemaComponent): string {\n return [component.title, ...Object.values(component.titles ?? {}), component.path]\n .join(' ')\n .toLowerCase();\n}\n\nfunction Card({\n component,\n locale,\n onPick,\n}: {\n component: DevSchemaComponent;\n locale: string;\n onPick: () => void;\n}) {\n const [broken, setBroken] = useState(false);\n const title = titleOf(component, component.path, locale);\n return (\n <button type=\"button\" className=\"te-card\" onClick={onPick}>\n <span className=\"te-card__title\">\n <span className=\"te-card__icon\">\n <ComponentIcon component={component} />\n </span>\n {title}\n </span>\n <span className=\"te-card__preview\">\n {component.image && !broken ? (\n <img src={component.image} alt=\"\" loading=\"lazy\" onError={() => setBroken(true)} />\n ) : (\n <span className=\"te-card__placeholder\">\n <ComponentIcon component={component} />\n </span>\n )}\n </span>\n </button>\n );\n}\n\nexport function AddElementDrawer({\n schema,\n t,\n locale,\n onPick,\n onClose,\n}: AddElementDrawerProps): ReactElement {\n const searchId = useId();\n const [query, setQuery] = useState('');\n const search = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n search.current?.focus();\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onClose();\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [onClose]);\n\n // Each component's searchable text, built once per schema rather than per keystroke and word.\n const indexed = useMemo(\n () => schema.components.map((component) => ({ component, text: haystack(component) })),\n [schema.components]\n );\n const shown = useMemo(() => {\n const words = query.trim().toLowerCase().split(/\\s+/).filter(Boolean);\n if (!words.length) return schema.components;\n return indexed\n .filter(({ text }) => words.every((word) => text.includes(word)))\n .map(({ component }) => component);\n }, [schema.components, indexed, query]);\n\n return (\n // A non-modal <dialog>, open as rendered: the preview beside it stays usable.\n <dialog open className=\"te-drawer\" aria-label={t.addElement}>\n <header className=\"te-drawer__head\">\n <h2>{t.addElement}</h2>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--danger-outline\"\n aria-label={t.close}\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n </header>\n <label className=\"te-search\" htmlFor={searchId}>\n <SearchIcon />\n <input\n ref={search}\n id={searchId}\n type=\"search\"\n placeholder={t.searchElements}\n aria-label={t.searchElements}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n />\n </label>\n <div className=\"te-drawer__body\">\n {shown.length === 0 ? (\n <p className=\"te-hint\">{t.noMatches}</p>\n ) : (\n <div className=\"te-cards\">\n {shown.map((component) => (\n <Card\n key={component.path}\n component={component}\n locale={locale}\n onPick={() => onPick(component.path)}\n />\n ))}\n </div>\n )}\n </div>\n </dialog>\n );\n}\n","/**\n * The storefront's live editor bar, inside this editor's frame: it sends the\n * same `preview::*` messages it sends the merchant's editor, and this turns\n * them into edits of the home layout. The layout reaches the frame live, so\n * nothing reloads.\n */\n\nimport { useEffect, useRef, type RefObject } from 'react';\nimport { devSettingsStore } from '../dev-settings-store';\n\nexport interface LiveActionHandlers {\n /** Open the block's settings. */\n onEdit: (id: string) => void;\n /** Open the element picker, adding after block `afterId`. */\n onAdd: (afterId: string) => void;\n /** A block was removed. */\n onRemoved: (id: string) => void;\n /** The header or footer: their settings are the theme's. */\n onArea: (area: 'header' | 'footer') => void;\n}\n\ntype BlockKind = 'edit' | 'add' | 'moveup' | 'movedown' | 'duplicate' | 'delete';\n\ntype LiveMessage = { area: 'header' | 'footer' } | { kind: BlockKind; id: string };\n\nconst BLOCK_MESSAGE = /^preview::(edit|add|moveup|movedown|duplicate|delete)\\.component$/;\n\nfunction readMessage(data: unknown): LiveMessage | null {\n const { action, data: payload } = (data ?? {}) as { action?: unknown; data?: { id?: unknown } };\n if (action === 'preview::edit.header') return { area: 'header' };\n if (action === 'preview::edit.footer') return { area: 'footer' };\n const kind = typeof action === 'string' ? BLOCK_MESSAGE.exec(action)?.[1] : undefined;\n const id = payload?.id;\n return kind && typeof id === 'string' ? { kind: kind as BlockKind, id } : null;\n}\n\nfunction applyToBlock(kind: BlockKind, id: string, handlers: LiveActionHandlers): void {\n const index = (devSettingsStore.get().layout ?? []).findIndex((block) => block.id === id);\n // Not one of the layout's blocks: the store's own, before the layout was taken over.\n if (index === -1) return;\n\n if (kind === 'edit') handlers.onEdit(id);\n else if (kind === 'add') handlers.onAdd(id);\n else if (kind === 'duplicate') {\n devSettingsStore.duplicateBlock(id);\n devSettingsStore.focusBlock(index + 1);\n } else if (kind === 'delete') {\n devSettingsStore.removeBlock(id);\n handlers.onRemoved(id);\n } else {\n const to = kind === 'moveup' ? index - 1 : index + 1;\n devSettingsStore.moveBlock(id, to);\n devSettingsStore.focusBlock(to);\n }\n}\n\nexport function useLiveEditorActions(\n frameRef: RefObject<HTMLIFrameElement | null>,\n handlers: LiveActionHandlers\n): void {\n const latest = useRef(handlers);\n // After commit, so a render React discards never leaves its handlers behind.\n useEffect(() => {\n latest.current = handlers;\n });\n\n useEffect(() => {\n const onMessage = (event: MessageEvent) => {\n if (event.origin !== window.location.origin) return;\n if (!frameRef.current || event.source !== frameRef.current.contentWindow) return;\n const message = readMessage(event.data);\n if (!message) return;\n if ('area' in message) latest.current.onArea(message.area);\n else applyToBlock(message.kind, message.id, latest.current);\n };\n\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n }, [frameRef]);\n}\n","/**\n * What a picker searches: the real dev store through the frame\n * (`devSettingsStore.lookup`), or, when that can't answer or the store has\n * none, samples so the field can still be tried. Samples are marked, and their\n * ids are strings, never a store's numbers: a product block fetches products by\n * id, so a sample product shows the field working but renders nothing.\n */\n\nimport type { DevLookupItem, DevLookupSource } from '../schema-types';\nimport { devSettingsStore } from '../dev-settings-store';\n\nexport interface LookupOutcome {\n items: DevLookupItem[];\n /** The items are samples, not the store's. */\n sample: boolean;\n}\n\nconst COLORS = ['#0d9488', '#7c3aed', '#d97706', '#2563eb', '#db2777', '#059669'];\n\n/** A small square picture with the item's initial, so samples need no network. */\nfunction placeholder(name: string, index: number): string {\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"120\" height=\"120\">` +\n `<rect width=\"120\" height=\"120\" fill=\"${COLORS[index % COLORS.length]}\"/>` +\n `<text x=\"60\" y=\"76\" font-size=\"48\" font-family=\"sans-serif\" fill=\"#fff\" text-anchor=\"middle\">` +\n `${name.slice(0, 1)}</text></svg>`;\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\n}\n\nconst NAMES: Record<DevLookupSource, string[]> = {\n products: [\n 'Sample shirt',\n 'Sample sneakers',\n 'Sample watch',\n 'Sample bag',\n 'Sample perfume',\n 'Sample lamp',\n ],\n categories: ['Clothing', 'Shoes', 'Accessories', 'Home', 'Beauty', 'Electronics'],\n brands: ['Northwind', 'Contoso', 'Fabrikam', 'Tailspin', 'Litware', 'Adventure Works'],\n blog_articles: ['How to choose a gift', 'Spring collection notes', 'Care guide'],\n blog_categories: ['News', 'Guides', 'Stories'],\n};\n\nconst PATHS: Record<DevLookupSource, string> = {\n products: '/p',\n categories: '/c',\n brands: '/brands',\n blog_articles: '/blog',\n blog_categories: '/blog/category',\n};\n\nfunction sampleItem(source: DevLookupSource, name: string, index: number): DevLookupItem {\n const id = `sample-${source}-${index + 1}`;\n const url = `${PATHS[source]}/${id}`;\n const image = placeholder(name, index);\n const data: Record<string, unknown> = { id, name, url, sample: true };\n if (source === 'brands') data.logo = image;\n else if (source !== 'blog_categories') data.image = image;\n return { id, name, url, image, data };\n}\n\nexport function sampleItems(source: DevLookupSource, query = ''): DevLookupItem[] {\n const q = query.trim().toLowerCase();\n return (NAMES[source] ?? [])\n .map((name, index) => sampleItem(source, name, index))\n .filter((item) => !q || item.name.toLowerCase().includes(q));\n}\n\n/** Sources the store answered with nothing at all: searching them filters the samples. */\nconst emptyInStore = new Set<DevLookupSource>();\n\nexport async function searchSource(source: DevLookupSource, query: string): Promise<LookupOutcome> {\n try {\n const items = await devSettingsStore.lookup(source, query);\n if (items.length > 0) {\n emptyInStore.delete(source);\n return { items, sample: false };\n }\n // An empty store has nothing to pick: offer samples, and keep filtering them\n // as the developer types. A search a populated store can't match is a real answer.\n if (!query.trim()) emptyInStore.add(source);\n if (emptyInStore.has(source)) return { items: sampleItems(source, query), sample: true };\n return { items: [], sample: false };\n } catch {\n return { items: sampleItems(source, query), sample: true };\n }\n}\n\n/** Forget what the store had, e.g. between tests or after switching stores. */\nexport function resetStoreKnowledge(): void {\n emptyInStore.clear();\n}\n\n/** Link kinds a picker can search for; the rest are fixed pages or typed URLs. */\nexport const LINK_LOOKUPS: Partial<Record<string, DevLookupSource>> = {\n products: 'products',\n categories: 'categories',\n brands: 'brands',\n blog_articles: 'blog_articles',\n blog_categories: 'blog_categories',\n};\n\n/** Link kinds that point at one fixed storefront page. */\nexport const FIXED_LINKS: Partial<Record<string, string>> = {\n offers_link: '/offers',\n brands_link: '/brands',\n blog_link: '/blog',\n};\n","/**\n * Fields that pick from the store: `entities` (products, categories, brands)\n * and `link` (a URL to a product, category, page… or typed). Both search the\n * dev store through the frame and fall back to samples (see `lookup.ts`).\n */\n\nimport { useEffect, useId, useRef, useState, type ReactElement } from 'react';\nimport type { DevLookupItem, DevLookupSource } from '../schema-types';\nimport type { FieldProps } from './fields';\nimport type { EditorStrings } from './i18n';\nimport { FIXED_LINKS, LINK_LOOKUPS, searchSource, type LookupOutcome } from './lookup';\nimport { CloseIcon, PlusCircleIcon, SearchIcon } from './icons';\n\n/** Wait for a pause in typing before asking the store. */\nconst SEARCH_DELAY_MS = 250;\n\ntype Row = Record<string, unknown>;\n\nfunction rowId(row: unknown): string | number | undefined {\n const id = (row as Row | null)?.id;\n return typeof id === 'string' || typeof id === 'number' ? id : undefined;\n}\n\n/**\n * An id to compare by: the store sends some ids as numeric strings and blocks\n * save them as numbers, so `\"677\"` and `677` are the same product.\n */\nfunction idKey(id: string | number | undefined): string | undefined {\n return id === undefined ? undefined : String(id);\n}\n\n/** Keys for the picked chips: the item's id, numbered if it repeats; the name when it has none. */\nfunction chipKeys(rows: unknown[]): string[] {\n const seen = new Map<string, number>();\n return rows.map((row) => {\n const base = idKey(rowId(row)) ?? `name:${rowName(row)}`;\n const n = (seen.get(base) ?? 0) + 1;\n seen.set(base, n);\n return n === 1 ? base : `${base}#${n}`;\n });\n}\n\nfunction rowName(row: unknown): string {\n const name = (row as Row | null)?.name;\n return typeof name === 'string' ? name : String(rowId(row) ?? '');\n}\n\nfunction rowImage(row: unknown): string | undefined {\n const r = (row as Row | null) ?? {};\n const image = r.image ?? r.logo;\n return typeof image === 'string' && image ? image : undefined;\n}\n\n/** A search box over one store list, with its results. */\nfunction LookupSearch({\n source,\n t,\n isPicked,\n onPick,\n}: {\n source: DevLookupSource;\n t: EditorStrings;\n isPicked?: (item: DevLookupItem) => boolean;\n onPick: (item: DevLookupItem) => void;\n}) {\n const id = useId();\n const input = useRef<HTMLInputElement>(null);\n const [query, setQuery] = useState('');\n const [outcome, setOutcome] = useState<LookupOutcome | null>(null);\n const [searching, setSearching] = useState(true);\n\n // Opened by the developer's own click on \"Choose from the store\": put them in the box.\n useEffect(() => {\n input.current?.focus();\n }, []);\n\n useEffect(() => {\n let current = true;\n setSearching(true);\n const timer = setTimeout(() => {\n void searchSource(source, query).then((result) => {\n if (!current) return;\n setOutcome(result);\n setSearching(false);\n });\n }, SEARCH_DELAY_MS);\n return () => {\n current = false;\n clearTimeout(timer);\n };\n }, [source, query]);\n\n return (\n <div className=\"te-lookup\">\n <label className=\"te-search te-search--small\" htmlFor={id}>\n <SearchIcon />\n <input\n ref={input}\n id={id}\n type=\"search\"\n placeholder={t.searchStore}\n aria-label={t.searchStore}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n />\n </label>\n {outcome?.sample && (\n <p className=\"te-field__help te-field__help--warn\">\n {source === 'products' ? t.sampleProducts : t.sampleNotice}\n </p>\n )}\n {searching && <p className=\"te-field__help\">{t.searching}</p>}\n {!searching && outcome?.items.length === 0 && <p className=\"te-field__help\">{t.noResults}</p>}\n <ul className=\"te-lookup__results\">\n {outcome?.items.map((item) => {\n const picked = isPicked?.(item) ?? false;\n return (\n <li key={String(item.id)}>\n <button\n type=\"button\"\n className=\"te-lookup__item\"\n disabled={picked}\n aria-pressed={picked}\n onClick={() => onPick(item)}\n >\n {item.image ? (\n <img src={item.image} alt=\"\" loading=\"lazy\" />\n ) : (\n <span className=\"te-lookup__noimage\" />\n )}\n <span>{item.name}</span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\n/** Products, categories, brands or blog entries, in order, as the API hands them to a block. */\nexport function EntitiesField({ field, value, onChange, t }: FieldProps): ReactElement {\n const rows: unknown[] = Array.isArray(value) ? value : [];\n const [adding, setAdding] = useState(false);\n const max = field.multiple ? (field.max ?? Infinity) : 1;\n const min = field.min ?? 0;\n const source = field.source ?? 'products';\n const pickedIds = new Set(rows.map((row) => idKey(rowId(row))));\n const keys = chipKeys(rows);\n\n const pick = (item: DevLookupItem) => {\n if (!field.multiple) {\n onChange([item.data]);\n setAdding(false);\n return;\n }\n // Another tab may have filled the list while this picker stayed open.\n if (rows.length >= max) {\n setAdding(false);\n return;\n }\n const next = [...rows, item.data];\n onChange(next);\n if (next.length >= max) setAdding(false);\n };\n\n return (\n <div className=\"te-field\">\n <div className=\"te-field__label\">\n {field.label} {field.multiple && <span className=\"te-field__count\">({rows.length})</span>}\n </div>\n {field.description && <p className=\"te-field__help\">{field.description}</p>}\n {rows.length > 0 && (\n <ul className=\"te-chips\">\n {rows.map((row, index) => {\n const name = rowName(row);\n const image = rowImage(row);\n return (\n <li key={keys[index]} className=\"te-chip\">\n {image ? <img src={image} alt=\"\" /> : <span className=\"te-lookup__noimage\" />}\n <span className=\"te-chip__name\">{name}</span>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare te-icon-btn--danger\"\n aria-label={`${t.remove}: ${name}`}\n disabled={rows.length <= min}\n onClick={() => onChange(rows.filter((_, i) => i !== index))}\n >\n <CloseIcon />\n </button>\n </li>\n );\n })}\n </ul>\n )}\n {adding ? (\n <>\n <LookupSearch\n source={source}\n t={t}\n isPicked={(item) => field.multiple === true && pickedIds.has(idKey(item.id))}\n onPick={pick}\n />\n <button type=\"button\" className=\"te-btn te-btn--quiet\" onClick={() => setAdding(false)}>\n {t.done}\n </button>\n </>\n ) : (\n <button\n type=\"button\"\n className=\"te-add\"\n disabled={field.multiple === true && rows.length >= max}\n onClick={() => setAdding(true)}\n >\n <PlusCircleIcon />\n {field.multiple || rows.length === 0 ? t.pickFromStore : t.change}\n </button>\n )}\n {rows.length < min && (\n <p className=\"te-field__help te-field__help--error\">{t.minItems(min)}</p>\n )}\n </div>\n );\n}\n\n/** Which kind of link a saved URL most likely is, for showing it again. */\nfunction kindOf(url: string, kinds: string[]): string {\n const fixed = Object.entries(FIXED_LINKS).find(([, path]) => path === url)?.[0];\n if (fixed && kinds.includes(fixed)) return fixed;\n return kinds.includes('custom') ? 'custom' : (kinds[0] ?? 'custom');\n}\n\n/** Under a link: where it points now (when not typed in a box), then the field's own note. */\nfunction LinkNotes({ url, description }: { url: string; description?: string }) {\n return (\n <>\n {url && (\n <p className=\"te-field__help\" dir=\"ltr\">\n {url}\n </p>\n )}\n {description && <p className=\"te-field__help\">{description}</p>}\n </>\n );\n}\n\n/** A link: pick its kind, then the thing it points at, or type the URL. */\nexport function LinkField({ field, value, onChange, t }: FieldProps): ReactElement {\n const typeId = useId();\n const urlId = useId();\n const url = typeof value === 'string' ? value : '';\n const kinds = field.linkSources?.map((o) => o.value) ?? ['custom'];\n const [kind, setKind] = useState(() => kindOf(url, kinds));\n const [searching, setSearching] = useState(false);\n const lookup = LINK_LOOKUPS[kind];\n const fixed = FIXED_LINKS[kind];\n\n return (\n <div className=\"te-field\">\n <label className=\"te-field__label\" htmlFor={typeId}>\n {field.label}\n </label>\n <select\n id={typeId}\n className=\"te-input\"\n aria-label={`${field.label}: ${t.linkTo}`}\n value={kind}\n onChange={(e) => {\n const next = e.target.value;\n setKind(next);\n setSearching(LINK_LOOKUPS[next] !== undefined);\n if (FIXED_LINKS[next]) onChange(FIXED_LINKS[next]);\n }}\n >\n {(field.linkSources ?? [{ label: t.typeUrl, value: 'custom' }]).map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n {lookup && searching && (\n <LookupSearch\n source={lookup}\n t={t}\n onPick={(item) => {\n onChange(item.url ?? '');\n setSearching(false);\n }}\n />\n )}\n {lookup && !searching && (\n <button type=\"button\" className=\"te-add\" onClick={() => setSearching(true)}>\n <SearchIcon />\n {url ? t.change : t.pickFromStore}\n </button>\n )}\n {!lookup && !fixed && (\n <input\n id={urlId}\n type=\"text\"\n dir=\"ltr\"\n className=\"te-input te-input--spaced\"\n aria-label={`${field.label}: URL`}\n placeholder=\"https://\"\n value={url}\n onChange={(e) => onChange(e.target.value)}\n />\n )}\n <LinkNotes url={lookup || fixed ? url : ''} description={field.description} />\n </div>\n );\n}\n","/**\n * One editable twilight.json field, laid out like the dashboard's form: label\n * above control, the field's description under it. A collection renders its\n * items as collapsible cards, each made of the same fields.\n */\n\nimport { useEffect, useId, useRef, useState, type ReactElement, type ReactNode } from 'react';\nimport {\n conditionsMet,\n DEV_PREVIEW_IMAGE_ENDPOINT,\n DEV_PREVIEW_IMAGE_MAX_BYTES,\n type DevSchemaField,\n} from '../schema-types';\nimport { EntitiesField, LinkField } from './pickers';\nimport type { EditorStrings } from './i18n';\nimport { ArrowDownIcon, ArrowUpIcon, PlusCircleIcon, TrashIcon } from './icons';\n\n/** Same cap as the dev server's image endpoint. */\nconst MAX_IMAGE_BYTES = DEV_PREVIEW_IMAGE_MAX_BYTES;\n\ntype Row = Record<string, unknown>;\n\n/** A field's value in a block or collection row, falling back to its twilight.json default. */\nexport function blockValue(\n fields: DevSchemaField[],\n data: Record<string, unknown>,\n id: string\n): unknown {\n return id in data ? data[id] : fields.find((f) => f.id === id)?.default;\n}\n\nexport interface FieldProps {\n field: DevSchemaField;\n value: unknown;\n onChange: (value: unknown) => void;\n t: EditorStrings;\n}\n\nfunction Labeled({\n field,\n htmlFor,\n children,\n}: {\n field: DevSchemaField;\n htmlFor?: string;\n children: ReactNode;\n}) {\n return (\n <div className=\"te-field\">\n <label className=\"te-field__label\" htmlFor={htmlFor}>\n {field.label}\n </label>\n {children}\n {field.description && <p className=\"te-field__help\">{field.description}</p>}\n </div>\n );\n}\n\n/** Whether the component is still mounted, for work that finishes later. */\nfunction useOnScreen() {\n const onScreen = useRef(false);\n useEffect(() => {\n onScreen.current = true;\n return () => {\n onScreen.current = false;\n };\n }, []);\n return onScreen;\n}\n\ntype UploadState = 'idle' | 'uploading' | 'too-large' | 'failed';\n\n/** Store a picked image with the dev server, which answers with the URL it serves it at. */\nasync function uploadImage(file: File): Promise<string> {\n const res = await fetch(DEV_PREVIEW_IMAGE_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': file.type },\n body: file,\n });\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const { url } = (await res.json()) as { url?: unknown };\n if (typeof url !== 'string') throw new Error('no url');\n return url;\n}\n\nfunction ImageField({ field, value, onChange, t }: FieldProps) {\n const id = useId();\n const [upload, setUpload] = useState<UploadState>('idle');\n /** Bumped by every pick and every typed URL: an upload that finishes after either is stale. */\n const latestPick = useRef(0);\n const onScreen = useOnScreen();\n const url = typeof value === 'string' ? value : '';\n const pickImage = async (file: File) => {\n const pick = ++latestPick.current;\n setUpload('uploading');\n try {\n const uploaded = await uploadImage(file);\n // Applied only by the field that asked, while it is still on screen and\n // nothing newer was picked or typed into it; otherwise it would land on\n // whatever the developer has done since.\n if (!onScreen.current || pick !== latestPick.current) return;\n setUpload('idle');\n onChange(uploaded);\n } catch {\n if (onScreen.current && pick === latestPick.current) setUpload('failed');\n }\n };\n const message = {\n idle: null,\n uploading: t.uploading,\n 'too-large': t.imageTooLarge,\n failed: t.uploadFailed,\n }[upload];\n return (\n <Labeled field={field} htmlFor={id}>\n {url && <img className=\"te-image__preview\" src={url} alt=\"\" />}\n <input\n id={id}\n type=\"text\"\n dir=\"ltr\"\n className=\"te-input\"\n placeholder={field.placeholder ?? 'https://'}\n value={url}\n onChange={(e) => {\n latestPick.current += 1;\n setUpload('idle');\n onChange(e.target.value);\n }}\n />\n <label className=\"te-image__pick\">\n {t.chooseImage}\n <input\n type=\"file\"\n accept=\"image/png,image/jpeg,image/webp,image/gif,image/avif\"\n hidden\n onChange={(e) => {\n const file = e.target.files?.[0];\n e.target.value = '';\n if (!file) return;\n if (file.size > MAX_IMAGE_BYTES) {\n setUpload('too-large');\n return;\n }\n void pickImage(file);\n }}\n />\n </label>\n {message && (\n <p className={`te-field__help${upload === 'uploading' ? '' : ' te-field__help--error'}`}>\n {message}\n </p>\n )}\n </Labeled>\n );\n}\n\n/** What to call an item: its label and number, plus its first text value for recognition. */\nfunction itemTitle(field: DevSchemaField, row: Row, index: number, t: EditorStrings): string {\n const name = `${field.itemLabel ?? t.item} ${index + 1}`;\n const textField = field.fields?.find(\n (f) =>\n (f.kind === 'text' || f.kind === 'textarea') && typeof row[f.id] === 'string' && row[f.id]\n );\n return textField ? `${name} · ${String(row[textField.id])}` : name;\n}\n\nfunction newRow(field: DevSchemaField): Row {\n return Object.fromEntries(\n (field.fields ?? []).filter((f) => f.kind !== 'readonly').map((f) => [f.id, f.default])\n );\n}\n\nlet nextItemKey = 0;\nconst newItemKey = () => `item-${nextItemKey++}`;\n\n/**\n * React keys for a collection's rows. Rows carry no id, and an index key would\n * hand one item's input state to its neighbour on a remove or a move, so keep a\n * key per row and edit the keys alongside the rows. Rows changed from outside\n * (a reset, another tab) get fresh keys.\n */\nfunction useRowKeys(count: number): [string[], (keys: string[]) => void] {\n const [keys, setKeys] = useState(() => Array.from({ length: count }, newItemKey));\n if (keys.length !== count) {\n // Adjusting state while rendering, React's pattern for state derived from props.\n const fresh = Array.from({ length: count }, newItemKey);\n setKeys(fresh);\n return [fresh, setKeys];\n }\n return [keys, setKeys];\n}\n\nfunction ItemCard({\n field,\n row,\n index,\n total,\n open,\n t,\n onToggle,\n onMove,\n onRemove,\n onEdit,\n}: {\n field: DevSchemaField;\n row: Row;\n index: number;\n total: number;\n open: boolean;\n t: EditorStrings;\n onToggle: () => void;\n onMove: (to: number) => void;\n onRemove: (() => void) | undefined;\n onEdit: (fieldId: string, value: unknown) => void;\n}) {\n const title = itemTitle(field, row, index, t);\n return (\n <div className={`te-item${open ? ' te-item--open' : ''}`}>\n <div className=\"te-item__head\">\n <button type=\"button\" className=\"te-item__title\" aria-expanded={open} onClick={onToggle}>\n {title}\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.moveUp}: ${title}`}\n disabled={index === 0}\n onClick={() => onMove(index - 1)}\n >\n <ArrowUpIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.moveDown}: ${title}`}\n disabled={index === total - 1}\n onClick={() => onMove(index + 1)}\n >\n <ArrowDownIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare te-icon-btn--danger\"\n aria-label={`${t.remove}: ${title}`}\n disabled={!onRemove}\n onClick={onRemove}\n >\n <TrashIcon />\n </button>\n </div>\n {open && (\n <div className=\"te-item__body\">\n {field.fields\n ?.filter((sub) => conditionsMet(sub, (id) => blockValue(field.fields ?? [], row, id)))\n .map((sub) => (\n <Field\n key={sub.id}\n field={sub}\n t={t}\n value={blockValue(field.fields ?? [], row, sub.id)}\n onChange={(v) => onEdit(sub.id, v)}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction CollectionField({ field, value, onChange, t }: FieldProps) {\n const rows: Row[] = Array.isArray(value) ? (value as Row[]) : [];\n const [keys, setKeys] = useRowKeys(rows.length);\n // The latest rows and keys, for edits that finish later (an image upload):\n // applied to the item by its key on today's rows, never to the rows it began with.\n const latest = useRef({ rows, keys, onChange });\n const onScreen = useOnScreen();\n useEffect(() => {\n latest.current = { rows, keys, onChange };\n });\n const editItem = (key: string, fieldId: string, v: unknown) => {\n if (!onScreen.current) return; // left behind: its rows are no longer today's\n const { rows: now, keys: nowKeys, onChange: report } = latest.current;\n const at = nowKeys.indexOf(key);\n if (at === -1) return; // the item was removed meanwhile\n report(now.map((r, i) => (i === at ? { ...r, [fieldId]: v } : r)));\n };\n const [openKey, setOpenKey] = useState<string | null>(null);\n const min = field.min ?? 0;\n const max = field.max ?? Infinity;\n\n /** Apply the same edit to the rows and their keys. */\n const update = (edit: <T>(list: T[]) => T[]) => {\n setKeys(edit(keys));\n onChange(edit(rows));\n };\n const move = (from: number, to: number) =>\n update((list) => {\n const next = [...list];\n const [item] = next.splice(from, 1);\n next.splice(to, 0, item);\n return next;\n });\n\n return (\n <div className=\"te-field\">\n <div className=\"te-field__label\">\n {field.label} <span className=\"te-field__count\">({rows.length})</span>\n </div>\n {field.description && <p className=\"te-field__help\">{field.description}</p>}\n <div className=\"te-items\">\n {rows.map((row, index) => {\n const key = keys[index];\n return (\n <ItemCard\n key={key}\n field={field}\n row={row}\n index={index}\n total={rows.length}\n open={openKey === key}\n t={t}\n onToggle={() => setOpenKey(openKey === key ? null : key)}\n onMove={(to) => move(index, to)}\n onRemove={\n rows.length > min\n ? () => update((list) => list.filter((_, i) => i !== index))\n : undefined\n }\n onEdit={(fieldId, v) => editItem(key, fieldId, v)}\n />\n );\n })}\n </div>\n <button\n type=\"button\"\n className=\"te-add\"\n disabled={rows.length >= max}\n onClick={() => {\n const key = newItemKey();\n setKeys([...keys, key]);\n onChange([...rows, newRow(field)]);\n setOpenKey(key);\n }}\n >\n <PlusCircleIcon />\n {t.addItem(field.itemLabel ?? t.item)}\n </button>\n {rows.length < min && (\n <p className=\"te-field__help te-field__help--error\">{t.minItems(min)}</p>\n )}\n </div>\n );\n}\n\nfunction ToggleField({ field, value, onChange }: FieldProps) {\n const id = useId();\n return (\n <div className=\"te-field\">\n <label className=\"te-field--row\" htmlFor={id}>\n <span className=\"te-field__label\">{field.label}</span>\n <input\n id={id}\n type=\"checkbox\"\n className=\"te-checkbox\"\n checked={Boolean(value)}\n onChange={(e) => onChange(e.target.checked)}\n />\n </label>\n {field.description && <p className=\"te-field__help\">{field.description}</p>}\n </div>\n );\n}\n\nfunction SelectField({ field, value, onChange }: FieldProps) {\n const id = useId();\n return (\n <Labeled field={field} htmlFor={id}>\n <select\n id={id}\n className=\"te-input\"\n value={value == null ? '' : String(value)}\n onChange={(e) => onChange(e.target.value)}\n >\n {field.options?.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n </Labeled>\n );\n}\n\nfunction TextField({ field, value, onChange }: FieldProps) {\n const id = useId();\n const common = {\n id,\n className: 'te-input',\n placeholder: field.placeholder,\n value: value == null ? '' : String(value),\n };\n return (\n <Labeled field={field} htmlFor={id}>\n {field.kind === 'textarea' ? (\n <textarea {...common} rows={3} onChange={(e) => onChange(e.target.value)} />\n ) : (\n <input {...common} type=\"text\" onChange={(e) => onChange(e.target.value)} />\n )}\n </Labeled>\n );\n}\n\n/** A number within the field's limits, or why not. */\nfunction checkNumber(field: DevSchemaField, raw: string): { value: number | null; ok: boolean } {\n if (raw.trim() === '') return { value: null, ok: true };\n const value = Number(raw);\n const ok =\n Number.isFinite(value) &&\n (field.min === undefined || value >= field.min) &&\n (field.max === undefined || value <= field.max);\n return { value, ok };\n}\n\n/**\n * Keeps what is typed, and only hands a value on while it is within the\n * field's limits; `min`/`max` on the input alone don't stop a typed `9`.\n */\nfunction NumberField({ field, value, onChange, t }: FieldProps) {\n const id = useId();\n const shown = typeof value === 'number' ? String(value) : '';\n const [draft, setDraft] = useState(shown);\n const [seen, setSeen] = useState(shown);\n // The saved value changed from outside (a reset, another tab): show it. Text\n // typed here that isn't valid yet doesn't change the saved value, so it stays.\n if (shown !== seen) {\n setSeen(shown);\n setDraft(shown);\n }\n const { ok } = checkNumber(field, draft);\n return (\n <Labeled field={field} htmlFor={id}>\n <input\n id={id}\n type=\"number\"\n className=\"te-input\"\n min={field.min}\n max={field.max}\n placeholder={field.placeholder}\n aria-invalid={!ok}\n value={draft}\n onChange={(e) => {\n setDraft(e.target.value);\n const checked = checkNumber(field, e.target.value);\n if (checked.ok) onChange(checked.value);\n }}\n />\n {!ok && (\n <p className=\"te-field__help te-field__help--error\">{t.outOfRange(field.min, field.max)}</p>\n )}\n </Labeled>\n );\n}\n\n/** Not editable here: say what's there, since the block still renders with it. */\nfunction ReadonlyField({ field, value, t }: FieldProps) {\n const count = Array.isArray(value) ? `${t.items(value.length)} · ` : '';\n return (\n <div className=\"te-field te-field--row\">\n <span className=\"te-field__label\">{field.label}</span>\n <span className=\"te-field__readonly\">\n {count}\n {field.note ?? '—'}\n </span>\n </div>\n );\n}\n\nconst FIELDS: Record<DevSchemaField['kind'], (props: FieldProps) => ReactElement> = {\n toggle: ToggleField,\n select: SelectField,\n text: TextField,\n textarea: TextField,\n number: NumberField,\n image: ImageField,\n collection: CollectionField,\n entities: EntitiesField,\n link: LinkField,\n readonly: ReadonlyField,\n};\n\nexport function Field(props: FieldProps): ReactElement {\n const Control = FIELDS[props.field.kind] ?? ReadonlyField;\n return <Control {...props} />;\n}\n","/**\n * \"Page elements\": the home page's blocks. Three views, like the dashboard:\n * the list (drag to reorder, add, remove), one block's fields, and the picker\n * of twilight.json components to add.\n */\n\nimport { useState, type ReactElement } from 'react';\nimport {\n conditionsMet,\n type DevPreviewBlock,\n type DevSchema,\n type DevSchemaComponent,\n} from '../schema-types';\nimport { devSettingsStore, useDevEditorMeta, useDevSettingsState } from '../dev-settings-store';\nimport { blockValue, Field } from './fields';\nimport type { EditorStrings } from './i18n';\nimport { ComponentIcon, componentFor, titleOf } from './catalog';\nimport {\n ArrowDownIcon,\n ArrowUpIcon,\n BackIcon,\n CopyIcon,\n GripIcon,\n PlusCircleIcon,\n TrashIcon,\n} from './icons';\n\ninterface PanelProps {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n isHome: boolean;\n onGoHome: () => void;\n /** The block open in the panel, if any. Held by the shell so the add drawer can open a new one. */\n openId: string | null;\n onOpenId: (id: string | null) => void;\n /** Open the drawer of twilight.json components to add. */\n onAddElement: () => void;\n}\n\nfunction PanelHead({ title, onBack, t }: { title: string; onBack?: () => void; t: EditorStrings }) {\n return (\n <div className=\"te-panel__head\">\n {onBack && (\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n onClick={onBack}\n aria-label={t.back}\n >\n <BackIcon />\n </button>\n )}\n <span>{title}</span>\n </div>\n );\n}\n\n/** One row in the list: drag it, open it, or act on it from its hover buttons. */\nfunction BlockRow({\n block,\n index,\n total,\n title,\n component,\n dragging,\n t,\n onOpen,\n onDragStart,\n onDragEnd,\n onDropAt,\n}: {\n block: DevPreviewBlock;\n index: number;\n total: number;\n title: string;\n /** Its twilight.json component; none for a block only the store knows. */\n component: DevSchemaComponent | undefined;\n dragging: boolean;\n t: EditorStrings;\n onOpen: () => void;\n onDragStart: () => void;\n onDragEnd: () => void;\n onDropAt: (index: number) => void;\n}) {\n const [over, setOver] = useState(false);\n const className = ['te-block', over && 'te-block--over', dragging && 'te-block--dragging']\n .filter(Boolean)\n .join(' ');\n return (\n <div\n className={className}\n draggable\n onDragStart={(e) => {\n e.dataTransfer.effectAllowed = 'move';\n onDragStart();\n }}\n onDragEnd={onDragEnd}\n onDragOver={(e) => {\n e.preventDefault();\n setOver(true);\n }}\n onDragLeave={() => setOver(false)}\n onDrop={(e) => {\n e.preventDefault();\n setOver(false);\n onDropAt(index);\n }}\n >\n <span className=\"te-block__grip\">\n <GripIcon />\n </span>\n <span className=\"te-block__icon\">\n <ComponentIcon component={component} />\n </span>\n <button type=\"button\" className=\"te-block__title\" onClick={onOpen}>\n {title}\n {!component && <span className=\"te-block__tag\"> · {t.storeBlock}</span>}\n </button>\n <span className=\"te-block__actions\">\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.moveUp}: ${title}`}\n disabled={index === 0}\n onClick={() => devSettingsStore.moveBlock(block.id, index - 1)}\n >\n <ArrowUpIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.moveDown}: ${title}`}\n disabled={index === total - 1}\n onClick={() => devSettingsStore.moveBlock(block.id, index + 1)}\n >\n <ArrowDownIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare\"\n aria-label={`${t.duplicate}: ${title}`}\n onClick={() => devSettingsStore.duplicateBlock(block.id)}\n >\n <CopyIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--bare te-icon-btn--danger\"\n aria-label={`${t.remove}: ${title}`}\n onClick={() => devSettingsStore.removeBlock(block.id)}\n >\n <TrashIcon />\n </button>\n </span>\n </div>\n );\n}\n\n/**\n * Keys for the store's read-only rows: the block's path, numbered when it\n * repeats (`brands`, `brands#2`). The API sends no id, and the list is never\n * reordered here.\n */\nfunction storeRowKeys(blocks: { path?: string }[]) {\n const seen = new Map<string, number>();\n return blocks.map((block, index) => {\n const path = block.path ?? '';\n const n = (seen.get(path) ?? 0) + 1;\n seen.set(path, n);\n return { key: n === 1 ? path : `${path}#${n}`, block, index };\n });\n}\n\n/** Before the developer takes over: the store's blocks, read-only, and the ways to start. */\nfunction StoreLayout({\n schema,\n t,\n locale,\n isHome,\n}: Pick<PanelProps, 'schema' | 't' | 'locale' | 'isHome'>) {\n const { liveBlocks } = useDevEditorMeta();\n return (\n <>\n <div className=\"te-section-title\">{t.builder}</div>\n {liveBlocks &&\n storeRowKeys(liveBlocks).map(({ key, block, index }) => (\n <div key={key} className=\"te-block te-block--static\">\n <span className=\"te-block__icon\">\n <ComponentIcon component={componentFor(schema, block.path)} />\n </span>\n <button\n type=\"button\"\n className=\"te-block__title\"\n onClick={() => devSettingsStore.focusBlock(index)}\n >\n {titleOf(componentFor(schema, block.path), block.path ?? '', locale)}\n </button>\n </div>\n ))}\n {!liveBlocks && isHome && <p className=\"te-hint\">{t.waitingForStore}</p>}\n <p className=\"te-hint\">{t.storeLayoutHint}</p>\n <button\n type=\"button\"\n className=\"te-btn te-btn--primary\"\n onClick={() => devSettingsStore.customizeLayout(schema)}\n >\n {t.customize}\n </button>\n <button type=\"button\" className=\"te-btn\" onClick={() => devSettingsStore.startEmptyLayout()}>\n {t.startEmpty}\n </button>\n </>\n );\n}\n\nfunction BlockList({\n schema,\n t,\n locale,\n layout,\n onOpen,\n onAdd,\n}: {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n layout: DevPreviewBlock[];\n onOpen: (id: string) => void;\n onAdd: () => void;\n}) {\n const [dragId, setDragId] = useState<string | null>(null);\n return (\n <>\n <div className=\"te-section-title\">{t.builder}</div>\n {layout.length === 0 && <p className=\"te-hint\">{t.noBlocks}</p>}\n {layout.map((block, index) => {\n const component = componentFor(schema, block.path);\n return (\n <BlockRow\n key={block.id}\n block={block}\n index={index}\n total={layout.length}\n title={titleOf(component, block.path, locale)}\n component={component}\n dragging={dragId === block.id}\n t={t}\n onOpen={() => onOpen(block.id)}\n onDragStart={() => setDragId(block.id)}\n onDragEnd={() => setDragId(null)}\n onDropAt={(to) => {\n if (dragId) devSettingsStore.moveBlock(dragId, to);\n setDragId(null);\n }}\n />\n );\n })}\n {schema.components.length > 0 && (\n <button type=\"button\" className=\"te-add\" onClick={onAdd}>\n <PlusCircleIcon />\n {t.addElement}\n </button>\n )}\n </>\n );\n}\n\n/** Pinned under the list: drop the dev layout and show the store's own blocks again. Asks twice. */\nfunction BackToStore({ t }: { t: EditorStrings }) {\n const [confirming, setConfirming] = useState(false);\n return (\n <div className=\"te-panel__actions\">\n <button\n type=\"button\"\n className={`te-btn te-btn--quiet${confirming ? ' te-btn--danger' : ''}`}\n onClick={() => {\n if (!confirming) {\n setConfirming(true);\n return;\n }\n setConfirming(false);\n devSettingsStore.clearLayout();\n }}\n onBlur={() => setConfirming(false)}\n >\n {confirming ? t.confirm : t.backToStore}\n </button>\n </div>\n );\n}\n\nfunction BlockEditor({\n schema,\n t,\n locale,\n block,\n index,\n total,\n onBack,\n}: {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n block: DevPreviewBlock;\n index: number;\n total: number;\n onBack: () => void;\n}) {\n const component = componentFor(schema, block.path);\n const title = titleOf(component, block.path, locale);\n return (\n <>\n <PanelHead title={title} onBack={onBack} t={t} />\n <div className=\"te-panel__body\">\n <div style={{ display: 'flex', gap: 4, margin: '0 4px 6px' }}>\n <button\n type=\"button\"\n className=\"te-icon-btn\"\n aria-label={`${t.moveUp}: ${title}`}\n disabled={index === 0}\n onClick={() => devSettingsStore.moveBlock(block.id, index - 1)}\n >\n <ArrowUpIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn\"\n aria-label={`${t.moveDown}: ${title}`}\n disabled={index === total - 1}\n onClick={() => devSettingsStore.moveBlock(block.id, index + 1)}\n >\n <ArrowDownIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn\"\n aria-label={`${t.duplicate}: ${title}`}\n onClick={() => devSettingsStore.duplicateBlock(block.id)}\n >\n <CopyIcon />\n </button>\n <button\n type=\"button\"\n className=\"te-icon-btn te-icon-btn--danger\"\n aria-label={`${t.remove}: ${title}`}\n onClick={() => {\n devSettingsStore.removeBlock(block.id);\n onBack();\n }}\n >\n <TrashIcon />\n </button>\n </div>\n {!component && <p className=\"te-hint\">{t.notDeclared}</p>}\n {component && component.fields.length === 0 && <p className=\"te-hint\">{t.noFields}</p>}\n {component?.fields\n .filter((f) => conditionsMet(f, (id) => blockValue(component.fields, block.fields, id)))\n .map((f) => (\n <Field\n key={f.id}\n field={f}\n t={t}\n value={blockValue(component.fields, block.fields, f.id)}\n onChange={(v) => {\n // An edit you can't see looks broken: editing turns the preview on.\n if (!devSettingsStore.get().enabled) devSettingsStore.enable(schema);\n devSettingsStore.setBlockField(block.id, f.id, v);\n }}\n />\n ))}\n </div>\n </>\n );\n}\n\nexport function BuilderPanel({\n schema,\n t,\n locale,\n isHome,\n onGoHome,\n openId,\n onOpenId,\n onAddElement,\n}: PanelProps): ReactElement {\n const store = useDevSettingsState();\n const layout = store.layout;\n\n const index = layout && openId ? layout.findIndex((block) => block.id === openId) : -1;\n if (layout && index !== -1) {\n return (\n <BlockEditor\n schema={schema}\n t={t}\n locale={locale}\n block={layout[index]}\n index={index}\n total={layout.length}\n onBack={() => onOpenId(null)}\n />\n );\n }\n\n return (\n <>\n <PanelHead title={t.homePage} t={t} />\n <div className=\"te-panel__body\">\n {!isHome && (\n <div className=\"te-note\">\n {t.notHome}\n <button type=\"button\" onClick={onGoHome}>\n {t.goHome}\n </button>\n </div>\n )}\n {layout && !store.enabled && <div className=\"te-note\">{t.previewOff}</div>}\n {layout ? (\n <BlockList\n schema={schema}\n t={t}\n locale={locale}\n layout={layout}\n onOpen={(id) => {\n onOpenId(id);\n devSettingsStore.focusBlock(layout.findIndex((block) => block.id === id));\n }}\n onAdd={onAddElement}\n />\n ) : (\n <StoreLayout schema={schema} t={t} locale={locale} isHome={isHome} />\n )}\n </div>\n {layout && <BackToStore t={t} />}\n </>\n );\n}\n","/** \"Theme settings\": every setting twilight.json declares, merged into the live theme. */\n\nimport type { ReactElement } from 'react';\nimport { conditionsMet, type DevSchema, type DevSchemaField } from '../schema-types';\nimport { devSettingsStore, useDevSettingsState } from '../dev-settings-store';\nimport { Field } from './fields';\nimport type { EditorStrings } from './i18n';\n\nexport function SettingsPanel({\n schema,\n t,\n}: {\n schema: DevSchema;\n t: EditorStrings;\n}): ReactElement {\n const store = useDevSettingsState();\n const valueOf = (f: DevSchemaField) =>\n f.id in store.settings ? store.settings[f.id] : f.default;\n const byId = new Map(schema.settings.map((f) => [f.id, f]));\n // A field whose twilight.json `conditions` don't hold is hidden, like in the dashboard.\n const visible = schema.settings.filter((f) =>\n conditionsMet(f, (id) => {\n const other = byId.get(id);\n return other ? valueOf(other) : store.settings[id];\n })\n );\n\n return (\n <>\n <div className=\"te-panel__head\">\n <span>{t.settings}</span>\n </div>\n <div className=\"te-panel__body\">\n {!store.enabled && <div className=\"te-note\">{t.previewOff}</div>}\n {schema.settings.length === 0 && <p className=\"te-hint\">{t.noSettings}</p>}\n {visible.map((f) => (\n <Field\n key={f.id}\n field={f}\n t={t}\n value={valueOf(f)}\n onChange={(v) => {\n // An edit you can't see looks broken: editing turns the preview on.\n if (!store.enabled) devSettingsStore.enable(schema);\n devSettingsStore.setSetting(f.id, v);\n }}\n />\n ))}\n {schema.settings.length > 0 && (\n <button\n type=\"button\"\n className=\"te-btn te-btn--quiet\"\n onClick={() => devSettingsStore.resetSettings(schema)}\n >\n {t.resetSettings}\n </button>\n )}\n </div>\n </>\n );\n}\n","/**\n * Reading a storefront path from the outside. On a host that serves many stores\n * the store is the first segment (`/3saf.com/ar/cart`, see `utils/store-base.ts`),\n * and only the storefront knows for sure which segment that is: the frame\n * reports its resolved base to the editor (`DevEditorMeta.frameBase`). Until it\n * has, these helpers fall back to finding the language in the first or second\n * segment.\n */\n\nconst LOCALES = ['ar', 'en'] as const;\nexport type EditorLocale = (typeof LOCALES)[number];\n\ninterface ParsedPath {\n /** The store's segment in front of the application path, if any. */\n base: string | null;\n locale: EditorLocale | null;\n /** Segments after the language. */\n rest: string[];\n /** Everything from the first `?` or `#` on, kept as-is. */\n suffix: string;\n}\n\nfunction isLocale(segment: string | undefined): segment is EditorLocale {\n return (LOCALES as readonly string[]).includes(segment ?? '');\n}\n\nfunction splitSuffix(path: string): [string, string] {\n const at = path.search(/[?#]/);\n return at === -1 ? [path, ''] : [path.slice(0, at), path.slice(at)];\n}\n\n/**\n * @param base - the store segment the frame resolved; `undefined` when not known\n * yet (guess from the language's position), `null` when the frame has none.\n */\nexport function parseStorePath(path: string, base?: string | null): ParsedPath {\n const [pathname, suffix] = splitSuffix(path);\n let segments = pathname.split('/').filter(Boolean);\n let storeBase: string | null = null;\n\n if (base !== undefined) {\n if (base && segments[0] === base) {\n storeBase = base;\n segments = segments.slice(1);\n }\n } else if (!isLocale(segments[0]) && isLocale(segments[1])) {\n storeBase = segments[0];\n segments = segments.slice(1);\n }\n\n const locale = isLocale(segments[0]) ? segments[0] : null;\n return { base: storeBase, locale, rest: segments.slice(locale ? 1 : 0), suffix };\n}\n\nfunction join(base: string | null, segments: string[], suffix = ''): string {\n return `/${[...(base ? [base] : []), ...segments].join('/')}${suffix}`;\n}\n\n/**\n * A path on this origin, never anywhere else: `?path=` must not frame another\n * site. Resolving it as a URL catches what a prefix check misses (`/\\evil.com`).\n */\nexport function safePath(raw: string | null | undefined, origin?: string): string {\n if (!raw) return '/ar';\n const here =\n origin ?? (typeof window !== 'undefined' ? window.location.origin : 'http://localhost');\n try {\n const url = new URL(raw, here);\n if (url.origin !== new URL(here).origin) return '/ar';\n return `${url.pathname}${url.search}${url.hash}`;\n } catch {\n return '/ar';\n }\n}\n\n/** The page's language, Arabic (the storefront default) when the path names none. */\nexport function localeOf(path: string, base?: string | null): EditorLocale {\n return parseStorePath(path, base).locale ?? 'ar';\n}\n\nexport function isHomePath(path: string, base?: string | null): boolean {\n return parseStorePath(path, base).rest.length === 0;\n}\n\n/** The same page in another language, on the same store. */\nexport function withLocale(path: string, locale: EditorLocale, base?: string | null): string {\n const parsed = parseStorePath(path, base);\n return join(parsed.base, [locale, ...parsed.rest], parsed.suffix);\n}\n\n/** This store's home page, in this page's language. */\nexport function homeOf(path: string, base?: string | null): string {\n const parsed = parseStorePath(path, base);\n return join(parsed.base, [parsed.locale ?? 'ar']);\n}\n\n/**\n * The address for opening the preview page on its own, in a new tab. The dev\n * server opens the editor for a page load of `/` (see `twilight-schema.plugin`),\n * so the store's root gets `editor=off`; every other page opens as itself.\n */\nexport function standaloneHref(path: string): string {\n const [pathname, suffix] = splitSuffix(path);\n if (pathname !== '/' && pathname !== '') return path;\n const hashAt = suffix.indexOf('#');\n const query = hashAt === -1 ? suffix : suffix.slice(0, hashAt);\n const hash = hashAt === -1 ? '' : suffix.slice(hashAt);\n const params = new URLSearchParams(query.replace(/^\\?/, ''));\n params.set('editor', 'off');\n return `/?${params.toString()}${hash}`;\n}\n","/**\n * The editor's stylesheet. The editor is its own page (`/__twilight/editor`),\n * so it owns the whole document and can use plain class names, prefixed `te-`\n * so nothing it renders could match the theme's CSS by accident. Colors follow\n * the Salla dashboard's editor: a teal accent on white, a dotted canvas.\n */\nexport 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×844), 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`;\n","/**\n * The local theme editor, laid out like the Salla dashboard's: a top bar (theme,\n * page, phone/desktop switch, save state), an icon rail that switches the side\n * panel between the home page's elements and the theme settings, and the\n * storefront in a frame on a dotted canvas.\n *\n * The storefront runs in an iframe so the phone switch is real: the frame's\n * width is the page's viewport, so the theme's own breakpoints apply. Edits\n * reach the frame over the store's `BroadcastChannel` (see\n * `dev-settings-store.ts`); this page never touches the frame's DOM.\n */\n\nimport { useCallback, useEffect, useRef, useState, type ReactElement, type RefObject } from 'react';\nimport { DEV_EDITOR_FRAME_ATTR, type DevSchema } from '../schema-types';\nimport { devSettingsStore, useDevEditorMeta, useDevSettingsState } from '../dev-settings-store';\nimport { AddElementDrawer } from './AddElementDrawer';\nimport { useLiveEditorActions } from './live-actions';\nimport { BuilderPanel } from './BuilderPanel';\nimport { SettingsPanel } from './SettingsPanel';\nimport { pick, stringsFor, type EditorStrings } from './i18n';\nimport {\n homeOf,\n isHomePath,\n localeOf,\n safePath,\n standaloneHref,\n withLocale,\n type EditorLocale,\n} from './paths';\nimport {\n DesktopIcon,\n ExternalIcon,\n HomeIcon,\n PaletteIcon,\n PhoneIcon,\n ReloadIcon,\n SidebarIcon,\n} from './icons';\nimport { EDITOR_CSS } from './styles';\n\nexport interface ThemeEditorProps {\n schema: DevSchema;\n /** Storefront path to open first. Default: `?path=` from the URL, else `/ar`. */\n initialPath?: string;\n}\n\ntype Panel = 'builder' | 'settings';\ntype Device = 'mobile' | 'desktop';\n\nconst DEVICE_KEY = 'twilight:editor-device';\nconst PANEL_KEY = 'twilight:editor-panel';\nconst PANEL_ID = 'te-panel';\n/** How often to read the frame's address: client-side navigation fires no load event. */\nconst PATH_POLL_MS = 500;\n\nfunction readDevice(): Device {\n if (typeof window === 'undefined') return 'mobile';\n try {\n return window.localStorage.getItem(DEVICE_KEY) === 'desktop' ? 'desktop' : 'mobile';\n } catch {\n return 'mobile';\n }\n}\n\n/** Whether the developer last hid the side panel, to give the preview the room. */\nfunction readCollapsed(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return window.localStorage.getItem(PANEL_KEY) === 'collapsed';\n } catch {\n return false;\n }\n}\n\nfunction usePanelCollapsed() {\n const [collapsed, setCollapsed] = useState(readCollapsed);\n useEffect(() => {\n try {\n window.localStorage.setItem(PANEL_KEY, collapsed ? 'collapsed' : 'open');\n } catch {\n // A preference, nothing more.\n }\n }, [collapsed]);\n return [collapsed, setCollapsed] as const;\n}\n\nfunction readInitialPath(initialPath: string | undefined): string {\n if (initialPath !== undefined || typeof window === 'undefined') return safePath(initialPath);\n return safePath(new URLSearchParams(window.location.search).get('path'));\n}\n\n/**\n * Where the frame is. `src` only changes when the editor sends the frame\n * somewhere (and remounts it); `path` follows the frame around, and is kept in\n * the editor's own URL so a reload reopens the same page.\n */\nfunction useFramePath(initialPath: string | undefined) {\n const [src, setSrc] = useState(() => readInitialPath(initialPath));\n const [path, setPath] = useState(src);\n const [frameKey, setFrameKey] = useState(0);\n const frameRef = useRef<HTMLIFrameElement>(null);\n\n useEffect(() => {\n const timer = setInterval(() => {\n try {\n const location = frameRef.current?.contentWindow?.location;\n if (!location || location.href === 'about:blank') return;\n const next = `${location.pathname}${location.search}${location.hash}`;\n setPath((current) => (current === next ? current : next));\n } catch {\n // The frame left this origin (an external link): nothing to follow.\n }\n }, PATH_POLL_MS);\n return () => clearInterval(timer);\n }, []);\n\n useEffect(() => {\n const url = new URL(window.location.href);\n url.searchParams.set('path', path);\n window.history.replaceState(null, '', url);\n }, [path]);\n\n const navigate = useCallback((to: string) => {\n setSrc(to);\n setPath(to);\n setFrameKey((key) => key + 1);\n }, []);\n\n // Tell the store which window to talk to (blocks, store base, scroll-to-block).\n useEffect(() => devSettingsStore.connectFrame(() => frameRef.current?.contentWindow ?? null), []);\n\n return { src, path, frameKey, frameRef, navigate };\n}\n\nfunction Rail({\n panel,\n onPanel,\n collapsed,\n onCollapsed,\n t,\n}: {\n panel: Panel;\n onPanel: (panel: Panel) => void;\n collapsed: boolean;\n onCollapsed: (collapsed: boolean) => void;\n t: EditorStrings;\n}) {\n const tabs: [Panel, string, ReactElement][] = [\n ['builder', t.builder, <HomeIcon key=\"builder\" />],\n ['settings', t.settings, <PaletteIcon key=\"settings\" />],\n ];\n const toggle = collapsed ? t.showPanel : t.hidePanel;\n return (\n <nav className=\"te-rail\">\n <button\n type=\"button\"\n aria-expanded={!collapsed}\n aria-controls={PANEL_ID}\n aria-label={toggle}\n title={toggle}\n onClick={() => onCollapsed(!collapsed)}\n >\n <SidebarIcon />\n </button>\n <div className=\"te-rail__tabs\" role=\"tablist\" aria-orientation=\"vertical\">\n {tabs.map(([id, label, icon]) => (\n <button\n key={id}\n type=\"button\"\n role=\"tab\"\n aria-selected={!collapsed && panel === id}\n aria-controls={PANEL_ID}\n aria-label={label}\n title={label}\n onClick={() => onPanel(id)}\n >\n {icon}\n </button>\n ))}\n </div>\n </nav>\n );\n}\n\nfunction SaveStatus({ t }: { t: EditorStrings }) {\n const { saveStatus } = useDevEditorMeta();\n if (saveStatus === 'idle') return null;\n const label = { saving: t.saving, saved: t.saved, error: t.saveError }[saveStatus];\n return (\n <span className={`te-status${saveStatus === 'error' ? ' te-status--error' : ''}`} role=\"status\">\n <span className=\"te-dot\" />\n {label}\n </span>\n );\n}\n\nfunction TopBar({\n schema,\n t,\n locale,\n path,\n device,\n onDevice,\n onLocale,\n onReload,\n}: {\n schema: DevSchema;\n t: EditorStrings;\n locale: string;\n path: string;\n device: Device;\n onDevice: (device: Device) => void;\n onLocale: (locale: EditorLocale) => void;\n onReload: () => void;\n}) {\n const store = useDevSettingsState();\n const themeName = pick(schema.themeName, locale) || 'Theme';\n return (\n <header className=\"te-top\">\n <div className=\"te-top__start\">\n <span className=\"te-theme-name\">{themeName}</span>\n {/* \"Local\" in every language, as asked: it names the mode, like \"Dev\" would. */}\n <span className=\"te-badge\">Local</span>\n </div>\n\n <div className=\"te-segment\" role=\"group\" aria-label={`${t.mobile} / ${t.desktop}`}>\n <button\n type=\"button\"\n aria-label={t.mobile}\n aria-pressed={device === 'mobile'}\n onClick={() => onDevice('mobile')}\n >\n <PhoneIcon />\n </button>\n <button\n type=\"button\"\n aria-label={t.desktop}\n aria-pressed={device === 'desktop'}\n onClick={() => onDevice('desktop')}\n >\n <DesktopIcon />\n </button>\n </div>\n\n <div className=\"te-top__end\">\n <SaveStatus t={t} />\n <button\n type=\"button\"\n role=\"switch\"\n className=\"te-switch\"\n aria-checked={store.enabled}\n onClick={() =>\n store.enabled ? devSettingsStore.disable() : devSettingsStore.enable(schema)\n }\n >\n <span className=\"te-switch__track\" />\n {t.preview}\n </button>\n <div className=\"te-segment te-segment--text\" role=\"group\" aria-label={t.language}>\n {(['ar', 'en'] as const).map((code) => (\n <button\n key={code}\n type=\"button\"\n aria-pressed={locale === code}\n onClick={() => onLocale(code)}\n >\n {code.toUpperCase()}\n </button>\n ))}\n </div>\n <button\n type=\"button\"\n className=\"te-icon-btn\"\n aria-label={t.reload}\n title={t.reload}\n onClick={onReload}\n >\n <ReloadIcon />\n </button>\n <a\n className=\"te-icon-btn\"\n href={standaloneHref(path)}\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={t.openStorefront}\n title={t.openStorefront}\n >\n <ExternalIcon />\n </a>\n </div>\n </header>\n );\n}\n\n/** The storefront, framed at the chosen device's width, on the dotted canvas. */\nfunction PreviewCanvas({\n frameRef,\n frameKey,\n src,\n device,\n title,\n}: {\n frameRef: RefObject<HTMLIFrameElement | null>;\n frameKey: number;\n src: string;\n device: Device;\n title: string;\n}) {\n return (\n <main className={`te-canvas te-canvas--${device}`}>\n {/*\n No `sandbox`: the frame is this dev server's own storefront, and the\n editor needs same-origin access to it (its address, its\n `frameElement`). allow-scripts + allow-same-origin would undo a\n sandbox anyway.\n */}\n <iframe\n key={frameKey}\n ref={frameRef}\n src={src}\n title={title}\n className={`te-frame te-frame--${device}`}\n onLoad={() => devSettingsStore.requestLiveBlocks()}\n {...{ [DEV_EDITOR_FRAME_ATTR]: '' }}\n />\n </main>\n );\n}\n\n/**\n * The side panel's state: which panel shows, which element is open, and the\n * element picker. The storefront's live editor bar drives it too.\n */\nfunction usePanels(frameRef: RefObject<HTMLIFrameElement | null>, schema: DevSchema) {\n const [panel, setPanel] = useState<Panel>('builder');\n const [openId, setOpenId] = useState<string | null>(null);\n const [adding, setAdding] = useState(false);\n // The block whose bar asked for the picker; the picked element goes after it.\n const [addAfter, setAddAfter] = useState<string | null>(null);\n const [collapsed, setCollapsed] = usePanelCollapsed();\n /** Open a side panel, closing the element picker. */\n const show = (next: Panel) => {\n setPanel(next);\n setCollapsed(false);\n setAdding(false);\n };\n\n useLiveEditorActions(frameRef, {\n onEdit: (id) => {\n show('builder');\n setOpenId(id);\n },\n onAdd: (afterId) => {\n show('builder');\n setAddAfter(afterId);\n setAdding(true);\n },\n onRemoved: (id) => setOpenId((open) => (open === id ? null : open)),\n onArea: () => show('settings'),\n });\n\n const closeAdding = useCallback(() => setAdding(false), []);\n /** Add the picked component where the picker was opened for, and open it. */\n const pickElement = (componentPath: string) => {\n const layout = devSettingsStore.get().layout ?? [];\n // Found when picked, not when asked: the block can move while the picker is open.\n const after = addAfter === null ? -1 : layout.findIndex((block) => block.id === addAfter);\n const at = after === -1 ? layout.length : after + 1;\n setOpenId(devSettingsStore.addBlock(schema, componentPath, at));\n devSettingsStore.focusBlock(at);\n setAdding(false);\n };\n const openAdding = () => {\n setAddAfter(null);\n setAdding(true);\n };\n\n return {\n panel,\n show,\n openId,\n setOpenId,\n adding,\n setAdding,\n openAdding,\n closeAdding,\n pickElement,\n collapsed,\n setCollapsed,\n };\n}\n\nexport function ThemeEditor({ schema, initialPath }: ThemeEditorProps): ReactElement {\n const [device, setDevice] = useState<Device>(readDevice);\n const { src, path, frameKey, frameRef, navigate } = useFramePath(initialPath);\n const { frameBase } = useDevEditorMeta();\n const panels = usePanels(frameRef, schema);\n\n const locale = localeOf(path, frameBase);\n const t = stringsFor(locale);\n\n useEffect(() => {\n document.documentElement.lang = locale;\n document.documentElement.dir = locale === 'ar' ? 'rtl' : 'ltr';\n }, [locale]);\n\n useEffect(() => {\n try {\n window.localStorage.setItem(DEVICE_KEY, device);\n } catch {\n // A preference, nothing more.\n }\n }, [device]);\n\n return (\n <div className=\"te-shell\">\n <style>{EDITOR_CSS}</style>\n <TopBar\n schema={schema}\n t={t}\n locale={locale}\n path={path}\n device={device}\n onDevice={setDevice}\n onLocale={(code) => navigate(withLocale(path, code, frameBase))}\n onReload={() => navigate(path)}\n />\n <div className=\"te-body\">\n <Rail\n panel={panels.panel}\n onPanel={panels.show}\n collapsed={panels.collapsed}\n onCollapsed={(next) => {\n panels.setCollapsed(next);\n panels.setAdding(false);\n }}\n t={t}\n />\n {/* Hidden, not unmounted: an open element and the list's scroll survive a toggle. */}\n <aside id={PANEL_ID} className=\"te-panel\" role=\"tabpanel\" hidden={panels.collapsed}>\n {panels.panel === 'builder' ? (\n <BuilderPanel\n schema={schema}\n t={t}\n locale={locale}\n isHome={isHomePath(path, frameBase)}\n onGoHome={() => navigate(homeOf(path, frameBase))}\n openId={panels.openId}\n onOpenId={panels.setOpenId}\n onAddElement={panels.openAdding}\n />\n ) : (\n <SettingsPanel schema={schema} t={t} />\n )}\n <div className=\"te-panel__foot\">\n {t.savedTo} <code>twilight.preview.json</code>\n </div>\n </aside>\n <PreviewCanvas\n frameRef={frameRef}\n frameKey={frameKey}\n src={src}\n device={device}\n title={pick(schema.themeName, locale) || 'Storefront'}\n />\n {panels.adding && panels.panel === 'builder' && (\n <AddElementDrawer\n schema={schema}\n t={t}\n locale={locale}\n onClose={panels.closeAdding}\n onPick={panels.pickElement}\n />\n )}\n </div>\n </div>\n );\n}\n","/** Entry for the editor page the dev server serves at `/__twilight/editor`. */\n\nimport { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport type { DevSchema } from '../schema-types';\nimport { ThemeEditor } from './ThemeEditor';\n\nexport function mountThemeEditor(container: HTMLElement, schema: DevSchema): () => void {\n const root = createRoot(container);\n root.render(\n <StrictMode>\n <ThemeEditor schema={schema} />\n </StrictMode>\n );\n return () => root.unmount();\n}\n"]}