chaipro 0.1.0

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 (392) hide show
  1. package/README.md +36 -0
  2. package/dist/IconPicker-I7VNLYZ4.js +5 -0
  3. package/dist/actions-DM00SIUk.d.cts +899 -0
  4. package/dist/actions-DM00SIUk.d.ts +899 -0
  5. package/dist/actions-registery-SEJTZE5Q.js +1 -0
  6. package/dist/active-in-another-tab-SONDAONP.js +1 -0
  7. package/dist/add-new-language-page-TI6DUYYX.js +1 -0
  8. package/dist/add-new-page-LBHXICXO.js +1 -0
  9. package/dist/ai-block-floating-prompt-input-ESY5GQLZ.js +1 -0
  10. package/dist/ai-panel-content-62I6FDQF.css +1 -0
  11. package/dist/ai-panel-content-UZJZ463W.js +1 -0
  12. package/dist/ai-panel-default-lang-2ZXZYQRT.js +6 -0
  13. package/dist/ai-panel-default-lang-ETFOFFEF.css +1 -0
  14. package/dist/ai-panel-for-image-LADQP6VY.js +1 -0
  15. package/dist/ai-panel-other-lang-WDLC3M2M.js +1 -0
  16. package/dist/ai-panel-page-chat-7ZISZWY4.js +4 -0
  17. package/dist/ai-panel-page-chat-N4YFJGAM.css +1 -0
  18. package/dist/ai-prompt-input-CPT5ETQ4.js +1 -0
  19. package/dist/ai-theme-generator-7PS4BX52.js +1 -0
  20. package/dist/ai-translation-prompt-3VE2ECGR.js +1 -0
  21. package/dist/blocks-CMvgDlxw.d.ts +72 -0
  22. package/dist/blocks-CP-Pngaz.d.cts +72 -0
  23. package/dist/build-config-CCERdThN.d.ts +80 -0
  24. package/dist/build-config-DrerOPd9.d.cts +80 -0
  25. package/dist/builder.cjs +243 -0
  26. package/dist/builder.css +1 -0
  27. package/dist/builder.d.cts +352 -0
  28. package/dist/builder.d.ts +352 -0
  29. package/dist/builder.js +1 -0
  30. package/dist/chaibuilder-instance-DNz3Q-dY.d.cts +579 -0
  31. package/dist/chaibuilder-instance-qroszVwI.d.ts +579 -0
  32. package/dist/change-password-modal-NJL7ZLTY.js +1 -0
  33. package/dist/chunk-2AFM6557.js +3 -0
  34. package/dist/chunk-2N4IJZOR.js +1 -0
  35. package/dist/chunk-2NYUIXUX.js +1 -0
  36. package/dist/chunk-2PJZUYIZ.js +1 -0
  37. package/dist/chunk-32HH35VD.js +1 -0
  38. package/dist/chunk-346H4FEX.js +1 -0
  39. package/dist/chunk-34HIOUTE.js +1 -0
  40. package/dist/chunk-374QEK4F.js +1 -0
  41. package/dist/chunk-3E72DJSP.js +1 -0
  42. package/dist/chunk-3IT7IIAV.js +1 -0
  43. package/dist/chunk-3UEPBBE4.js +11 -0
  44. package/dist/chunk-3XSKJBPH.js +1 -0
  45. package/dist/chunk-45ELAD2J.js +1 -0
  46. package/dist/chunk-4JBHWPMO.js +1 -0
  47. package/dist/chunk-4P25MV5E.js +1 -0
  48. package/dist/chunk-4PQNBY3V.js +1 -0
  49. package/dist/chunk-4VNLL2IA.js +1 -0
  50. package/dist/chunk-55SU3QPU.js +1 -0
  51. package/dist/chunk-5ZC65NB6.js +1 -0
  52. package/dist/chunk-6M7V7BOM.js +1 -0
  53. package/dist/chunk-6TXCHU4K.js +1 -0
  54. package/dist/chunk-777N6WHB.js +1 -0
  55. package/dist/chunk-7C4EQOAR.js +12 -0
  56. package/dist/chunk-7EXZXKW2.js +1 -0
  57. package/dist/chunk-7QWMLDCG.js +1 -0
  58. package/dist/chunk-AOJE5WI3.js +1 -0
  59. package/dist/chunk-ATLMLDBS.js +1 -0
  60. package/dist/chunk-AVGF3YLU.js +17 -0
  61. package/dist/chunk-BQSLQHLD.js +1 -0
  62. package/dist/chunk-BWORNCTE.js +1 -0
  63. package/dist/chunk-BYGD5CDT.js +1 -0
  64. package/dist/chunk-CA5PVX24.js +1 -0
  65. package/dist/chunk-CFNOB42V.js +1 -0
  66. package/dist/chunk-CJP3BQH2.js +1 -0
  67. package/dist/chunk-CRJENCPR.js +1 -0
  68. package/dist/chunk-D5SKCKSB.js +1 -0
  69. package/dist/chunk-DZ72OHTD.js +1 -0
  70. package/dist/chunk-EPGOG22Q.js +0 -0
  71. package/dist/chunk-ERCY63ZW.js +1 -0
  72. package/dist/chunk-ESCX7KEH.js +1 -0
  73. package/dist/chunk-F2V4N3LT.js +156 -0
  74. package/dist/chunk-F7YMHPEA.js +1 -0
  75. package/dist/chunk-FERH2TPR.js +1 -0
  76. package/dist/chunk-FLSV2QGU.js +1 -0
  77. package/dist/chunk-FOKGOT6B.js +1 -0
  78. package/dist/chunk-GJOOCKUE.js +1 -0
  79. package/dist/chunk-HA7LF3RV.js +1 -0
  80. package/dist/chunk-HAKJOMCL.js +1 -0
  81. package/dist/chunk-HEKCKC7N.js +1 -0
  82. package/dist/chunk-HELRVKD2.js +3 -0
  83. package/dist/chunk-I7ODKVVX.js +1 -0
  84. package/dist/chunk-IAKCX2WB.js +1 -0
  85. package/dist/chunk-IB2C3TWH.js +1 -0
  86. package/dist/chunk-IH562KSP.js +1 -0
  87. package/dist/chunk-IP4JBQOX.js +1 -0
  88. package/dist/chunk-ITX7QWN6.js +1 -0
  89. package/dist/chunk-IUACZ3E6.js +6 -0
  90. package/dist/chunk-J7Q62EP7.js +1 -0
  91. package/dist/chunk-JBB5IJFA.js +1 -0
  92. package/dist/chunk-JPJRO4NU.js +1 -0
  93. package/dist/chunk-JUIS55JT.js +1 -0
  94. package/dist/chunk-JYBTQ3YX.js +5 -0
  95. package/dist/chunk-K5YWQY4U.js +1 -0
  96. package/dist/chunk-K6RHR4HT.js +1 -0
  97. package/dist/chunk-LNV5MRGV.js +1 -0
  98. package/dist/chunk-LRJREWRD.js +1 -0
  99. package/dist/chunk-LWYDGDPW.js +1 -0
  100. package/dist/chunk-MDMGXS5B.js +1 -0
  101. package/dist/chunk-MEROMQQX.js +1 -0
  102. package/dist/chunk-N7Z4RFFI.js +1 -0
  103. package/dist/chunk-NSQEQYEM.js +1 -0
  104. package/dist/chunk-OD3K76M6.js +1 -0
  105. package/dist/chunk-ODSL3KXG.js +1 -0
  106. package/dist/chunk-OJJDRACB.js +1 -0
  107. package/dist/chunk-ONSZ462E.js +1 -0
  108. package/dist/chunk-OQZ4EPOM.js +1 -0
  109. package/dist/chunk-OR7KKUYT.js +1 -0
  110. package/dist/chunk-OSGXFZTA.js +1 -0
  111. package/dist/chunk-PM3JNOZH.js +1 -0
  112. package/dist/chunk-PQHFT4TE.js +1 -0
  113. package/dist/chunk-QGVCH2NI.js +1 -0
  114. package/dist/chunk-QIGSSVEY.js +1 -0
  115. package/dist/chunk-R5ZTCDFD.js +1 -0
  116. package/dist/chunk-RBDZDQZR.js +1 -0
  117. package/dist/chunk-ROQRBSK6.js +1 -0
  118. package/dist/chunk-SSENH35Y.js +1 -0
  119. package/dist/chunk-SYPALJAE.js +1 -0
  120. package/dist/chunk-T2YYNX6Z.js +1 -0
  121. package/dist/chunk-T32TW3XV.js +1 -0
  122. package/dist/chunk-T56KQBE2.js +1 -0
  123. package/dist/chunk-TEL5ACJE.js +1 -0
  124. package/dist/chunk-TGJQC6VC.js +1 -0
  125. package/dist/chunk-TQ34DGOT.js +1 -0
  126. package/dist/chunk-TVF77C53.js +1 -0
  127. package/dist/chunk-UIDBBTCZ.js +3 -0
  128. package/dist/chunk-VKSRWZCO.js +1 -0
  129. package/dist/chunk-VL5WBPVV.js +1 -0
  130. package/dist/chunk-VUWHFLT7.js +22 -0
  131. package/dist/chunk-WEVKAJMV.js +1 -0
  132. package/dist/chunk-WHPIYGCY.js +1 -0
  133. package/dist/chunk-WNESLH23.js +1 -0
  134. package/dist/chunk-WOT6VMZA.js +1 -0
  135. package/dist/chunk-WSQ5SQBD.js +1 -0
  136. package/dist/chunk-XY4UJKHE.js +1 -0
  137. package/dist/chunk-Y2BHO7OO.js +1 -0
  138. package/dist/chunk-YDOQEFOK.js +1 -0
  139. package/dist/chunk-YEFMD4DS.js +1 -0
  140. package/dist/chunk-YQ5QQCRD.js +1 -0
  141. package/dist/chunk-YQPOFRXU.js +1 -0
  142. package/dist/chunk-YTPQSO7V.js +801 -0
  143. package/dist/chunk-ZAU65LBG.js +1 -0
  144. package/dist/chunk-ZRFCEMYU.js +1 -0
  145. package/dist/chunk-ZU2B5YT6.js +1 -0
  146. package/dist/chunk-ZXKKBKGV.js +1 -0
  147. package/dist/code-display-7346IUCO.js +1 -0
  148. package/dist/code-editor-UBGTTX2L.js +1 -0
  149. package/dist/components/ui/accordion.cjs +1 -0
  150. package/dist/components/ui/accordion.d.cts +9 -0
  151. package/dist/components/ui/accordion.d.ts +9 -0
  152. package/dist/components/ui/accordion.js +1 -0
  153. package/dist/components/ui/alert-dialog.cjs +1 -0
  154. package/dist/components/ui/alert-dialog.d.cts +23 -0
  155. package/dist/components/ui/alert-dialog.d.ts +23 -0
  156. package/dist/components/ui/alert-dialog.js +1 -0
  157. package/dist/components/ui/alert.cjs +1 -0
  158. package/dist/components/ui/alert.d.cts +11 -0
  159. package/dist/components/ui/alert.d.ts +11 -0
  160. package/dist/components/ui/alert.js +1 -0
  161. package/dist/components/ui/avatar.cjs +1 -0
  162. package/dist/components/ui/avatar.d.cts +8 -0
  163. package/dist/components/ui/avatar.d.ts +8 -0
  164. package/dist/components/ui/avatar.js +1 -0
  165. package/dist/components/ui/badge.cjs +1 -0
  166. package/dist/components/ui/badge.d.cts +13 -0
  167. package/dist/components/ui/badge.d.ts +13 -0
  168. package/dist/components/ui/badge.js +1 -0
  169. package/dist/components/ui/button.cjs +1 -0
  170. package/dist/components/ui/button.d.cts +15 -0
  171. package/dist/components/ui/button.d.ts +15 -0
  172. package/dist/components/ui/button.js +1 -0
  173. package/dist/components/ui/card.cjs +1 -0
  174. package/dist/components/ui/card.d.cts +10 -0
  175. package/dist/components/ui/card.d.ts +10 -0
  176. package/dist/components/ui/card.js +1 -0
  177. package/dist/components/ui/checkbox.cjs +1 -0
  178. package/dist/components/ui/checkbox.d.cts +6 -0
  179. package/dist/components/ui/checkbox.d.ts +6 -0
  180. package/dist/components/ui/checkbox.js +1 -0
  181. package/dist/components/ui/command.cjs +1 -0
  182. package/dist/components/ui/command.d.cts +83 -0
  183. package/dist/components/ui/command.d.ts +83 -0
  184. package/dist/components/ui/command.js +1 -0
  185. package/dist/components/ui/context-menu.cjs +1 -0
  186. package/dist/components/ui/context-menu.d.cts +30 -0
  187. package/dist/components/ui/context-menu.d.ts +30 -0
  188. package/dist/components/ui/context-menu.js +1 -0
  189. package/dist/components/ui/dialog.cjs +1 -0
  190. package/dist/components/ui/dialog.d.cts +22 -0
  191. package/dist/components/ui/dialog.d.ts +22 -0
  192. package/dist/components/ui/dialog.js +1 -0
  193. package/dist/components/ui/dropdown-menu.cjs +1 -0
  194. package/dist/components/ui/dropdown-menu.d.cts +30 -0
  195. package/dist/components/ui/dropdown-menu.d.ts +30 -0
  196. package/dist/components/ui/dropdown-menu.js +1 -0
  197. package/dist/components/ui/hover-card.cjs +1 -0
  198. package/dist/components/ui/hover-card.d.cts +8 -0
  199. package/dist/components/ui/hover-card.d.ts +8 -0
  200. package/dist/components/ui/hover-card.js +1 -0
  201. package/dist/components/ui/input.cjs +1 -0
  202. package/dist/components/ui/input.d.cts +5 -0
  203. package/dist/components/ui/input.d.ts +5 -0
  204. package/dist/components/ui/input.js +1 -0
  205. package/dist/components/ui/label.cjs +1 -0
  206. package/dist/components/ui/label.d.cts +8 -0
  207. package/dist/components/ui/label.d.ts +8 -0
  208. package/dist/components/ui/label.js +1 -0
  209. package/dist/components/ui/loader.cjs +1 -0
  210. package/dist/components/ui/loader.d.cts +12 -0
  211. package/dist/components/ui/loader.d.ts +12 -0
  212. package/dist/components/ui/loader.js +1 -0
  213. package/dist/components/ui/navigation-menu.cjs +1 -0
  214. package/dist/components/ui/navigation-menu.d.cts +15 -0
  215. package/dist/components/ui/navigation-menu.d.ts +15 -0
  216. package/dist/components/ui/navigation-menu.js +1 -0
  217. package/dist/components/ui/popover.cjs +1 -0
  218. package/dist/components/ui/popover.d.cts +9 -0
  219. package/dist/components/ui/popover.d.ts +9 -0
  220. package/dist/components/ui/popover.js +1 -0
  221. package/dist/components/ui/progress.cjs +1 -0
  222. package/dist/components/ui/progress.d.cts +8 -0
  223. package/dist/components/ui/progress.d.ts +8 -0
  224. package/dist/components/ui/progress.js +1 -0
  225. package/dist/components/ui/scroll-area.cjs +1 -0
  226. package/dist/components/ui/scroll-area.d.cts +7 -0
  227. package/dist/components/ui/scroll-area.d.ts +7 -0
  228. package/dist/components/ui/scroll-area.js +1 -0
  229. package/dist/components/ui/select.cjs +1 -0
  230. package/dist/components/ui/select.d.cts +15 -0
  231. package/dist/components/ui/select.d.ts +15 -0
  232. package/dist/components/ui/select.js +1 -0
  233. package/dist/components/ui/separator.cjs +1 -0
  234. package/dist/components/ui/separator.d.cts +6 -0
  235. package/dist/components/ui/separator.d.ts +6 -0
  236. package/dist/components/ui/separator.js +1 -0
  237. package/dist/components/ui/sheet.cjs +1 -0
  238. package/dist/components/ui/sheet.d.cts +29 -0
  239. package/dist/components/ui/sheet.d.ts +29 -0
  240. package/dist/components/ui/sheet.js +1 -0
  241. package/dist/components/ui/skeleton.cjs +1 -0
  242. package/dist/components/ui/skeleton.d.cts +5 -0
  243. package/dist/components/ui/skeleton.d.ts +5 -0
  244. package/dist/components/ui/skeleton.js +1 -0
  245. package/dist/components/ui/slider.cjs +1 -0
  246. package/dist/components/ui/slider.d.cts +6 -0
  247. package/dist/components/ui/slider.d.ts +6 -0
  248. package/dist/components/ui/slider.js +1 -0
  249. package/dist/components/ui/switch.cjs +1 -0
  250. package/dist/components/ui/switch.d.cts +9 -0
  251. package/dist/components/ui/switch.d.ts +9 -0
  252. package/dist/components/ui/switch.js +1 -0
  253. package/dist/components/ui/tabs.cjs +1 -0
  254. package/dist/components/ui/tabs.d.cts +9 -0
  255. package/dist/components/ui/tabs.d.ts +9 -0
  256. package/dist/components/ui/tabs.js +1 -0
  257. package/dist/components/ui/textarea.cjs +1 -0
  258. package/dist/components/ui/textarea.d.cts +5 -0
  259. package/dist/components/ui/textarea.d.ts +5 -0
  260. package/dist/components/ui/textarea.js +1 -0
  261. package/dist/components/ui/toggle.cjs +1 -0
  262. package/dist/components/ui/toggle.d.cts +15 -0
  263. package/dist/components/ui/toggle.d.ts +15 -0
  264. package/dist/components/ui/toggle.js +1 -0
  265. package/dist/components/ui/tooltip.cjs +1 -0
  266. package/dist/components/ui/tooltip.d.cts +9 -0
  267. package/dist/components/ui/tooltip.d.ts +9 -0
  268. package/dist/components/ui/tooltip.js +1 -0
  269. package/dist/config-registry-RSJCAKY5.js +1 -0
  270. package/dist/continue-editing-in-this-client-QBMOFRLL.js +1 -0
  271. package/dist/core-BNe4bA6z.d.cts +5455 -0
  272. package/dist/core-BNe4bA6z.d.ts +5455 -0
  273. package/dist/css-import-modal-NMFRQGCY.js +13 -0
  274. package/dist/db/better-sqlite3.cjs +1 -0
  275. package/dist/db/better-sqlite3.d.cts +16 -0
  276. package/dist/db/better-sqlite3.d.ts +16 -0
  277. package/dist/db/better-sqlite3.js +1 -0
  278. package/dist/db/d1.cjs +1 -0
  279. package/dist/db/d1.d.cts +17 -0
  280. package/dist/db/d1.d.ts +17 -0
  281. package/dist/db/d1.js +1 -0
  282. package/dist/db/libsql.cjs +1 -0
  283. package/dist/db/libsql.d.cts +23 -0
  284. package/dist/db/libsql.d.ts +23 -0
  285. package/dist/db/libsql.js +1 -0
  286. package/dist/db/node-pg.cjs +1 -0
  287. package/dist/db/node-pg.d.cts +21 -0
  288. package/dist/db/node-pg.d.ts +21 -0
  289. package/dist/db/node-pg.js +1 -0
  290. package/dist/db/postgres.cjs +1 -0
  291. package/dist/db/postgres.d.cts +28 -0
  292. package/dist/db/postgres.d.ts +28 -0
  293. package/dist/db/postgres.js +1 -0
  294. package/dist/delete-page-CGR6VXZC.css +1 -0
  295. package/dist/delete-page-FQYTEMBN.js +1 -0
  296. package/dist/digital-asset-manager-PIZMJEMX.js +1 -0
  297. package/dist/digital-asset-manager-PSTDGMY2.css +1 -0
  298. package/dist/dispatch-action-3IV56BNY.js +1 -0
  299. package/dist/duplicate-page-HPPMQRL3.js +1 -0
  300. package/dist/dynamic-page-selector-LFHJQLYY.js +1 -0
  301. package/dist/dynamic-page-selector-SXJQAIGL.css +1 -0
  302. package/dist/edit-url-panel-Q3NJCV55.js +1 -0
  303. package/dist/get-blocks-styles-SLZ5NDUF.js +1 -0
  304. package/dist/get-page-styles-Q4FWW5LX.js +1 -0
  305. package/dist/image-editor-PLXDYVKE.css +1 -0
  306. package/dist/image-editor-RSEHWRGV.js +1 -0
  307. package/dist/json-diff-viewer-FQYK2FUX.js +8 -0
  308. package/dist/lang-panel-57UGEL6B.css +1 -0
  309. package/dist/lang-panel-HH5LEOF4.js +1 -0
  310. package/dist/license-overlay-4Q525E53.js +1 -0
  311. package/dist/log-ai-request-LHPKU2C5.js +1 -0
  312. package/dist/manage-design-tokens-264H25A2.js +1 -0
  313. package/dist/manage-design-tokens-modal-OIWIZ53K.js +1 -0
  314. package/dist/mark-as-template-7TCCEMGC.js +1 -0
  315. package/dist/nested-path-selector-content-N4XN7QUS.js +1 -0
  316. package/dist/nextjs/render-client.cjs +1 -0
  317. package/dist/nextjs/render-client.css +1 -0
  318. package/dist/nextjs/render-client.d.cts +14 -0
  319. package/dist/nextjs/render-client.d.ts +14 -0
  320. package/dist/nextjs/render-client.js +1 -0
  321. package/dist/nextjs/render.cjs +829 -0
  322. package/dist/nextjs/render.d.cts +78 -0
  323. package/dist/nextjs/render.d.ts +78 -0
  324. package/dist/nextjs/render.js +1 -0
  325. package/dist/nextjs/server.cjs +807 -0
  326. package/dist/nextjs/server.d.cts +329 -0
  327. package/dist/nextjs/server.d.ts +329 -0
  328. package/dist/nextjs/server.js +1 -0
  329. package/dist/nextjs.cjs +1 -0
  330. package/dist/nextjs.d.cts +17 -0
  331. package/dist/nextjs.d.ts +17 -0
  332. package/dist/nextjs.js +1 -0
  333. package/dist/no-language-page-content-NQIROTIL.js +1 -0
  334. package/dist/no-language-page-dialog-CWG5PI7N.js +1 -0
  335. package/dist/page-creator-2L6L6EFV.js +1 -0
  336. package/dist/page-lock-7HMG34UJ.js +1 -0
  337. package/dist/page-locked-dialog-ACMWVAZX.js +1 -0
  338. package/dist/page-manager-new-SCZFNGKO.js +1 -0
  339. package/dist/page-manager-new-VWRASZTI.css +1 -0
  340. package/dist/page-manager-search-and-filter-7CHPYAPV.js +1 -0
  341. package/dist/page-manager-sheet-KZZBKQ6M.js +1 -0
  342. package/dist/page-manager-sheet-U5YEB5CS.css +1 -0
  343. package/dist/page-revisions-content-DHPEQ4CA.js +1 -0
  344. package/dist/page-revisions-trigger-XGC4HOTL.js +1 -0
  345. package/dist/pages-DlMX1Lj2.d.cts +21 -0
  346. package/dist/pages-Dol4CXrN.d.ts +21 -0
  347. package/dist/payload/builder.cjs +243 -0
  348. package/dist/payload/builder.css +1 -0
  349. package/dist/payload/builder.d.cts +13 -0
  350. package/dist/payload/builder.d.ts +13 -0
  351. package/dist/payload/builder.js +1 -0
  352. package/dist/payload.cjs +807 -0
  353. package/dist/payload.d.cts +603 -0
  354. package/dist/payload.d.ts +603 -0
  355. package/dist/payload.js +1 -0
  356. package/dist/preview-banner-SDDZGGRW.js +1 -0
  357. package/dist/publish-pages-content-3AZ45DYH.js +1 -0
  358. package/dist/registry.cjs +11 -0
  359. package/dist/registry.d.cts +74 -0
  360. package/dist/registry.d.ts +74 -0
  361. package/dist/registry.js +1 -0
  362. package/dist/relations-DDBTFCMR.js +1 -0
  363. package/dist/revalidate-G2DEOH4Z.js +1 -0
  364. package/dist/rte-widget-modal-7RXFEYHK.js +1 -0
  365. package/dist/save-to-lib-65EGTZE5.js +1 -0
  366. package/dist/schema-IVNMPI4V.js +1 -0
  367. package/dist/schema.sqlite-CYBLikNv.d.cts +5852 -0
  368. package/dist/schema.sqlite-CYBLikNv.d.ts +5852 -0
  369. package/dist/seo-panel-WQ47FNP4.css +1 -0
  370. package/dist/seo-panel-Z6OBXHQ4.js +2 -0
  371. package/dist/server-config-b29G6_aQ.d.cts +116 -0
  372. package/dist/server-config-oPlt3V1X.d.ts +116 -0
  373. package/dist/state-RAP56WXS.js +1 -0
  374. package/dist/take-over-request-EB464ZGU.js +1 -0
  375. package/dist/translation-warning-modal-EES6I2QV.js +1 -0
  376. package/dist/types.cjs +1 -0
  377. package/dist/types.d.cts +38 -0
  378. package/dist/types.d.ts +38 -0
  379. package/dist/types.js +1 -0
  380. package/dist/unmark-as-template-6STMTBP5.js +1 -0
  381. package/dist/unpublish-page-CE3CJK5C.js +1 -0
  382. package/dist/unpublished-partials-modal-OZBWBCLN.js +1 -0
  383. package/dist/utils.cjs +1 -0
  384. package/dist/utils.d.cts +168 -0
  385. package/dist/utils.d.ts +168 -0
  386. package/dist/utils.js +1 -0
  387. package/dist/web-blocks.cjs +1 -0
  388. package/dist/web-blocks.d.cts +3 -0
  389. package/dist/web-blocks.d.ts +3 -0
  390. package/dist/web-blocks.js +1 -0
  391. package/dist/web-preview-EIWOXGPY.js +1 -0
  392. package/package.json +322 -0
@@ -0,0 +1,807 @@
1
+ "use strict";var rh=Object.create;var Ua=Object.defineProperty;var ah=Object.getOwnPropertyDescriptor;var nh=Object.getOwnPropertyNames;var ih=Object.getPrototypeOf,oh=Object.prototype.hasOwnProperty;var T=(r,e)=>()=>(r&&(e=r(r=0)),e);var $t=(r,e)=>{for(var t in e)Ua(r,t,{get:e[t],enumerable:!0})},Ll=(r,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of nh(e))!oh.call(r,n)&&n!==t&&Ua(r,n,{get:()=>e[n],enumerable:!(a=ah(e,n))||a.enumerable});return r};var fe=(r,e,t)=>(t=r!=null?rh(ih(r)):{},Ll(e||!r||!r.__esModule?Ua(t,"default",{value:r,enumerable:!0}):t,r)),sh=r=>Ll(Ua({},"__esModule",{value:!0}),r);var Fl,Ul,Gl,Rt,$r=T(()=>{"use strict";Fl={persistentCache:(r=>r),invalidatePath:()=>{},invalidateTag:()=>{},runAfterResponse:r=>{Promise.resolve(r()).catch(console.error)},pageNotFound:()=>{throw new Error("Page not found")}},Ul=Fl,Gl=r=>{Ul={...Fl,...r}},Rt=()=>Ul});var ze={};$t(ze,{aiAddonPurchases:()=>Th,aiCreditAddons:()=>bh,aiLogs:()=>Rh,appApiKeys:()=>lh,appAssets:()=>Ah,appDomains:()=>mh,appFormSubmissions:()=>uh,appPages:()=>yh,appPagesMetadata:()=>vh,appPagesOnline:()=>Ih,appPagesRevisions:()=>wh,appTrash:()=>Eh,appUserAddons:()=>Ch,appUserPlans:()=>gh,appUsers:()=>hh,apps:()=>Re,appsOnline:()=>ph,clientUsers:()=>Ph,clients:()=>qe,invitedUsers:()=>ch,libraries:()=>no,libraryItems:()=>Sh,libraryTemplates:()=>xh,roles:()=>fh,webhookEvents:()=>dh});var $l,p,Ml,V,lh,ch,Re,ph,no,dh,gh,qe,uh,mh,hh,fh,yh,bh,Th,Ah,Ph,Ch,Eh,wh,xh,Ih,Sh,Rh,vh,Ga=T(()=>{"use strict";$l=require("drizzle-orm"),p=require("drizzle-orm/pg-core"),Ml=process.env.CHAIBUILDER_POSTGRESS_SCHEMA,V=Ml?(0,p.pgSchema)(Ml).table:p.pgTable,lh=V("app_api_keys",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),apiKey:(0,p.text)().default(""),app:(0,p.uuid)(),status:(0,p.text)().default("ACTIVE")},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"app_api_keys_app_fkey"})]),ch=V("invited_users",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),email:(0,p.text)(),client:(0,p.uuid)(),status:(0,p.text)().default("invited"),app:(0,p.uuid)()},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"invited_users_app_fkey"}),(0,p.foreignKey)({columns:[r.client],foreignColumns:[qe.id],name:"invited_users_client_fkey"})]),Re=V("apps",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),name:(0,p.text)(),user:(0,p.text)(),settings:(0,p.jsonb)().default({}),theme:(0,p.jsonb)().default({}),fallbackLang:(0,p.text)().default("en"),languages:(0,p.jsonb)().default([]),changes:(0,p.jsonb)(),deletedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),client:(0,p.uuid)(),designTokens:(0,p.jsonb)().default({}),ai:(0,p.jsonb)().default({}),configData:(0,p.jsonb)().default({}),consentConfig:(0,p.jsonb)().default({})},r=>[(0,p.foreignKey)({columns:[r.client],foreignColumns:[qe.id],name:"apps_client_fkey"})]),ph=V("apps_online",{id:(0,p.uuid)().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),name:(0,p.text)(),user:(0,p.text)(),settings:(0,p.jsonb)().default({}),theme:(0,p.jsonb)().default({}),fallbackLang:(0,p.text)().default("en"),languages:(0,p.jsonb)().default([]),changes:(0,p.jsonb)(),apiKey:(0,p.text)(),deletedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),client:(0,p.uuid)(),designTokens:(0,p.jsonb)().default({}),ai:(0,p.jsonb)().default({}),configData:(0,p.jsonb)().default({}),consentConfig:(0,p.jsonb)().default({})},r=>[(0,p.foreignKey)({columns:[r.client],foreignColumns:[qe.id],name:"apps_online_client_fkey"})]),no=V("libraries",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),name:(0,p.text)(),app:(0,p.uuid)(),type:(0,p.text)(),status:(0,p.text)().default("active").notNull(),client:(0,p.uuid)()},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"libraries_app_fkey"})]),dh=V("webhook_events",{id:(0,p.bigint)({mode:"number"}).primaryKey().generatedByDefaultAsIdentity({name:"webhook_events_id_seq",startWith:1,increment:1,minValue:1,cache:1}),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),provider:(0,p.text)(),eventType:(0,p.text)(),payload:(0,p.jsonb)(),userId:(0,p.text)(),clientId:(0,p.uuid)()},r=>[(0,p.foreignKey)({columns:[r.clientId],foreignColumns:[qe.id],name:"webhook_events_clientId_fkey"})]),gh=V("app_user_plans",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),user:(0,p.text)(),planId:(0,p.text)().default("FREE"),nextBilledAt:(0,p.timestamp)({mode:"string"}).notNull(),subscriptionId:(0,p.text)(),client:(0,p.uuid)(),scheduledForCancellation:(0,p.boolean)().default(!1)},r=>[(0,p.foreignKey)({columns:[r.client],foreignColumns:[qe.id],name:"app_user_plans_client_fkey"})]),qe=V("clients",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),name:(0,p.text)(),status:(0,p.text)().default("active"),billingStartDate:(0,p.date)(),startDate:(0,p.date)(),settings:(0,p.jsonb)().default({}),loginHtml:(0,p.text)(),features:(0,p.jsonb)().default({}),paymentConfig:(0,p.jsonb)().default({}),theme:(0,p.text)(),helpHtml:(0,p.text)(),madeWithBadge:(0,p.text)(),superAdmins:(0,p.jsonb)().default([]),ai:(0,p.jsonb)().default({models:[]}),plansAndAddOns:(0,p.jsonb)().default({plans:[],addOns:[],provider:"DODO",paymentEnv:"sandbox"}),rolesAndPermissions:(0,p.jsonb)().default({admin:{permissions:{"*":!0}},editor:{permissions:{"*":!1}},designer:{permissions:{"*":!1}}}),coreFeatures:(0,p.jsonb)().default({ai:!0,email:!1,api_access:!1,multi_user:!1,export_code:!0,import_html:!0,multilingual:!1,revision_and_restore:!1}),envs:(0,p.jsonb)().default({payment:{live:{client:"",server:""},sandbox:{client:"",server:""}}})}),uh=V("app_form_submissions",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),app:(0,p.uuid)(),formData:(0,p.json)(),additionalData:(0,p.json)(),formName:(0,p.text)().default(""),pageUrl:(0,p.text)()},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"app_form_submissions_app_fkey"})]),mh=V("app_domains",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),app:(0,p.uuid)(),hosting:(0,p.text)().default("vercel"),hostingProjectId:(0,p.text)().default("env"),subdomain:(0,p.text)(),domain:(0,p.text)(),domainConfigured:(0,p.boolean)().default(!1)},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"app_domains_app_fkey"})]),hh=V("app_users",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),user:(0,p.text)(),app:(0,p.uuid)(),role:(0,p.text)(),permissions:(0,p.jsonb)(),status:(0,p.text)().default("active").notNull()},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"app_users_app_fkey"})]),fh=V("roles",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),name:(0,p.text)().notNull(),label:(0,p.text)(),permissions:(0,p.jsonb)().default([]).notNull(),isSystem:(0,p.boolean)().default(!1).notNull()},r=>[(0,p.unique)("roles_name_unique").on(r.name)]),yh=V("app_pages",{createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),slug:(0,p.text)().notNull(),lang:(0,p.text)().default("").notNull(),seo:(0,p.jsonb)().default({}),app:(0,p.uuid)().notNull(),id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),name:(0,p.text)().notNull(),primaryPage:(0,p.uuid)(),blocks:(0,p.jsonb)().default([]),currentEditor:(0,p.text)(),changes:(0,p.jsonb)(),online:(0,p.boolean)().default(!1),parent:(0,p.uuid)(),pageType:(0,p.text)(),lastSaved:(0,p.timestamp)({withTimezone:!0,mode:"string"}),dynamic:(0,p.boolean)().default(!1),libRefId:(0,p.uuid)(),dynamicSlugCustom:(0,p.text)().default(""),metadata:(0,p.jsonb)().default({}),jsonld:(0,p.jsonb)().default({}),globalJsonLds:(0,p.jsonb)().default([]),links:(0,p.text)(),partialBlocks:(0,p.text)(),designTokens:(0,p.jsonb)(),ai:(0,p.jsonb)().default({}),deletedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),deletedBy:(0,p.text)(),createdBy:(0,p.text)(),tracking:(0,p.jsonb)().default({})},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"app_pages_app_fkey"}),(0,p.foreignKey)({columns:[r.parent],foreignColumns:[r.id],name:"app_pages_parent_fkey"}),(0,p.index)("idx_app_pages_app_slug").on(r.app,r.slug)]),bh=V("ai_credit_addons",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),user:(0,p.text)().notNull(),client:(0,p.uuid)(),creditsTotal:(0,p.numeric)().notNull(),creditsUsed:(0,p.numeric)().default("0").notNull(),purchaseId:(0,p.text)(),status:(0,p.text)().default("active").notNull()},r=>[(0,p.index)("ai_credit_addons_status_idx").using("btree",r.status.asc().nullsLast().op("text_ops")),(0,p.index)("ai_credit_addons_user_idx").using("btree",r.user.asc().nullsLast().op("text_ops")),(0,p.foreignKey)({columns:[r.client],foreignColumns:[qe.id],name:"ai_credit_addons_client_fkey"})]),Th=V("ai_addon_purchases",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),user:(0,p.text)().notNull(),client:(0,p.uuid)(),addonId:(0,p.text)(),credits:(0,p.numeric)().notNull(),amount:(0,p.numeric)(),currency:(0,p.text)().default("USD"),paymentProvider:(0,p.text)(),paymentId:(0,p.text)(),status:(0,p.text)().default("pending").notNull(),metadata:(0,p.jsonb)().default({})},r=>[(0,p.index)("ai_addon_purchases_user_idx").using("btree",r.user.asc().nullsLast().op("text_ops")),(0,p.foreignKey)({columns:[r.client],foreignColumns:[qe.id],name:"ai_addon_purchases_client_fkey"})]),Ah=V("app_assets",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),app:(0,p.uuid)(),name:(0,p.text)(),url:(0,p.text)(),size:(0,p.text)(),folderId:(0,p.text)(),thumbnailUrl:(0,p.text)(),duration:(0,p.numeric)(),format:(0,p.text)(),width:(0,p.numeric)(),height:(0,p.numeric)(),createdBy:(0,p.text)(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),type:(0,p.text)(),updatedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),description:(0,p.jsonb)().default({}),deletedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),deletedBy:(0,p.text)()},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"app_assets_app_fkey"})]),Ph=V("client_users",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),user:(0,p.text)(),client:(0,p.uuid)(),data:(0,p.jsonb)().default({})},r=>[(0,p.foreignKey)({columns:[r.client],foreignColumns:[qe.id],name:"client_users_client_fkey"}),(0,p.unique)("client_users_user_client_unique").on(r.user,r.client)]),Ch=V("app_user_addons",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow(),addonId:(0,p.text)().notNull(),client:(0,p.uuid)(),user:(0,p.text)(),status:(0,p.text)().default("active")},r=>[(0,p.foreignKey)({columns:[r.client],foreignColumns:[qe.id],name:"app_user_addons_client_fkey"})]),Eh=V("app_trash",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),deletedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),deletedBy:(0,p.text)(),entityType:(0,p.text)().notNull(),entityId:(0,p.text)(),metadata:(0,p.jsonb)().default({}),app:(0,p.uuid)()},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"trash_app_fkey"})]),wh=V("app_pages_revisions",{createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),slug:(0,p.text)().notNull(),lang:(0,p.text)().default("").notNull(),seo:(0,p.jsonb)().default({}),app:(0,p.uuid)().notNull(),id:(0,p.uuid)().notNull(),name:(0,p.text)().notNull(),primaryPage:(0,p.uuid)(),blocks:(0,p.jsonb)().default([]),currentEditor:(0,p.text)(),changes:(0,p.jsonb)(),partialBlocks:(0,p.text)(),links:(0,p.text)(),online:(0,p.boolean)().default(!0),pageType:(0,p.text)(),parent:(0,p.uuid)(),lastSaved:(0,p.timestamp)({withTimezone:!0,mode:"string"}),dynamic:(0,p.boolean)().default(!1),uid:(0,p.uuid)().defaultRandom().primaryKey().notNull(),type:(0,p.text)(),libRefId:(0,p.uuid)(),dynamicSlugCustom:(0,p.text)().default(""),metadata:(0,p.jsonb)().default({}),jsonld:(0,p.jsonb)().default({}),globalJsonLds:(0,p.jsonb)().default([]),designTokens:(0,p.jsonb)(),ai:(0,p.jsonb)().default({}),createdBy:(0,p.text)(),deletedBy:(0,p.text)(),deletedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),tracking:(0,p.jsonb)().default({})},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"app_pages_revisions_app_fkey"})]),xh=V("library_templates",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),user:(0,p.text)(),name:(0,p.text)(),description:(0,p.text)(),pageId:(0,p.uuid)(),pageType:(0,p.text)(),library:(0,p.uuid)(),preview:(0,p.text)(),deletedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),createdBy:(0,p.text)(),deletedBy:(0,p.text)()},r=>[(0,p.foreignKey)({columns:[r.library],foreignColumns:[no.id],name:"library_templates_library_fkey"})]),Ih=V("app_pages_online",{createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),slug:(0,p.text)().notNull(),lang:(0,p.text)().default("").notNull(),seo:(0,p.jsonb)().default({}),app:(0,p.uuid)().notNull(),id:(0,p.uuid)().primaryKey().notNull(),name:(0,p.text)().notNull(),primaryPage:(0,p.uuid)(),blocks:(0,p.jsonb)().default([]),currentEditor:(0,p.text)(),changes:(0,p.jsonb)(),partialBlocks:(0,p.text)(),links:(0,p.text)(),online:(0,p.boolean)().default(!0),pageType:(0,p.text)(),parent:(0,p.uuid)(),lastSaved:(0,p.timestamp)({withTimezone:!0,mode:"string"}),dynamic:(0,p.boolean)().default(!1),libRefId:(0,p.uuid)(),dynamicSlugCustom:(0,p.text)().default(""),metadata:(0,p.jsonb)().default({}),jsonld:(0,p.jsonb)().default({}),globalJsonLds:(0,p.jsonb)().default([]),designTokens:(0,p.jsonb)(),ai:(0,p.jsonb)().default({}),createdBy:(0,p.text)().default(""),deletedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),deletedBy:(0,p.text)(),tracking:(0,p.jsonb)().default({})},r=>[(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"app_pages_online_app_fkey"}),(0,p.index)("idx_app_pages_online_app_slug").on(r.app,r.slug)]),Sh=V("library_items",{id:(0,p.uuid)().defaultRandom().primaryKey().notNull(),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),library:(0,p.uuid)(),name:(0,p.text)(),description:(0,p.text)(),blocks:(0,p.jsonb)().default([]),preview:(0,p.text)(),group:(0,p.text)().default("general"),user:(0,p.text)(),html:(0,p.text)(),deletedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),deletedBy:(0,p.text)(),createdBy:(0,p.text)()},r=>[(0,p.foreignKey)({columns:[r.library],foreignColumns:[no.id],name:"library_items_library_fkey"})]),Rh=V("ai_logs",{id:(0,p.bigint)({mode:"number"}).primaryKey().generatedByDefaultAsIdentity({name:"ai_logs_id_seq",startWith:1,increment:1,minValue:1,cache:1}),createdAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}).defaultNow().notNull(),model:(0,p.text)(),totalDuration:(0,p.numeric)(),error:(0,p.text)(),totalTokens:(0,p.numeric)(),tokenUsage:(0,p.jsonb)(),user:(0,p.text)(),client:(0,p.uuid)(),cost:(0,p.doublePrecision)().default($l.sql`'0'`),prompt:(0,p.text)(),app:(0,p.uuid)(),creditSource:(0,p.text)().default("monthly"),addonId:(0,p.uuid)()},r=>[(0,p.index)("ai_logs_addon_id_idx").using("btree",r.addonId.asc().nullsLast().op("uuid_ops")),(0,p.index)("ai_logs_credit_source_idx").using("btree",r.creditSource.asc().nullsLast().op("text_ops")),(0,p.foreignKey)({columns:[r.app],foreignColumns:[Re.id],name:"ai_logs_app_fkey"}),(0,p.foreignKey)({columns:[r.client],foreignColumns:[qe.id],name:"ai_logs_client_fkey"})]),vh=V("app_pages_metadata",{id:(0,p.bigint)({mode:"number"}).generatedByDefaultAsIdentity({name:"app_pages_metadata_id_seq",startWith:1,increment:1,minValue:1,cache:1}),createdAt:(0,p.timestamp)("created_at",{withTimezone:!0,mode:"string"}).defaultNow().notNull(),slug:(0,p.varchar)().notNull(),pageId:(0,p.uuid)().defaultRandom(),publishedAt:(0,p.timestamp)({withTimezone:!0,mode:"string"}),pageType:(0,p.varchar)(),pageBlocks:(0,p.varchar)(),dataBindings:(0,p.varchar)(),pageContent:(0,p.varchar)(),dataProviders:(0,p.varchar)(),app:(0,p.uuid)().defaultRandom().notNull()},r=>[(0,p.primaryKey)({columns:[r.slug,r.app],name:"app_pages_metadata_pkey"})])});function Hl(){Hr&&Hr(),Ht=null,Ma=null,$a="pg",Hr=null}function er(r){var e,t,a,n;if(!(r!=null&&r.drizzle))throw new Error("ChaiBuilder: invalid `db` setup. Pass `db: createPostgresDB(...)` (or libsql/d1/better-sqlite3).");if(Ht!==null&&Ht===r.drizzle){Ma=r.schema,$a=(e=r.dialect)!=null?e:"pg",Hr=(t=r.teardown)!=null?t:null;return}Hl(),Ht=r.drizzle,Ma=r.schema,$a=(a=r.dialect)!=null?a:"pg",Hr=(n=r.teardown)!=null?n:null}function Ha(){return $a}function io(){Hl()}async function qa(){if(!Ht)throw new Error("ChaiBuilder database was not initialized. Pass `db` to `buildChaiBuilderConfig` (`db: createPostgresDB(...)`, `createLibsqlDB(...)`, etc.).")}function qr(){if(!Ht)throw new Error("ChaiBuilder database was not initialized. Pass `db` to `buildChaiBuilderConfig` (`db: createPostgresDB(...)`, `createLibsqlDB(...)`, etc.).");return Ht}async function f(r){try{return{data:await r(),error:null}}catch(e){return{data:null,error:e}}}var Ht,Ma,$a,Hr,h,o,za=T(()=>{"use strict";Ga();Ht=null,Ma=null,$a="pg",Hr=null;h=new Proxy({},{get(r,e){return qr()[e]}});o=new Proxy({},{get(r,e){return(Ma||ze)[e]}})});var Y,_h,qt,zr,Ve,Va,ql,kh,zl,Dh,Bh,Nh,Vl,Ka=T(()=>{"use strict";Y=require("lodash-es"),_h=require("react"),qt={},zr=()=>qt,Ve=r=>(0,Y.get)(qt,r),Va=r=>{let e=(0,Y.memoize)(r),t=(a=>(0,Y.has)(qt,a)?e(a):r(a));return t.cache=e.cache,t},ql=Va(r=>{var i,s;let e=(0,Y.get)(qt,r),t=(s=(i=e==null?void 0:e.props)==null?void 0:i.schema)!=null?s:{},a=(0,Y.get)(t,"properties",{}),n={};return(0,Y.each)(a,(l,c)=>{(0,Y.has)(l,"block")||(0,Y.set)(n,c,l.default)}),n}),kh=Va(r=>(0,Y.get)(qt,`${r}.i18nProps`,[])),zl=Va(r=>(0,Y.get)(qt,`${r}.aiProps`,[])),Dh=Va(r=>{var c,d,u,g;let e=Ve(r);if(!e)return;let t=(d=(c=e.props)==null?void 0:c.schema)!=null?d:{},a=(g=(u=e.props)==null?void 0:u.uiSchema)!=null?g:{},n=(0,Y.cloneDeep)(t),i=(0,Y.get)(n,"properties",{}),s=(0,Y.omitBy)(i,y=>(y==null?void 0:y.styles)===!0);return(0,Y.set)(n,"properties",s),{schema:n,uiSchema:a||{}}}),Bh=[ql,kh,zl,Dh],Nh=r=>{for(let e of Bh)e.cache.delete(r)},Vl=(r,e)=>{var a;let t=Ve(r);(0,Y.set)(qt,r,{...t,type:(a=t==null?void 0:t.type)!=null?a:r,dataProvider:e}),Nh(r)}});var I=T(()=>{"use strict";za()});var x,Vb,ja=T(()=>{"use strict";x={"app:read":"app:read","app:update":"app:update","app:publish":"app:publish","app:settings":"app:settings","app:publish_theme":"app:publish_theme","pages:create":"pages:create","pages:read":"pages:read","pages:update":"pages:update","pages:delete":"pages:delete","pages:publish":"pages:publish","pages:unpublish":"pages:unpublish","pages:change_type":"pages:change_type","pages:force_takeover":"pages:force_takeover","pages:edit_seo":"pages:edit_seo","partials:create":"partials:create","partials:read":"partials:read","partials:update":"partials:update","partials:delete":"partials:delete","partials:publish":"partials:publish","partials:unpublish":"partials:unpublish","revisions:read":"revisions:read","revisions:restore":"revisions:restore","revisions:delete":"revisions:delete","assets:create":"assets:create","assets:read":"assets:read","assets:update":"assets:update","assets:delete":"assets:delete","library:create":"library:create","library:read":"library:read","library:update":"library:update","library:delete":"library:delete","ai:use":"ai:use","ai:read":"ai:read","ai:generate_image":"ai:generate_image","ai:generate_theme":"ai:generate_theme","theme:edit":"theme:edit","theme:publish":"theme:publish","design_tokens:read":"design_tokens:read","design_tokens:create":"design_tokens:create","design_tokens:edit":"design_tokens:edit","design_tokens:delete":"design_tokens:delete","design_tokens:publish":"design_tokens:publish","settings:edit":"settings:edit","domains:read":"domains:read","domains:manage":"domains:manage","users:read":"users:read","users:invite":"users:invite","users:update_role":"users:update_role","users:remove":"users:remove","roles:read":"roles:read","roles:create":"roles:create","roles:update":"roles:update","roles:delete":"roles:delete","trash:read":"trash:read","trash:restore":"trash:restore","trash:delete_permanently":"trash:delete_permanently"},Vb=Object.keys(x)});var vt,zt=T(()=>{"use strict";vt="#styles:"});var Vr,Kl=T(()=>{"use strict";Vr=require("lodash-es");_t()});var jl=T(()=>{"use strict";Kl()});var Wl=T(()=>{"use strict";Ka();jl()});var tr,_t=T(()=>{"use strict";tr=require("lodash-es");zt();Wl()});var Yl,Wa,Ya=T(()=>{"use strict";Yl=require("lodash-es");_t();Wa=(r,e)=>{let t=r==null?void 0:r.pageTypes;return!Array.isArray(t)||t.length===0?!0:t.includes(e)}});function rr(...r){return(0,Jl.twMerge)((0,Ql.clsx)(r))}var Ql,Jl,oo=T(()=>{"use strict";Ql=require("cnfast"),Jl=require("cnfast")});var kt,Kr=T(()=>{"use strict";oo();kt={"dt#btn":{name:"Button",description:"Base button styles",value:rr("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0","h-9 px-4 py-2")},"dt#btn-primary":{name:"Button-Primary",description:"Primary button style",value:"bg-primary text-primary-foreground shadow hover:bg-primary/90"},"dt#btn-destructive":{name:"Button-Destructive",description:"Destructive button style",value:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90"},"dt#btn-outline":{name:"Button-Outline",description:"Outline button style",value:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground"},"dt#btn-secondary":{name:"Button-Secondary",description:"Secondary button style",value:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80"},"dt#btn-ghost":{name:"Button-Ghost",description:"Ghost button style",value:"hover:bg-accent hover:text-accent-foreground"},"dt#btn-link":{name:"Button-Link",description:"Link button style",value:"text-primary underline-offset-4 hover:underline"},"dt#btn-icon":{name:"Button-Icon",description:"Icon button style",value:"h-9 w-9"},"dt#btn-sm":{name:"Button-Small",description:"Small button style",value:"h-8 rounded-md px-3 text-xs"},"dt#btn-lg":{name:"Button-Large",description:"Large button style",value:"h-10 rounded-md px-8"},"dt#input":{name:"Input",description:"Base input field style",value:"flex h-8 w-full rounded-md border border-input bg-transparent px-3 py-1 text-xs text-foreground transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground/70 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50"},"dt#input-sm":{name:"Input-Small",description:"Small input field style",value:"h-7 text-xs"},"dt#input-lg":{name:"Input-Large",description:"Large input field style",value:"h-10 text-sm"},"dt#textarea":{name:"Textarea",description:"Base textarea style",value:"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-xs text-foreground shadow-sm placeholder:text-muted-foreground/70 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50"},"dt#textarea-sm":{name:"Textarea-Small",description:"Small textarea style",value:"min-h-[40px] text-xs"},"dt#textarea-lg":{name:"Textarea-Large",description:"Large textarea style",value:"min-h-[80px] text-sm"},"dt#badge":{name:"Badge",description:"Base badge style",value:rr("inline-flex leading-tight items-center gap-1 text-[11px] cursor-pointer rounded-md border px-2.5 py-0.5 transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2","border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80")},"dt#badge-secondary":{name:"Badge-Secondary",description:"Secondary badge style",value:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80"},"dt#badge-destructive":{name:"Badge-Destructive",description:"Destructive badge style",value:"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80"},"dt#badge-outline":{name:"Badge-Outline",description:"Outline badge style",value:"text-foreground"},"dt#badge-active":{name:"Badge-Active",description:"Active badge style",value:"text-primary-foreground border-primary bg-primary px-2 py-px font-light"},"dt#badge-inactive":{name:"Badge-Inactive",description:"Inactive badge style",value:"text-foreground border-border bg-secondary hover:bg-accent px-2 py-px font-light"},"dt#alert":{name:"Alert",description:"Base alert style",value:rr("relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7","bg-surface text-foreground")},"dt#alert-destructive":{name:"Alert-Destructive",description:"Destructive alert style",value:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"},"dt#alert-title":{name:"Alert-Title",description:"Alert title style",value:"mb-1 font-medium leading-none tracking-tight"},"dt#alert-description":{name:"Alert-Description",description:"Alert description style",value:"text-sm [&_p]:leading-relaxed"},"dt#card":{name:"Card",description:"Base card style",value:"rounded-xl border bg-card text-card-foreground shadow"},"dt#card-header":{name:"Card-Header",description:"Card header style",value:"flex flex-col space-y-1.5 p-6"},"dt#card-title":{name:"Card-Title",description:"Card title style",value:"font-semibold leading-none tracking-tight"},"dt#card-description":{name:"Card-Description",description:"Card description style",value:"text-sm text-muted-foreground"},"dt#card-content":{name:"Card-Content",description:"Card content style",value:"p-6 pt-0"},"dt#card-footer":{name:"Card-Footer",description:"Card footer style",value:"flex items-center p-6 pt-0"},"dt#toggle":{name:"Toggle",description:"Base toggle style",value:rr("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0","bg-transparent h-9 px-2 min-w-9")},"dt#toggle-outline":{name:"Toggle-Outline",description:"Outline toggle style",value:"border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground"},"dt#toggle-sm":{name:"Toggle-Small",description:"Small toggle style",value:"h-8 px-1.5 min-w-8"},"dt#toggle-lg":{name:"Toggle-Large",description:"Large toggle style",value:"h-10 px-2.5 min-w-10"},"dt#label":{name:"Label",description:"Form label style",value:"text-xs font-light leading-none text-foreground/80 dark:text-foreground/60 peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},"dt#checkbox":{name:"Checkbox",description:"Checkbox style",value:"peer h-4 w-4 shrink-0 cursor-pointer rounded-sm border border-border hover:border-foreground/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground"},"dt#switch":{name:"Switch",description:"Switch toggle style",value:"peer inline-flex h-4 w-[25px] cursor-pointer items-center rounded-full bg-muted transition-colors focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary dark:data-[state=unchecked]:bg-background"},"dt#switch-thumb":{name:"Switch-Thumb",description:"Switch thumb style",value:"pointer-events-none block h-3 w-3 rounded-full bg-secondary shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-3 data-[state=unchecked]:translate-x-0.5"},"dt#skeleton":{name:"Skeleton",description:"Loading skeleton style",value:"animate-pulse rounded-md bg-primary/10"},"dt#separator":{name:"Separator",description:"Horizontal separator style",value:"shrink-0 bg-border h-[1px] w-full"},"dt#separator-vertical":{name:"Separator-Vertical",description:"Vertical separator style",value:"shrink-0 bg-border h-full w-[1px]"},"dt#progress":{name:"Progress",description:"Progress bar container style",value:"relative h-2 w-full overflow-hidden rounded-full bg-primary/20"},"dt#progress-indicator":{name:"Progress-Indicator",description:"Progress bar indicator style",value:"h-full bg-primary transition-all duration-300"}}});var m,N=T(()=>{"use strict";m=class extends Error{constructor(t,a="ACTION_ERROR",n=400,i,s){super(t);this.code=a;this.status=n;this.error=i;this.metadata=s;this.name="ActionError",i&&console.error(i)}}});function at(r){throw new m(r.message,r.code,r.statusCode)}var Qa=T(()=>{"use strict";N()});var Fe,Ja=T(()=>{"use strict";Fe=class extends Error{constructor(t,a="UNKNOWN_ERROR",n=500,i){super(t);this.code=a;this.statusCode=n;this.originalError=i;this.name="AIChatError"}toJSON(){return{error:!0,code:this.code,message:this.message,statusCode:this.statusCode}}}});var Oh,Xl,Fh,so,Zl=T(()=>{"use strict";Oh=`
2
+ # ANIMATION RULES
3
+ - Add \`data-animation\` attribute to elements when appropriate to add entry animations on scroll.
4
+ - **Do not overuse animations.** Only animate important elements like hero images, feature cards & section heading etc.
5
+ - The format MUST exactly be: \`data-animation="ANIMATION|EASING|DURATION|DELAY|TIME"\`
6
+ - **ANIMATION**: fade-in, slide-up, slide-down, slide-left, slide-right, zoom-in, zoom-out, flip-x, flip-y, rotate-in
7
+ - **EASING**: linear, ease-in, ease-out, ease-in-out
8
+ - **DURATION**: in milliseconds (e.g., 500, 700, 1000)
9
+ - **DELAY**: in milliseconds (e.g., 0, 200, 300) so that the animation starts after a delay and not immediately
10
+ - **TIME**: once (plays once) or infinite (repeats every time it enters the viewport)
11
+ - Example: \`<div data-animation="slide-up|ease-in-out|500|300|once" class="...">\`
12
+ `,Xl='\n\n# IMAGE RULES\n- Use **placeholder images only** \u2014 never use external image services like Picsum.\n- Format: `https://placehold.co/{width}x{height}/e2e8f0/e2e8f0`\n (light gray background, no text)\n\n- Suggested sizes:\n * Hero: 1200x600\n * Cards: 400x300\n * Team: 300x300\n\n- **Alt text is mandatory and must be descriptive and meaningful** \u2014 describe what the image *would* show in context, not just "image" or "placeholder".\n - \u2705 Good: `alt="A modern open-plan office with large windows and natural light"`\n - \u274C Bad: `alt="Image"`, `alt="Placeholder"`, `alt="Photo"`, `alt=""`\n- Always include explicit `width` and `height` HTML attributes on every `<img>` tag matching the image dimensions.\n Example: `<img src="https://placehold.co/1200x600/e2e8f0/e2e8f0" alt="A sweeping aerial view of a modern city skyline at sunset" width="1200" height="600">`\n',Fh=`\u{1F6A8} CRITICAL FORMAT REQUIREMENT: Your response MUST start with '--START--' immediately. NEVER include any text, thinking, or reasoning before '--START--'. \u{1F6A8}
13
+
14
+ # 1. RESPONSE FORMAT RULES (ALWAYS OBEY FIRST)
15
+
16
+ Every response MUST follow this structure:
17
+
18
+ --START--
19
+ --THINKING={short plain-language reasoning}
20
+ (one or more ACTION blocks: ADD / EDIT / REMOVE)
21
+ --END--
22
+
23
+ Rules:
24
+ - The VERY FIRST characters must be '--START--'.
25
+ - '--THINKING=' must appear immediately after '--START--'.
26
+ - No commentary, markdown, or text outside '--START--' and '--END--'.
27
+ - Use simple natural language in THINKING. Do NOT mention ids, attributes, DOM, HTML tags, or technical terms.
28
+ - If no action is required, still output:
29
+ --START--
30
+ --THINKING={why no changes needed}
31
+ --END--
32
+
33
+
34
+ # 2. ACTION FORMAT DEFINITIONS (MANDATORY)
35
+
36
+ ### ADD Action
37
+ Used to insert new HTML.
38
+ Do not add bid attribute to any element.
39
+
40
+ Format:
41
+ --ACTION=ADD|PARENT={parent_id or 'undefined'}|POS={position or -1}--
42
+ --TASK={plain-language description of what you are adding}
43
+ --HTML--
44
+ {HTML here}
45
+ --ENDHTML--
46
+ --MSG={plain-language explanation}
47
+ --ENDACTION--
48
+
49
+ Rules:
50
+ - PARENT = bid of parent, or 'undefined' for root.
51
+ - POS = -1 to append at the end.
52
+ - HTML must include full and valid tags.
53
+
54
+
55
+ ### EDIT Action
56
+ Used to replace an existing element completely.
57
+ Combine multiple edits into one action with one edit id where possible.
58
+
59
+ Format:
60
+ --ACTION=EDIT|ID={target_id}--
61
+ --TASK={plain-language description of what you are changing}
62
+ --HTML--
63
+ {full replacement HTML here}
64
+ --ENDHTML--
65
+ --MSG={plain-language explanation}
66
+ --ENDACTION--
67
+
68
+ Rules:
69
+ - Must include full tag being replaced.
70
+ - Never partially edit; always replace full HTML for the target element.
71
+
72
+ ### REMOVE Action
73
+ Used to delete elements.
74
+
75
+ Format:
76
+ --ACTION=REMOVE|IDS={id1, id2, ...}--
77
+ --TASK={plain-language description of what you are removing}
78
+ --MSG={plain-language explanation}
79
+ --ENDACTION--
80
+
81
+
82
+ ### THINKING Block (STRICT)
83
+ Placed immediately after '--START--'.
84
+
85
+ Format:
86
+ --THINKING={short plain-language reasoning}
87
+
88
+ Rules:
89
+ - Only one concise line.
90
+ - No mentions of tags, ids, attributes, DOM, or code.
91
+ - Focus on visual/content intentions.
92
+
93
+
94
+ # 3. HTML GENERATION RULES (MANDATORY)
95
+
96
+ You are an expert HTML/CSS developer specializing in Tailwind CSS and shadcn/ui patterns.
97
+ You produce clean, semantic, accessible, production-ready HTML.
98
+ Generate **pure HTML**, with no markdown, no comments, no extra text.
99
+
100
+ ### General Guidelines
101
+ 1. Use **only Tailwind CSS v3 utility classes**, no custom CSS.
102
+ 2. Use **shadcn/ui design system** semantic tokens for all colors.
103
+ 3. Use **semantic HTML** with proper accessibility.
104
+ 4. Always produce **responsive, mobile-first** layout.
105
+ 5. **Do NOT include** <!DOCTYPE>, <html>, <head>, or <body>.
106
+ 6. Keep UI varied \u2014 don't repeat the same layout patterns.
107
+ 7. Use \`<details><summary>\` for accordion, FAQ, and mobile menu interactions.
108
+ 8. Do NOT use Tailwind container queries.
109
+ 9. If UI is generated from a user-provided image, ensure full responsiveness.
110
+ 10. **If the user has attached an image, the HTML MUST be generated based strictly on the layout, spacing, hierarchy, and visual appearance of that image.**
111
+ - Match structure as closely as possible
112
+ - Maintain the Tailwind + shadcn theme rules
113
+ - The HTML output should reflect the exact design of the provided image
114
+
115
+ ### \u{1F6A8} CRITICAL: Avoid HTML "Div Soup" for Decorative UI Elements
116
+ **NEVER generate complex HTML markup for decorative UI elements that should be images:**
117
+ - \u274C DO NOT create HTML mockups of: code snippets, terminal windows, browser frames, device mockups, window chrome, syntax-highlighted code blocks
118
+ - \u2705 INSTEAD: Use placeholder images for these decorative elements
119
+ - **Reasoning**: Complex nested div structures for visual decoration create "div soup" that bloats markup unnecessarily
120
+ - **When to use images**: If the element is purely decorative/visual and not interactive content (e.g., showing a code example as part of a design, not actual executable code)
121
+ - **Examples**:
122
+ * For a "code snippet showcase" \u2192 Use an image: \`<img src="https://placehold.co/800x400/e2e8f0/e2e8f0" alt="Code editor showing React component example" width="800" height="400">\`
123
+ * For a "browser window mockup" \u2192 Use an image: \`<img src="https://placehold.co/1000x600/e2e8f0/e2e8f0" alt="Browser window displaying dashboard interface" width="1000" height="600">\`
124
+ * For actual interactive content \u2192 Use semantic HTML
125
+
126
+ ### \u{1F6A8} Design Tokens (MANDATORY)
127
+ You MUST use design tokens whenever appropriate. Design tokens are predefined groupings of Tailwind classes identified by the \`dt#\` prefix.
128
+ 1. **Placement**: Always place design tokens at the START of the \`class\` attribute.
129
+ 2. **Overrides**: Any Tailwind classes following a design token act as overrides, similar to how \`tailwind-merge\` works.
130
+ 3. **Example**: \`<button class="dt#btn p-2">\` where \`p-2\` overrides the default padding in \`dt#btn\`.
131
+
132
+ **Available Design Tokens**:
133
+ {{DESIGN_TOKENS_LIST}}
134
+
135
+ # 3.1 DESIGN EXCELLENCE & CREATIVITY (CRITICAL)
136
+
137
+ Create distinctive, production-grade interfaces that avoid generic "AI slop" aesthetics. Every UI you generate should be visually striking, memorable, and intentionally designed.
138
+
139
+ ### Design Thinking Process
140
+ Before generating HTML, commit to a BOLD aesthetic direction:
141
+ - **Purpose**: Consider what problem this interface solves and who uses it
142
+ - **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
143
+
144
+ **CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
145
+
146
+ ### Design Excellence Guidelines
147
+
148
+ **Typography & Font Selection**:
149
+ - Choose fonts that are beautiful, unique, and interesting
150
+ - AVOID generic fonts: Arial, Inter, Roboto, system fonts
151
+ - Use distinctive font combinations that elevate the design
152
+ - Pair a distinctive display font with a refined body font
153
+ - Consider: font-serif, font-mono for variety, or use weight variations (font-light, font-bold) creatively
154
+
155
+ **Color & Visual Hierarchy**:
156
+ - Commit to a cohesive aesthetic with dominant colors and sharp accents
157
+ - Avoid timid, evenly-distributed palettes
158
+ - Use shadcn tokens creatively (not just bg-background everywhere)
159
+ - Consider bold color blocking, dramatic contrasts, or refined monochrome
160
+ - AVOID: purple gradients on white backgrounds, predictable color schemes
161
+
162
+ **Spatial Composition**:
163
+ - Create unexpected layouts with asymmetry, overlap, diagonal flow
164
+ - Use grid-breaking elements and generous negative space OR controlled density
165
+ - Avoid predictable grid patterns - be creative with positioning
166
+ - Consider: absolute positioning, creative flexbox/grid layouts, overlapping elements
167
+
168
+ **Backgrounds & Visual Details**:
169
+ - Create atmosphere and depth rather than defaulting to solid colors
170
+ - Consider: gradient meshes, subtle textures, geometric patterns
171
+ - Use layered transparencies, dramatic shadows, decorative borders
172
+ - Add visual interest with background patterns or accent elements
173
+
174
+ **NEVER Use Generic AI Aesthetics**:
175
+ - Overused font families (Inter, Roboto, Arial, system fonts)
176
+ - Cliched color schemes (purple gradients on white)
177
+ - Predictable layouts and component patterns
178
+ - Cookie-cutter designs lacking context-specific character
179
+ - NEVER converge on common choices (Space Grotesk, etc.) across generations
180
+
181
+ **Implementation Complexity**:
182
+ - Match complexity to the aesthetic vision
183
+ - Maximalist designs: elaborate code with extensive effects
184
+ - Minimalist designs: restraint, precision, careful spacing and typography
185
+ - Elegance comes from executing the vision well
186
+
187
+ **Variation Mandate**:
188
+ - Every design should be different
189
+ - Vary between light and dark themes
190
+ - Change fonts, layouts, color schemes between generations
191
+ - Interpret user requests creatively with unexpected choices
192
+
193
+
194
+ # 4. ATTRIBUTE & CUSTOM COMPONENT RULES
195
+
196
+ ### chai-name
197
+ - Add \`chai-name\` attribute to tags
198
+ - Use descriptive section names (e.g., "Hero Section", "Navigation").
199
+
200
+ ## Custom Web components(CRITICAL)
201
+ - Html can have custom web components. All web components starts with <chai- prefix.
202
+ - Use "about-this-component" attribute to understand what the component does.
203
+ - Check for can-move and can-delete attribute to check if the component can be moved or deleted.
204
+ - If an attribute value starts with #styles: treat it like class attribute with tailwind classes.
205
+ Use the attribute key to understand what the attribute does and apply classes. Maintain the #styles: at start followed by tailwind classes.
206
+ - Do not change the chai-type attribute. Do not remove any attributes.
207
+
208
+ ## Tool Usage Rules
209
+ - To ADD a registered custom block (listed in "Available Custom Blocks"), USE THE add_custom_block TOOL \u2014 do NOT generate HTML for it.
210
+ - To REMOVE blocks, USE THE remove_blocks TOOL \u2014 do NOT use --ACTION=REMOVE-- text protocol.
211
+ - To SET a data binding on an existing block prop, USE THE bind_prop TOOL.
212
+ - When building a full page layout or when the user asks to include a header, footer, or any global section,
213
+ CALL get_partial_blocks FIRST to discover available partial block IDs, then place them with <chai-partial-block partial-id="ID">.
214
+ - Continue using --ACTION=ADD-- with --HTML-- for new standard HTML sections (hero, cards, grids, etc.) \u2014 these benefit from streaming preview.
215
+ - Continue using --ACTION=EDIT-- with --HTML-- for editing existing HTML blocks.
216
+
217
+ ## Data Binding (CRITICAL)
218
+ - Block prop values may contain binding expressions using double-curly syntax: {{path.to.data}}
219
+ - When you see {{...}} in an existing element's attribute value, it is a live data binding \u2014 NEVER remove or replace it with a static value. Preserve it exactly.
220
+ - You MAY use binding expressions when setting props on custom blocks, but ONLY using paths listed in the "Available Data Binding Paths" section below.
221
+ - Repeater blocks use a special prop: repeater-items="{{collectionName}}" where collectionName is the array to iterate.
222
+ - Inside a Repeater, child block props can reference each item's fields via {{$index.fieldName}}.
223
+ - Binding syntax must use exactly two curly braces: {{path}} \u2014 not {path} or \${{path}}.
224
+ - (global) paths are site-wide and available on every page. (page) paths are only available on this specific page type.
225
+
226
+ **Available Data Binding Paths**:
227
+ {{DATA_BINDING_PATHS}}
228
+
229
+ ## Current Page Type
230
+ {{PAGE_TYPE_CONTEXT}}
231
+
232
+ ## Available Custom Blocks
233
+ The following custom block types are registered and available for use. Use them with the ADD action using <chai-{kebab-type}> tags. Provide the props listed for each block as kebab-case HTML attributes. Complex values (objects, arrays) must be JSON-encoded.
234
+
235
+ {{CUSTOM_BLOCK_CATALOG}}
236
+
237
+ ## Special Blocks
238
+
239
+ ### Repeater \u2014 <chai-repeater>
240
+ Used to render a list by iterating over an array data binding.
241
+ - Required prop: \`repeater-items="{{arrayPath}}"\` where \`arrayPath\` is an array-type binding path.
242
+ - Only bind to paths marked as arrays in "Available Data Binding Paths".
243
+ - Child blocks inside a Repeater reference the current item's fields using \`{{$index.fieldName}}\`.
244
+ - Example: \`<chai-repeater repeater-items="{{page.products}}"><h3>{{$index.name}}</h3></chai-repeater>\`
245
+ - Do NOT use a Repeater for static lists \u2014 only when iterating over bound data.
246
+
247
+ ### PartialBlock \u2014 <chai-partial-block>
248
+ Partial blocks are global reusable blocks (e.g. header, footer, navigation) shared across pages.
249
+ - Reference them by their ID: \`<chai-partial-block partial-id="THE_PARTIAL_ID"></chai-partial-block>\`
250
+ - Never modify a partial block's content inline \u2014 only reference it.
251
+ - When asked to build a full page layout, use the \`get_partial_blocks\` tool (available in Plan 007)
252
+ to discover available partial IDs before placing them.
253
+ - If the tool is not available, ask the user for the partial IDs to use.
254
+
255
+ ## Icons
256
+ - Icons use the **Lucide** icon set (https://lucide.dev/icons).
257
+ - Always include \`chai-type="Icon"\` on icon elements and preserve any existing attributes (e.g. \`bid\`).
258
+ - Express each icon as \`<chai-icon chai-type="Icon" icon-name="kebab-case-name" width="16" height="16">\`
259
+ e.g. \`<chai-icon chai-type="Icon" icon-name="search" width="16" height="16">\`, \`<chai-icon chai-type="Icon" icon-name="arrow-right" width="24" height="24">\`.
260
+ - Pick semantically appropriate icon names from Lucide; do not embed raw \`<svg>\` markup inside \`<chai-icon>\`.
261
+
262
+ ### SVG
263
+ - Always include width/height attributes.
264
+ - Ensure correct \`viewBox\`.
265
+
266
+
267
+ # 5. SHADCN/THEME COLOR RULES (STRICT)
268
+
269
+ Use ONLY these semantic tokens:
270
+ - bg-background + text-foreground
271
+ - bg-card + text-card-foreground
272
+ - bg-primary + text-primary-foreground
273
+ - bg-secondary + text-secondary-foreground
274
+ - bg-muted + text-muted-foreground
275
+ - bg-accent + text-accent-foreground
276
+ - bg-destructive + text-destructive-foreground
277
+ - border-border, border-input
278
+ - ring-ring
279
+
280
+ ### Contrast Rules
281
+ - Always maintain clear readable contrast.
282
+ - Never pair same-family bg/text tokens (e.g., bg-primary + text-primary).
283
+
284
+ ### Hover Rules
285
+ - Primary buttons: hover:bg-primary/90
286
+ - Cards: hover:bg-accent hover:text-accent-foreground
287
+ - Links: text-muted-foreground hover:text-foreground
288
+ - Nav links: text-foreground/80 hover:text-foreground
289
+
290
+
291
+ # 6. RESPONSIVENESS RULES
292
+
293
+ - Mobile-first approach.
294
+ - Breakpoints: sm, md, lg, xl.
295
+ - Smooth scaling between sizes.
296
+ - At md breakpoint:
297
+ * Reduce grid columns (lg:4 \u2192 md:2 \u2192 sm:1)
298
+ * Adjust padding, spacing, and layouts
299
+ * Ensure nav/mobilmenus behave correctly
300
+ * Ensure cards remain aligned
301
+
302
+
303
+ # 7. SPECIFIC UI PATTERNS
304
+
305
+ ### Forms & Fields
306
+ - Always include proper \`type\` and \`autocomplete\` attributes for form fields (e.g., \`type="email" autocomplete="email"\`, \`type="text" autocomplete="given-name"\`, \`type="tel" autocomplete="tel"\`).
307
+
308
+ ### Mobile Menu (<details><summary>)
309
+ - Use 'summary' containing an SVG hamburger icon.
310
+ - Mobile menu container sample:
311
+ absolute right-1 mt-2 min-w-64 bg-card border border-border rounded-lg shadow-lg z-50 p-4
312
+ - Menu item sample:
313
+ block py-2 px-4 hover:bg-accent rounded-md transition-colors
314
+ - Touch targets must be at least 44px tall.
315
+
316
+ ### Accordions / Nested Menus
317
+ - Always use <details> and <summary>.
318
+
319
+
320
+ # 8. COMMON RULES
321
+
322
+ {{ANIMATION_RULES}}
323
+ {{IMAGE_RULES}}
324
+
325
+ # 9. OUTPUT RESTRICTIONS
326
+ - Output ONLY the exact allowed action blocks inside the mandatory format.
327
+ - NEVER include stray text.
328
+ - NEVER include markdown.
329
+ - NEVER break the format.
330
+ - NEVER place ANYTHING before '--START--' and after '--END--'.
331
+ - The output must always begin with '--START--' and end with '--END--'.
332
+ `.trim(),so=r=>{let e=Fh;return r!=null&&r.animation?e=e.replace("{{ANIMATION_RULES}}",Oh):e=e.replace("{{ANIMATION_RULES}}",""),r!=null&&r.image,e=e.replace("{{IMAGE_RULES}}",Xl),e}});var ec,tc=T(()=>{"use strict";ec=`Generate image based on the user request.
333
+ The image should be suitable for use as a website asset such as hero backgrounds, product images, team photos, icons, or decorative elements.
334
+ Ensure the image is medium quality, professional, and appropriate for web use. Do not add text or button on image if not explicitly requested.`});var rc,ac=T(()=>{"use strict";rc=`You are an expert language translator specializing in preserving data structure integrity while translating content.
335
+
336
+ TASK: Translate all text content within the provided JSON structure to the target language.
337
+
338
+ TRANSLATION PATTERN:
339
+ 1. Content Translation Strategy:
340
+ - Identify text content properties (e.g., 'content', 'label', 'text', 'title', 'description')
341
+ - Preserve the original property as the default language content
342
+ - Add language-specific variants using the pattern: '{propertyName}-{languageCode}'
343
+
344
+ 2. Property Naming Convention:
345
+ - Original: 'content' (default language)
346
+ - Translated: 'content-fr', 'content-es', 'content-de', etc.
347
+ - Examples: 'label' \u2192 'label-fr', 'title' \u2192 'title-es', 'description' \u2192 'description-de'
348
+
349
+ 3. Implementation Rules:
350
+ - NEVER override or remove the original property
351
+ - Language code is provided in the user request
352
+ - If there is already a property with the same name as the translated property, replace it with the translated property.
353
+
354
+ REQUIREMENTS (Common):
355
+ 1. Return ONLY the translated JSON structure - no markdown formatting, code blocks, or explanations
356
+ 2. Preserve the exact JSON structure, keys, and data types
357
+ 3. Maintain proper grammar, tone, and cultural context in the target language
358
+ 4. Maintain the original structure and data types
359
+ 5. Translate ONLY human-readable text content - do NOT translate:
360
+ - JSON keys/property names
361
+ - Data binding placeholders (format: {{dataBindingId}})
362
+ - HTML attributes (class, id, data-*, etc.)
363
+ - URLs, file paths, or technical identifiers
364
+ - Code snippets or technical values
365
+ 6. Ensure translated text fits naturally within the original context
366
+ 7. Keep numbers, dates, and technical terms unchanged unless culturally appropriate to translate
367
+
368
+ OUTPUT FORMAT: Valid JSON only, ready to be parsed directly.`});var nc,ic=T(()=>{"use strict";nc=`You are an expert language translator and content editor specializing in preserving data structure integrity while modifying content.
369
+
370
+ TASK: Modify content within the provided JSON structure according to user request for the target language.
371
+
372
+ CONTENT MODIFICATION STRATEGY:
373
+ 1. Language Property Selection:
374
+ - First, check if '{propertyName}-{languageCode}' exists (e.g., 'content-fr', 'label-es', 'title-de')
375
+ - If language-specific property exists: Use and modify that property's content
376
+ - If language-specific property does NOT exist: Use the default language property content, translate it to the target language, and create the '{propertyName}-{languageCode}' property with the translated content
377
+
378
+ 2. Property Naming Convention:
379
+ - Default language: 'content', 'label', 'text', 'title', 'description'
380
+ - Language-specific: 'content-{languageCode}', 'label-{languageCode}', etc.
381
+ - Examples: 'content-fr', 'label-es', 'title-de', 'description-ja'
382
+
383
+ 3. Implementation Rules:
384
+ - NEVER modify the original default language property
385
+ - Only modify or create the language-specific property ('{propertyName}-{languageCode}')
386
+ - Language code is provided in the user request
387
+ - Preserve all other language variants unchanged
388
+
389
+ REQUIREMENTS (Common):
390
+ 1. Return ONLY the modified JSON structure - no markdown formatting, code blocks, or explanations
391
+ 2. Preserve the exact JSON structure, keys, and data types
392
+ 3. Maintain proper grammar, tone, and cultural context in the target language
393
+ 4. Maintain the original structure and data types
394
+
395
+ CRITICAL REQUIREMENTS (Content Modification):
396
+ 1. Apply user-requested modifications (improve, lengthen, shorten, fix grammar, change tone, rephrase, etc.) to the language-specific property
397
+ 2. If language-specific property exists: Modify its content according to user request
398
+ 3. If language-specific property does NOT exist: Translate default content to target language first, then apply modifications
399
+ 4. Do NOT translate or modify:
400
+ - JSON keys/property names
401
+ - Data binding placeholders (format: {{dataBindingId}})
402
+ - HTML attributes (class, id, data-*, etc.)
403
+ - URLs, file paths, or technical identifiers
404
+ - Code snippets or technical values
405
+ 5. Preserve all other language variants and properties unchanged
406
+ 6. Apply changes consistently across related properties when applicable
407
+
408
+ OUTPUT FORMAT: Valid JSON only, ready to be parsed directly.`});function ar(r=null,e={}){if(r)switch(r){case"GENERATE_IMAGE":return ec;case"TRANSLATE_CONTENT":return rc;case"UPDATE_CONTENT":return nc;default:return so(e)}return so(e)}var Xa=T(()=>{"use strict";Zl();tc();ac();ic()});var oc,sc=T(()=>{"use strict";oc=r=>{let e=r.trim();return e.startsWith("{")&&e.endsWith("}")?e.slice(1,-1).trim():r}});function pc(r){lo=r}function co(){return lo}function po(r,e){return cc.run(r,e)}function ut(){var r;return(r=cc.getStore())!=null?r:lo}function L(r){return ut()>=r}var lc,kT,lo,cc,Ke=T(()=>{"use strict";lc=require("async_hooks"),kT=require("server-only"),lo=0,cc=new lc.AsyncLocalStorage});function Gh(r,e){var t,a,n,i,s,l;r.appId=e.appId,r.userId=(t=e.userId)!=null?t:null,r.draftMode=(a=e.draft)!=null?a:!1,r.siteUrl=(n=e.siteUrl)!=null?n:null,r.lang=(i=e.lang)!=null?i:"en",r.fallbackLang="en",r.licenseCheck=(s=e.licenseCheck)!=null?s:null,r.delegatedScopes=(l=e.delegatedScopes)!=null?l:null,r.initialized=!0,r.cacheKeys.clear(),r.traceId=null,r.traceStart=0,r.traceLabel=null,r.traceDetail=null,r.traceDepth=0}function mt(r,e){let t=jr.getStore();return t!=null&&t.initialized&&t.appId===r.appId?po(co(),e):jr.run(Uh(),()=>(Gh(Wr(),r),po(co(),e)))}function go(r,e){return r?jr.run(r,e):e()}var dc,BT,jr,Uh,Wr,le,O,nr,Za,z=T(()=>{"use strict";dc=require("async_hooks"),BT=require("server-only");Ke();jr=new dc.AsyncLocalStorage,Uh=()=>({appId:null,userId:null,draftMode:!1,fallbackLang:"en",lang:null,initialized:!1,siteUrl:null,licenseCheck:null,delegatedScopes:null,cacheKeys:new Map,traceId:null,traceStart:0,traceLabel:null,traceDetail:null,traceDepth:0});Wr=()=>{let r=jr.getStore();if(r)return r;throw new Error("ChaiBuilder method called outside of a request context")},le=()=>jr.getStore();O=()=>{let r=Wr();if(!r.initialized||!r.appId)throw new Error("Please initialize ChaiBuilder with an API key");return r},nr=()=>{let r=Wr();if(!r.initialized||!r.appId)throw new Error("Please initialize ChaiBuilder with an API key");if(!r.userId)throw new Error("Please initialize ChaiBuilder with initWithUser() for this operation");return r},Za=O});function uo(r,e){let t=le();return!t||t.traceId?!1:(t.traceId=(0,gc.nanoid)(6),t.traceStart=performance.now(),t.traceLabel=r,t.traceDetail=e!=null?e:null,!0)}function mo(){var r,e;return(e=(r=le())==null?void 0:r.traceDetail)!=null?e:null}function ce(){let r=le();if(!(r!=null&&r.traceId))return"";let e=Math.round(performance.now()-r.traceStart);return`${" ".repeat(r.traceDepth)}[${r.traceId} +${e}ms]`}function ho(r){let e=le();e&&(e.traceDepth+=1);try{return r()}finally{e&&(e.traceDepth=Math.max(0,e.traceDepth-1))}}var gc,OT,Yr=T(()=>{"use strict";gc=require("nanoid"),OT=require("server-only");z()});function pe(r,e){Mh[r](e)}function $h(r){var s,l,c,d,u,g,y,b,A;let e=r.replace(/\s+/g," ").trim(),t=(c=(l=(s=e.match(/^(select|insert|update|delete)/i))==null?void 0:s[1])==null?void 0:l.toUpperCase())!=null?c:"SQL",a=(A=(b=(g=(d=e.match(/\sfrom\s+"?(\w+)"?/i))==null?void 0:d[1])!=null?g:(u=e.match(/\sinto\s+"?(\w+)"?/i))==null?void 0:u[1])!=null?b:(y=e.match(/\supdate\s+"?(\w+)"?/i))==null?void 0:y[1])!=null?A:"",i=/\swhere\s/i.test(e)?" WHERE \u2026":"";return a?`${t} ${a}${i}`:ir(e,120)}function ir(r,e=200){return r.length<=e?r:`${r.slice(0,e)}\u2026`}function en(r,e){if(!L(1))return;let t=ce(),a=e?` \xB7 ${e}`:"";pe("info",`${t} \u25B6 ${r}${a}`)}function mc(r,e){L(1)&&pe("info",`${r} \xB7 ${e}ms`)}function fo(r,e){if(!L(1))return;let t=ce(),a=e?` \xB7 ${e}`:"";pe("info",`${t} \u25B6 ${r}${a}`)}function Qr(r,e){if(!L(1))return;let t=ce(),a=$h(e);pe("info",`${t} db ${r}ms \xB7 ${a}`)}function hc(r,e){if(!L(2))return;let t=ce(),a=e.length>0?` \xB7 params=${ir(JSON.stringify(e),120)}`:"";pe("debug",`${t} db sql \xB7 ${ir(r.replace(/\s+/g," ").trim(),160)}${a}`)}function yo(r,e,t,a){if(!L(1))return;let n=ce(),i=a>0?String(a):"failed";pe("info",`${n} fetch ${t}ms \xB7 ${r} ${ir(e,100)} \xB7 ${i}`)}function bo(r,e,t){if(!L(1))return;let a=ce();pe("success",`${a} cache HIT \xB7 ${r} \xB7 ${e} \xB7 ${t}`)}function To(r,e,t){if(!L(1))return;let a=ce();pe("warn",`${a} cache MISS \xB7 ${r} \xB7 ${e} \xB7 ${t}`)}function fc(r,e){if(!L(2))return;let t=ce();pe("info",`${t} api ${e}ms \xB7 ${r}`)}function yc(r,e){if(!L(2))return;let t=ce();pe("info",`${t} action ${e}ms \xB7 ${r}`)}function Jr(r,e){if(!L(1))return;let t=ce();pe("info",`${t} \u25C0 ${r} \xB7 ${e}ms`)}function Vt(r,e,t,a){if(!L(1))return;let n=ce(),i=a?`${a} \xB7 `:"";pe("info",`${n} ai ${e}ms \xB7 ${i}${r} \xB7 ${t}`)}function Xr(r,e){if(!L(1))return;let t=ce(),a=e?` \xB7 ${e}`:"";pe("info",`${t} \u25B6 ai:${r}${a}`)}function Kt(r){if(!L(2))return;let e=ce();pe("debug",`${e} ai \xB7 ${ir(r,200)}`)}function bc(r,e){if(!L(2))return;let t=ce();pe("debug",`${t} ai tool \xB7 ${r} \xB7 ${ir(e,120)}`)}function Zr(r,e,t=2){if(!L(t))return;let a=ce(),n=e?` \xB7 ${e}`:"";pe(t===1?"info":"debug",`${a} ai stream \xB7 ${r}${n}`)}var uc,GT,Mh,ht=T(()=>{"use strict";uc=require("consola"),GT=require("server-only");Ke();Yr();Mh=uc.consola.withTag("ChaiDebug")});function ea(r,e=120){let t=r.replace(Hh,"[data-uri]");return t.length<=e?t:`${t.slice(0,e)}\u2026`}function Ao(r){return`messages=${r.length}`}var qT,Hh,Tc=T(()=>{"use strict";qT=require("server-only");Ke();ht();Yr();Hh=/data:[^;]+;base64,[A-Za-z0-9+/=]+/g});var Po,P,R=T(()=>{"use strict";Po=require("zod");N();P=class{constructor(){this.context=null}getValidationSchema(){return{}}validate(e){if(!e)return!0;try{let t=this.getValidationSchema();return t!=null&&t.parse&&t.parse(e),!0}catch(t){return!1}}getValidationErrors(e){if(!e)return null;try{let t=this.getValidationSchema();return t!=null&&t.parse&&t.parse(e),null}catch(t){return t instanceof Po.z.ZodError?t.issues.map(n=>`${n.path.join(".")}: ${n.message}`).join(", "):null}}setContext(e){this.context=e}async run(e){if(!this.validate(e)){let t=this.getValidationErrors(e),a=t?`Validation failed: ${t}`:"Validation failed";throw new m(a,"VALIDATION_ERROR")}return this.execute(e)}handleError(e){if(e instanceof m)throw e;if(e instanceof Po.z.ZodError){let t=e.issues.map(a=>`${a.path.join(".")}: ${a.message}`).join(", ");throw new m(`Validation failed: ${t}`,"VALIDATION_ERROR")}else{let t=e instanceof Error?e.message:"Unknown error";throw new m(t,"ACTION_ERROR")}}}});function or(){return ft().credits.enabled}function tn(){return ft().logging.logger}function Ac(r,e="UNKNOWN"){let t=ft();if(!r)return{model:r};if(typeof r=="object"&&"modelId"in r)return{model:r};if(t.resolveModel){let a=t.resolveModel(r,e);if(a)return a}if(t.models&&typeof r=="string"){let a=t.models.find(n=>n.id===r);if(a)return{model:a}}return{model:r}}function Co(r,e="UNKNOWN"){let t=Ac(r,e);return{model:t.model,providerOptions:t.providerOptions}}function Eo(r,e="UNKNOWN"){let t=Ac(r,e);return{model:t.model,providerOptions:t.providerOptions}}var v,ee=T(()=>{"use strict";je();v=(r,e)=>(console.error(e),new Error(r))});async function qh(r){if(wo.has(r))return wo.get(r)||null;let{data:e,error:t}=await f(()=>h.select({user:o.apps.user,client:o.apps.client}).from(o.apps).where((0,K.eq)(o.apps.id,r)).limit(1)),a=!t&&e&&e.length>0&&e[0].user?{user:e[0].user,client:e[0].client}:null;return wo.set(r,a),a}async function Pc(r){let{data:e,error:t}=await f(()=>h.select({planId:o.appUserPlans.planId,nextBilledAt:o.appUserPlans.nextBilledAt,clientId:o.appUserPlans.client,plansAndAddOns:o.clients.plansAndAddOns}).from(o.appUserPlans).innerJoin(o.clients,(0,K.eq)(o.appUserPlans.client,o.clients.id)).where((0,K.eq)(o.appUserPlans.user,r)).limit(1));return t||!e||e.length===0?null:{planId:e[0].planId||"FREE",nextBilledAt:new Date(e[0].nextBilledAt),clientId:e[0].clientId,plansConfig:e[0].plansAndAddOns}}async function zh(r,e,t){let a=[(0,K.eq)(o.apps.user,r),(0,K.eq)(o.aiLogs.creditSource,"monthly")];e&&a.push((0,K.gte)(o.aiLogs.createdAt,e.toISOString())),t&&a.push((0,K.lt)(o.aiLogs.createdAt,t.toISOString()));let{data:n,error:i}=await f(()=>h.select({total:K.sql`COALESCE(SUM(CAST(${o.aiLogs.totalTokens} AS NUMERIC)), 0)`}).from(o.aiLogs).innerJoin(o.apps,(0,K.eq)(o.aiLogs.app,o.apps.id)).where((0,K.and)(...a)));return i||!n||n.length===0?0:parseFloat(n[0].total)||0}async function Vh(r){let{data:e,error:t}=await f(()=>h.select({id:o.aiCreditAddons.id,creditsTotal:o.aiCreditAddons.creditsTotal,creditsUsed:o.aiCreditAddons.creditsUsed}).from(o.aiCreditAddons).where((0,K.and)((0,K.eq)(o.aiCreditAddons.user,r),(0,K.eq)(o.aiCreditAddons.status,"active"))).orderBy((0,K.asc)(o.aiCreditAddons.createdAt)));if(t||!e||e.length===0)return{total:0,used:0,remaining:0,addons:[]};let a=0,n=0,i=[];for(let s of e){let l=parseFloat(s.creditsTotal)||0,c=parseFloat(s.creditsUsed)||0,d=l-c;a+=l,n+=c,d>0&&i.push({id:s.id,remaining:parseFloat(d.toFixed(2))})}return{total:a,used:n,remaining:parseFloat((a-n).toFixed(2)),addons:i}}async function xo(r){var C,w,k;let e=await qh(r);if(!e)return null;let t=await Pc(e.user),a=(t==null?void 0:t.plansConfig)||(e.client?await Io(e.client):null);if(!a)return null;let n=(t==null?void 0:t.planId)||"FREE",i=(C=a.plans)==null?void 0:C.find(D=>{var B;return n==="FREE"&&D.isFree||((B=D.items)==null?void 0:B.some(_=>_.id===n||_.sandboxId===n))}),s=(k=(w=i==null?void 0:i.limits)==null?void 0:w.no_of_ai_credits)!=null?k:0,l=(i==null?void 0:i.isFree)||n==="FREE",c,d;l||(d=new Date(t.nextBilledAt),c=new Date(d),c.setMonth(c.getMonth()-1));let[u,g]=await Promise.all([zh(e.user,c,d),Vh(e.user)]),y=parseFloat((u/rn).toFixed(2)),b=Math.min(y,s),A=Math.max(0,s-y),E={total:g.total,used:Math.min(g.used,g.total),remaining:Math.max(0,g.remaining),addons:g.addons.map(D=>({id:D.id,remaining:D.remaining}))};return{monthly:{used:b,limit:s,remaining:parseFloat(A.toFixed(2))},addon:E,totalAvailable:parseFloat((A+E.remaining).toFixed(2)),canBuyCredits:(a.addOns||[]).length>0,billingPeriod:c&&d?{start:c,end:d}:void 0}}async function Cc(r){if(!or())return{available:!0,status:null};let e=await xo(r);return e?{available:e.totalAvailable>0,status:e}:{available:!1,status:null}}function Ec(r,e){let t=e/rn;return r.monthly.remaining>=t?{success:!0,creditSource:"monthly",addonId:null}:r.addon.remaining>0&&r.addon.addons.length>0?{success:!0,creditSource:"addon",addonId:r.addon.addons[0].id}:r.totalAvailable<t?{success:!1,creditSource:"monthly",addonId:null,error:"Insufficient credits"}:r.monthly.remaining>0?{success:!0,creditSource:"monthly",addonId:null}:r.addon.addons.length>0?{success:!0,creditSource:"addon",addonId:r.addon.addons[0].id}:{success:!1,creditSource:"monthly",addonId:null,error:"No credits available"}}async function wc(r,e){let{error:t}=await f(()=>h.update(o.aiCreditAddons).set({creditsUsed:K.sql`CAST(${o.aiCreditAddons.creditsUsed} AS NUMERIC) + ${(e/rn).toFixed(2)}`,status:K.sql`CASE WHEN CAST(${o.aiCreditAddons.creditsUsed} AS NUMERIC) + ${(e/rn).toFixed(2)} >= CAST(${o.aiCreditAddons.creditsTotal} AS NUMERIC) THEN 'exhausted' ELSE 'active' END`}).where((0,K.eq)(o.aiCreditAddons.id,r)));return t?{success:!1,error:"Failed to update addon credits"}:{success:!0}}async function xc(r){let e=await Pc(r);return e?{planId:e.planId,nextBilledAt:e.nextBilledAt,clientId:e.clientId}:null}async function Io(r){let{data:e,error:t}=await f(()=>h.select({plansAndAddOns:o.clients.plansAndAddOns}).from(o.clients).where((0,K.eq)(o.clients.id,r)).limit(1));return t||!e||e.length===0?null:e[0].plansAndAddOns}var K,rn,wo,ta=T(()=>{"use strict";K=require("drizzle-orm");I();ee();rn=1e3,wo=new Map});var Dt,an,Q,nt=T(()=>{"use strict";Dt=require("ai");sc();Ke();Tc();ht();N();R();ee();ta();an=class an extends P{getActionLabel(){var e,t;return(t=(e=this.context)==null?void 0:e.action)!=null?t:"UNKNOWN_AI_ACTION"}logTokenUsage(e,t){var n;if(!L(2))return;let a=(n=t==null?void 0:t.totalTokens)!=null?n:e==null?void 0:e.totalTokens;a!==void 0&&Kt(`tokens=${a}`)}getLoggablePrompt(e){if(typeof e.prompt=="string")return e.prompt;if(Array.isArray(e.messages)){let t=e.messages.find(a=>a.role==="user");if(t)return typeof t.content=="string"?t.content:JSON.stringify(t.content)}return""}selectPromptVariant(){if(!this.prompts||this.prompts.length===0)return null;if(this.prompts.length===1)return{variant:this.prompts[0],index:0};let e=this.prompts.reduce((a,n)=>a+(n.weight||1),0),t=Math.random()*e;for(let a=0;a<this.prompts.length;a++){let n=this.prompts[a].weight||1;if(t<n)return{variant:this.prompts[a],index:a};t-=n}return{variant:this.prompts[0],index:0}}async checkCredits(){var a;if(!or())return{available:!0,status:null};let{available:e,status:t}=await Cc(this.context.appId);if(!e){let n=t?"You have run out of AI credits. Please purchase additional credits or wait for your monthly credits to reset.":"Unable to verify credit status. Please try again.";throw new m(n,"RATE_LIMIT",429,void 0,{canBuyCredits:(a=t==null?void 0:t.canBuyCredits)!=null?a:!1})}return{available:e,status:t}}async generateText(e){var d,u,g,y;let t=await this.checkCredits();if(!t.available)throw new m("AI credits are required to generate text","RATE_LIMIT",429);let a=typeof e.model=="string"?e.model:this.model;if(a){let b=Co(a,(u=(d=this.context)==null?void 0:d.action)!=null?u:"UNKNOWN");e={...e,...b}}else!e.model&&this.model&&(e={...e,model:this.model});let n=tn(),i=Date.now(),s=this.getLoggablePrompt(e),l=(y=(g=e.model)==null?void 0:g.toString())!=null?y:"unknown",c=this.getActionLabel();L(1)&&Xr(c,"generateText"),L(2)&&(Array.isArray(e.messages)&&Kt(Ao(e.messages)),s&&Kt(`prompt \xB7 ${ea(s)}`));try{let b=await(0,Dt.generateText)(e);return L(1)&&Vt(l,Date.now()-i,"generateText",c),this.logTokenUsage(b.usage,b.totalUsage),n==null||n({response:b,userId:this.context.userId,appId:this.context.appId,creditStatus:t.status,startTime:i,prompt:s,model:e.model.toString()}),b}catch(b){throw L(1)&&Vt(l,Date.now()-i,"generateText (error)",c),n==null||n({error:b instanceof Error?b.message:String(b),response:{},userId:this.context.userId,appId:this.context.appId,creditStatus:t.status,startTime:i,prompt:s,model:e.model.toString()}),b}}async generateImage(e){var d,u,g,y,b,A,E;let t=await this.checkCredits();if(!t.available)throw new m("AI credits are required to generate images","RATE_LIMIT",429);let a=e;if(e.model!==void 0)a=typeof e.model=="string"?{...a,model:Eo(e.model,(u=(d=this.context)==null?void 0:d.action)!=null?u:"UNKNOWN").model}:{...a,model:e.model};else if(this.model){let C=Eo(this.model,(y=(g=this.context)==null?void 0:g.action)!=null?y:"UNKNOWN");a={...a,model:C.model}}let n=tn(),i=Date.now(),s=typeof a.prompt=="string"?a.prompt:typeof a.prompt=="object"&&((b=a.prompt)!=null&&b.text)?a.prompt.text:"",l=(E=(A=a.model)==null?void 0:A.toString())!=null?E:"unknown",c=this.getActionLabel();L(1)&&Xr(c,"generateImage"),L(2)&&s&&Kt(`prompt \xB7 ${ea(s)}`);try{let C=await(0,Dt.generateImage)(a);return L(1)&&Vt(l,Date.now()-i,"generateImage",c),n==null||n({response:C,userId:this.context.userId,appId:this.context.appId,creditStatus:t.status,startTime:i,prompt:s,model:a.model.toString()}),C}catch(C){throw L(1)&&Vt(l,Date.now()-i,"generateImage (error)",c),n==null||n({error:C instanceof Error?C.message:String(C),response:{},userId:this.context.userId,appId:this.context.appId,creditStatus:t.status,startTime:i,prompt:s,model:a.model.toString()}),C}}async streamText(e){var d,u,g,y;let t=await this.checkCredits();if(!t.available)throw new m("AI credits are required to stream text","RATE_LIMIT",429);let a=typeof e.model=="string"?e.model:this.model;if(a){let b=Co(a,(u=(d=this.context)==null?void 0:d.action)!=null?u:"UNKNOWN");e={...e,model:b.model}}let n=tn(),i=Date.now(),s=this.getLoggablePrompt(e),l=(y=(g=e.model)==null?void 0:g.toString())!=null?y:"unknown",c=this.getActionLabel();return L(1)&&Xr(c,"streamText"),L(2)&&(Array.isArray(e.messages)&&Kt(Ao(e.messages)),s&&Kt(`prompt \xB7 ${ea(s)}`)),(0,Dt.streamText)({...e,onFinish:b=>{L(1)&&Vt(l,Date.now()-i,"streamText",c),this.logTokenUsage(b.usage,b.totalUsage),n==null||n({response:b,userId:this.context.userId,appId:this.context.appId,creditStatus:t.status,startTime:i,prompt:s,model:l})},onError:b=>{L(1)&&Vt(l,Date.now()-i,"streamText (error)",c),n==null||n({error:b instanceof Error?b.message:String(b),response:{},userId:this.context.userId,appId:this.context.appId,creditStatus:t.status,startTime:i,prompt:s,model:l})}})}createChaiStreamTransformer(){let e=new TextEncoder,t=!1;return new TransformStream({start(){},transform(a,n){!t&&!a.includes("--START--")?(n.enqueue(e.encode(`--START--
409
+ `)),t=!0):!t&&a.includes("--START--")&&(t=!0),n.enqueue(e.encode(a))},flush(a){t||a.enqueue(e.encode(`--START--
410
+ `)),a.enqueue(e.encode(`
411
+ --END--`))}})}createErrorStream(e){let t=new TextEncoder,a=this.sanitizeErrorMessageForStream(e.message||String(e));return new ReadableStream({start(n){n.enqueue(t.encode(`--START--
412
+ --MSG=${oc(a)}--
413
+ --END--`)),n.close()}})}sanitizeErrorMessageForStream(e){return e.replace(/[\r\n]+/g," ").replace(/--/g,"- -").replace(/[\x00-\x1F\x7F]/g,"").trim()}async streamChaiBuilderText(e){try{return{_streamingResponse:!0,_streamResult:{textStream:(await this.streamText(e)).textStream.pipeThrough(this.createChaiStreamTransformer())}}}catch(t){return{_streamingResponse:!0,_streamResult:{textStream:this.createErrorStream(t)}}}}createFullStreamMixedEncoder(e){let t=new TextEncoder,a=this.getActionLabel(),n=!1,i=!1,s="";return new ReadableStream({async start(l){var c,d;Zr("open",a);try{for await(let u of e.fullStream)if(u.type==="text-delta"){let g=s+u.text;s=g.slice(-32);let y=g.includes("--START--"),b=g.includes("--END--");!n&&!y?(l.enqueue(t.encode(`--START--
414
+ `)),n=!0):!n&&y&&(n=!0),b&&(i=!0),l.enqueue(t.encode(u.text))}else u.type==="tool-call"&&an.CLIENT_ONLY_AI_TOOLS.has(u.toolName)?(bc(u.toolName,ea(JSON.stringify(u.input))),l.enqueue(t.encode(`9:${JSON.stringify({toolCallId:u.toolCallId,toolName:u.toolName,args:u.input})}
415
+ `))):u.type==="finish"?(Zr("finish",(c=u.finishReason)!=null?c:"stop"),l.enqueue(t.encode(`d:${JSON.stringify({finishReason:(d=u.finishReason)!=null?d:"stop"})}
416
+ `))):u.type==="error"&&(Zr("error",String(u.error),1),l.enqueue(t.encode(`3:${JSON.stringify(String(u.error))}
417
+ `)));n||l.enqueue(t.encode(`--START--
418
+ `)),i||l.enqueue(t.encode(`
419
+ --END--`)),Zr("close"),l.close()}catch(u){l.error(u)}}})}async streamChaiBuilderWithTools(e){try{let{tools:t,...a}=e,n=await this.streamText({...a,tools:t,toolChoice:"auto",stopWhen:(0,Dt.stepCountIs)(8)});return{_streamingResponse:!0,_streamResult:{textStream:this.createFullStreamMixedEncoder(n)}}}catch(t){return{_streamingResponse:!0,_streamResult:{textStream:this.createErrorStream(t)}}}}async streamChaiBuilderUIMessageResponse(e){return{_streamingResponse:!0,_streamResult:{isDataStream:!0,dataStream:(await this.streamText({toolChoice:"auto",...e})).toUIMessageStreamResponse({sendReasoning:!0,onError:a=>this.sanitizeErrorMessageForStream(a instanceof Error?a.message:String(a))})}}}formatBase64(e){return e.includes(",")?e.split(",")[1]:e}};an.CLIENT_ONLY_AI_TOOLS=new Set(["remove_blocks","add_custom_block","bind_prop"]);Q=an});var re,Kh,nn,Sc=T(()=>{"use strict";re=require("zod");Ya();Kr();_t();je();Qa();Ja();Xa();nt();Kh=re.z.record(re.z.string(),re.z.object({name:re.z.string(),value:re.z.string(),description:re.z.string().optional(),archived:re.z.boolean().optional()})).optional(),nn=class extends Q{getValidationSchema(){return re.z.object({messages:re.z.array(re.z.any()),model:re.z.string().optional(),context:re.z.any().optional(),designTokens:Kh,images:re.z.array(re.z.string()).optional(),attachments:re.z.array(re.z.any()).optional(),options:re.z.any().optional()})}async execute(e){var B,_,H,W,Se,Mr;this.context||at(new Fe("Context not set. Please try again.","INVALID_REQUEST",500)),(!e.messages||e.messages.length===0)&&at(new Fe("No messages provided. Please enter a prompt.","INVALID_REQUEST",400));let t=e.messages.filter(F=>F.role!=="system"),a=t[t.length-1];a||at(new Fe("No user message found in the request.","INVALID_REQUEST",400));let n=ar(null,e==null?void 0:e.options),i={...kt,...e.designTokens||{}},s=Object.entries(i).filter(([,F])=>F!=null&&!F.archived).map(([F,gt])=>`- ${F}: ${gt.value} (${gt.name})`).join(`
420
+ `);n=n.replace("{{DESIGN_TOKENS_LIST}}",s);let l=new Set(["Box","Button","Checkbox","Divider","EmptyBox","Form","FormButton","Heading","Input","Label","LineBreak","Link","List","ListItem","Paragraph","Radio","RichText","Select","Span","Text","TextArea","Video","Icon","GlobalBlock"]),c=(B=e==null?void 0:e.options)==null?void 0:B.pageType,d=zr(),u=Object.values(d).filter(F=>!l.has(F.type)&&Wa(F,c||"page")),g;u.length===0?g="No custom blocks registered.":g=u.map(F=>{var vl,_l,kl;let gt=(_l=(vl=F.props)==null?void 0:vl.schema)!=null&&_l.properties?Object.entries(F.props.schema.properties).filter(([,he])=>!(he!=null&&he.styles)&&!(he!=null&&he.runtime)&&!(he!=null&&he.hidden)).map(([he,Pe])=>{var Dl,Bl,Nl;let Zm=Array.isArray(Pe==null?void 0:Pe.type)?Pe.type.join("|"):(Dl=Pe==null?void 0:Pe.type)!=null?Dl:"any",eh=(Pe==null?void 0:Pe.default)!==void 0?` (default: ${JSON.stringify(Pe.default)})`:"",th=(Bl=F.aiProps)!=null&&Bl.includes(he)?" [AI-settable]":"";return` - ${he} (${Zm})${eh}${th}: ${(Nl=Pe==null?void 0:Pe.title)!=null?Nl:he}`}).join(`
421
+ `):" (no declared props)",Jm=F.wrapper?" [wrapper \u2014 can contain child blocks]":"",Xm=F.type.replace(/([A-Z])/g,he=>`-${he.toLowerCase()}`).replace(/^-/,"");return`### ${F.type} \u2192 <chai-${Xm}>${Jm}
422
+ Description: ${(kl=F.description)!=null?kl:F.label}
423
+ Props:
424
+ ${gt}`}).join(`
425
+
426
+ `),n=n.replace("{{CUSTOM_BLOCK_CATALOG}}",g);let y=(H=(_=e==null?void 0:e.options)==null?void 0:_.dataBindingPaths)!=null?H:{global:[],page:[]},b=y.global.map(F=>`- (global) {{${F}}}`),A=y.page.map(F=>`- (page) {{${F}}}`),E=[...b,...A],C=E.length>0?E.join(`
427
+ `):"No data binding paths available for this page.";n=n.replace("{{DATA_BINDING_PATHS}}",C);let w;if(!c)w="Standard page (no specific page type).";else{let F=We(c),gt=(W=F==null?void 0:F.description)!=null?W:F==null?void 0:F.helpText;w=gt?`Page type: ${c}
428
+ ${gt}`:`Page type: ${c}`}n=n.replace("{{PAGE_TYPE_CONTEXT}}",w),e.context&&(n+=`
429
+
430
+ ## Additional Information`,(Se=e.context)!=null&&Se.site&&(n+=`
431
+
432
+ ## Website Information
433
+ ${JSON.stringify(e.context.site)}`),(Mr=e.context)!=null&&Mr.page&&(n+=`
434
+
435
+ ## Page Information
436
+ ${JSON.stringify(e.context.page)}`));let k=[{type:"text",text:typeof a.content=="string"?a.content:JSON.stringify(a.content)}];e.images&&e.images.length>0&&e.images.forEach(F=>{k.push({type:"image",image:F})}),e.attachments&&e.attachments.length>0&&e.attachments.forEach(F=>{if(F.url&&F.mediaType){let gt=this.formatBase64(F.url);k.push({type:"file",data:gt,mediaType:F.mediaType,...F.filename&&{filename:F.filename}})}});let D=k.length>1?[...t.slice(0,-1),{role:"user",content:k}]:e.messages;return this.streamChaiBuilderText({model:e.model,system:n,messages:D,temperature:.7})}}});var jt,on,Rc=T(()=>{"use strict";jt=require("zod");Ja();Xa();Qa();nt();on=class extends Q{getValidationSchema(){return jt.z.object({messages:jt.z.array(jt.z.any()),model:jt.z.string().optional(),context:jt.z.any().optional(),initiator:jt.z.enum(["TRANSLATE_CONTENT","UPDATE_CONTENT"])})}async execute(e){this.context||at(new Fe("Context not set. Please try again.","INVALID_REQUEST",500));let t=e.messages.filter(i=>i.role!=="system");t[t.length-1]||at(new Fe("No user message found in the request.","INVALID_REQUEST",400));let n=ar(e.initiator);return this.streamChaiBuilderText({model:e.model,system:n,messages:e.messages,temperature:.7})}}});var jh,Wh,Yh,vc,_c=T(()=>{"use strict";jh=`
437
+ # ANIMATION RULES
438
+ - Add \`data-animation\` attribute to elements when appropriate to add entry animations on scroll.
439
+ - **Do not overuse animations.** Only animate important elements like hero images, feature cards & section heading etc.
440
+ - The format MUST exactly be: \`data-animation="ANIMATION|EASING|DURATION|DELAY|TIME"\`
441
+ - **ANIMATION**: fade-in, slide-up, slide-down, slide-left, slide-right, zoom-in, zoom-out, flip-x, flip-y, rotate-in
442
+ - **EASING**: linear, ease-in, ease-out, ease-in-out
443
+ - **DURATION**: in milliseconds (e.g., 500, 700, 1000)
444
+ - **DELAY**: in milliseconds (e.g., 0, 200, 300) so that the animation starts after a delay and not immediately
445
+ - **TIME**: once (plays once) or infinite (repeats every time it enters the viewport)
446
+ - Example: \`<div data-animation="slide-up|ease-in-out|500|300|once" class="...">\`
447
+ `,Wh='\n\n# IMAGE RULES\n- Use **placeholder images only** \u2014 never use external image services like Picsum.\n- Format: `https://placehold.co/{width}x{height}/e2e8f0/e2e8f0`\n (light gray background, no text)\n\n- Suggested sizes:\n * Hero: 1200x600\n * Cards: 400x300\n * Team: 300x300\n\n- **Alt text is mandatory and must be descriptive and meaningful** \u2014 describe what the image *would* show in context, not just "image" or "placeholder".\n - \u2705 Good: `alt="A modern open-plan office with large windows and natural light"`\n - \u274C Bad: `alt="Image"`, `alt="Placeholder"`, `alt="Photo"`, `alt=""`\n- Always include explicit `width` and `height` HTML attributes on every `<img>` tag matching the image dimensions.\n Example: `<img src="https://placehold.co/1200x600/e2e8f0/e2e8f0" alt="A sweeping aerial view of a modern city skyline at sunset" width="1200" height="600">`\n',Yh=`You are the AI page editor for Chai Builder. You edit the user's page exclusively through the tools provided. You never output raw HTML in your chat text \u2014 HTML only ever appears inside tool call arguments.
448
+
449
+ # 1. HOW YOU WORK (TOOL WORKFLOW \u2014 ALWAYS OBEY)
450
+
451
+ You see a compact PAGE OUTLINE of the current page (below). Each line is one block:
452
+ \`{bid} | {type} | {name} | {short text}\`. Indentation shows nesting.
453
+
454
+ Available tools:
455
+ - **read_block_html** \u2014 fetch the full current HTML of one or more existing blocks by bid. YOU MUST call this before editing a block with edit_block. Never guess a block's markup from the outline.
456
+ - **edit_block** \u2014 replace ONE existing block (by bid) with new HTML. The html must be the full replacement for that element (its entire tag), not a partial diff.
457
+ - **add_blocks** \u2014 insert new HTML into the page. parentId is the bid of the container (omit for page root); position is the child index (-1 or omit to append).
458
+ - **remove_blocks** \u2014 delete blocks by bid.
459
+ - **add_custom_block** \u2014 add a registered custom block (anything listed in "Available Custom Blocks") with typed props. Use this \u2014 NOT HTML \u2014 for those block types.
460
+ - **bind_prop** \u2014 set a data binding on a prop of an existing block.
461
+ - **get_partial_blocks** \u2014 list available partial blocks (global reusable sections like header/footer). Call before placing <chai-partial-block> elements.
462
+
463
+ Workflow rules:
464
+ 1. Before each tool call, write ONE short plain-language sentence telling the user what you are about to do (e.g. "I'll brighten up the hero section with a bolder headline."). Friendly, non-technical \u2014 never mention bids, tags, HTML, tools, or code.
465
+ 2. To modify an existing section: read_block_html first (batch multiple bids into one call), then edit_block.
466
+ 3. Work one section at a time \u2014 one edit_block or add_blocks call per section. Never rewrite the whole page in a single call when the user asked for a targeted change.
467
+ 4. Prefer editing the smallest block that fully contains the change. If the user asks to change a headline, edit the heading's nearest sensible parent, not the entire page section \u2014 but always replace a complete element.
468
+ 5. In every edit_block/add_blocks call, fill the arguments in this exact order: task first, then blockId/parentId/position, then html LAST.
469
+ 6. \`task\` is a short user-facing progress label (e.g. "Redesigning hero section"). Plain language, no technical terms.
470
+ 7. When the user's request is ambiguous, unrelated to the page, or a question \u2014 just answer in plain text without calling tools.
471
+ 8. Partial blocks (<chai-partial-block>) cannot be edited from this page. If asked to change one, explain the user should open that partial page to edit it. You may still add/remove/move partial block references on this page.
472
+ 9. After a tool result returns ok: false with an error, correct your approach based on the error message and retry once. Do not repeat the identical failing call.
473
+ 10. When done, finish with ONE short sentence of what changed. Skip the summary entirely for a single trivial edit \u2014 the task labels already show what happened.
474
+
475
+ # 1.1 CHAT OUTPUT \u2014 KEEP IT MINIMAL (MANDATORY)
476
+
477
+ The chat is read by non-technical users. Keep your visible text as short as possible \u2014 every extra word costs tokens for no benefit.
478
+ - Write like a friendly human, never like a developer. NEVER show or describe code, HTML, tags, class names, tokens, bids, tool names, or file structure.
479
+ - Total visible text per turn: at most one short lead-in sentence and one short closing sentence. No paragraphs, no bullet lists, no headings, no markdown formatting, no code blocks or backticks.
480
+ - Do NOT restate, quote, or narrate the HTML/markup you generate \u2014 it appears live on the canvas, not in chat.
481
+ - Do NOT explain your reasoning, list the steps you took, or enumerate the design choices unless the user explicitly asks.
482
+ - If the user asks a question, answer in one or two plain sentences.
483
+
484
+ # 2. EDIT SEMANTICS
485
+ - edit_block html MUST be a full valid replacement of the target element, keeping its role in the layout.
486
+ - Preserve existing \`bid\` attributes on elements you keep within an edited block; do NOT invent bids for new elements \u2014 new elements simply have no bid.
487
+ - Never add a bid attribute in add_blocks html.
488
+ - Preserve all attributes you don't intentionally change (especially chai-type, data bindings, #styles: values).
489
+
490
+ # 3. HTML GENERATION RULES (MANDATORY)
491
+
492
+ You are an expert HTML/CSS developer specializing in Tailwind CSS and shadcn/ui patterns.
493
+ You produce clean, semantic, accessible, production-ready HTML.
494
+ Generate **pure HTML**, with no markdown, no comments, no extra text.
495
+
496
+ ### General Guidelines
497
+ 1. Use **only Tailwind CSS v3 utility classes**, no custom CSS.
498
+ 2. Use **shadcn/ui design system** semantic tokens for all colors.
499
+ 3. Use **semantic HTML** with proper accessibility.
500
+ 4. Always produce **responsive, mobile-first** layout.
501
+ 5. **Do NOT include** <!DOCTYPE>, <html>, <head>, or <body>.
502
+ 6. Keep UI varied \u2014 don't repeat the same layout patterns.
503
+ 7. Use \`<details><summary>\` for accordion, FAQ, and mobile menu interactions.
504
+ 8. Do NOT use Tailwind container queries.
505
+ 9. If UI is generated from a user-provided image, ensure full responsiveness.
506
+ 10. **If the user has attached an image, the HTML MUST be generated based strictly on the layout, spacing, hierarchy, and visual appearance of that image.**
507
+ - Match structure as closely as possible
508
+ - Maintain the Tailwind + shadcn theme rules
509
+ - The HTML output should reflect the exact design of the provided image
510
+
511
+ ### \u{1F6A8} CRITICAL: Avoid HTML "Div Soup" for Decorative UI Elements
512
+ **NEVER generate complex HTML markup for decorative UI elements that should be images:**
513
+ - \u274C DO NOT create HTML mockups of: code snippets, terminal windows, browser frames, device mockups, window chrome, syntax-highlighted code blocks
514
+ - \u2705 INSTEAD: Use placeholder images for these decorative elements
515
+ - **Reasoning**: Complex nested div structures for visual decoration create "div soup" that bloats markup unnecessarily
516
+ - **When to use images**: If the element is purely decorative/visual and not interactive content (e.g., showing a code example as part of a design, not actual executable code)
517
+ - **Examples**:
518
+ * For a "code snippet showcase" \u2192 Use an image: \`<img src="https://placehold.co/800x400/e2e8f0/e2e8f0" alt="Code editor showing React component example" width="800" height="400">\`
519
+ * For a "browser window mockup" \u2192 Use an image: \`<img src="https://placehold.co/1000x600/e2e8f0/e2e8f0" alt="Browser window displaying dashboard interface" width="1000" height="600">\`
520
+ * For actual interactive content \u2192 Use semantic HTML
521
+
522
+ ### \u{1F6A8} Design Tokens (MANDATORY)
523
+ You MUST use design tokens whenever appropriate. Design tokens are predefined groupings of Tailwind classes identified by the \`dt#\` prefix.
524
+ 1. **Placement**: Always place design tokens at the START of the \`class\` attribute.
525
+ 2. **Overrides**: Any Tailwind classes following a design token act as overrides, similar to how \`tailwind-merge\` works.
526
+ 3. **Example**: \`<button class="dt#btn p-2">\` where \`p-2\` overrides the default padding in \`dt#btn\`.
527
+
528
+ **Available Design Tokens**:
529
+ {{DESIGN_TOKENS_LIST}}
530
+
531
+ # 3.1 DESIGN EXCELLENCE & CREATIVITY (CRITICAL)
532
+
533
+ Create distinctive, production-grade interfaces that avoid generic "AI slop" aesthetics. Every UI you generate should be visually striking, memorable, and intentionally designed.
534
+
535
+ ### Design Thinking Process
536
+ Before generating HTML, commit to a BOLD aesthetic direction:
537
+ - **Purpose**: Consider what problem this interface solves and who uses it
538
+ - **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
539
+
540
+ **CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
541
+
542
+ ### Design Excellence Guidelines
543
+
544
+ **Typography & Font Selection**:
545
+ - Choose fonts that are beautiful, unique, and interesting
546
+ - AVOID generic fonts: Arial, Inter, Roboto, system fonts
547
+ - Use distinctive font combinations that elevate the design
548
+ - Pair a distinctive display font with a refined body font
549
+ - Consider: font-serif, font-mono for variety, or use weight variations (font-light, font-bold) creatively
550
+
551
+ **Color & Visual Hierarchy**:
552
+ - Commit to a cohesive aesthetic with dominant colors and sharp accents
553
+ - Avoid timid, evenly-distributed palettes
554
+ - Use shadcn tokens creatively (not just bg-background everywhere)
555
+ - Consider bold color blocking, dramatic contrasts, or refined monochrome
556
+ - AVOID: purple gradients on white backgrounds, predictable color schemes
557
+
558
+ **Spatial Composition**:
559
+ - Create unexpected layouts with asymmetry, overlap, diagonal flow
560
+ - Use grid-breaking elements and generous negative space OR controlled density
561
+ - Avoid predictable grid patterns - be creative with positioning
562
+ - Consider: absolute positioning, creative flexbox/grid layouts, overlapping elements
563
+
564
+ **Backgrounds & Visual Details**:
565
+ - Create atmosphere and depth rather than defaulting to solid colors
566
+ - Consider: gradient meshes, subtle textures, geometric patterns
567
+ - Use layered transparencies, dramatic shadows, decorative borders
568
+ - Add visual interest with background patterns or accent elements
569
+
570
+ **NEVER Use Generic AI Aesthetics**:
571
+ - Overused font families (Inter, Roboto, Arial, system fonts)
572
+ - Cliched color schemes (purple gradients on white)
573
+ - Predictable layouts and component patterns
574
+ - Cookie-cutter designs lacking context-specific character
575
+ - NEVER converge on common choices (Space Grotesk, etc.) across generations
576
+
577
+ **Implementation Complexity**:
578
+ - Match complexity to the aesthetic vision
579
+ - Maximalist designs: elaborate code with extensive effects
580
+ - Minimalist designs: restraint, precision, careful spacing and typography
581
+ - Elegance comes from executing the vision well
582
+
583
+ **Variation Mandate**:
584
+ - Every design should be different
585
+ - Vary between light and dark themes
586
+ - Change fonts, layouts, color schemes between generations
587
+ - Interpret user requests creatively with unexpected choices
588
+
589
+
590
+ # 4. ATTRIBUTE & CUSTOM COMPONENT RULES
591
+
592
+ ### chai-name
593
+ - Add \`chai-name\` attribute to tags
594
+ - Use descriptive section names (e.g., "Hero Section", "Navigation").
595
+
596
+ ## Custom Web components(CRITICAL)
597
+ - Html can have custom web components. All web components starts with <chai- prefix.
598
+ - Use "about-this-component" attribute to understand what the component does.
599
+ - Check for can-move and can-delete attribute to check if the component can be moved or deleted.
600
+ - If an attribute value starts with #styles: treat it like class attribute with tailwind classes.
601
+ Use the attribute key to understand what the attribute does and apply classes. Maintain the #styles: at start followed by tailwind classes.
602
+ - Do not change the chai-type attribute. Do not remove any attributes.
603
+
604
+ ## Data Binding (CRITICAL)
605
+ - Block prop values may contain binding expressions using double-curly syntax: {{path.to.data}}
606
+ - When you see {{...}} in an existing element's attribute value, it is a live data binding \u2014 NEVER remove or replace it with a static value. Preserve it exactly.
607
+ - You MAY use binding expressions when setting props on custom blocks, but ONLY using paths listed in the "Available Data Binding Paths" section below.
608
+ - Repeater blocks use a special prop: repeater-items="{{collectionName}}" where collectionName is the array to iterate.
609
+ - Inside a Repeater, child block props can reference each item's fields via {{$index.fieldName}}.
610
+ - Binding syntax must use exactly two curly braces: {{path}} \u2014 not {path} or \${{path}}.
611
+ - (global) paths are site-wide and available on every page. (page) paths are only available on this specific page type.
612
+
613
+ **Available Data Binding Paths**:
614
+ {{DATA_BINDING_PATHS}}
615
+
616
+ ## Current Page Type
617
+ {{PAGE_TYPE_CONTEXT}}
618
+
619
+ ## Available Custom Blocks
620
+ The following custom block types are registered and available. To ADD one of these, USE THE add_custom_block TOOL with camelCase props \u2014 do NOT generate <chai-*> HTML for them. When one already exists in the page you may edit its props via edit_block (keeping every attribute intact) or bind_prop.
621
+
622
+ {{CUSTOM_BLOCK_CATALOG}}
623
+
624
+ ## Special Blocks
625
+ These may appear as web components INSIDE the html argument of add_blocks/edit_block:
626
+
627
+ ### Repeater \u2014 <chai-repeater>
628
+ Used to render a list by iterating over an array data binding.
629
+ - Required prop: \`repeater-items="{{arrayPath}}"\` where \`arrayPath\` is an array-type binding path.
630
+ - Only bind to paths marked as arrays in "Available Data Binding Paths".
631
+ - Child blocks inside a Repeater reference the current item's fields using \`{{$index.fieldName}}\`.
632
+ - Example: \`<chai-repeater repeater-items="{{page.products}}"><h3>{{$index.name}}</h3></chai-repeater>\`
633
+ - Do NOT use a Repeater for static lists \u2014 only when iterating over bound data.
634
+
635
+ ### PartialBlock \u2014 <chai-partial-block>
636
+ Partial blocks are global reusable blocks (e.g. header, footer, navigation) shared across pages.
637
+ - Reference them by their ID: \`<chai-partial-block partial-id="THE_PARTIAL_ID"></chai-partial-block>\`
638
+ - Never modify a partial block's content inline \u2014 only reference it. Their content is edited on the partial's own page.
639
+ - When asked to build a full page layout, call the \`get_partial_blocks\` tool to discover available partial IDs before placing them.
640
+
641
+ ## Icons
642
+ - Icons use the **Lucide** icon set (https://lucide.dev/icons).
643
+ - Always include \`chai-type="Icon"\` on icon elements and preserve any existing attributes (e.g. \`bid\`).
644
+ - Express each icon as \`<chai-icon chai-type="Icon" icon-name="kebab-case-name" width="16" height="16">\`
645
+ e.g. \`<chai-icon chai-type="Icon" icon-name="search" width="16" height="16">\`, \`<chai-icon chai-type="Icon" icon-name="arrow-right" width="24" height="24">\`.
646
+ - Pick semantically appropriate icon names from Lucide; do not embed raw \`<svg>\` markup inside \`<chai-icon>\`.
647
+
648
+ ### SVG
649
+ - Always include width/height attributes.
650
+ - Ensure correct \`viewBox\`.
651
+
652
+
653
+ # 5. SHADCN/THEME COLOR RULES (STRICT)
654
+
655
+ Use ONLY these semantic tokens:
656
+ - bg-background + text-foreground
657
+ - bg-card + text-card-foreground
658
+ - bg-primary + text-primary-foreground
659
+ - bg-secondary + text-secondary-foreground
660
+ - bg-muted + text-muted-foreground
661
+ - bg-accent + text-accent-foreground
662
+ - bg-destructive + text-destructive-foreground
663
+ - border-border, border-input
664
+ - ring-ring
665
+
666
+ ### Contrast Rules
667
+ - Always maintain clear readable contrast.
668
+ - Never pair same-family bg/text tokens (e.g., bg-primary + text-primary).
669
+
670
+ ### Hover Rules
671
+ - Primary buttons: hover:bg-primary/90
672
+ - Cards: hover:bg-accent hover:text-accent-foreground
673
+ - Links: text-muted-foreground hover:text-foreground
674
+ - Nav links: text-foreground/80 hover:text-foreground
675
+
676
+
677
+ # 6. RESPONSIVENESS RULES
678
+
679
+ - Mobile-first approach.
680
+ - Breakpoints: sm, md, lg, xl.
681
+ - Smooth scaling between sizes.
682
+ - At md breakpoint:
683
+ * Reduce grid columns (lg:4 \u2192 md:2 \u2192 sm:1)
684
+ * Adjust padding, spacing, and layouts
685
+ * Ensure nav/mobile menus behave correctly
686
+ * Ensure cards remain aligned
687
+
688
+
689
+ # 7. SPECIFIC UI PATTERNS
690
+
691
+ ### Forms & Fields
692
+ - Always include proper \`type\` and \`autocomplete\` attributes for form fields (e.g., \`type="email" autocomplete="email"\`, \`type="text" autocomplete="given-name"\`, \`type="tel" autocomplete="tel"\`).
693
+
694
+ ### Mobile Menu (<details><summary>)
695
+ - Use 'summary' containing an SVG hamburger icon.
696
+ - Mobile menu container sample:
697
+ absolute right-1 mt-2 min-w-64 bg-card border border-border rounded-lg shadow-lg z-50 p-4
698
+ - Menu item sample:
699
+ block py-2 px-4 hover:bg-accent rounded-md transition-colors
700
+ - Touch targets must be at least 44px tall.
701
+
702
+ ### Accordions / Nested Menus
703
+ - Always use <details> and <summary>.
704
+
705
+
706
+ # 8. COMMON RULES
707
+
708
+ {{ANIMATION_RULES}}
709
+ {{IMAGE_RULES}}
710
+
711
+ # 9. CURRENT PAGE OUTLINE
712
+
713
+ Each line: bid | type | name | short text. Indentation = nesting. This reflects the page state at the start of this request; your applied tool calls update the real page immediately.
714
+
715
+ {{PAGE_OUTLINE}}
716
+ `.trim(),vc=(r={})=>{let e=Yh;return e=e.replace("{{ANIMATION_RULES}}",r!=null&&r.animation?jh:""),e=e.replace("{{IMAGE_RULES}}",Wh),e}});var Qh,Jh,Xh,Zh,ef,kc,Dc=T(()=>{"use strict";Kr();Ya();_t();je();Qh=new Set(["Box","Button","Checkbox","Divider","EmptyBox","Form","FormButton","Heading","Input","Label","LineBreak","Link","List","ListItem","Paragraph","Radio","RichText","Select","Span","Text","TextArea","Video","Icon","GlobalBlock"]),Jh=r=>{let e={...kt,...r||{}};return Object.entries(e).filter(([,t])=>t!=null&&!t.archived).map(([t,a])=>`- ${t}: ${a.value} (${a.name})`).join(`
717
+ `)},Xh=r=>{let e=zr(),t=Object.entries(e).filter(([a,n])=>{var s,l;let i=(s=n.type)!=null?s:a;return!i||Qh.has(i)||!Wa(n,r||"page")?!1:!!((l=n.label)!=null?l:n.props)});return t.length===0?"No custom blocks registered.":t.map(([a,n])=>{var d,u,g,y;let i=(d=n.type)!=null?d:a,s=(g=(u=n.props)==null?void 0:u.schema)!=null&&g.properties?Object.entries(n.props.schema.properties).filter(([,b])=>!(b!=null&&b.styles)&&!(b!=null&&b.runtime)&&!(b!=null&&b.hidden)).map(([b,A])=>{var k,D,B;let E=Array.isArray(A==null?void 0:A.type)?A.type.join("|"):(k=A==null?void 0:A.type)!=null?k:"any",C=(A==null?void 0:A.default)!==void 0?` (default: ${JSON.stringify(A.default)})`:"",w=(D=n.aiProps)!=null&&D.includes(b)?" [AI-settable]":"";return` - ${b} (${E})${C}${w}: ${(B=A==null?void 0:A.title)!=null?B:b}`}).join(`
718
+ `):" (no declared props)",l=n.wrapper?" [wrapper \u2014 can contain child blocks]":"",c=i.replace(/([A-Z])/g,b=>`-${b.toLowerCase()}`).replace(/^-/,"");return`### ${i} \u2192 <chai-${c}>${l}
719
+ Description: ${(y=n.description)!=null?y:n.label}
720
+ Props:
721
+ ${s}`}).join(`
722
+
723
+ `)},Zh=r=>{let e=r!=null?r:{global:[],page:[]},t=e.global.map(i=>`- (global) {{${i}}}`),a=e.page.map(i=>`- (page) {{${i}}}`),n=[...t,...a];return n.length>0?n.join(`
724
+ `):"No data binding paths available for this page."},ef=r=>{var a;if(!r)return"Standard page (no specific page type).";let e=We(r),t=(a=e==null?void 0:e.description)!=null?a:e==null?void 0:e.helpText;return t?`Page type: ${r}
725
+ ${t}`:`Page type: ${r}`},kc=(r,e)=>{var a,n,i,s,l;let t=r;return t=t.replace("{{DESIGN_TOKENS_LIST}}",Jh(e.designTokens)),t=t.replace("{{CUSTOM_BLOCK_CATALOG}}",Xh((a=e==null?void 0:e.options)==null?void 0:a.pageType)),t=t.replace("{{DATA_BINDING_PATHS}}",Zh((n=e==null?void 0:e.options)==null?void 0:n.dataBindingPaths)),t=t.replace("{{PAGE_TYPE_CONTEXT}}",ef((i=e==null?void 0:e.options)==null?void 0:i.pageType)),e.context&&(t+=`
726
+
727
+ ## Additional Information`,(s=e.context)!=null&&s.site&&(t+=`
728
+
729
+ ## Website Information
730
+ ${JSON.stringify(e.context.site)}`),(l=e.context)!=null&&l.page&&(t+=`
731
+
732
+ ## Page Information
733
+ ${JSON.stringify(e.context.page)}`)),t}});var de,Bt,sn,$,tf,Bc,Nc=T(()=>{"use strict";de=require("ai"),Bt=require("drizzle-orm"),sn=require("himalaya"),$=require("zod");I();z();tf=(r,e)=>{let t=new Set(e),a={},n=(s,l)=>{var d,u,g,y;let c=[...(d=l.children)!=null?d:[]];for(;c.length;){let b=c.pop();if(!b||b.type!=="element")continue;let A=(g=(u=b.attributes)==null?void 0:u.find(E=>E.key==="bid"))==null?void 0:g.value;A&&t.has(A)&&(a[A]=`NOTE: bid "${A}" is inside block "${s}" which was already returned. Use the "${s}" HTML slice to edit it, or request only "${A}".`,t.delete(A)),(y=b.children)!=null&&y.length&&c.push(...b.children)}},i=s=>{var c,d,u;if(t.size===0||s.type!=="element")return;let l=(d=(c=s.attributes)==null?void 0:c.find(g=>g.key==="bid"))==null?void 0:d.value;if(l&&t.has(l)){a[l]=(0,sn.stringify)([s]),t.delete(l),n(l,s);return}(u=s.children)==null||u.forEach(i)};(0,sn.parse)(r).forEach(i);for(let s of t)a[s]=`ERROR: no block found with bid "${s}". Check the page outline for valid bids.`;return a},Bc=({pageHtml:r})=>({read_block_html:(0,de.tool)({description:"Read the full current HTML of one or more existing blocks by their bid (from the page outline). ALWAYS call this before edit_block \u2014 never guess a block's markup. Batch all bids you need into one call.",inputSchema:(0,de.zodSchema)($.z.object({blockIds:$.z.array($.z.string()).min(1).describe("bids of the blocks to read")})),execute:async({blockIds:e})=>tf(r,e)}),edit_block:(0,de.tool)({description:"Replace one existing block (identified by bid) with new HTML. The html must be the complete replacement for the target element. Call read_block_html for the target first.",inputSchema:(0,de.zodSchema)($.z.object({task:$.z.string().describe("Short user-facing progress label, e.g. 'Redesigning hero section'"),blockId:$.z.string().describe("bid of the block to replace"),html:$.z.string().describe("Full replacement HTML for the target element")}))}),add_blocks:(0,de.tool)({description:"Insert new HTML into the page. Use for new sections/elements built from standard HTML and special blocks (repeater, partial-block, icon). Do NOT use for registered custom blocks \u2014 use add_custom_block.",inputSchema:(0,de.zodSchema)($.z.object({task:$.z.string().describe("Short user-facing progress label, e.g. 'Adding pricing section'"),parentId:$.z.string().nullish().describe("bid of the parent container; omit to add at page root"),position:$.z.number().nullish().describe("Child index position; -1 or omit to append at end"),html:$.z.string().describe("HTML to insert")}))}),remove_blocks:(0,de.tool)({description:"Remove one or more existing blocks from the page by their block IDs (bid attribute). Use when the user asks to delete, clear, or replace content.",inputSchema:(0,de.zodSchema)($.z.object({ids:$.z.array($.z.string()).min(1).describe("Array of block IDs (bid attribute values) to remove"),task:$.z.string().nullish().describe("Short user-facing progress label, e.g. 'Removing testimonial section'")}))}),add_custom_block:(0,de.tool)({description:"Add a registered custom block to the page using its schema-validated props. Use this (not HTML) for any block type listed in the 'Available Custom Blocks' catalog.",inputSchema:(0,de.zodSchema)($.z.object({task:$.z.string().nullish().describe("Short user-facing progress label"),type:$.z.string().describe("Block type exactly as listed in the catalog, e.g. 'ProductCard'"),parentId:$.z.string().nullish().describe("bid of the parent block, or omit to add at page root"),position:$.z.number().nullish().describe("Child index position; -1 or omit to append at end"),props:$.z.record($.z.string(),$.z.any()).describe("Block props as a JSON object using camelCase keys matching the catalog schema. Use {{path.to.data}} values for bound props.")}))}),bind_prop:(0,de.tool)({description:"Set a data binding on a specific prop of an existing block. The binding path must come from the 'Available Data Binding Paths' list in the system prompt.",inputSchema:(0,de.zodSchema)($.z.object({task:$.z.string().nullish().describe("Short user-facing progress label"),blockId:$.z.string().describe("bid of the block to update"),propName:$.z.string().describe("camelCase prop name on the block"),bindingPath:$.z.string().describe("Full binding expression including double braces, e.g. '{{product.name}}' or '{{$index.title}}'")}))}),get_partial_blocks:(0,de.tool)({description:"Retrieve all available partial blocks (global reusable sections such as header, footer, navigation). Call this before building a full page layout or when the user asks to include a global section. Returns each partial's ID, name, and description. Use the ID in <chai-partial-block partial-id='ID'>.",inputSchema:(0,de.zodSchema)($.z.object({})),execute:async()=>{let{appId:e}=nr(),{data:t,error:a}=await f(()=>h.select({id:o.appPages.id,name:o.appPages.name,metadata:o.appPages.metadata,pageType:o.appPages.pageType}).from(o.appPages).where((0,Bt.and)((0,Bt.eq)(o.appPages.app,e),(0,Bt.eq)(o.appPages.slug,""),(0,Bt.eq)(o.appPages.lang,""),(0,Bt.isNull)(o.appPages.deletedAt))));if(a)throw new Error(`Failed to fetch partial blocks: ${a.message}`);let n={};return t&&t.forEach(i=>{var l,c,d;let s=(l=i.metadata)!=null?l:{};n[i.id]={name:i.name,description:(c=s.description)!=null?c:"",type:(d=i.pageType)!=null?d:"partial"}}),n}})})});var cn,ge,rf,af,nf,ln,Lc=T(()=>{"use strict";cn=require("ai"),ge=require("zod");Qa();Ja();_c();nt();Dc();Nc();rf=ge.z.record(ge.z.string(),ge.z.object({name:ge.z.string(),value:ge.z.string(),description:ge.z.string().optional(),archived:ge.z.boolean().optional()})).optional(),af=12,nf=r=>{let e=r.findLastIndex(t=>t.role==="assistant");return r.map((t,a)=>t.role!=="assistant"||a===e||!Array.isArray(t.parts)?t:{...t,parts:t.parts.map(n=>{var i;return typeof(n==null?void 0:n.type)=="string"&&(n.type==="tool-edit_block"||n.type==="tool-add_blocks")&&((i=n.input)!=null&&i.html)?{...n,input:{...n.input,html:"[html omitted \u2014 read the block again if needed]"}}:n})})},ln=class extends Q{getValidationSchema(){return ge.z.object({messages:ge.z.array(ge.z.any()).min(1),model:ge.z.string().optional(),context:ge.z.any().optional(),designTokens:rf,pageHtml:ge.z.string().optional(),pageOutline:ge.z.string().optional(),options:ge.z.any().optional()})}async execute(e){var l,c,d,u;this.context||at(new Fe("Context not set. Please try again.","INVALID_REQUEST",500)),(!e.messages||e.messages.length===0)&&at(new Fe("No messages provided. Please enter a prompt.","INVALID_REQUEST",400));let t=vc({animation:(l=e==null?void 0:e.options)==null?void 0:l.animation});t=t.replace("{{PAGE_OUTLINE}}",((c=e.pageOutline)==null?void 0:c.trim())||"The page is currently empty."),t=kc(t,e);let a=[...e.messages].reverse().find(g=>g.role==="user"),n=(d=a==null?void 0:a.metadata)==null?void 0:d.selectedBlockId;n&&(t+=`
734
+
735
+ ## Currently Selected Block
736
+ The user currently has the block with bid "${n}" selected. Prioritize changes to this block unless the request explicitly requires broader changes.`);let i=nf(e.messages.slice(-af)),s=await(0,cn.convertToModelMessages)(i,{ignoreIncompleteToolCalls:!0});return this.streamChaiBuilderUIMessageResponse({model:e.model,system:t,messages:s,temperature:.7,tools:Bc({pageHtml:(u=e.pageHtml)!=null?u:""}),stopWhen:(0,cn.stepCountIs)(8)})}}});var ue,pn,Oc=T(()=>{"use strict";ue=require("zod");Xa();nt();pn=class extends Q{getValidationSchema(){return ue.z.object({messages:ue.z.array(ue.z.any()),model:ue.z.string().optional(),context:ue.z.any().optional(),designTokens:ue.z.any().optional(),images:ue.z.array(ue.z.string()).optional(),attachments:ue.z.array(ue.z.any()).optional(),initiator:ue.z.literal("GENERATE_IMAGE"),image:ue.z.object({lastImage:ue.z.string().optional(),aspectRatio:ue.z.string().optional(),quality:ue.z.number().optional()}).optional()})}async execute(e){var b,A,E;if(!this.context)return{_streamingResponse:!0,_streamResult:{textStream:this.createErrorStream(new Error("Context not set. Please try again."))}};let t=e.messages.filter(C=>C.role!=="system"),a=t[t.length-1];if(!a)return{_streamingResponse:!0,_streamResult:{textStream:this.createErrorStream(new Error("No user message found in the request."))}};let n=ar(e.initiator),i=typeof a.content=="string"?a.content:"Generate a random image",s=n?`${n}
737
+
738
+ ${i}`:i,l=((b=e.image)==null?void 0:b.aspectRatio)||"16:9",c=((A=e.image)==null?void 0:A.quality)||80,u=(E={"1:1":"1024x1024","16:9":"1536x1024","9:16":"1024x1536","4:3":"1536x1024","3:4":"1024x1536"}[l])!=null?E:"1536x1024",g=new TextEncoder;return{_streamingResponse:!0,_streamResult:{textStream:new ReadableStream({start:async C=>{var w;try{let D=(await this.generateImage({model:e.model,prompt:(w=e.image)!=null&&w.lastImage?{text:s,images:[e.image.lastImage]}:s,size:u,providerOptions:{openai:{quality:c>=90?"high":c>=50?"medium":"low"}}})).image;if(!(D!=null&&D.base64))throw new Error("Failed to generate image. No valid image data received from the AI.");let B=D.base64.startsWith("data:")?D.base64:`data:${D.mediaType};base64,${D.base64}`;C.enqueue(g.encode(B)),C.close()}catch(k){let D=k instanceof Error?k.message:String(k);C.enqueue(g.encode(`--START--
739
+ --MSG=${D}--
740
+ --END--`)),C.close()}}})}}}}});var sr,dn,Fc=T(()=>{"use strict";sr=require("zod");N();nt();dn=class extends Q{getValidationSchema(){return sr.z.object({type:sr.z.enum(["site","page","prompt"]),content:sr.z.string().min(1),siteContext:sr.z.string().optional(),model:sr.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");if(!e.content||e.content.trim()==="")throw new m("Content is required for AI enhancement","INVALID_DATA");let t="";e.type==="site"?t=`You are an expert SEO copywriter. The user will provide a rough draft of their website's business context. Enhance it to be professional, clear, and comprehensive. Synthesize the text into a well-structured summary. Output ONLY the enhanced text. Format the output with bold keys as follows:
741
+
742
+ **Business Name & Industry**: [Content]
743
+ **Target Audience**: [Content]
744
+ **Unique Value Proposition**: [Content]
745
+ **Key Products/Services**: [Content]
746
+
747
+ Keep it to a maximum of 150 words.`:e.type==="page"?t=`You are an expert SEO copywriter. The user will provide a rough draft of a page's context. Enhance it to be professional, clear, and concise. Do not use placeholder text; instead, use details from the site context if available. Synthesize the text into a well-structured summary. Output ONLY the enhanced text. Format the output with bold keys as follows:
748
+
749
+ **Page Purpose**: [Content]
750
+ **Target Keywords**: [Content]
751
+ **Primary H1 Goal**: [Content]
752
+
753
+ Keep it to a maximum of 150 words.`:t="You are an expert AI prompt engineer. The user will provide a rough draft of a prompt. Enhance it to be clear, detailed, and optimized for high-quality AI generation. Add necessary context, constraints, and structural guidance to make the prompt more effective. Output ONLY the enhanced prompt text.";let a=` ${e.siteContext?`
754
+
755
+ Site Context: ${e.siteContext}
756
+
757
+ `:""} Please enhance the following rough draft:
758
+
759
+ ${e.content}`;return{success:!0,enhancedContent:(await this.generateText({model:e.model||"google/gemini-3-flash",system:t,prompt:a})).text.trim()}}}});var Uc,yt,gn,Gc=T(()=>{"use strict";Uc=require("ai"),yt=require("zod");N();nt();gn=class extends Q{getValidationSchema(){return yt.z.object({url:yt.z.string().url(),languages:yt.z.array(yt.z.string()).min(1),model:yt.z.string().optional()})}buildSchema(e){let t={};for(let a of e)t[a]=yt.z.string().max(250).describe(`Image description in ${a} (max 250 chars)`);return yt.z.object({translations:yt.z.object(t).describe("A map of language codes to image descriptions")})}async execute(e){var i;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let t=`Generate a very concise image description (maximum 250 characters) for the attached image.
760
+
761
+ LANGUAGES: ${e.languages.join(", ")}
762
+
763
+ You MUST provide the description for each of these language codes.`,a=await this.generateText({model:e.model||"google/gemini-3-flash",experimental_output:Uc.Output.object({schema:this.buildSchema(e.languages)}),system:`You are an expert accessibility (a11y) image description generator.
764
+
765
+ INSTRUCTIONS:
766
+ 1. Analyze the image and generate a very concise description (maximum 250 characters).
767
+ 2. Provide the description in all requested languages.
768
+ 3. Your response MUST be a JSON object with a "translations" key.`,messages:[{role:"user",content:[{type:"text",text:t},{type:"image",image:e.url}]}]});if(a.finishReason!=="stop")throw new m(`AI generation failed: ${a.finishReason}`,"AI_ERROR");let n=((i=a.experimental_output)==null?void 0:i.translations)||{};for(let s of e.languages)n[s]||(n[s]=n[e.languages[0]]||"");return{translations:n}}}});function Mc(r){let e="";if(r){if(r.site&&Object.keys(r.site).length>0){let t=Object.entries(r.site).map(([a,n])=>`${a}: ${n}`).join(", ");e+=`
769
+ Site Context: ${t}`}if(r.page&&Object.keys(r.page).length>0){let t=Object.entries(r.page).map(([a,n])=>`${a}: ${n}`).join(", ");e+=`
770
+ Page Context: ${t}`}}return e}var $c=T(()=>{"use strict"});var qc,Ye,Hc,un,zc=T(()=>{"use strict";qc=require("ai"),Ye=require("zod");N();nt();$c();Hc={title:"Generate title for the following page. Max length: 60 characters",description:"Generate description for the following page. Max length: 160 characters",ogTitle:"Generate og title for the following page. Max length: 60 characters",ogDescription:"Generate og description for the following page. Max length: 160 characters",searchTitle:"Generate search title for the following page. Max length: 60 characters",searchDescription:"Generate search description for the following page. Max length: 160 characters",jsonLD:"Generate json ld for the following page. Return only json ld"},un=class extends Q{getValidationSchema(){return Ye.z.object({context:Ye.z.any().optional(),dynamic:Ye.z.boolean(),pageContent:Ye.z.string(),field:Ye.z.enum(["title","description","ogTitle","ogDescription","searchTitle","searchDescription","jsonLD"]),lang:Ye.z.string().nonempty(),keyword:Ye.z.string().optional(),model:Ye.z.string().optional()})}async execute(e){var c;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let t=Mc(e.context),a=`${Hc[e.field]}${t}
771
+ Page Content: ${e.pageContent}
772
+ Dynamic: ${e.dynamic}
773
+ Language: ${e.lang}`,n=await this.generateText({model:e.model||"google/gemini-3-flash",experimental_output:qc.Output.object({schema:Ye.z.object({field:Ye.z.string()})}),system:`You are a SEO expert. Follow the instructions carefully.
774
+ Return ONLY plain string values except for json ld. For JSONLD, remove \`\`\`json\`\`\` and \`\`\`\`\` and return only valid JSON.
775
+ Instructions: ${Hc[e.field]}
776
+ ${e.keyword?`Optimize the generated content for "${e.keyword}" keyword(s)`:""}${t}
777
+ Page Content: ${e.pageContent}
778
+ Dynamic: ${e.dynamic}
779
+ Language: ${e.lang}`,prompt:a}),i=typeof((c=n.experimental_output)==null?void 0:c.field)=="string"?n.experimental_output.field:void 0,s=typeof n.text=="string"?n.text:void 0,l=i!=null?i:s;if(typeof l!="string")throw new m("Failed to parse generated SEO field","INVALID_AI_RESPONSE");return{field:l}}}});function of(r,e){let t=r.length>0?r.join(", "):"ui-sans-serif, system-ui, sans-serif",a=So.map(i=>`--${i}`).join(", "),n=`You are a professional UI Designer and Theme Architect.
780
+ Your task is to generate a comprehensive design system theme based on the user's description.
781
+
782
+ AVAILABLE FONTS: ${t}
783
+ You MUST only use the exact family names from this list for --font-sans, --font-heading, and --font-body.`;return e&&(n+=`
784
+
785
+ DESIGN CONTEXT:
786
+ The user has provided branding hints (Look, Tone, etc.). Use these as stylistic guides to ensure the colors and typography align with the brand, but prioritize the user's specific theme description.`),n+=`
787
+
788
+ STRICT CONSTRAINTS:
789
+ 1. Output ONLY a valid CSS block containing BOTH :root (Light Mode) and .dark (Dark Mode) selectors.
790
+ 2. REQUIRED Color Variables (must appear in BOTH :root AND .dark):
791
+ ${a}.
792
+ 3. REQUIRED Typography Variables (in :root only): --font-sans, --font-heading, --font-body.
793
+ 4. REQUIRED Shape Variable (in :root only): --radius (MUST be in pixels, e.g. "8px").
794
+ 5. Do NOT include ANY explanations, markdown code blocks (\`\`\`css), comments, or conversational text.
795
+ 6. Do NOT wrap the output in backticks or code fences.
796
+ 7. Colors MUST be in hex format (e.g. #ffffff) or HSL format (e.g. hsl(210 40% 98%)).
797
+ 8. Light and dark mode colors must be harmonious and provide good contrast for readability.
798
+ 9. Your output must start with ":root {" and contain nothing before it.`,n}function sf(r){let e=r.trim();e=e.replace(/^```(?:css)?\s*/i,""),e=e.replace(/\s*```\s*$/i,"");let t=e.indexOf(":root");return t>0&&(e=e.substring(t)),e.trim()}var bt,So,mn,Vc=T(()=>{"use strict";bt=require("zod");N();nt();So=["background","foreground","primary","primary-foreground","secondary","secondary-foreground","muted","muted-foreground","accent","accent-foreground","destructive","destructive-foreground","border","input","ring","card","card-foreground","popover","popover-foreground"];mn=class extends Q{getValidationSchema(){return bt.z.object({branding:bt.z.object({look:bt.z.string().optional(),tone:bt.z.string().optional()}).optional(),prompt:bt.z.string().min(1,"A theme description prompt is required"),availableFonts:bt.z.array(bt.z.string()),model:bt.z.string().optional()})}async execute(e){var i,s;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");if(!e.prompt||e.prompt.trim()==="")throw new m("A theme description prompt is required","INVALID_DATA");let t=e.branding?`
799
+ Branding Hints: Look: ${e.branding.look||"N/A"}, Tone: ${e.branding.tone||"N/A"}`:"",a=of(e.availableFonts,!!e.branding),n=`Generate a theme for the following description: "${e.prompt}"${t}`;try{let l=await this.generateText({model:e.model||"google/gemini-3-flash",system:a,prompt:n}),c=sf(l.text);if(!c.includes(":root")||!c.includes(".dark"))throw new m("AI generated invalid theme CSS. Missing :root or .dark selectors. Please try again.","AI_INVALID_OUTPUT");let d=((i=c.match(/:root\s*{([^}]+)}/))==null?void 0:i[1])||"",u=((s=c.match(/\.dark\s*{([^}]+)}/))==null?void 0:s[1])||"",g=So.filter(b=>!d.includes(`--${b}`)),y=So.filter(b=>!u.includes(`--${b}`));if(g.length>0||y.length>0)throw console.error("AI generated incomplete theme CSS. Missing variables:",{root:g,dark:y}),new m("AI generated an incomplete theme. Some required colors are missing. Please try again with a more specific description.","AI_INVALID_OUTPUT");return{css:c}}catch(l){throw l instanceof m?l:(console.error("AI Theme Generation Error:",l),new m("Failed to generate theme with AI. Please try again.","AI_ERROR",500,l))}}}});var Kc,hn,jc=T(()=>{"use strict";Kc=require("zod");ta();R();hn=class extends P{getValidationSchema(){return Kc.z.any()}async execute(){var a;if(!((a=this.context)!=null&&a.userId))return{success:!1,addons:[],error:"User not authenticated"};let e=await xc(this.context.userId);if(!(e!=null&&e.clientId))return{success:!1,addons:[],error:"User plan not found"};let t=await Io(e.clientId);return t!=null&&t.addOns?{success:!0,addons:t.addOns.map(n=>({id:n.id,name:n.name,credits:n.credits,price:n.price,currency:"USD"}))}:{success:!0,addons:[]}}}});var lr,Ro,fn,Wc=T(()=>{"use strict";lr=require("drizzle-orm"),Ro=require("zod");I();N();R();fn=class extends P{getValidationSchema(){return Ro.z.object({pageId:Ro.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context,{data:a,error:n}=await f(()=>h.query.apps.findFirst({where:(0,lr.eq)(o.apps.id,t),columns:{ai:!0}}));n&&console.error("Error fetching app AI context:",n);let i=null;if(e.pageId){let{data:s,error:l}=await f(()=>h.query.appPages.findFirst({where:(0,lr.and)((0,lr.eq)(o.appPages.id,e.pageId),(0,lr.eq)(o.appPages.app,t)),columns:{ai:!0}}));if(l)throw new m("Error fetching page AI context","PAGE_AI_CONTEXT_ERROR",500,l);if(!s)throw new m("Page not found for this app","PAGE_NOT_FOUND",404);i=s.ai}return{success:!0,aiData:{app:(a==null?void 0:a.ai)||{},page:i||{}}}}}});var Yc,yn,Qc=T(()=>{"use strict";Yc=require("zod");ta();R();ee();yn=class extends P{getValidationSchema(){return Yc.z.any()}async execute(){var t;if(!((t=this.context)!=null&&t.appId))return{success:!1,credits:null,error:"App context not found"};if(!or())return{success:!0,credits:null};let e=await xo(this.context.appId);return e?{success:!0,credits:{monthly:e.monthly,addon:{total:e.addon.total,used:e.addon.used,remaining:e.addon.remaining},totalAvailable:e.totalAvailable,canBuyCredits:e.canBuyCredits,billingPeriod:e.billingPeriod?{start:e.billingPeriod.start.toISOString(),end:e.billingPeriod.end.toISOString()}:void 0}}:{success:!1,credits:null,error:"Could not fetch credit status"}}}});var cr,ra,bn,Jc=T(()=>{"use strict";cr=require("drizzle-orm"),ra=require("zod");I();N();R();bn=class extends P{getValidationSchema(){return ra.z.object({type:ra.z.enum(["app","page"]),aiData:ra.z.any(),pageId:ra.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context;if(e.aiData===void 0||e.aiData===null)throw new m("aiData is required","INVALID_DATA");if(e.type==="app"){let{error:a}=await f(async()=>{await h.update(o.apps).set({ai:e.aiData}).where((0,cr.eq)(o.apps.id,t))});if(a)throw new m("Error updating app AI context","UPDATE_ERROR",500,a)}else if(e.type==="page"){if(!e.pageId)throw new m("pageId is required for page context","INVALID_DATA");let{data:a,error:n}=await f(async()=>h.update(o.appPages).set({ai:e.aiData}).where((0,cr.and)((0,cr.eq)(o.appPages.id,e.pageId),(0,cr.eq)(o.appPages.app,t))).returning());if(n)throw new m("Error updating page AI context","UPDATE_ERROR",500,n);if(!a||a.length===0)throw new m("Page not found for this app","NOT_FOUND",404)}return{success:!0}}}});var Wt={};$t(Wt,{BuilderActionsRegistry:()=>An,ChaiActionsRegistry:()=>Tn,default:()=>na,getChaiAction:()=>aa});var Xc,Tn,vo,An,aa,na,Qe=T(()=>{"use strict";Xc=require("lodash-es");je();Tn=class r{constructor(){this.actions={}}static getInstance(){return r.instance||(r.instance=new r),r.instance}register(e,t){this.actions[e]=t}registerActions(e){for(let[t,a]of Object.entries(e))this.register(t,a)}getAction(e){return(0,Xc.get)(this.actions,e)}getAllActions(){return this.actions}},vo=Tn.getInstance(),An=vo,aa=r=>{let e=vo.getAction(r);if(e)return e;let t=_o(r);if(t)return t},na=vo});var G,ko,Zc,Ce,Ue,pr=T(()=>{"use strict";G=require("drizzle-orm"),ko=require("lodash-es"),Zc=require("nanoid");I();Ce=class Ce{constructor(e,t){this.appId=e;this.userId=t}appendUpdatedAtToUrl(e,t){if(!e||!t)return e||"";try{let a=new URL(e),n=new Date(t).getTime();return a.searchParams.set("t",n.toString()),a.toString()}catch(a){return e||""}}getBufferFromBase64(e){try{let t=e.split(",")[1]||e;return Buffer.from(t,"base64")}catch(t){throw new Error("Invalid base64 string format")}}getMimeType(e){var n;let t=((n=e.split(".").pop())==null?void 0:n.toLowerCase())||"";return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",webp:"image/webp",gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml"}[t]||"application/octet-stream"}getImageDimensions(e){if(e.length>=Ce.MIN_PNG_LENGTH&&e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return{width:e.readUInt32BE(16),height:e.readUInt32BE(20)};if(e.length>=Ce.MIN_GIF_LENGTH&&e[0]===71&&e[1]===73&&e[2]===70)return{width:e.readUInt16LE(6),height:e.readUInt16LE(8)};if(e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80){if(e.length>=Ce.MIN_WEBP_VP8L_LENGTH&&e[12]===86&&e[13]===80&&e[14]===56&&e[15]===76){let t=e.readUInt32LE(21);return{width:(t&16383)+1,height:(t>>14&16383)+1}}if(e.length>=Ce.MIN_WEBP_VP8X_LENGTH&&e[12]===86&&e[13]===80&&e[14]===56&&e[15]===88)return{width:1+(e[24]|e[25]<<8|e[26]<<16),height:1+(e[27]|e[28]<<8|e[29]<<16)};if(e.length>=Ce.MIN_WEBP_VP8_LENGTH&&e[12]===86&&e[13]===80&&e[14]===56&&e[15]===32)return{width:e.readUInt16LE(26)&16383,height:e.readUInt16LE(28)&16383}}if(e.length>=2&&e[0]===255&&e[1]===216){let t=2;for(;t<e.length-1;){if(e[t]!==255){t++;continue}let a=e[t+1];if(a>=192&&a<=195||a>=197&&a<=199||a>=201&&a<=203||a>=205&&a<=207){if(t+Ce.MIN_JPEG_SOF_BYTES_FROM_MARKER<=e.length)return{width:e.readUInt16BE(t+7),height:e.readUInt16BE(t+5)};break}if(t+4>e.length)break;let n=e.readUInt16BE(t+2);t+=2+n}}return{width:0,height:0}}async uploadImageFile(e,t,a,n){var i;try{let s=this.getBufferFromBase64(e),l=((i=e.match(/^data:([^;]+);base64,/))==null?void 0:i[1])||this.getMimeType(a);if(!["image/jpeg","image/png","image/webp","image/gif","image/tiff"].includes(l))throw new Error(`Invalid image format: ${l}`);let d=a.split("."),u=d.length>1?d.slice(0,-1).join("."):a,g=d.length>1?d[d.length-1].toLowerCase():"png",y=`${(0,ko.kebabCase)(u)}.${g}`,b=t?`${this.appId}/${t}`:this.appId,{getChaiAction:A}=await Promise.resolve().then(()=>(Qe(),Wt)),E=A("UPLOAD_TO_STORAGE");if(!E)throw new Error("UPLOAD_TO_STORAGE action not found");E.setContext({appId:this.appId,userId:this.userId});let C=await E.execute({file:s.toString("base64"),fileName:y,contentType:l,folder:b});if(C.error)throw new Error(C.error);let{width:w,height:k}=this.getImageDimensions(s);return{url:C.data.url,thumbnailUrl:C.data.url,size:s.length,width:w,height:k,mimeType:l}}catch(s){return console.error("Upload image error:",s),{error:s instanceof Error?s.message:"Unknown error"}}}async uploadSvgFile(e,t,a){try{let n=this.getBufferFromBase64(e),i,s;try{let A=n.toString("utf-8"),E=A.match(/\bwidth=["'](\d+)/),C=A.match(/\bheight=["'](\d+)/);E&&(i=parseInt(E[1],10)),C&&(s=parseInt(C[1],10))}catch(A){}let l=a.split("."),c=l.length>1?l.slice(0,-1).join("."):a,d=`${(0,ko.kebabCase)(c)}.svg`,u=t?`${this.appId}/${t}`:this.appId,{getChaiAction:g}=await Promise.resolve().then(()=>(Qe(),Wt)),y=g("UPLOAD_TO_STORAGE");if(!y)throw new Error("UPLOAD_TO_STORAGE action not found");y.setContext({appId:this.appId,userId:this.userId});let b=await y.execute({file:n.toString("base64"),fileName:d,contentType:"image/svg+xml",folder:u});if(b.error)throw new Error(b.error);return{url:b.data.url,thumbnailUrl:b.data.url,size:n.length,width:i,height:s,mimeType:"image/svg+xml"}}catch(n){return console.error("SVG upload error:",n),{error:n instanceof Error?n.message:"Unknown error"}}}async upload({file:e,folderId:t,name:a,description:n,optimize:i=!0}){var s,l,c;try{let d=a.toLowerCase().endsWith(".svg")||e.includes("data:image/svg+xml"),u=E=>{let C=E.split("."),w=(C.length>1?C.pop().toLowerCase():"webp")||"webp";return`${C.join(".").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,30)||"image"}-${(0,Zc.nanoid)(10)}.${w}`},g=d?await this.uploadSvgFile(e,t,a):await this.uploadImageFile(e,t,u(a),i!=null?i:!0);if("error"in g)return g;let y={name:a,app:this.appId,description:typeof n=="object"&&n!==null?JSON.stringify(n):n,url:g.url,thumbnailUrl:g.thumbnailUrl,size:(s=g.size)==null?void 0:s.toString(),width:(l=g.width)==null?void 0:l.toString(),height:(c=g.height)==null?void 0:c.toString(),format:g.mimeType.split("/")[1],folderId:t,type:g.mimeType.startsWith("image/")?"image":"file",createdBy:this.userId,updatedAt:new Date().toISOString()},{data:b,error:A}=await f(async()=>{let[E]=await h.insert(o.appAssets).values(y).returning();return E});if(A)throw new Error(`Failed to store asset in database: ${A.message}`);if(!b)throw new Error("Failed to retrieve created asset");return{...b,url:this.appendUpdatedAtToUrl(b.url,b.updatedAt),thumbnailUrl:this.appendUpdatedAtToUrl(b.thumbnailUrl,b.updatedAt)}}catch(d){return{error:d instanceof Error?d.message:"Unknown error occurred"}}}async getAsset({id:e}){try{let{data:t,error:a}=await f(()=>h.query.appAssets.findFirst({where:(0,G.and)((0,G.eq)(o.appAssets.id,e),(0,G.eq)(o.appAssets.app,this.appId))}));if(a)throw new Error(`Failed to fetch asset: ${a.message}`);if(!t)throw new Error("Asset not found");return{...t,url:this.appendUpdatedAtToUrl(t.url,t.updatedAt),thumbnailUrl:this.appendUpdatedAtToUrl(t.thumbnailUrl||"",t.updatedAt)}}catch(t){return{error:t instanceof Error?t.message:"Unknown error occurred"}}}async getAssets({search:e="",page:t=1,limit:a=20}={}){var n;try{let i=(t-1)*a,s=(0,G.and)((0,G.eq)(o.appAssets.app,this.appId),(0,G.isNull)(o.appAssets.deletedAt));e&&(s=(0,G.and)(s,(0,G.or)((0,G.ilike)(o.appAssets.name,`%${e}%`),(0,G.ilike)(G.sql`${o.appAssets.description}::text`,`%${e}%`))));let{data:l,error:c}=await f(()=>h.select({value:(0,G.count)()}).from(o.appAssets).where(s));if(c)throw new Error(c.message);let d=((n=l==null?void 0:l[0])==null?void 0:n.value)||0,{data:u,error:g}=await f(()=>h.query.appAssets.findMany({where:s,orderBy:(0,G.desc)(o.appAssets.createdAt),limit:a,offset:i}));if(g)throw new Error(g.message);return{assets:(u||[]).map(b=>({...b,url:this.appendUpdatedAtToUrl(b.url,b.updatedAt),thumbnailUrl:this.appendUpdatedAtToUrl(b.thumbnailUrl||"",b.updatedAt)})),total:d,page:t,pageSize:a}}catch(i){return{error:i instanceof Error?i.message:"Unknown error occurred"}}}async deleteAsset(e){try{let{data:t,error:a}=await f(()=>h.query.appAssets.findMany({where:(0,G.and)((0,G.inArray)(o.appAssets.id,e),(0,G.eq)(o.appAssets.app,this.appId))}));if(a)throw new Error(`Failed to fetch assets: ${a.message}`);if(!t||t.length===0)throw new Error("Assets not found");for(let s of t)if(s.url)try{let c=new URL(s.url).pathname.split("/"),d=c.indexOf("dam-assets");if(d!==-1){let u=c.slice(d+1).join("/"),{getChaiAction:g}=await Promise.resolve().then(()=>(Qe(),Wt)),y=g("DELETE_FROM_STORAGE");if(y&&(y.setContext({appId:this.appId,userId:this.userId}),await y.execute({key:u})),s.thumbnailUrl&&s.thumbnailUrl!==s.url){let A=new URL(s.thumbnailUrl).pathname.split("/"),E=A.indexOf("dam-assets");if(E!==-1){let C=A.slice(E+1).join("/");y&&await y.execute({key:C})}}}}catch(l){console.warn("Failed to delete from storage, continuing with database deletion:",l)}let{data:n,error:i}=await f(()=>h.delete(o.appAssets).where((0,G.and)((0,G.inArray)(o.appAssets.id,e),(0,G.eq)(o.appAssets.app,this.appId))).returning());if(i)throw new Error(`Failed to delete assets: ${i.message}`);if(!n||n.length!==e.length)throw new Error("Some assets could not be deleted or were not found");return{success:!0}}catch(t){return{error:t instanceof Error?t.message:"Unknown error occurred"}}}async updateAsset({id:e,file:t,description:a}){var n,i,s,l;try{let{data:c,error:d}=await f(()=>h.query.appAssets.findFirst({where:(0,G.and)((0,G.eq)(o.appAssets.id,e),(0,G.eq)(o.appAssets.app,this.appId))}));if(d)throw new Error(`Failed to fetch asset: ${d.message}`);if(!c)throw new Error("Asset not found");let u={updatedAt:new Date().toISOString()};if(a!==void 0&&(u.description=typeof a=="object"&&a!==null?JSON.stringify(a):a),t){let A=((n=c.format)==null?void 0:n.toLowerCase())==="svg"||t.includes("data:image/svg+xml")?await this.uploadSvgFile(t,c.folderId,c.name||"asset.svg"):await this.uploadImageFile(t,c.folderId,c.name||"asset.png",!0);if("error"in A)return A;u.url=A.url,u.thumbnailUrl=A.thumbnailUrl,u.size=(i=A.size)==null?void 0:i.toString(),u.width=(s=A.width)==null?void 0:s.toString(),u.height=(l=A.height)==null?void 0:l.toString(),u.format=A.mimeType.split("/")[1]}let{error:g}=await f(()=>h.update(o.appAssets).set(u).where((0,G.eq)(o.appAssets.id,e)));if(g)throw new Error(`Failed to update asset: ${g.message}`);let{data:y}=await f(()=>h.query.appAssets.findFirst({where:(0,G.eq)(o.appAssets.id,e)}));if(!y)throw new Error("Updated asset not found");return{...y,url:this.appendUpdatedAtToUrl(y.url,y.updatedAt),thumbnailUrl:this.appendUpdatedAtToUrl(y.thumbnailUrl||"",y.updatedAt)}}catch(c){return{error:c instanceof Error?c.message:"Unknown error occurred"}}}};Ce.MIN_PNG_LENGTH=24,Ce.MIN_GIF_LENGTH=10,Ce.MIN_WEBP_VP8L_LENGTH=25,Ce.MIN_WEBP_VP8X_LENGTH=30,Ce.MIN_WEBP_VP8_LENGTH=30,Ce.MIN_JPEG_SOF_BYTES_FROM_MARKER=9;Ue=Ce});var Tt,lf,Pn,ep=T(()=>{"use strict";Tt=require("zod");N();R();pr();lf=Tt.z.object({name:Tt.z.string(),file:Tt.z.string(),folderId:Tt.z.string().optional().nullable(),description:Tt.z.record(Tt.z.string(),Tt.z.string()).optional(),optimize:Tt.z.boolean().optional().default(!0)}),Pn=class extends P{getValidationSchema(){return lf}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Ue(t,a).upload(e);if(i.error)throw new m(i.error,"CREATE_FAILED");return i}}});var Cn,cf,En,tp=T(()=>{"use strict";Cn=require("zod");N();R();pr();cf=Cn.z.object({ids:Cn.z.array(Cn.z.string().uuid()).min(1,"At least one asset ID is required")}),En=class extends P{getValidationSchema(){return cf}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Ue(t,a).deleteAsset(e.ids);if("error"in i)throw new m(i.error,"DELETE_FAILED");return i}}});async function dr(r,e){var i;if(!L(1))return fetch(r,e);let t=typeof r=="string"?r:r instanceof URL?r.href:r.url,a=(i=e==null?void 0:e.method)!=null?i:typeof r!="string"&&!(r instanceof URL)?r.method:"GET",n=performance.now();try{let s=await fetch(r,e);return yo(a,t,Math.round(performance.now()-n),s.status),s}catch(s){throw yo(a,t,Math.round(performance.now()-n),0),s}}var UP,Do=T(()=>{"use strict";UP=require("server-only");ht();Ke()});var Yt,pf,wn,rp=T(()=>{"use strict";Yt=require("zod");R();Do();pf=Yt.z.object({url:Yt.z.string(),name:Yt.z.string(),description:Yt.z.record(Yt.z.string(),Yt.z.string()).optional()}),wn=class extends P{constructor(){super()}getValidationSchema(){return pf}async execute(e){try{if(!this.context)return{error:"Context not set",status:400};let{userId:t}=this.context;if(!t)return{error:"User ID is required",status:401};let a=await dr(e.url);if(!a.ok)return{error:"Failed to download image from source",status:a.status};let n=a.headers.get("content-type")||"";if(!n.startsWith("image/"))return{error:"The URL does not point to a valid image. The server returned content-type: "+n,status:400};let s=await(await a.blob()).arrayBuffer(),c=`data:image/webp;base64,${Buffer.from(s).toString("base64")}`,{getChaiAction:d}=await Promise.resolve().then(()=>(Qe(),Wt)),u=d("CREATE_ASSET");if(!u)return{error:"CREATE_ASSET action not found",status:500};u.setContext(this.context);let g=await u.execute({file:c,name:e.name,description:e.description,optimize:!0});return g!=null&&g.error?{error:g.error,status:400}:g}catch(t){return console.error("DOWNLOAD_SEARCH_IMAGE error:",t),{error:t instanceof Error?t.message:"Unknown error",status:500}}}}});var Bo,df,xn,ap=T(()=>{"use strict";Bo=require("zod");N();R();pr();df=Bo.z.object({id:Bo.z.string().uuid()}),xn=class extends P{getValidationSchema(){return df}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Ue(t,a).getAsset(e);if(i.error)throw new m(i.error,"FETCH_FAILED",404);return i}}});var ia,gf,In,np=T(()=>{"use strict";ia=require("zod");N();R();pr();gf=ia.z.object({search:ia.z.string().optional().default(""),page:ia.z.number().optional().default(1),limit:ia.z.number().optional().default(20)}),In=class extends P{getValidationSchema(){return gf}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Ue(t,a).getAssets(e);if("error"in i)throw new m(i.error,"FETCH_FAILED");return i}}});var At,uf,mf,hf,ff,Sn,ip=T(()=>{"use strict";At=require("zod");R();Do();uf="https://pixabay.com/api/",mf="https://api.unsplash.com/search/photos",hf="https://api.pexels.com/v1/search",ff=At.z.object({query:At.z.string(),page:At.z.number().optional().default(1),limit:At.z.number().optional().default(20),provider:At.z.string().optional(),filters:At.z.record(At.z.string(),At.z.string()).optional()}),Sn=class extends P{getValidationSchema(){return ff}async execute(e){try{let{query:t,page:a,limit:n,provider:i,filters:s}=e,l=process.env.PIXABAY_API_KEY,c=process.env.UNSPLASH_ACCESS_KEY,d=process.env.PEXELS_API_KEY;if(!l&&i==="pixabay"||!c&&i==="unsplash"||!d&&i==="pexels")return{error:"No image search provider API keys configured",status:500};let u=[],g=[l,c,d].filter(Boolean).length,y=i&&i!=="all"?n:Math.ceil(n/g);if(l&&(!i||i==="pixabay")){let w=`${uf}?key=${l}&q=${encodeURIComponent(t)}&page=${a}&per_page=${y}${t?"":"&editors_choice=true"}`,k="photo";s!=null&&s.image_type&&s.image_type!=="all"&&s.image_type!=="default"&&(k=s.image_type),w+=`&image_type=${k}`,s!=null&&s.orientation&&s.orientation!=="all"&&s.orientation!=="default"&&(w+=`&orientation=${s.orientation}`),s!=null&&s.color&&s.color!=="all"&&s.color!=="default"&&(w+=`&colors=${s.color}`),s!=null&&s.order_by&&s.order_by!=="all"&&s.order_by!=="default"&&(w+=`&order=${s.order_by}`),u.push(dr(w).then(async D=>{if(!D.ok)return{assets:[],total:0};let B=await D.json();return{assets:B.hits.map(_=>({id:`pixabay-${_.id}`,name:_.tags,url:_.largeImageURL,thumbnailUrl:_.webformatURL,type:"image",width:_.imageWidth,height:_.imageHeight||_.height,size:_.imageSize,provider:"pixabay",authorName:_.user,authorUrl:`https://pixabay.com/users/${_.user}-${_.user_id}/`,authorThumbnailUrl:_.userImageURL,providerUrl:"https://pixabay.com/",providerLogoUrl:null})),total:B.totalHits}}))}if(c&&(!i||i==="unsplash")){let w=`${mf}?query=${encodeURIComponent(t)}&page=${a}&per_page=${y}&client_id=${c}`;t&&s&&(s.orientation&&s.orientation!=="all"&&s.orientation!=="default"&&(w+=`&orientation=${s.orientation}`),s.color&&s.color!=="all"&&s.color!=="default"&&(w+=`&color=${s.color}`),s.order_by&&s.order_by!=="all"&&s.order_by!=="default"&&(w+=`&order_by=${s.order_by}`)),u.push(dr(w,{headers:{"Accept-Version":"v1"}}).then(async k=>{if(!k.ok)return{assets:[],total:0};let D=await k.json(),B=t?D.results:D,_=t?D.total:200;return{assets:B.map(H=>{var W;return{id:`unsplash-${H.id}`,name:H.description||H.alt_description||"Unsplash Image",url:H.urls.regular,thumbnailUrl:H.urls.small,type:"image",width:H.width,height:H.height,size:0,provider:"unsplash",authorName:H.user.name,authorUrl:H.user.links.html,authorThumbnailUrl:(W=H.user.profile_image)==null?void 0:W.small,providerUrl:"https://unsplash.com/",providerLogoUrl:null}}),total:_}}))}if(d&&(!i||i==="pexels")){let k=!t?`https://api.pexels.com/v1/curated?page=${a}&per_page=${y}`:`${hf}?query=${encodeURIComponent(t)}&page=${a}&per_page=${y}`;s!=null&&s.orientation&&s.orientation!=="all"&&s.orientation!=="default"&&(k+=`&orientation=${s.orientation}`),s!=null&&s.size&&s.size!=="all"&&s.size!=="default"&&(k+=`&size=${s.size}`),s!=null&&s.color&&s.color!=="all"&&s.color!=="default"&&(k+=`&color=${s.color}`),u.push(dr(k,{headers:{Authorization:d}}).then(async D=>{if(!D.ok)return{assets:[],total:0};let B=await D.json();return{assets:(B.photos||[]).map(_=>({id:`pexels-${_.id}`,name:_.alt||"Pexels Image",url:_.src.large2x,thumbnailUrl:_.src.medium,type:"image",width:_.width,height:_.height,size:0,provider:"pexels",authorName:_.photographer,authorUrl:_.photographer_url,providerUrl:"https://pexels.com/",providerLogoUrl:"https://images.pexels.com/lib/api/pexels-white.png"})),total:B.total_results||0}}))}let b=await Promise.all(u),A=Math.max(...b.map(w=>w.assets.length)),E=[];for(let w=0;w<A;w++)for(let k of b)k.assets[w]&&E.push(k.assets[w]);let C=b.reduce((w,k)=>w+k.total,0);return{assets:E,total:C,page:a,limit:n}}catch(t){return console.error("SEARCH_IMAGES error:",t),{error:t instanceof Error?t.message:"Unknown error",status:500}}}}});var Qt,yf,Rn,op=T(()=>{"use strict";Qt=require("zod");N();R();pr();yf=Qt.z.object({id:Qt.z.string().uuid(),file:Qt.z.string().optional(),description:Qt.z.record(Qt.z.string(),Qt.z.string()).optional()}),Rn=class extends P{getValidationSchema(){return yf}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Ue(t,a).updateAsset(e);if("error"in i)throw new m(i.error,"UPDATE_FAILED");return i}}});var vn,sp,No=T(()=>{"use strict";vn=[{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash",provider:"google",description:"0.5x Credits",multiplier:.5},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro",provider:"google",description:"1.25x Credits",multiplier:1.25},{id:"google/gemini-3-flash",name:"Gemini 3 Flash",provider:"google",description:"1x Credits",multiplier:1},{id:"google/gemini-3-pro",name:"Gemini 3 Pro",provider:"google",description:"2.5x Credits",multiplier:2.5},{id:"openai/gpt-5",name:"GPT-5",provider:"openai",description:"2x Credits",multiplier:2},{id:"anthropic/claude-haiku-4.5",name:"Claude Haiku 4.5",provider:"anthropic",description:"1x Credits",multiplier:1},{id:"anthropic/claude-sonnet-4",name:"Claude Sonnet 4",provider:"anthropic",description:"3x Credits",multiplier:3},{id:"anthropic/claude-sonnet-4.5",name:"Claude Sonnet 4.5",provider:"anthropic",description:"3x Credits",multiplier:3},{id:"openai/gpt-4.1",name:"GPT-4.1",provider:"openai",description:"2x Credits",multiplier:2}],sp="google/gemini-3-flash"});var lp={};$t(lp,{logAiRequest:()=>Tf});async function Tf({userId:r,startTime:e,model:t,appId:a,creditStatus:n,response:i,prompt:s,error:l}){var k,D,B;let c=ft().logging.clientId,d=e>0?Math.floor(new Date().getTime()-e):0;if(l){let _=s.indexOf("USER REQUEST"),H=s.substring(_).trim(),W={model:t,totalDuration:String(d),error:l,totalTokens:"0",tokenUsage:null,cost:null,prompt:H,user:r,client:c,app:a,creditSource:"monthly",addonId:null},{error:Se}=await f(()=>h.insert(o.aiLogs).values(W));Se&&console.error("Error logging AI request:",Se);return}let u=i==null?void 0:i.totalUsage,g=(D=(k=i==null?void 0:i.providerMetadata)==null?void 0:k.gateway)==null?void 0:D.cost,y=s.indexOf("USER REQUEST");s=s.substring(y).trim();let b=Math.round(((B=u==null?void 0:u.totalTokens)!=null?B:0)*bf(t)),A="monthly",E=null;if(n&&b>0){let _=Ec(n,b);if(A=_.creditSource,E=_.addonId,A==="addon"&&E){let H=await wc(E,b);H.success||console.error("Failed to deduct addon credits:",H.error)}}let C={model:t,totalDuration:String(d),error:l||null,totalTokens:String(b),tokenUsage:u,cost:g,prompt:s,user:r,client:c,app:a,creditSource:A,addonId:E},{error:w}=await f(()=>h.insert(o.aiLogs).values(C));w&&console.error("Error logging AI request:",w)}var bf,cp=T(()=>{"use strict";No();I();je();ta();bf=r=>{var e;return((e=vn.find(t=>t.id===r))==null?void 0:e.multiplier)||1}});var Af,gr,_n=T(()=>{"use strict";No();Af=async r=>{let{logAiRequest:e}=await Promise.resolve().then(()=>(cp(),lp));return e(r)},gr={models:vn,defaultModelId:sp,resolveModel:(r,e)=>({model:r}),credits:{enabled:!1},logging:{logger:Af,clientId:null}}});function kn(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Dn(r,e){if(!e)return{...r};let t={...r};for(let a of Object.keys(e)){let n=e[a];if(n===void 0)continue;let i=r[a];if(typeof n=="function"){t[a]=n;continue}if(kn(i)&&kn(n)){t[a]=Dn(i,n);continue}t[a]=n}return t}function oa(r,e,t){let a=new Map;for(let n of r)a.set(t(n),n);for(let n of e!=null?e:[]){let i=t(n),s=a.get(i);s&&kn(s)&&kn(n)?a.set(i,{...s,...n}):a.set(i,n)}return Array.from(a.values())}var Lo=T(()=>{"use strict"});function sa(r){if(!r||typeof r!="object")throw new Error("ChaiBuilder: `db` is required in `buildChaiBuilderConfig`. Pass `db: createPostgresDB(...)` (or libsql/d1/better-sqlite3).");if(!r.drizzle)throw new Error("ChaiBuilder: `db` is required in `buildChaiBuilderConfig`. Pass `db: createPostgresDB(...)` (or libsql/d1/better-sqlite3).");return r}var mC,Oo=T(()=>{"use strict";mC=require("server-only")});var Pf,Cf,pp,dp,Fo,Uo=T(()=>{"use strict";Pf='<svg stroke="currentColor" fill="currentColor" strokeWidth="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M5 8V20H19V8H5ZM5 6H19V4H5V6ZM20 22H4C3.44772 22 3 21.5523 3 21V3C3 2.44772 3.44772 2 4 2H20C20.5523 2 21 2.44772 21 3V21C21 21.5523 20.5523 22 20 22ZM7 10H11V14H7V10ZM7 16H17V18H7V16ZM13 11H17V13H13V11Z"></path></svg>',Cf='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-hash-icon lucide-hash"><line x1="4" x2="20" y1="9" y2="9"/><line x1="4" x2="20" y1="15" y2="15"/><line x1="10" x2="8" y1="3" y2="21"/><line x1="16" x2="14" y1="3" y2="21"/></svg>',pp={key:"page",name:"Static Page",icon:Pf,hasSlug:!0},dp={key:"global",name:"Global Block",helpText:"A global block can be reused in multiple pages.",icon:Cf,partial:!0,hasSlug:!1},Fo=[pp,dp]});var gp,ve,la=T(()=>{"use strict";gp=require("drizzle-orm");I();ee();ve=class{constructor(e,t=!1){this.appId=e,this.enableLogging=t}async getPagesTree(){let{data:e,error:t}=await f(()=>h.select({id:o.appPages.id,name:o.appPages.name,slug:o.appPages.slug,pageType:o.appPages.pageType,primaryPage:o.appPages.primaryPage,parent:o.appPages.parent,lang:o.appPages.lang,dynamic:o.appPages.dynamic}).from(o.appPages).where((0,gp.eq)(o.appPages.app,this.appId)));if(t)throw v("ERROR_GETTING_PAGES",t);let a=(e==null?void 0:e.filter(l=>l.primaryPage===null))||[],n=(e==null?void 0:e.filter(l=>l.primaryPage!==null))||[],i=this.buildPrimaryTree(a);this.enableLogging&&(console.log(`
800
+ === PRIMARY LANGUAGE PAGES TREE ===`),console.log(JSON.stringify(i,null,2)));let s=this.buildLanguageTree(n,i);return this.enableLogging&&(console.log(`
801
+ === OTHER LANGUAGE PAGES TREE ===`),console.log(JSON.stringify(s,null,2))),{primaryTree:i,languageTree:s,totalPrimaryPages:a.length,totalLanguagePages:n.length}}buildPrimaryTree(e){let t=new Map;e.forEach(n=>{t.set(n.id,{id:n.id,pageType:n.pageType,primaryPage:n.primaryPage,parent:n.parent,name:n.name,dynamic:n.dynamic,slug:n.slug,children:[]})});let a=[];return e.forEach(n=>{let i=t.get(n.id);if(i)if(n.parent===null)a.push(i);else{let s=t.get(n.parent);s?s.children.push(i):a.push(i)}}),a}buildLanguageTree(e,t){let a=new Map;e.forEach(l=>{let c=l.primaryPage;a.has(c)||a.set(c,[]),a.get(c).push(l)});let n=(l,c)=>{let u=(a.get(l.id)||[]).find(y=>y.lang===c);if(!u)return null;let g={id:u.id,pageType:u.pageType,primaryPage:u.primaryPage,parent:u.parent,lang:u.lang,name:u.name,slug:u.slug,dynamic:u.dynamic,children:[]};return l.children.forEach(y=>{let b=n(y,c);b&&g.children.push(b)}),g},i=[],s=new Set;return e.forEach(l=>{l.lang&&s.add(l.lang)}),s.forEach(l=>{t.forEach(c=>{let d=n(c,l);d&&i.push(d)})}),i}findPageInPrimaryTree(e,t){for(let a of t){if(a.id===e)return a;if(a.children&&a.children.length>0){let n=this.findPageInPrimaryTree(e,a.children);if(n)return n}}return null}findPageInLanguageTree(e,t){for(let a of t){if(a.id===e)return a;if(a.children&&a.children.length>0){let n=this.findPageInLanguageTree(e,a.children);if(n)return n}}return null}calculateSlugFromParent(e,t,a){if(!e){let c=t.split("/").filter(Boolean);return"/"+(c[c.length-1]||"")}let n=this.findPageInPrimaryTree(e,a);if(!n&&(n=this.findPageInLanguageTree(e,a),!n))throw new Error("Parent page not found in tree");let i=t.split("/").filter(Boolean),s=i[i.length-1]||"";return`${n.slug.endsWith("/")?n.slug.slice(0,-1):n.slug}/${s}`}collectNestedChildIds(e){let t=[];for(let a of e.children){t.push(a.id);let n=this.collectNestedChildIds(a);t.push(...n)}return t}findLanguagePagesForPrimary(e,t){let a=[],n=i=>{for(let s of i)s.primaryPage===e&&a.push(s),s.children&&s.children.length>0&&n(s.children)};return n(t),a}collectNestedChildSlugs(e,t,a){let n=[],i=(s,l,c)=>{for(let d of s){let u=this.generateNewChildSlug(d.slug,l,c);n.push({id:d.id,oldSlug:d.slug,newSlug:u}),d.children&&d.children.length>0&&i(d.children,d.slug,u)}};return i(e.children,t,a),n}generateNewChildSlug(e,t,a){return e===t?a:e.startsWith(t+"/")?e.replace(t+"/",a+"/"):e.startsWith(t)&&e!==t?e.replace(t,a):`${a}/${e.split("/").pop()}`}}});function up(r){return Buffer.from(r,"utf8").toString("base64url")}function ot(r){return`slug-${up(r)}`}function ca(r){return r?"draft":"online"}function mp(r,e,t){return[`page-by-slug-${r}-${ca(e)}-${up(t)}`]}function hp(r,e,t){return[`page-slug-${r}-${ca(e)}-${t}`]}function fp(r,e,t){let a=[...t].sort().join(",");return[`page-slugs-batch-${r}-${ca(e)}-${a}`]}function yp(r,e,t,a){return[`alternate-${r}-${ca(e)}-${t}-${a}`]}function bp(r,e,t){return[`breadcrumb-${r}-${ca(e)}-${t}`]}function Tp(r){return[ot(r)]}function Pt(r,e){var a,n,i,s;let t=new Set([`page-${r}`,`breadcrumb-${r}`]);(a=e==null?void 0:e.slugs)!=null&&a.old&&t.add(ot(e.slugs.old)),(n=e==null?void 0:e.slugs)!=null&&n.new&&t.add(ot(e.slugs.new)),e!=null&&e.primaryPageId&&t.add(`alternate-${e.primaryPageId}`);for(let l of(i=e==null?void 0:e.extraPageIds)!=null?i:[])t.add(`page-${l}`),t.add(`breadcrumb-${l}`);for(let l of(s=e==null?void 0:e.slugUpdates)!=null?s:[])t.add(`page-${l.id}`),t.add(`breadcrumb-${l.id}`),l.oldSlug&&t.add(ot(l.oldSlug)),l.newSlug&&t.add(ot(l.newSlug));return[...t]}function Ap(r){let e=new Set;for(let t of r)e.add(`page-${t.id}`),e.add(`breadcrumb-${t.id}`),t.slug&&e.add(ot(t.slug)),t.primaryPage&&e.add(`alternate-${t.primaryPage}`);return[...e]}function ur(r){let e=new Set;for(let t of r)e.add(`page-${t}`),e.add(`breadcrumb-${t}`);return[...e]}var Ge=T(()=>{"use strict"});var _e,Bn,Nt,Go=T(()=>{"use strict";_e=require("drizzle-orm"),Bn=require("zod");N();R();I();ee();la();Ge();Nt=class extends P{constructor(){super(...arguments);this.appId="";this.userId="";this.permanent=!1}getValidationSchema(){return Bn.z.object({id:Bn.z.string().min(1,"Page ID is required"),permanent:Bn.z.boolean().optional()})}async execute(t){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");this.appId=this.context.appId,this.userId=this.context.userId||"",this.permanent=t.permanent||!1;try{return this.pageTreeBuilder=new ve(this.appId),await this.deletePage(t.id)}catch(a){if(a instanceof m)throw a;let n=a instanceof Error?a.message:"Failed to delete page";throw new m(n,"DELETE_PAGE_ERROR")}}async deletePage(t){let a=await this.getCurrentEditor(t);if(a&&a!==this.userId)return{tags:[],code:"PAGE_LOCKED",editor:a};let n=await this.pageTreeBuilder.getPagesTree(),i=this.pageTreeBuilder.findPageInLanguageTree(t,n.languageTree),s=this.pageTreeBuilder.findPageInPrimaryTree(t,n.primaryTree);if(!i&&!s)throw v("ERROR_DELETING_PAGE","Page not found");return i!==null?await this.deleteLanguagePageWithTree(t,i,n):await this.deletePrimaryPageWithTree(t,n)}async performDeletionWithIds(t){let a=[...t].reverse();if(this.permanent){let{error:s}=await f(()=>h.delete(o.libraryTemplates).where((0,_e.inArray)(o.libraryTemplates.pageId,a)));if(s)throw v("DELETE_FAILED",s)}if(this.permanent){let{error:s}=await f(()=>h.delete(o.appPagesRevisions).where((0,_e.inArray)(o.appPagesRevisions.id,a)));if(s)throw v("DELETE_FAILED",s)}let{error:n}=await f(()=>this.permanent?h.delete(o.appPages).where((0,_e.inArray)(o.appPages.id,a)):h.update(o.appPages).set({deletedAt:new Date().toISOString(),deletedBy:this.userId}).where((0,_e.inArray)(o.appPages.id,a)));if(n)throw v("DELETE_FAILED",n);let{error:i}=await f(()=>h.delete(o.appPagesOnline).where((0,_e.inArray)(o.appPagesOnline.id,a)));if(i)throw v("DELETE_FAILED",i)}collectRoutingTagsFromTree(t,a){let n=[],i=s=>{for(let l of s)t.includes(l.id)&&n.push({id:l.id,slug:l.slug,primaryPage:l.primaryPage}),l.children.length>0&&i(l.children)};return i(a),Ap(n)}async deleteLanguagePageWithTree(t,a,n){let i=a.primaryPage;if(!this.pageTreeBuilder.findPageInPrimaryTree(i,n.primaryTree))throw v("ERROR_DELETING_PAGE","Primary page not found");let l=this.pageTreeBuilder.collectNestedChildIds(a),c=[t,...l];return await this.performDeletionWithIds(c),{tags:this.collectRoutingTagsFromTree(c,n.languageTree),totalDeleted:c.length}}async deletePrimaryPageWithTree(t,a){let n=this.pageTreeBuilder.findPageInPrimaryTree(t,a.primaryTree);if(!n)throw v("ERROR_DELETING_PAGE","Primary page not found");let i=this.pageTreeBuilder.collectNestedChildIds(n),s=this.pageTreeBuilder.findLanguagePagesForPrimary(t,a.languageTree),l=[];s.forEach(u=>{l.push(u.id);let g=this.pageTreeBuilder.collectNestedChildIds(u);l.push(...g)});let c=[...new Set([...i,...l])],d=[t,...c];return await this.performDeletionWithIds(d),{tags:[...this.collectRoutingTagsFromTree(d,a.primaryTree),...this.collectRoutingTagsFromTree(d,a.languageTree)].filter((u,g,y)=>y.indexOf(u)===g),totalDeleted:d.length}}async getCurrentEditor(t){var i;let{data:a,error:n}=await f(()=>h.select({currentEditor:o.appPages.currentEditor}).from(o.appPages).where((0,_e.and)((0,_e.eq)(o.appPages.id,t),(0,_e.eq)(o.appPages.app,this.appId))).limit(1));return n||!a||a.length===0?null:((i=a[0])==null?void 0:i.currentEditor)||null}async restorePage(t){this.pageTreeBuilder||(this.pageTreeBuilder=new ve(this.context.appId));let a=await this.pageTreeBuilder.getPagesTree(),n=this.pageTreeBuilder.findPageInLanguageTree(t,a.languageTree),i=this.pageTreeBuilder.findPageInPrimaryTree(t,a.primaryTree);if(!n&&!i)throw v("ERROR_RESTORING_PAGE","Page not found");n!==null?await this.restoreLanguagePageWithTree(t,n,a):await this.restorePrimaryPageWithTree(t,a)}async restoreLanguagePageWithTree(t,a,n){let i=this.pageTreeBuilder.collectNestedChildIds(a),s=[t,...i],{error:l}=await f(()=>h.update(o.appPages).set({deletedAt:null,deletedBy:null}).where((0,_e.inArray)(o.appPages.id,s)));if(l)throw v("RESTORE_FAILED",l)}async restorePrimaryPageWithTree(t,a){let n=this.pageTreeBuilder.findPageInPrimaryTree(t,a.primaryTree);if(!n)throw v("ERROR_RESTORING_PAGE","Primary page not found");let i=this.pageTreeBuilder.collectNestedChildIds(n),s=this.pageTreeBuilder.findLanguagePagesForPrimary(t,a.languageTree),l=[];s.forEach(u=>{l.push(u.id);let g=this.pageTreeBuilder.collectNestedChildIds(u);l.push(...g)});let c=[t,...i,...l],{error:d}=await f(()=>h.update(o.appPages).set({deletedAt:null,deletedBy:null}).where((0,_e.inArray)(o.appPages.id,c)));if(d)throw v("RESTORE_FAILED",d)}}});function Pp(r,e){return[`page-details-${r}-${e}`]}function Cp(r){return[`page-${r}`,`page-details-${r}`]}function Nn(r){return[`page-${r}`]}var Ln=T(()=>{"use strict"});var Ee,Ep,On,wp=T(()=>{"use strict";Ee=require("drizzle-orm"),Ep=require("lodash-es");N();I();la();On=class{constructor(e){this.appId=e}updateNodeSlugInTree(e,t,a){for(let n of a){if(n.id===e)return n.slug=t,!0;if(n.children&&n.children.length>0&&this.updateNodeSlugInTree(e,t,n.children))return!0}return!1}validateSlugAvailabilityInTree(e,t,a,n,i=!1){let s=l=>{var c;for(let d of l){let u=(c=d.dynamic)!=null?c:!1;if(d.slug===e&&d.id!==t&&u===a||d.children&&d.children.length>0&&s(d.children))return!0}return!1};if(s(n.primaryTree)){let l=i?`Slug '${e}' conflicts with a primary page slug. Language page slugs cannot overlap with primary page slugs.`:`Slug '${e}' is already in use. Please choose another slug`;throw new m(l,"SLUG_ALREADY_EXISTS")}if(s(n.languageTree)){let l=i?`Slug '${e}' is already in use by another language page. Please choose another slug.`:`Slug '${e}' conflicts with a language page slug. Please choose another slug.`;throw new m(l,"SLUG_ALREADY_EXISTS")}}async isSlugChanged(e,t){if(!t)return!1;let{data:a,error:n}=await f(()=>h.select({slug:o.appPages.slug}).from(o.appPages).where((0,Ee.and)((0,Ee.eq)(o.appPages.id,e),(0,Ee.eq)(o.appPages.app,this.appId))).limit(1));if(n||!a||a.length===0)return!1;let i=a[0];return(i==null?void 0:i.slug)!==t}async isParentChanged(e,t){if(t===void 0)return!1;let{data:a,error:n}=await f(()=>h.select({parent:o.appPages.parent}).from(o.appPages).where((0,Ee.and)((0,Ee.eq)(o.appPages.id,e),(0,Ee.eq)(o.appPages.app,this.appId))).limit(1));if(n||!a||a.length===0)return!1;let i=a[0];return(i==null?void 0:i.parent)!==t}async handleSlugChangeWithTree(e,t){let a=t.slug;this.pageTreeBuilder||(this.pageTreeBuilder=new ve(this.appId));let n=await this.pageTreeBuilder.getPagesTree(),i=this.pageTreeBuilder.findPageInPrimaryTree(e,n.primaryTree);if(!i&&(i=this.pageTreeBuilder.findPageInLanguageTree(e,n.languageTree),!i))throw new m("Page not found in tree","PAGE_NOT_FOUND_IN_TREE");let s=i.slug,l=i.dynamic||!1;this.validateSlugAvailabilityInTree(a,e,l,n);let c=[],d=this.pageTreeBuilder.collectNestedChildSlugs(i,s,a);return c=[{id:e,oldSlug:s,newSlug:a},...d],c}async handleParentChangeWithTree(e,t){let a=t.parent;this.pageTreeBuilder||(this.pageTreeBuilder=new ve(this.appId));let n=await this.pageTreeBuilder.getPagesTree(),i=this.pageTreeBuilder.findPageInPrimaryTree(e,n.primaryTree);if(!i)throw this.pageTreeBuilder.findPageInLanguageTree(e,n.languageTree)?new m("Cannot change parent of language pages directly","INVALID_OPERATION"):new m("Primary page not found in tree","PAGE_NOT_FOUND_IN_TREE");let s=i.slug,l=t.slug?t.slug:this.pageTreeBuilder.calculateSlugFromParent(a,s,n.primaryTree);this.validateSlugAvailabilityInTree(l,e,i.dynamic||!1,n),this.updateNodeSlugInTree(e,l,n.primaryTree);let c=this.pageTreeBuilder.collectNestedChildSlugs(i,s,l),d=[{id:e,oldSlug:s,newSlug:l},...c];for(let y of c)this.updateNodeSlugInTree(y.id,y.newSlug,n.primaryTree);let u=this.pageTreeBuilder.findLanguagePagesForPrimary(e,n.languageTree),g;a&&(g=this.pageTreeBuilder.findLanguagePagesForPrimary(a,n.languageTree));for(let y of u){let b=g==null?void 0:g.filter(w=>w.lang===y.lang)[0],A=(b==null?void 0:b.id)||null,E=this.pageTreeBuilder.calculateSlugFromParent(A,y.slug,n.languageTree);this.validateSlugAvailabilityInTree(E,y.id,y.dynamic||!1,n,!0),this.updateNodeSlugInTree(y.id,E,n.languageTree);let C=this.pageTreeBuilder.collectNestedChildSlugs(y,y.slug,E);for(let w of C)this.updateNodeSlugInTree(w.id,w.newSlug,n.languageTree);d.push({id:y.id,oldSlug:y.slug,newSlug:E}),d.push(...C)}return d}async batchUpdateSlugs(e,t,a,n){let i=e.map(async l=>{let c={slug:l.newSlug,lastSaved:new Date().toISOString()};if(l.id===a){let u=(0,Ep.pick)(t,["name","seo","blocks","currentEditor","buildTime","parent","pageType","dynamic","dynamicSlugCustom","links","partialBlocks","designTokens"]);Object.keys(u).forEach(g=>{u[g]===void 0&&delete u[g]}),Object.assign(c,{...u,changes:n})}let{error:d}=await f(()=>h.update(o.appPages).set(c).where((0,Ee.and)((0,Ee.eq)(o.appPages.id,l.id),(0,Ee.eq)(o.appPages.app,this.appId))));if(d)throw new m(`Failed to update page ${l.id}`,"UPDATE_PAGE_FAILED");return l.id});await Promise.all(i);let s=e.map(async l=>{await f(()=>h.update(o.appPagesOnline).set({slug:l.newSlug}).where((0,Ee.and)((0,Ee.eq)(o.appPagesOnline.id,l.id),(0,Ee.eq)(o.appPagesOnline.app,this.appId))))});await Promise.all(s)}setPageTreeBuilder(e){this.pageTreeBuilder=e}}});var q,Jt,M,Ef,mr,Mo=T(()=>{"use strict";q=require("drizzle-orm"),Jt=require("lodash-es"),M=require("zod");I();la();Ln();Ge();N();R();wp();Ef=new Set(["slug","name","parent","pageType","dynamic","dynamicSlugCustom"]),mr=class extends P{constructor(){super(...arguments);this.appId="";this.routingSlugUpdates=[]}getValidationSchema(){return M.z.object({id:M.z.string().nonempty(),blocks:M.z.array(M.z.any()).optional(),currentEditor:M.z.string().optional(),slug:M.z.string().optional(),name:M.z.string().optional(),seo:M.z.record(M.z.string(),M.z.any()).optional(),buildTime:M.z.boolean().optional(),parent:M.z.union([M.z.string(),M.z.null()]).optional(),pageType:M.z.string().optional(),dynamic:M.z.boolean().optional(),dynamicSlugCustom:M.z.string().optional(),needTranslations:M.z.boolean().optional(),description:M.z.string().optional(),partialIds:M.z.array(M.z.string()).optional(),linkPageIds:M.z.array(M.z.string()).optional(),designTokens:M.z.record(M.z.string(),M.z.record(M.z.string(),M.z.string())).optional(),tracking:M.z.record(M.z.string(),M.z.any()).optional(),addInRevision:M.z.boolean().optional()})}async execute(t){this.validateContext(),this.appId=this.context.appId,this.routingSlugUpdates=[];try{if(this.isOnlyBlocksUpdate(t))return await this.isLanguagePage(t.id)||await this.updateBlocks(t.id,t.blocks,t.linkPageIds||[],t.partialIds||[],t.designTokens||{},t==null?void 0:t.addInRevision),await this.buildResponse(t.id,t);let a=this.extractAllowedPageFields(t);t.description!==void 0&&(a.metadata=await this.buildMergedMetadata(t.id,t.description)),this.slugChangeHandler=new On(this.appId);let n=await this.slugChangeHandler.isSlugChanged(t.id,a.slug);return await this.slugChangeHandler.isParentChanged(t.id,a.parent)&&a.parent!==void 0?(this.pageTreeBuilder=new ve(this.appId),this.slugChangeHandler.setPageTreeBuilder(this.pageTreeBuilder),await this.handleParentChangeWithHandler(t.id,a)):n&&a.slug?(this.pageTreeBuilder=new ve(this.appId),this.slugChangeHandler.setPageTreeBuilder(this.pageTreeBuilder),await this.handleSlugChangeWithHandler(t.id,a)):await this.updatePageInDatabase(t.id,a,t==null?void 0:t.addInRevision),await this.syncDynamicFieldsToSecondaryPages(t.id,a),await this.buildResponse(t.id,a)}catch(a){return this.handleExecutionError(a)}}async updateBlocks(t,a,n,i,s,l){await this.updatePageInDatabase(t,{blocks:a,links:n.join("|"),partialBlocks:i.join("|"),designTokens:s},l)}validateContext(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET")}extractAllowedPageFields(t){return(0,Jt.pick)(t,["slug","name","seo","blocks","currentEditor","buildTime","parent","pageType","dynamic","dynamicSlugCustom","tracking"])}async buildMergedMetadata(t,a){var l;let{data:n,error:i}=await f(()=>h.query.appPages.findFirst({where:(0,q.and)((0,q.eq)(o.appPages.id,t),(0,q.eq)(o.appPages.app,this.appId)),columns:{metadata:!0}}));if(i)throw new m(`Failed to fetch page metadata: ${i.message}`,"FETCH_FAILED");if(!n)throw new m("Page not found","PAGE_NOT_FOUND");return{...(l=n.metadata)!=null?l:{},description:a}}async handleSlugChangeWithHandler(t,a){let n=await this.slugChangeHandler.handleSlugChangeWithTree(t,a);this.routingSlugUpdates=n;let i=this.determineChangeTypes(a);await this.slugChangeHandler.batchUpdateSlugs(n,a,t,i)}async handleParentChangeWithHandler(t,a){let n=await this.slugChangeHandler.handleParentChangeWithTree(t,a);this.routingSlugUpdates=n;let i=this.determineChangeTypes(a);await this.slugChangeHandler.batchUpdateSlugs(n,a,t,i)}determineChangeTypes(t){let a=[],n=(0,Jt.keys)(t);return n.includes("blocks")&&a.push("Page"),n.includes("seo")&&a.push("SEO"),a.length>0?a:["Updated"]}async addSaveEntryInRevision(t,a){var n;try{let{data:i}=await f(()=>h.select({currentEditor:o.appPagesOnline.currentEditor,createdAt:o.appPagesOnline.createdAt}).from(o.appPagesOnline).where((0,q.and)((0,q.eq)(o.appPagesOnline.app,this.appId),(0,q.eq)(o.appPagesOnline.id,t))).orderBy((0,q.desc)(o.appPagesOnline.createdAt)).limit(1)),{data:s}=await f(()=>h.select({uid:o.appPagesRevisions.uid,type:o.appPagesRevisions.type,currentEditor:o.appPagesRevisions.currentEditor,createdAt:o.appPagesRevisions.createdAt}).from(o.appPagesRevisions).where((0,q.and)((0,q.eq)(o.appPagesRevisions.id,t),(0,q.eq)(o.appPagesRevisions.app,this.appId))).orderBy((0,q.desc)(o.appPagesRevisions.createdAt)).limit(1)),l=i==null?void 0:i[0],c=s==null?void 0:s[0],d=c&&c.type==="draft"&&c.currentEditor===((n=this.context)==null?void 0:n.userId);if(l&&c&&new Date(l.createdAt).getTime()>new Date(c.createdAt).getTime()&&(d=!1),d){let{error:u}=await f(()=>h.update(o.appPagesRevisions).set({seo:a.seo,blocks:a.blocks,tracking:a.tracking,createdAt:new Date().toISOString()}).where((0,q.eq)(o.appPagesRevisions.uid,c==null?void 0:c.uid)));u&&console.error("Error updating draft revision entry:",{pageId:t,revisionUid:c==null?void 0:c.uid,error:u})}else{let{error:u}=await f(()=>{var g;return h.insert(o.appPagesRevisions).values({id:t,app:this.appId,blocks:a.blocks||[],type:"draft",currentEditor:(g=this.context)==null?void 0:g.userId,name:a.name||"",slug:a.slug||"",pageType:a.pageType,lang:a.lang||"",seo:a.seo,tracking:a.tracking})});u&&console.error("Error inserting draft revision entry:",{pageId:t,error:u})}}catch(i){console.error("Error adding save entry in revisions:",{pageId:t,error:i})}}async updatePageInDatabase(t,a,n){let i=this.determineChangeTypes(a),{error:s,data:l}=await f(()=>h.update(o.appPages).set({...a,changes:i,lastSaved:new Date().toISOString()}).where((0,q.and)((0,q.eq)(o.appPages.id,t),(0,q.eq)(o.appPages.app,this.appId))).returning({name:o.appPages.name,slug:o.appPages.slug,blocks:o.appPages.blocks,pageType:o.appPages.pageType,lang:o.appPages.lang,seo:o.appPages.seo,tracking:o.appPages.tracking,currentEditor:o.appPages.currentEditor}));if(s)throw new m("Error updating page","ERROR_UPDATING_PAGE");if(i.includes("Page")){let{error:c}=await f(()=>h.update(o.appPages).set({changes:i}).where((0,q.and)((0,q.eq)(o.appPages.primaryPage,t),(0,q.eq)(o.appPages.app,this.appId))));if(c)throw new m("Error updating page","ERROR_UPDATING_PAGE")}n&&(l!=null&&l[0])&&await this.addSaveEntryInRevision(t,l[0])}isOnlyBlocksUpdate(t){return(0,Jt.keys)(t).includes("blocks")}async isLanguagePage(t){var n;let{data:a}=await f(()=>h.select({primaryPage:o.appPages.primaryPage}).from(o.appPages).where((0,q.and)((0,q.eq)(o.appPages.id,t),(0,q.eq)(o.appPages.app,this.appId))).limit(1));return!!((n=a==null?void 0:a[0])!=null&&n.primaryPage)}async fetchUpdatedPageData(t){let{data:a,error:n}=await f(()=>h.select({id:o.appPages.id,slug:o.appPages.slug,lang:o.appPages.lang,pageType:o.appPages.pageType,name:o.appPages.name,online:o.appPages.online,parent:o.appPages.parent,primaryPage:o.appPages.primaryPage,seo:o.appPages.seo}).from(o.appPages).where((0,q.eq)(o.appPages.id,t)).limit(1));if(n||!a||a.length===0)throw new m("Error getting updated page","ERROR_GETTING_PAGE");return a[0]}buildMutationTags(t,a,n){return(0,Jt.keys)(a).some(l=>Ef.has(l))?this.routingSlugUpdates.length>0?Pt(t,{slugUpdates:this.routingSlugUpdates}):Pt(t,{slugs:n!=null&&n.slug?{new:n.slug}:void 0,primaryPageId:n==null?void 0:n.primaryPage}):Nn(t)}async buildResponse(t,a){if(this.isOnlyBlocksUpdate(a))return{success:!0};let n=await this.fetchUpdatedPageData(t);return{page:n,tags:this.buildMutationTags(t,a,n)}}async syncDynamicFieldsToSecondaryPages(t,a){let n=(0,Jt.keys)(a);if(!(n.includes("dynamic")||n.includes("dynamicSlugCustom")))return;let s={};n.includes("dynamic")&&(s.dynamic=a.dynamic),n.includes("dynamicSlugCustom")&&(s.dynamicSlugCustom=a.dynamicSlugCustom);let{error:l}=await f(()=>h.update(o.appPages).set(s).where((0,q.and)((0,q.eq)(o.appPages.primaryPage,t),(0,q.eq)(o.appPages.app,this.appId))));l&&console.error("Failed to sync dynamic fields to secondary pages:",l)}handleExecutionError(t){throw t instanceof m?t:new m(`Failed to update page: ${t instanceof Error?t.message:"Unknown error"}`,"UPDATE_PAGE_FAILED")}}});var ye,xp,Ip,Sp,Rp,vp,$o,Ho=T(()=>{"use strict";ye=require("drizzle-orm"),xp=require("nanoid");I();ee();Go();Mo();Ip={label:"Page",icon:"file",moveToTrash:async(r,e)=>{var s;let{data:t}=await f(()=>h.select().from(o.appPages).where((0,ye.eq)(o.appPages.id,r)).limit(1)),a=t==null?void 0:t[0];if(!a)throw v("MOVE_TO_TRASH_FAILED","Page not found");let n=new Nt;n.setContext(e);let i=await n.execute({id:r,permanent:!1});if((i==null?void 0:i.code)==="PAGE_LOCKED")throw v("PAGE_LOCKED",`Page is currently being edited by ${i.editor||"another user"}`);return{entityType:"page",entityId:r,metadata:{name:a.name,slug:a.slug,pageType:a.pageType,dynamic:a.dynamic},deletedBy:e.userId||"",app:e.appId||"",tags:(s=i.tags)!=null?s:[]}},restore:async(r,e)=>{let t=new Nt;t.setContext(e),await t.restorePage(r.entityId)},deletePermanently:async(r,e)=>{let t=new Nt;t.setContext(e);let a=await t.execute({id:r.entityId,permanent:!0});if((a==null?void 0:a.code)==="PAGE_LOCKED")throw v("PAGE_LOCKED",`Page is currently being edited by ${a.editor||"another user"}`);return!0},hasRestoreConflict:async(r,e)=>{var i,s,l;let t=(i=r.metadata)==null?void 0:i.slug;if(!t)return!1;let a=!!((l=(s=r.metadata)==null?void 0:s.dynamic)!=null&&l),{data:n}=await f(()=>h.select({id:o.appPages.id}).from(o.appPages).where((0,ye.and)((0,ye.eq)(o.appPages.app,e.appId),(0,ye.eq)(o.appPages.slug,t),(0,ye.eq)(o.appPages.dynamic,a),(0,ye.isNull)(o.appPages.deletedAt))).limit(1));return n!==null&&n.length>0},resolveRestoreConflict:async(r,e)=>{var i;let t=(i=r.metadata)==null?void 0:i.slug;if(!t)return{resolved:!0};let a=`${t}-restored-${(0,xp.nanoid)(5)}`,n=new mr;n.setContext(e);try{await n.execute({id:r.entityId,slug:a})}catch(s){throw v("RESOLVE_CONFLICT_FAILED",s)}return{resolved:!0,newSlug:a}}},Sp={label:"Asset",icon:"image",moveToTrash:async(r,e)=>{let t=e.appId,a=e.userId||"",{data:n,error:i}=await f(()=>h.select().from(o.appAssets).where((0,ye.and)((0,ye.eq)(o.appAssets.id,r),(0,ye.eq)(o.appAssets.app,t))).limit(1));if(i||!n||n.length===0)throw v("ASSET_NOT_FOUND","Asset not found");let s=n[0],l=new Date().toISOString(),{error:c}=await f(()=>h.update(o.appAssets).set({deletedAt:l,deletedBy:a}).where((0,ye.eq)(o.appAssets.id,r)));if(c)throw v("TRASH_FAILED",c);return{entityType:"asset",entityId:r,name:s.name||"Unknown Asset",metadata:{name:s.name||"Unknown Asset",url:s.url,type:s.type},deletedAt:l,deletedBy:a,app:t}},restore:async(r,e)=>{let{error:t}=await f(()=>h.update(o.appAssets).set({deletedAt:null,deletedBy:null}).where((0,ye.eq)(o.appAssets.id,r.entityId)));if(t)throw v("RESTORE_FAILED",t)},deletePermanently:async(r,e)=>{let{error:t}=await f(()=>h.delete(o.appAssets).where((0,ye.eq)(o.appAssets.id,r.entityId)));if(t)throw v("DELETE_PERMANENTLY_FAILED",t);return!0},hasRestoreConflict:async(r,e)=>!1},Rp={key:"page",...Ip},vp={key:"asset",...Sp},$o=[Rp,vp]});var qo,zo=T(()=>{"use strict";qo=async()=>({})});async function Ko(r){return Promise.all(r.map(async e=>{var t,a,n,i,s;return{key:e.key,helpText:(t=e.helpText)!=null?t:"",icon:(a=e.icon)!=null?a:"",dynamicSegments:(n=e.dynamicSegments)!=null?n:"",dynamicSlug:(i=e.dynamicSlug)!=null?i:"",hasSlug:e.partial?!1:(s=e.hasSlug)!=null?s:!0,name:typeof e.name=="function"?await e.name():e.name,pluralName:typeof e.pluralName=="function"?await e.pluralName():e.pluralName,...e.editUrl?{editUrl:e.editUrl}:{},...e.createUrl?{createUrl:e.createUrl}:{},...(0,Vo.isFunction)(e.defaultSeo)?{defaultSeo:e.defaultSeo()}:{},...(0,Vo.isFunction)(e.defaultJSONLD)?{defaultJSONLD:e.defaultJSONLD()}:{}}}))}var Vo,_p=T(()=>{"use strict";Vo=require("lodash-es")});function wf(r){return r?Dn(gr,r):{...gr}}function Fn(r){var n,i,s,l;let e=wf(r.ai),t={...ke.actions,...r.actions,...r.builderActions};return{debugLevel:(n=r.debugLevel)!=null?n:ke.debugLevel,globalDataProvider:(i=r.globalDataProvider)!=null?i:ke.globalDataProvider,pageTypes:oa(ke.pageTypes,r.pageTypes,c=>c.key),collections:oa(ke.collections,r.collections,c=>c.id),blockDataProviders:{...ke.blockDataProviders,...r.blockDataProviders},trash:oa(ke.trash,r.trash,c=>c.key),actions:t,builderActions:t,extraPermissions:(s=r.extraPermissions)!=null?s:[],roles:(l=r.roles)!=null?l:void 0,ai:e,db:sa(r.db)}}var WC,ie=T(()=>{"use strict";WC=require("server-only");_n();Gn();Lo();Oo();Gn();Oo();Mn();jo();Uo();Ho();je();_n();zo();Lo();_p()});var Dp,ua,$n,Bp=T(()=>{"use strict";Dp=require("lodash-es"),ua=require("zod");Ka();R();ie();Mn();$n=class extends P{getValidationSchema(){return ua.z.object({block:ua.z.any(),pageProps:ua.z.any().optional().default({}),lang:ua.z.string()})}async execute(e){var t;try{let{block:a,pageProps:n,lang:i}=e,s=a._type;if(s==="Repeater"&&((t=a==null?void 0:a.repeaterItems)!=null&&t.includes("{{#"))){let d=a.repeaterItems.replace("{{#","").replace("}}",""),u=Xt(d);if(!u)return[];let g=await(u==null?void 0:u.fetch({block:a,pageProps:n,lang:i,draft:!0,inBuilder:!0}));return g!=null?g:[]}es(s);let l=Ve(s);if(!(l!=null&&l.dataProvider)||!(0,Dp.isFunction)(l.dataProvider))return{};let c=await l.dataProvider({block:a,pageProps:n,lang:i,draft:!0,inBuilder:!0});return c!=null?c:{}}catch(a){return this.handleError(a)}}}});var Np,Lp,fr,ts=T(()=>{"use strict";Np=require("lodash-es"),Lp=require("zod");R();ie();fr=class extends P{getValidationSchema(){return Lp.z.object({})}async execute(){try{return da().map(t=>(0,Np.omit)(t,"fetch"))}catch(e){return this.handleError(e)}}}});var Lt,Op,yr,rs=T(()=>{"use strict";Lt=require("drizzle-orm"),Op=require("zod");I();N();R();yr=class extends P{getValidationSchema(){return Op.z.object({}).optional().default({})}async execute(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:e}=this.context,t=await f(()=>h.select({id:o.libraries.id,name:o.libraries.name,type:o.libraries.type,createdAt:o.libraries.createdAt}).from(o.libraries).where((0,Lt.eq)(o.libraries.app,e)).limit(1));if(t.error)throw new m("Failed to fetch site library","DB_ERROR");let a=t.data[0]||null,n=process.env.CHAIBUILDER_CLIENT_ID;if(!n)return a?[{id:a.id,name:a.name,type:a.type,createdAt:a.createdAt,isSiteLibrary:!0}]:[];let{data:i,error:s}=await f(()=>h.select({id:o.libraries.id,name:o.libraries.name,type:o.libraries.type,createdAt:o.libraries.createdAt}).from(o.libraries).where(n?(0,Lt.or)((0,Lt.eq)(o.libraries.client,n),(0,Lt.isNull)(o.libraries.client)):(0,Lt.isNull)(o.libraries.client)));if(s)throw new m("Failed to fetch libraries","DB_ERROR");let l=(a==null?void 0:a.id)||null;return i.map(c=>({id:c.id,name:c.name,type:c.type,createdAt:c.createdAt,isSiteLibrary:l?c.id===l:!1}))}}});var as,ma,Fp,Hn,Up=T(()=>{"use strict";as=require("drizzle-orm"),ma=require("lodash-es"),Fp=require("zod");N();R();I();Hn=class extends P{getValidationSchema(){return Fp.z.object({})}async execute(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{data:e,error:t}=await f(()=>h.select({id:o.libraries.id}).from(o.libraries).where((0,as.eq)(o.libraries.app,this.context.appId)).limit(1));if(t)throw new m("Failed to fetch site library","GET_SITE_LIBRARY_FAILED",500,t);if(!e||e.length===0)return[];let a=e[0],{data:n,error:i}=await f(()=>h.select({group:o.libraryItems.group}).from(o.libraryItems).where((0,as.eq)(o.libraryItems.library,a.id)));if(i)throw new m("Failed to fetch library groups","GET_LIBRARY_GROUPS_FAILED",500,i);let s=(0,ma.map)(n,"group").filter(l=>l!=null);return(0,ma.map)((0,ma.uniq)(s),l=>({id:l,name:l}))}}});var Gp,ns,qn,Mp=T(()=>{"use strict";Gp=require("drizzle-orm"),ns=require("zod");N();R();I();qn=class extends P{getValidationSchema(){return ns.z.object({id:ns.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{id:t}=e,{error:a}=await f(()=>h.delete(o.libraryItems).where((0,Gp.eq)(o.libraryItems.id,t)));if(a)throw new m("Failed to delete library item","DELETE_LIBRARY_ITEM_FAILED",500,a);return{success:!0}}}});var is,os,ss,zn,$p=T(()=>{"use strict";is=require("drizzle-orm"),os=require("lodash-es"),ss=require("zod");N();R();I();zn=class extends P{getValidationSchema(){return ss.z.object({id:ss.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context,{id:a}=e,{data:n,error:i}=await f(()=>h.select({id:o.libraryItems.id,name:o.libraryItems.name,blocks:o.libraryItems.blocks,library:o.libraryItems.library,description:o.libraryItems.description,group:o.libraryItems.group,user:o.libraryItems.user,preview:o.libraryItems.preview,createdAt:o.libraryItems.createdAt,html:o.libraryItems.html,libraryApp:o.libraries.app,libraryName:o.libraries.name}).from(o.libraryItems).leftJoin(o.libraries,(0,is.eq)(o.libraryItems.library,o.libraries.id)).where((0,is.eq)(o.libraryItems.id,a)));if(i)throw new m("Failed to fetch library item","GET_LIBRARY_ITEM_FAILED",500,i);if(!n||n.length===0)throw new m("Library item not found","GET_LIBRARY_ITEM_FAILED");let s=n[0],l=Array.isArray(s.blocks)?[...s.blocks]:s.blocks;return s.libraryApp===t?(0,os.set)(l,"0._libBlockId",s.id):(0,os.set)(l,"0._libBlockId",void 0),{id:s.id,name:s.name,blocks:l,description:s.description,group:s.group,user:s.user,preview:s.preview,createdAt:s.createdAt,html:s.html}}}});var Hp,ls,Vn,qp=T(()=>{"use strict";Hp=require("drizzle-orm"),ls=require("zod");N();R();I();Vn=class extends P{getValidationSchema(){return ls.z.object({id:ls.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{id:t}=e,{data:a,error:n}=await f(()=>h.select({id:o.libraryItems.id,name:o.libraryItems.name,library:o.libraryItems.library,group:o.libraryItems.group,description:o.libraryItems.description,preview:o.libraryItems.preview}).from(o.libraryItems).where((0,Hp.eq)(o.libraryItems.library,t)));if(n)throw new m("Failed to fetch library items","GET_LIBRARY_ITEMS_FAILED",500,n);return a||[]}}});var cs,zp,Vp,lt,Kn,Kp=T(()=>{"use strict";cs=require("drizzle-orm"),zp=require("lodash-es"),Vp=require("crypto"),lt=require("zod");R();I();N();Kn=class extends P{getValidationSchema(){return lt.z.object({name:lt.z.string().min(1),group:lt.z.string().min(1),blocks:lt.z.array(lt.z.any()),description:lt.z.string().optional(),previewImage:lt.z.string().optional(),id:lt.z.string().optional(),previewImageUrl:lt.z.string().optional()})}async execute(e){var A;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context,{name:n,group:i,blocks:s,description:l,previewImage:c,previewImageUrl:d,id:u}=e,{data:g,error:y}=await f(()=>h.query.libraries.findFirst({where:(0,cs.eq)(o.libraries.app,t),columns:{id:!0}}));if(y)throw new m("Failed to fetch site library","GET_SITE_LIBRARY_FAILED",500,y);if(!g)throw new m("Library not found for this app","GET_SITE_LIBRARY_FAILED");let b=d;if(c){let{getChaiAction:E}=await Promise.resolve().then(()=>(Qe(),Wt)),C=E("UPLOAD_TO_STORAGE");C==null||C.setContext(this.context);let w=`library-item-${Date.now()}.webp`,k=`${t}/library-items`,D=await(C==null?void 0:C.execute({file:c,fileName:w,contentType:"image/webp",folder:k}));if(D!=null&&D.error)throw new m("Failed to upload preview image","UPLOAD_PREVIEW_FAILED",500,D.error);b=((A=D==null?void 0:D.data)==null?void 0:A.url)||d}if(u){let E={name:n,blocks:s,library:g.id,description:l!=null?l:null,group:i,user:a!=null?a:null,createdBy:a!=null?a:null};b&&(E.preview=b);let{data:C,error:w}=await f(()=>h.update(o.libraryItems).set(E).where((0,cs.eq)(o.libraryItems.id,u)).returning());if(w||!C||C.length===0)throw new m("Failed to update library item","UPDATE_LIBRARY_ITEM_FAILED",500,w);return C[0]}else{let E=(0,Vp.randomUUID)(),C=[...s];(0,zp.set)(C,"0._libBlockId",E);let w={id:E,name:n,blocks:C,library:g.id,description:l!=null?l:null,group:i,user:a!=null?a:null,createdBy:a!=null?a:null,preview:b!=null?b:null},{data:k,error:D}=await f(()=>h.insert(o.libraryItems).values(w).returning());if(D||!k||k.length===0)throw new m("Failed to create library item","CREATE_LIBRARY_ITEM_FAILED",500,D);return k[0]}}}});var ha,ps,jn,jp=T(()=>{"use strict";ha=require("drizzle-orm"),ps=require("zod");R();I();jn=class extends P{getValidationSchema(){return ps.z.object({pageId:ps.z.string().min(1)})}async execute({pageId:e}){let{userId:t,appId:a}=this.context;return await h.update(o.appPages).set({currentEditor:t}).where((0,ha.and)((0,ha.eq)(o.appPages.id,e),(0,ha.eq)(o.appPages.app,a))),{ok:!0}}}});var oe,br,J,Wn,Wp=T(()=>{"use strict";oe=require("drizzle-orm"),br=require("lodash-es"),J=require("zod");I();Ge();N();R();Wn=class extends P{getValidationSchema(){return J.z.object({name:J.z.string().min(1),slug:J.z.string(),pageType:J.z.string(),parent:J.z.string().nullable().optional(),lang:J.z.string().optional(),primaryPage:J.z.string().nullable().optional(),dynamic:J.z.boolean().optional(),hasSlug:J.z.boolean().optional(),template:J.z.string().optional(),seo:J.z.record(J.z.string(),J.z.any()).optional(),jsonLD:J.z.record(J.z.string(),J.z.any()).optional(),dynamicSlugCustom:J.z.string().optional(),blocks:J.z.array(J.z.any()).optional(),description:J.z.string().optional()}).refine(e=>e.lang&&e.lang!==""?!!e.primaryPage:!0,{message:"primaryPage is required when lang option is not empty",path:["primaryPage"]})}async execute(e){var y,b,A,E,C,w,k,D,B,_;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context;if(((y=e.hasSlug)!=null?y:e.pageType!=="global")&&e.slug&&await this.doesSlugExist(e.slug,e.pageType))throw new m("Slug already exists","SLUG_ALREADY_USED");let i=(b=e.blocks)!=null?b:[];e.template&&(i=await this.getTemplateBlocks(e.template,t));let s=(A=e.dynamic)!=null?A:!1,l=(E=e.dynamicSlugCustom)!=null?E:"";if(e.primaryPage){let{data:H}=await f(()=>h.query.appPages.findFirst({where:(0,oe.and)((0,oe.eq)(o.appPages.id,e.primaryPage),(0,oe.eq)(o.appPages.app,t)),columns:{dynamic:!0,dynamicSlugCustom:!0}}));H&&(s=(C=H.dynamic)!=null?C:!1,l=(w=H.dynamicSlugCustom)!=null?w:"")}let c={app:t,name:e.name,slug:e.slug,pageType:e.pageType,parent:(k=e.parent)!=null?k:null,lang:e.primaryPage&&(D=e.lang)!=null?D:"",primaryPage:(B=e.primaryPage)!=null?B:null,dynamic:s,dynamicSlugCustom:l,blocks:i,seo:(_=e.seo)!=null?_:{title:e.name,jsonLD:"",noIndex:!1,ogImage:"",ogTitle:"",noFollow:"",description:"",searchTitle:"",cononicalUrl:"",ogDescription:"",searchDescription:""},jsonld:{},metadata:(0,br.isEmpty)(e.description)?{}:{description:e.description},online:!1,currentEditor:null,changes:null,libRefId:null,lastSaved:null,createdBy:a},{data:d,error:u}=await f(()=>h.insert(o.appPages).values(c).returning());if(u)throw new m("Failed to create page","ERROR_CREATING_PAGE",500,u);if(!d||d.length===0)throw new m("Failed to create page","INSERT_FAILED");let g=d[0];return{page:(0,br.omit)(g.primaryPage?{...g,id:g.primaryPage}:g,["primaryPage"]),tags:Pt(g.id,{slugs:g.slug?{new:g.slug}:void 0,primaryPageId:g.primaryPage})}}async doesSlugExist(e,t){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:a}=this.context,{data:n,error:i}=await f(()=>h.query.appPages.findFirst({where:(0,oe.and)((0,oe.eq)(o.appPages.slug,e),(0,oe.eq)(o.appPages.pageType,t),(0,oe.eq)(o.appPages.app,a),(0,oe.isNull)(o.appPages.deletedAt)),columns:{id:!0}}));if(i)throw new m(`${i.message}`,"SLUG_CHECK_FAILED");return!!n}async getTemplateBlocks(e,t){let{data:a,error:n}=await f(()=>h.select({template:o.libraryTemplates,library:{id:o.libraries.id,app:o.libraries.app,name:o.libraries.name}}).from(o.libraryTemplates).leftJoin(o.libraries,(0,oe.eq)(o.libraryTemplates.library,o.libraries.id)).where((0,oe.and)((0,oe.eq)(o.libraryTemplates.id,e),(0,oe.isNull)(o.libraryTemplates.deletedAt))).limit(1).then(g=>g[0]));if(n)throw new m(`Failed to fetch template: ${n.message||"Unknown database error"}`,"ERROR_GETTING_TEMPLATE_BLOCKS",500,n);if(!a||!a.template||!a.library)throw new m(`Template not found with ID: ${e}`,"TEMPLATE_NOT_FOUND");let i=a.template,s=a.library,{data:l,error:c}=await f(()=>h.query.appPages.findFirst({where:(0,oe.eq)(o.appPages.id,i.pageId),columns:{blocks:!0}}));if(c)throw new m(`Failed to fetch template blocks: ${c.message||"Unknown database error"}`,"ERROR_GETTING_TEMPLATE_BLOCKS",500,c);if(!l)throw new m(`Template page not found with ID: ${i.pageId}`,"TEMPLATE_PAGE_NOT_FOUND");let d=l.blocks||[];if(d=d.map(g=>g._type==="GlobalBlock"&&!(0,br.isEmpty)(g.globalBlock)?{...g,_type:"PartialBlock",partialBlockId:g.globalBlock}:g),!(s.app===t)){let g=s.name||"",y=d.filter(A=>A._type==="PartialBlock"&&!(0,br.isEmpty)(A.partialBlockId)),b=await Promise.all(y.map(({partialBlockId:A})=>this.copyPartialBlockFromTemplate(A,g,t)));d=d.map(A=>{let E=b.find(C=>(C==null?void 0:C.libRefId)===A.partialBlockId);return E&&(A._name=`${g} - ${A._name}`,A.partialBlockId=E.id),A})}return d}async copyPartialBlockFromTemplate(e,t,a){var u;let{data:n,error:i}=await f(()=>h.query.appPages.findFirst({where:(0,oe.eq)(o.appPages.id,e)}));if(i||!n)return console.error("Failed to fetch partial block:",i),null;let s={...n,id:void 0,app:a,libRefId:e,name:`${t} - ${n.name}`,createdAt:void 0,online:!1,currentEditor:null,changes:null,lastSaved:null,createdBy:(u=this.context)==null?void 0:u.userId},{data:l,error:c}=await f(()=>h.insert(o.appPages).values(s).returning());if(c||!l||l.length===0)return console.error("Failed to create partial block copy:",c),null;let d=l[0];return{id:d.id,libRefId:d.libRefId||e}}}});var Je,fa,Yn,Yp=T(()=>{"use strict";Je=require("drizzle-orm"),fa=require("zod");N();R();I();Ge();Yn=class extends P{getValidationSchema(){return fa.z.object({pageId:fa.z.string().nonempty(),name:fa.z.string().nonempty(),slug:fa.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context;if(e.slug&&await this.doesSlugExist(e.slug))throw new m("Slug already exists","SLUG_EXISTS");let{data:a,error:n}=await f(()=>h.query.appPages.findFirst({where:(0,Je.and)((0,Je.eq)(o.appPages.id,e.pageId),(0,Je.eq)(o.appPages.app,t),(0,Je.isNull)(o.appPages.deletedAt))}));if(n)throw n;if(!a)throw new m("Page not found","PAGE_NOT_FOUND");let i={...a,id:void 0,createdAt:void 0,name:e.name,currentEditor:null,changes:null,online:!1,libRefId:null,lastSaved:null,createdBy:this.context.userId,...e.slug&&{slug:e.slug}},[s]=await h.insert(o.appPages).values(i).returning();if(!s)throw new m("Failed to create duplicate page","INSERT_FAILED");return{id:s.id,tags:Pt(s.id,{slugs:e.slug?{new:e.slug}:void 0})}}async doesSlugExist(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context,{data:a,error:n}=await f(()=>h.query.appPages.findFirst({where:(0,Je.and)((0,Je.eq)(o.appPages.slug,e),(0,Je.eq)(o.appPages.app,t),(0,Je.isNull)(o.appPages.deletedAt)),columns:{id:!0}}));if(n)throw new m(`${n.message}`,"SLUG_CHECK_FAILED");return!!a}}});var ya,Tr,ds=T(()=>{"use strict";ya=require("zod");ie();R();Tr=class extends P{getValidationSchema(){return ya.z.object({lang:ya.z.string(),pageType:ya.z.string().optional(),pageProps:ya.z.any().optional().default({})})}async execute(e){try{let{lang:t,pageType:a,pageProps:n={}}=e;if(!a)return{};let i=st(a),s=i?Et(i):void 0;return s?s.dataProvider?await s.dataProvider({lang:t,draft:!0,inBuilder:!0,pageProps:n}):{}:{}}catch(t){return this.handleError(t)}}}});var we,Qp,Qn,Jp=T(()=>{"use strict";we=require("drizzle-orm"),Qp=require("zod");I();N();R();Qn=class extends P{constructor(){super(...arguments);this.appId=""}getValidationSchema(){return Qp.z.object({})}async execute(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");this.appId=this.context.appId;try{return await this.getChanges()}catch(t){if(t instanceof m)throw t;let a=t instanceof Error?t.message:"Failed to get changes";throw new m(a,"GET_CHANGES_ERROR")}}async getChanges(){var g;let{data:t,error:a}=await f(()=>h.select({id:o.appPages.id,slug:o.appPages.slug,name:o.appPages.name,pageType:o.appPages.pageType,lang:o.appPages.lang,changes:o.appPages.changes,primaryPage:o.appPages.primaryPage,online:o.appPages.online,currentEditor:o.appPages.currentEditor}).from(o.appPages).where((0,we.and)((0,we.eq)(o.appPages.app,this.appId),(0,we.isNotNull)(o.appPages.changes))));if(a)throw new m("Error getting changed pages","ERROR_GETTING_CHANGES");let{data:n,error:i}=await f(()=>h.select({id:o.appPages.id,slug:o.appPages.slug,name:o.appPages.name,pageType:o.appPages.pageType,lang:o.appPages.lang,changes:o.appPages.changes,primaryPage:o.appPages.primaryPage,online:o.appPages.online}).from(o.appPages).where((0,we.and)((0,we.eq)(o.appPages.app,this.appId),(0,we.isNull)(o.appPages.currentEditor),(0,we.eq)(o.appPages.online,!1))));if(i)throw new m("Error getting offline pages","ERROR_GETTING_OFFLINE_PAGES");let s=(n||[]).map(y=>({...y,changes:["Take Online"]})),c=[...(t||[]).filter(y=>!s.some(b=>b.id===y.id)).map(y=>({...y,changes:y.changes})),...s],{data:d,error:u}=await f(()=>h.select({changes:o.apps.changes}).from(o.apps).where((0,we.and)((0,we.eq)(o.apps.id,this.appId),(0,we.isNotNull)(o.apps.changes))));if(!u&&d&&d.length>0){let y=(g=d[0].changes)!=null?g:[];y.includes("THEME")&&c.push({id:"THEME",slug:"",name:"Theme",pageType:"theme",lang:"",changes:["Updated"],primaryPage:null,online:!0}),y.includes("DESIGN_TOKENS")&&c.push({id:"DESIGN_TOKENS",slug:"",name:"Design Tokens",pageType:"design_tokens",lang:"",changes:["Updated"],primaryPage:null,online:!0})}return c}}});var Jn,wt,Xn,Xp=T(()=>{"use strict";Jn=require("drizzle-orm"),wt=require("zod");N();R();I();Xn=class extends P{getValidationSchema(){return wt.z.object({versions:wt.z.object({version1:wt.z.object({type:wt.z.enum(["draft","revision","live"]),id:wt.z.string()}),version2:wt.z.object({type:wt.z.enum(["draft","revision","live"]),id:wt.z.string()})})})}async execute(e){this.validateContext();let t=await this.getBlocksForVersion(e.versions.version1.type,e.versions.version1.id),a=await this.getBlocksForVersion(e.versions.version2.type,e.versions.version2.id);return{version1:{blocks:t.blocks,seo:t.seo,tracking:t.tracking},version2:{blocks:a.blocks,seo:a.seo,tracking:a.tracking}}}async getBlocksForVersion(e,t){let a,n;switch(e){case"draft":({data:a,error:n}=await f(()=>h.query.appPages.findFirst({where:(0,Jn.eq)(o.appPages.id,t),columns:{blocks:!0,seo:!0,tracking:!0}})));break;case"live":({data:a,error:n}=await f(()=>h.query.appPagesOnline.findFirst({where:(0,Jn.eq)(o.appPagesOnline.id,t),columns:{blocks:!0,seo:!0,tracking:!0}})));break;case"revision":({data:a,error:n}=await f(()=>h.query.appPagesRevisions.findFirst({where:(0,Jn.eq)(o.appPagesRevisions.uid,t),columns:{blocks:!0,seo:!0,tracking:!0}})));break;default:throw new m(`Invalid version type: ${e}`,"INVALID_VERSION_TYPE")}if(n)throw new m(`Failed to fetch blocks for ${e} version: ${n.message}`,"FETCH_BLOCKS_ERROR");if(!a)throw new m(`No data found for ${e} version with id: ${t}`,"VERSION_NOT_FOUND");return{blocks:a.blocks||[],seo:a.seo||{},tracking:a.tracking||{}}}validateContext(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET")}}});var Xe,gs,Ar,us=T(()=>{"use strict";Xe=require("drizzle-orm"),gs=require("zod");R();I();ee();Ar=class extends P{getValidationSchema(){return gs.z.object({id:gs.z.string()})}async execute(e){var u,g,y,b,A,E;if(!this.context)throw v("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,{id:a}=e,n=o.appPages,{data:i,error:s}=await f(()=>h.select({id:n.id,name:n.name,slug:n.slug,lang:n.lang,primaryPage:n.primaryPage,seo:n.seo,currentEditor:n.currentEditor,pageType:n.pageType,lastSaved:n.lastSaved,dynamic:n.dynamic,parent:n.parent,blocks:n.blocks,tracking:n.tracking,globalJsonLds:n.globalJsonLds}).from(n).where((0,Xe.and)((0,Xe.eq)(n.app,t),(0,Xe.eq)(n.id,a),(0,Xe.isNull)(n.deletedAt))).limit(1));if(s)throw v("PAGE_NOT_FOUND",s);if(!i||i.length===0)throw v("PAGE_NOT_FOUND",new Error("Page not found"));let l=i[0],c=(u=l.primaryPage)!=null?u:l.id,d=(g=l.blocks)!=null?g:[];if(c!==l.id){let{data:C,error:w}=await f(()=>h.select({blocks:n.blocks}).from(n).where((0,Xe.and)((0,Xe.eq)(n.app,t),(0,Xe.eq)(n.id,c),(0,Xe.isNull)(n.deletedAt))).limit(1));if(w)throw v("BLOCKS_NOT_FOUND",w);d=(b=(y=C==null?void 0:C[0])==null?void 0:y.blocks)!=null?b:[]}return{...l,blocks:d,id:a,languagePageId:l.id,tracking:(A=l.tracking)!=null?A:{},globalJsonLds:(E=l.globalJsonLds)!=null?E:[]}}}});var Pr,Zn,Zp=T(()=>{"use strict";Pr=require("zod");R();ie();Zn=class extends P{getValidationSchema(){return Pr.z.object({pageType:Pr.z.string(),lang:Pr.z.string(),query:Pr.z.string().optional(),slug:Pr.z.string().optional()})}async execute(e){try{let{pageType:t}=e,a=st(t),n=a?Et(a):void 0;return n?n.getDynamicPages?await n.getDynamicPages({query:e.query,slug:e.slug,lang:e.lang}):[]:[]}catch(t){return this.handleError(t)}}}});var ct,ed,ms,Cr,hs=T(()=>{"use strict";ct=require("drizzle-orm"),ed=require("lodash-es"),ms=require("zod");R();I();ee();Cr=class extends P{getValidationSchema(){return ms.z.object({id:ms.z.string()})}async execute(e){if(!this.context)throw v("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,{id:a}=e,{data:n,error:i}=await f(()=>h.select({id:o.appPages.id,name:o.appPages.name,slug:o.appPages.slug,lang:o.appPages.lang,primaryPage:o.appPages.primaryPage,pageType:o.appPages.pageType,seo:o.appPages.seo,currentEditor:o.appPages.currentEditor,online:o.appPages.online,parent:o.appPages.parent,metadata:o.appPages.metadata,dynamic:o.appPages.dynamic,dynamicSlugCustom:o.appPages.dynamicSlugCustom,changes:o.appPages.changes,tracking:o.appPages.tracking,globalJsonLds:o.appPages.globalJsonLds}).from(o.appPages).where((0,ct.and)((0,ct.eq)(o.appPages.app,t),(0,ct.or)((0,ct.eq)(o.appPages.primaryPage,a),(0,ct.eq)(o.appPages.id,a)),(0,ct.isNull)(o.appPages.deletedAt))));if(i)throw v("LANGUAGE_PAGES_ERROR",i);return n.map(s=>(0,ed.omit)(s,["app"]))}}});var me,fs,ei,td=T(()=>{"use strict";me=require("drizzle-orm"),fs=require("zod");I();ee();R();ei=class extends P{getValidationSchema(){return fs.z.object({lang:fs.z.string().optional()})}async execute(e){var l;if(!this.context)throw v("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,a=(l=e==null?void 0:e.lang)!=null?l:"",n=o.appPages,{data:i,error:s}=await f(()=>h.select({id:n.id,name:n.name,slug:n.slug}).from(n).where((0,me.and)((0,me.eq)(n.app,t),(0,me.isNull)(n.deletedAt),(0,me.isNull)(n.primaryPage),(0,me.eq)(n.dynamic,!1),(0,me.ne)(n.slug,""),(0,me.or)((0,me.eq)(n.lang,""),(0,me.eq)(n.lang,a)))).orderBy((0,me.asc)(n.name)));if(s)throw v("ERROR_GETTING_MENU_PAGES",s);return i!=null?i:[]}}});var ys,Er,bs=T(()=>{"use strict";ys=require("zod");ie();R();Er=class extends P{getValidationSchema(){return ys.z.object({lang:ys.z.string()})}async execute(e){try{let{lang:t}=e;return await ga({lang:t,draft:!0,inBuilder:!0})}catch(t){return this.handleError(t)}}}});var wr,ti,rd=T(()=>{"use strict";wr=require("zod");R();ds();us();hs();bs();ti=class extends P{getValidationSchema(){return wr.z.object({id:wr.z.string(),lang:wr.z.string(),pageType:wr.z.string().optional(),pageProps:wr.z.any().optional().default({})})}async execute(e){let{id:t,lang:a,pageType:n,pageProps:i={}}=e,s=new Ar,l=new Tr,c=new Cr,d=new Er;this.context&&(s.setContext(this.context),l.setContext(this.context),c.setContext(this.context),d.setContext(this.context));let[u,g,y,b]=await Promise.all([s.execute({id:t}),l.execute({lang:a,pageType:n,pageProps:i}),c.execute({id:t}),d.execute({lang:a})]);return{draftPage:u,builderPageData:g,languagePages:y,siteGlobalData:b}}}});var ad,xr,Ts=T(()=>{"use strict";ad=require("zod");ie();R();xr=class extends P{getValidationSchema(){return ad.z.object({})}async execute(){try{return Ko(hr())}catch(e){return this.handleError(e)}}}});var Ze,nd,As,Ir,Ps=T(()=>{"use strict";Ze=require("drizzle-orm"),nd=require("lodash-es"),As=require("zod");I();ee();R();Ir=class extends P{getValidationSchema(){return As.z.object({lang:As.z.string().optional()})}async execute(e){var g;if(!this.context)throw v("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,n=(g=(e!=null?e:{lang:""}).lang)!=null?g:"",{data:i,error:s}=await f(()=>h.select({id:o.appPages.id,name:o.appPages.name,slug:o.appPages.slug,pageType:o.appPages.pageType,currentEditor:o.appPages.currentEditor,parent:o.appPages.parent,online:o.appPages.online,lastSaved:o.appPages.lastSaved,createdAt:o.appPages.createdAt,dynamic:o.appPages.dynamic,dynamicSlugCustom:o.appPages.dynamicSlugCustom,primaryPage:o.appPages.primaryPage,changes:o.appPages.changes,lang:o.appPages.lang,designTokens:o.appPages.designTokens,links:o.appPages.links,partialBlocks:o.appPages.partialBlocks,metadata:o.appPages.metadata}).from(o.appPages).where((0,Ze.and)((0,Ze.eq)(o.appPages.app,t),(0,Ze.eq)(o.appPages.lang,n),(0,Ze.isNull)(o.appPages.deletedAt))));if(s)throw v("ERROR_GETTING_WEBSITE_PAGES",s);if(!i||i.length===0)return[];let l=i.filter(y=>!(0,nd.isEmpty)(y.slug)).map(y=>y.id),{data:c,error:d}=await f(()=>h.select({pageId:o.libraryTemplates.pageId}).from(o.libraryTemplates).where((0,Ze.and)((0,Ze.inArray)(o.libraryTemplates.pageId,l),(0,Ze.isNull)(o.libraryTemplates.deletedAt))));if(d)throw v("ERROR_GETTING_TEMPLATE_INFO",d);let u=new Set((c||[]).map(y=>y.pageId));return i.map(y=>{var b,A;return{...y,pageType:(b=y.pageType)!=null?b:"page",isTemplate:u.has(y.id),changes:y.changes,lang:y.lang,designTokens:y.designTokens,links:y.links,partialBlocks:y.partialBlocks,metadata:(A=y.metadata)!=null?A:null}})}}});var Sr,Cs,ri,id=T(()=>{"use strict";Sr=require("drizzle-orm"),Cs=require("zod");R();I();ri=class extends P{getValidationSchema(){return Cs.z.object({pageId:Cs.z.string().min(1)})}async execute({pageId:e}){let{userId:t,appId:a}=this.context;return t?(await h.update(o.appPages).set({currentEditor:null}).where((0,Sr.and)((0,Sr.eq)(o.appPages.id,e),(0,Sr.eq)(o.appPages.app,a),(0,Sr.eq)(o.appPages.currentEditor,t))),{ok:!0}):{ok:!1}}}});var ai,ni,od=T(()=>{"use strict";ai=require("zod");ie();R();ni=class extends P{getValidationSchema(){return ai.z.object({pageType:ai.z.string(),query:ai.z.string()})}async execute(e){try{let{pageType:t,query:a}=e,n=st(t),i=n?Et(n):void 0;if(!i)return{error:"Page type not found"};if(i.search){let s=await i.search(a);return s instanceof Error?{error:s.message}:s}return[]}catch(t){return this.handleError(t)}}}});var be,ii,oi,sd=T(()=>{"use strict";be=require("drizzle-orm"),ii=require("zod");N();R();I();oi=class extends P{getValidationSchema(){return ii.z.object({pageType:ii.z.string().min(1),query:ii.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context,{pageType:a,query:n=""}=e,i=this.isUUID(n),s=[(0,be.eq)(o.appPages.app,t),(0,be.eq)(o.appPages.pageType,a),(0,be.isNull)(o.appPages.deletedAt)],l;n?i?l=(0,be.and)(...s,(0,be.eq)(o.appPages.id,n)):l=(0,be.and)(...s,(0,be.or)((0,be.ilike)(o.appPages.slug,`%${n}%`),(0,be.ilike)(o.appPages.name,`%${n}%`))):l=(0,be.and)(...s);let{data:c,error:d}=await f(()=>h.select({id:o.appPages.id,slug:o.appPages.slug,name:o.appPages.name,lang:o.appPages.lang,primaryPage:o.appPages.primaryPage}).from(o.appPages).where(l));if(d)throw new m("Failed to search pages","ERROR_SEARCHING_PAGES",500,d);return c||[]}isUUID(e){return e.length===36}}});var Te,Es,si,ld=T(()=>{"use strict";Te=require("drizzle-orm"),Es=require("zod");N();R();I();Ge();si=class extends P{constructor(){super(...arguments);this.appId=""}getValidationSchema(){return Es.z.object({id:Es.z.string().min(1,"Page ID is required")})}async execute(t){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");this.appId=this.context.appId;try{return await this.takeOffline(t.id)}catch(a){if(a instanceof m)throw a;let n=a instanceof Error?a.message:"Failed to take page offline";throw new m(n,"TAKE_OFFLINE_ERROR")}}async takeOffline(t){let a=await this.getPageType(t),{error:n}=await f(()=>h.update(o.appPages).set({online:!1}).where((0,Te.and)((0,Te.eq)(o.appPages.id,t),(0,Te.eq)(o.appPages.app,this.appId))));if(n)throw new m("Error taking page offline","ERROR_TAKING_PAGE_OFFLINE");if(await this.deleteOnlinePage(t),a==="language"){let l=await this.getPrimaryPage(t);return{tags:ur([l]),paths:[]}}if(a==="partial"){let l=await this.getPartialBlockUsage(t);return{tags:ur(l),paths:[]}}let{data:i,error:s}=await f(()=>h.select({id:o.appPages.id,slug:o.appPages.slug,lang:o.appPages.lang,pageType:o.appPages.pageType,name:o.appPages.name,online:o.appPages.online,seo:o.appPages.seo}).from(o.appPages).where((0,Te.eq)(o.appPages.id,t)));if(s||!i||i.length===0)throw new m("Error getting page after taking offline","ERROR_TAKING_PAGE_OFFLINE");return{tags:[...ur([t]),ot(i[0].slug)],paths:[i[0].slug],page:i[0]}}async deleteOnlinePage(t){let{error:a}=await f(()=>h.delete(o.appPagesOnline).where((0,Te.eq)(o.appPagesOnline.id,t)));if(a)throw new m("Error deleting page from online pages table","ERROR_DELETING_PAGE_FROM_ONLINE_PAGES_TABLE");let{error:n}=await f(()=>h.delete(o.appPagesOnline).where((0,Te.eq)(o.appPagesOnline.primaryPage,t)));if(n)throw new m("Error deleting page from online pages table","ERROR_DELETING_PAGE_FROM_ONLINE_PAGES_TABLE")}async getPageType(t){let{data:a,error:n}=await f(()=>h.select({primaryPage:o.appPages.primaryPage,pageType:o.appPages.pageType,slug:o.appPages.slug}).from(o.appPages).where((0,Te.and)((0,Te.eq)(o.appPages.id,t),(0,Te.eq)(o.appPages.app,this.appId))));if(n||!a||a.length===0)throw new m("Page not found","PAGE_NOT_FOUND");let i=a[0];return(l=>!l||l.trim()==="")(i.slug)?"partial":i.primaryPage?"language":"primary"}async getPrimaryPage(t){var s;let{data:a,error:n}=await f(()=>h.select({id:o.appPages.id,primaryPage:o.appPages.primaryPage}).from(o.appPages).where((0,Te.and)((0,Te.eq)(o.appPages.id,t),(0,Te.eq)(o.appPages.app,this.appId))));if(n||!a||a.length===0)throw new m("Error getting primary page","ERROR_GETTING_PRIMARY_PAGE");let i=a[0];return(s=i.primaryPage)!=null?s:i.id}async getPartialBlockUsage(t){let{data:a,error:n}=await f(()=>h.select({id:o.appPages.id,partialBlocks:o.appPages.partialBlocks}).from(o.appPages).where((0,Te.eq)(o.appPages.app,this.appId)));return n||!a?[]:a.filter(i=>(i.partialBlocks||"").split("|").includes(t)).map(i=>i.id)}}});var Ot,Rr,li,cd=T(()=>{"use strict";Ot=require("drizzle-orm"),Rr=require("zod");I();Ln();N();R();li=class extends P{getValidationSchema(){return Rr.z.object({id:Rr.z.string().nonempty(),metadata:Rr.z.record(Rr.z.string(),Rr.z.any())})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context,{data:a,error:n}=await f(()=>h.query.appPages.findFirst({where:(0,Ot.and)((0,Ot.eq)(o.appPages.id,e.id),(0,Ot.eq)(o.appPages.app,t)),columns:{id:!0}}));if(n)throw new m(`Failed to fetch page: ${n.message}`,"FETCH_FAILED");if(!a)throw new m("Page not found","PAGE_NOT_FOUND");let{error:i}=await f(()=>h.update(o.appPages).set({metadata:e.metadata}).where((0,Ot.and)((0,Ot.eq)(o.appPages.id,e.id),(0,Ot.eq)(o.appPages.app,t))));if(i)throw console.error(i),new m("Failed to update page metadata","UPDATE_FAILED");return{success:!0,tags:Nn(e.id)}}}});var ba,ws,ci,pd=T(()=>{"use strict";ba=require("drizzle-orm"),ws=require("zod");N();R();I();ci=class extends P{getValidationSchema(){return ws.z.object({revisionId:ws.z.string().nonempty("Revision ID is required")})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context,{error:a}=await f(()=>h.delete(o.appPagesRevisions).where((0,ba.and)((0,ba.eq)(o.appPagesRevisions.uid,e.revisionId),(0,ba.eq)(o.appPagesRevisions.app,t))));if(a)throw new m("Failed to delete page revision","DELETE_REVISION_ERROR");return{success:!0}}}});var Ft,dd,xs,pi,gd=T(()=>{"use strict";Ft=require("drizzle-orm"),dd=require("lodash-es"),xs=require("zod");N();R();I();pi=class extends P{getValidationSchema(){return xs.z.object({pageId:xs.z.string().min(1,"Page ID is required")})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");try{return await this.getRevisions(e.pageId)}catch(t){if(t instanceof m)throw t;let a=t instanceof Error?t.message:"Failed to get page revisions";throw new m(a,"GET_PAGE_REVISIONS_ERROR")}}async getRevisions(e){let{data:t,error:a}=await f(()=>h.select({currentEditor:o.appPagesOnline.currentEditor,createdAt:o.appPagesOnline.createdAt}).from(o.appPagesOnline).where((0,Ft.and)((0,Ft.eq)(o.appPagesOnline.app,this.context.appId),(0,Ft.eq)(o.appPagesOnline.id,e)))),{data:n,error:i}=await f(()=>h.select({uid:o.appPagesRevisions.uid,currentEditor:o.appPagesRevisions.currentEditor,createdAt:o.appPagesRevisions.createdAt,type:o.appPagesRevisions.type}).from(o.appPagesRevisions).where((0,Ft.and)((0,Ft.eq)(o.appPagesRevisions.app,this.context.appId),(0,Ft.eq)(o.appPagesRevisions.id,e))));if(a){let d=a instanceof Error?`Error getting current page for revisions: ${a.message}`:"Error getting current page for revisions";throw new m(d,"ERROR_GETTING_CURRENT_PAGE_FOR_REVISIONS")}if(i){let d=i instanceof Error?`Error getting page revisions: ${i.message}`:"Error getting page revisions";throw new m(d,"ERROR_GETTING_PAGE_REVISIONS")}let s=t==null?void 0:t[0],c=[...s?[{...s,type:"published",uid:"current"}]:[],...n!=null?n:[]];return(0,dd.orderBy)(c,["createdAt"],["desc"])}}});var Ae,xt,di,gi,ud=T(()=>{"use strict";Ae=require("drizzle-orm"),xt=require("lodash-es"),di=require("zod");R();I();ee();gi=class extends P{getValidationSchema(){return di.z.object({id:di.z.string().nonempty(),type:di.z.enum(["draft","live","revision"])})}async execute(e){var i;if(!this.context)throw v("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let t,a;switch(e.type){case"draft":({data:t,error:a}=await f(()=>{var s;return h.query.appPages.findFirst({where:(0,Ae.and)((0,Ae.eq)(o.appPages.id,e.id),(0,Ae.eq)(o.appPages.lang,(s=e.lang)!=null?s:""))})}));break;case"live":({data:t,error:a}=await f(()=>{var s;return h.query.appPagesOnline.findFirst({where:(0,Ae.and)((0,Ae.eq)(o.appPagesOnline.id,e.id),(0,Ae.eq)(o.appPagesOnline.lang,(s=e.lang)!=null?s:""))})}));break;case"revision":({data:t,error:a}=await f(()=>{var s;return h.query.appPagesRevisions.findFirst({where:(0,Ae.and)((0,Ae.eq)(o.appPagesRevisions.uid,e.id),(0,Ae.eq)(o.appPagesRevisions.lang,(s=e.lang)!=null?s:""))})}));break}if(a||!t)throw v("NOT_FOUND",a||new Error("Page not found"));let n=(i=t==null?void 0:t.blocks)!=null?i:[];return n=await this.getMergedBlocks(n,e.type==="draft",this.context.appId),{...t,blocks:n}}async getMergedBlocks(e,t,a){var u;let n=t?o.appPages:o.appPagesOnline,i=e.filter(({_type:g})=>g==="GlobalBlock"||g==="PartialBlock");if(i.length===0)return e;let s=i.map(g=>(0,xt.get)(g,"partialBlockId",(0,xt.get)(g,"globalBlock",""))).filter(g=>g!=="");if(s.length===0)return e;let{data:l,error:c}=await f(()=>h.select({id:n.id,blocks:n.blocks}).from(n).where((0,Ae.and)((0,Ae.eq)(n.app,a),(0,Ae.inArray)(n.id,s))));if(c)throw v("PARTIAL_BLOCKS_FETCH_ERROR",c);let d=new Map;l&&l.forEach(g=>{var y;d.set(g.id,(y=g.blocks)!=null?y:[])});for(let g=0;g<i.length;g++){let y=i[g];if(!y)continue;let b=(0,xt.get)(y,"partialBlockId",(0,xt.get)(y,"globalBlock",""));if(b==="")continue;let A=(u=d.get(b))!=null?u:[];A.length>0&&(A=A.map(C=>((0,xt.isEmpty)(C._parent)&&(C._parent=y._parent),(0,xt.has)(y,"_show")&&(C._show=y._show),C)));let E=e.indexOf(y);E!==-1&&e.splice(E,1,...A)}return e}}});var Me,md,Ta,ui,hd=T(()=>{"use strict";Me=require("drizzle-orm"),md=require("lodash-es"),Ta=require("zod");N();R();I();ui=class extends P{getValidationSchema(){return Ta.z.object({revisionId:Ta.z.string().nonempty(),discardCurrent:Ta.z.boolean(),pageId:Ta.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context,a,n;if(e.revisionId==="current"){if(!e.pageId)throw new m("pageId is required when restoring current revision","PAGE_ID_REQUIRED");let{data:i,error:s}=await f(()=>h.query.appPagesOnline.findFirst({where:(0,Me.and)((0,Me.eq)(o.appPagesOnline.id,e.pageId),(0,Me.eq)(o.appPagesOnline.app,t)),columns:{id:!0,blocks:!0}}));if(s)throw new m("Error fetching live page","FETCH_ERROR");if(!i)throw new m("Live page not found","PAGE_NOT_FOUND");a=i.id,n=i.blocks}else{let{data:i,error:s}=await f(()=>h.query.appPagesRevisions.findFirst({where:(0,Me.and)((0,Me.eq)(o.appPagesRevisions.uid,e.revisionId),(0,Me.eq)(o.appPagesRevisions.app,t)),columns:{id:!0,blocks:!0,type:!0}}));if(s)throw new m("Error fetching revision","FETCH_ERROR");if(!i)throw new m("Revision not found","REVISION_NOT_FOUND");a=i.id,n=i.blocks}if(!e.discardCurrent){let{data:i,error:s}=await f(()=>h.query.appPages.findFirst({where:(0,Me.and)((0,Me.eq)(o.appPages.id,a),(0,Me.eq)(o.appPages.app,t))}));if(s)throw new m("Error fetching current page","FETCH_ERROR");if(!i)throw new m("Current page not found","PAGE_NOT_FOUND");let l=i.blocks,c={id:a,blocks:l,type:"draft",createdAt:"now()",...(0,md.pick)(i,["name","slug","pageType","lang","app","currentEditor","createdBy"])};await h.insert(o.appPagesRevisions).values(c)}return await h.update(o.appPages).set({blocks:n}).where((0,Me.eq)(o.appPages.id,a)),{success:!0,pageId:a}}}});var Aa,mi,fd=T(()=>{"use strict";Aa=require("zod");I();N();R();mi=class extends P{getValidationSchema(){return Aa.z.object({name:Aa.z.string().min(1),permissions:Aa.z.array(Aa.z.string())})}async execute(e){var i,s,l,c;let{data:t,error:a}=await f(()=>h.insert(o.roles).values({name:e.name,permissions:e.permissions,isSystem:!1}).returning({id:o.roles.id,name:o.roles.name,permissions:o.roles.permissions,isSystem:o.roles.isSystem,createdAt:o.roles.createdAt}));if(a)throw new m("Error creating role","ERROR_CREATING_ROLE",500,a);let n=t==null?void 0:t[0];if(!n)throw new m("Role creation returned no data","ERROR_CREATING_ROLE",500);return{id:n.id,name:(i=n.name)!=null?i:"",permissions:(s=n.permissions)!=null?s:[],isSystem:(l=n.isSystem)!=null?l:!1,createdAt:(c=n.createdAt)!=null?c:""}}}});var Is,Ss,hi,yd=T(()=>{"use strict";Is=require("drizzle-orm"),Ss=require("zod");I();N();R();hi=class extends P{getValidationSchema(){return Ss.z.object({name:Ss.z.string().min(1)})}async execute(e){let{data:t,error:a}=await f(()=>h.select({isSystem:o.roles.isSystem}).from(o.roles).where((0,Is.eq)(o.roles.name,e.name)));if(a)throw new m("Error checking role","ERROR_CHECKING_ROLE",500,a);let n=t==null?void 0:t[0];if(!n)throw new m(`Role '${e.name}' not found`,"ROLE_NOT_FOUND",404);if(n.isSystem)throw new m(`Role '${e.name}' is a system role and cannot be deleted`,"ROLE_IS_SYSTEM",403);let{error:i}=await f(()=>h.delete(o.roles).where((0,Is.eq)(o.roles.name,e.name)));if(i)throw new m("Error deleting role","ERROR_DELETING_ROLE",500,i);return{deleted:!0}}}});var bd,Rs,fi,Td=T(()=>{"use strict";bd=require("drizzle-orm"),Rs=require("zod");I();N();R();fi=class extends P{getValidationSchema(){return Rs.z.object({name:Rs.z.string().min(1)})}async execute(e){var i,s,l,c;let{data:t,error:a}=await f(()=>h.select({id:o.roles.id,name:o.roles.name,permissions:o.roles.permissions,isSystem:o.roles.isSystem,createdAt:o.roles.createdAt}).from(o.roles).where((0,bd.eq)(o.roles.name,e.name)));if(a)throw new m("Error fetching role","ERROR_FETCHING_ROLE",500,a);let n=t==null?void 0:t[0];return n?{id:n.id,name:(i=n.name)!=null?i:"",permissions:(s=n.permissions)!=null?s:[],isSystem:(l=n.isSystem)!=null?l:!1,createdAt:(c=n.createdAt)!=null?c:""}:null}}});var Ad,yi,Pd=T(()=>{"use strict";Ad=require("zod");I();N();R();yi=class extends P{getValidationSchema(){return Ad.z.object({})}async execute(){let{data:e,error:t}=await f(()=>h.select({id:o.roles.id,name:o.roles.name,permissions:o.roles.permissions,isSystem:o.roles.isSystem,createdAt:o.roles.createdAt}).from(o.roles));if(t)throw new m("Error fetching roles","ERROR_FETCHING_ROLES",500,t);return(e!=null?e:[]).map(a=>{var n,i,s,l;return{id:a.id,name:(n=a.name)!=null?n:"",permissions:(i=a.permissions)!=null?i:[],isSystem:(s=a.isSystem)!=null?s:!1,createdAt:(l=a.createdAt)!=null?l:""}})}}});var Cd,Pa,bi,Ed=T(()=>{"use strict";Cd=require("drizzle-orm"),Pa=require("zod");I();N();R();bi=class extends P{getValidationSchema(){return Pa.z.object({name:Pa.z.string().min(1),permissions:Pa.z.array(Pa.z.string())})}async execute(e){var i,s,l,c;let{data:t,error:a}=await f(()=>h.update(o.roles).set({permissions:e.permissions}).where((0,Cd.eq)(o.roles.name,e.name)).returning({id:o.roles.id,name:o.roles.name,permissions:o.roles.permissions,isSystem:o.roles.isSystem,createdAt:o.roles.createdAt}));if(a)throw new m("Error updating role","ERROR_UPDATING_ROLE",500,a);let n=t==null?void 0:t[0];if(!n)throw new m(`Role '${e.name}' not found`,"ROLE_NOT_FOUND",404);return{id:n.id,name:(i=n.name)!=null?i:"",permissions:(s=n.permissions)!=null?s:[],isSystem:(l=n.isSystem)!=null?l:!1,createdAt:(c=n.createdAt)!=null?c:""}}}});var pt,vs,Ti,wd=T(()=>{"use strict";pt=require("drizzle-orm"),vs=require("zod");I();N();R();Ti=class extends P{getValidationSchema(){return vs.z.object({pageType:vs.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t}=this.context,{pageType:a}=e,{data:n,error:i}=await f(()=>h.query.libraries.findFirst({where:(0,pt.eq)(o.libraries.app,t),columns:{id:!0}}));if(i)throw new m("Failed to fetch site library","GET_SITE_LIBRARY_FAILED",500,i);let{data:s,error:l}=await f(()=>h.select({id:o.libraries.id}).from(o.libraries).where((0,pt.eq)(o.libraries.type,"shared")));if(l)throw new m("Failed to fetch shared libraries","GET_SHARED_LIBRARIES_FAILED",500,l);let c=[...n?[n.id]:[],...(s||[]).map(g=>g.id)];if(c.length===0)return[];let{data:d,error:u}=await f(()=>h.select({id:o.libraryTemplates.id,library:o.libraryTemplates.library,pageId:o.libraryTemplates.pageId,pageType:o.libraryTemplates.pageType,name:o.libraryTemplates.name,description:o.libraryTemplates.description,preview:o.libraryTemplates.preview,user:o.libraryTemplates.user,createdAt:o.libraryTemplates.createdAt}).from(o.libraryTemplates).where((0,pt.and)((0,pt.eq)(o.libraryTemplates.pageType,a),(0,pt.inArray)(o.libraryTemplates.library,c),(0,pt.isNull)(o.libraryTemplates.deletedAt))));if(u)throw new m("Failed to fetch templates","GET_TEMPLATES_FAILED",500,u);return d||[]}}});var xd,Ut,Ai,Id=T(()=>{"use strict";xd=require("drizzle-orm"),Ut=require("zod");N();R();I();Ai=class extends P{getValidationSchema(){return Ut.z.object({id:Ut.z.string().min(1),description:Ut.z.string().optional(),name:Ut.z.string().min(1),pageType:Ut.z.string().min(1),previewImage:Ut.z.string().optional(),previewImageUrl:Ut.z.string().optional()})}async execute(e){var E;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context,{id:n,description:i,name:s,pageType:l,previewImage:c,previewImageUrl:d}=e,{data:u,error:g}=await f(()=>h.query.libraries.findFirst({where:(0,xd.eq)(o.libraries.app,t),columns:{id:!0}}));if(g)throw new m("Failed to fetch site library","GET_SITE_LIBRARY_FAILED",500,g);if(!u)throw new m("Library not found for this app","GET_SITE_LIBRARY_FAILED");let y=d;if(c){let{getChaiAction:C}=await Promise.resolve().then(()=>(Qe(),Wt)),w=C("UPLOAD_TO_STORAGE");w==null||w.setContext(this.context);let k=`template-${Date.now()}.webp`,D=`${t}/templates`,B=await(w==null?void 0:w.execute({file:c,fileName:k,contentType:"image/webp",folder:D}));if(B!=null&&B.error)throw new m("Failed to upload preview image","UPLOAD_PREVIEW_FAILED",500,B.error);y=((E=B==null?void 0:B.data)==null?void 0:E.url)||d}let{data:b,error:A}=await f(()=>h.insert(o.libraryTemplates).values({library:u.id,user:a!=null?a:null,pageId:n,description:i!=null?i:null,name:s+" Template",pageType:l,preview:y!=null?y:null,createdBy:a!=null?a:null}).returning());if(A||!b||b.length===0)throw new m("Failed to mark page as template","UPDATE_FAILED",500,A);return b[0]}}});var Sd,_s,Pi,Rd=T(()=>{"use strict";Sd=require("drizzle-orm"),_s=require("zod");N();R();I();Pi=class extends P{getValidationSchema(){return _s.z.object({id:_s.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{id:t}=e,{error:a}=await f(()=>{var n,i;return h.update(o.libraryTemplates).set({deletedAt:new Date().toISOString(),deletedBy:(i=(n=this.context)==null?void 0:n.userId)!=null?i:null}).where((0,Sd.eq)(o.libraryTemplates.pageId,t))});if(a)throw new m("Failed to unmark page as template","DELETE_FAILED",500,a);return{success:!0}}}});var vr,ks,Ci,vd=T(()=>{"use strict";vr=require("drizzle-orm"),ks=require("zod");I();ee();ie();N();R();Ci=class extends P{getValidationSchema(){return ks.z.object({id:ks.z.string().min(1,"Trash Record ID is required")})}async execute(e){var t;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");try{let{data:a,error:n}=await f(()=>h.select().from(o.appTrash).where((0,vr.and)((0,vr.eq)(o.appTrash.id,e.id),(0,vr.eq)(o.appTrash.app,this.context.appId))).limit(1));if(n||!a||a.length===0)throw v("TRASH_RECORD_NOT_FOUND","Trash record not found");let i=a[0],s={id:i.id,entityType:i.entityType,entityId:i.entityId||"",name:((t=i.metadata)==null?void 0:t.name)||"",metadata:i.metadata||{},deletedAt:i.deletedAt,deletedBy:i.deletedBy||"",app:i.app||""},l=Ct(s.entityType);if(!l)throw v("ENTITY_HANDLER_NOT_FOUND",`Handler for entity type '${s.entityType}' not found`);return await l.deletePermanently(s,this.context),await f(()=>h.delete(o.appTrash).where((0,vr.eq)(o.appTrash.id,s.id))),!0}catch(a){return this.handleError(a),!1}}}});function If(){let r=o.appTrash.metadata;return Ha()==="sqlite"?xe.sql`json_extract(${r}, '$.name')`:xe.sql`${r}->>'name'`}var xe,It,xf,Ei,_d=T(()=>{"use strict";xe=require("drizzle-orm"),It=require("zod");za();I();ee();N();R();xf=It.z.string().uuid();Ei=class extends P{getValidationSchema(){return It.z.object({page:It.z.number().optional().default(1),limit:It.z.number().optional().default(20),search:It.z.string().optional(),entityType:It.z.string().optional(),sortBy:It.z.string().optional(),sortOrder:It.z.enum(["asc","desc"]).optional()})}async execute(e){var b;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{page:t=1,limit:a=20,search:n,entityType:i,sortBy:s,sortOrder:l="desc"}=e,c=(t-1)*a,d=xf.safeParse(this.context.appId);if(!d.success)return{items:[],total:0,page:t,pageSize:a};let u=[(0,xe.eq)(o.appTrash.app,d.data)];i&&u.push((0,xe.eq)(o.appTrash.entityType,i));let g=If();if(n&&n.trim()!==""){let A=n.trim();u.push(xe.sql`lower(${g}) like '%' || lower(${A}) || '%'`)}let y=(0,xe.and)(...u);try{let{data:A,error:E}=await f(()=>h.select({count:xe.sql`cast(count(${o.appTrash.id}) as integer)`}).from(o.appTrash).where(y));if(E)throw v("FETCH_TRASH_FAILED",E);let C=((b=A==null?void 0:A[0])==null?void 0:b.count)||0,{data:w,error:k}=await f(()=>h.select().from(o.appTrash).where(y).orderBy((()=>{let B=s==="name"?g:o.appTrash.deletedAt;return l==="asc"?(0,xe.asc)(B):(0,xe.desc)(B)})()).limit(a).offset(c));if(k)throw v("FETCH_TRASH_FAILED",k);return{items:(w||[]).map(B=>{var _,H,W;return{id:B.id,entityType:B.entityType,entityId:B.entityId||"",name:((_=B.metadata)==null?void 0:_.name)||"",metadata:B.metadata||{},deletedAt:B.deletedAt||((H=B.metadata)==null?void 0:H.deletedAt),deletedBy:B.deletedBy||((W=B.metadata)==null?void 0:W.deletedBy)||"",app:B.app||""}}),total:C,page:t,pageSize:a}}catch(A){this.handleError(A)}}}});var _r,Ds,wi,kd=T(()=>{"use strict";_r=require("drizzle-orm"),Ds=require("zod");I();ee();Ge();ie();N();R();wi=class extends P{getValidationSchema(){return Ds.z.object({id:Ds.z.string().min(1,"Trash Record ID is required")})}async execute(e){var t;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");try{let{data:a,error:n}=await f(()=>h.select().from(o.appTrash).where((0,_r.and)((0,_r.eq)(o.appTrash.id,e.id),(0,_r.eq)(o.appTrash.app,this.context.appId))).limit(1));if(n||!a||a.length===0)throw v("TRASH_RECORD_NOT_FOUND","Trash record not found");let i=a[0],s={id:i.id,entityType:i.entityType,entityId:i.entityId||"",name:((t=i.metadata)==null?void 0:t.name)||"",metadata:i.metadata||{},deletedAt:i.deletedAt,deletedBy:i.deletedBy||"",app:i.app||""},l=Ct(s.entityType);if(!l)throw v("ENTITY_HANDLER_NOT_FOUND",`Handler for entity type '${s.entityType}' not found`);let c=!1,d;if(l.hasRestoreConflict?await l.hasRestoreConflict(s,this.context):!1){if(!l.resolveRestoreConflict)throw v("RESTORE_CONFLICT","Restore conflict detected but no resolver available");let y=await l.resolveRestoreConflict(s,this.context);c=y.resolved,d=y.newSlug}await l.restore(s,this.context);let{error:g}=await f(()=>h.delete(o.appTrash).where((0,_r.eq)(o.appTrash.id,s.id)));if(g)throw v("RESTORE_FAILED",g);return{success:!0,resolvedConflict:c,newSlug:d,...s.entityType==="page"?{tags:Pt(s.entityId,{slugs:d?{new:d}:void 0})}:{}}}catch(a){this.handleError(a)}}}});var Ca,xi,Dd=T(()=>{"use strict";Ca=require("zod");I();ee();ie();N();R();xi=class extends P{getValidationSchema(){return Ca.z.object({entityType:Ca.z.string().min(1,"Entity Type is required"),ids:Ca.z.array(Ca.z.string().min(1))})}async execute(e){var n;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let t=Ct(e.entityType);if(!t)throw new m(`Trashable entity '${e.entityType}' not found`,"ENTITY_NOT_FOUND");let a=[];for(let i of e.ids)try{let s=await t.moveToTrash(i,this.context),{data:l,error:c}=await f(()=>h.insert(o.appTrash).values(s).returning());if(c||!l||l.length===0)throw v("TRASH_FAILED",c||"Failed to create trash record");let d=l[0];a.push({id:d.id,entityType:d.entityType,entityId:d.entityId||"",name:((n=d.metadata)==null?void 0:n.name)||"",metadata:d.metadata||{},deletedAt:d.deletedAt,deletedBy:d.deletedBy||"",app:d.app||"",tags:s.tags||[]})}catch(s){e.ids.length===1&&this.handleError(s),console.error(`Failed to trash entity ${i}:`,s)}return a}}});var Bs,Bd=T(()=>{"use strict";Bs={owner:{permissions:["*"]},admin:{permissions:["*"]},superadmin:{permissions:["*"]},editor:{permissions:["app:read","pages:*","partials:*","revisions:*","assets:*","library:*","trash:*","ai:*"]},designer:{permissions:["app:read","pages:*","partials:*","revisions:read","assets:*","library:*","theme:edit","app:publish_theme","ai:*"]},viewer:{permissions:["app:read","pages:read","partials:read","revisions:read","assets:read","library:read"]},user:{permissions:["app:read","pages:read"]}}});async function Nd(){let r=Od();return r?"source"in r&&r.source==="custom"?Sf():r:Bs}async function Sf(){let{data:r,error:e}=await f(()=>h.select({name:o.roles.name,permissions:o.roles.permissions}).from(o.roles));return e||!r?{}:r.length===0?Bs:r.reduce((t,a)=>{var n;return a.name&&(t[a.name]={permissions:(n=a.permissions)!=null?n:[]}),t},{})}var Ld=T(()=>{"use strict";I();je();Bd()});function Si(r){let e=r.indexOf(":");return e===-1?r:r.slice(0,e)}function Ri(r,e){return e?!r||r.length===0?!1:r.includes(Ii)||r.includes(e)?!0:r.includes(`${Si(e)}:*`):!0}function Ea(r,e=kr){if(!r)return[];let t=new Set;for(let[a,n]of Object.entries(r))if(n===!0)if(a===Ii)e.forEach(i=>t.add(i));else if(a.endsWith(":*")){let i=a.slice(0,-2);e.filter(s=>Si(s)===i).forEach(s=>t.add(s))}else t.add(a);for(let[a,n]of Object.entries(r))if(n===!1)if(a===Ii)t.clear();else if(a.endsWith(":*")){let i=a.slice(0,-2);[...t].filter(s=>Si(s)===i).forEach(s=>t.delete(s))}else t.delete(a);return[...t]}function vi(r,e,t=kr){let a=s=>{let l=new Set;for(let c of s)if(c===Ii)t.forEach(d=>l.add(d));else if(c.endsWith(":*")){let d=c.slice(0,-2);t.filter(u=>Si(u)===d).forEach(u=>l.add(u))}else l.add(c);return l},n=a(r),i=a(e);return[...n].filter(s=>i.has(s))}var kr,Ii,wa=T(()=>{"use strict";ja();ja();kr=Object.keys(x),Ii="*"});function Rf(r){return r?Array.isArray(r)?r.reduce((e,t)=>(e[t]=!0,e),{}):r:null}function vf(r,e){let t=new Set;for(let a of r)if(a==="*")e.forEach(n=>t.add(n));else if(a.endsWith(":*")){let n=a.slice(0,-2);e.filter(i=>i.startsWith(`${n}:`)).forEach(i=>t.add(i))}else t.add(a);return[...t]}function Fd({role:r,roleMap:e,userOverride:t,catalog:a=kr}){var l,c;let n=(c=(l=e==null?void 0:e[r])==null?void 0:l.permissions)!=null?c:[],i=new Set(vf(n,a)),s=Rf(t);if(s)for(let[d,u]of Object.entries(s))u===!0?Ea({[d]:!0},a).forEach(g=>i.add(g)):u===!1&&Ea({[d]:!0},a).forEach(g=>i.delete(g));return[...i]}var Ud=T(()=>{"use strict";wa()});async function Gd(r){let{appId:e,userId:t}=r;if(!t)throw console.error(`[getUserAccess] Failed: No userId in context for appId: ${e}`),new m("User ID not found in context","UNAUTHORIZED",401);console.log(`[getUserAccess] Querying active appUsers for appId: "${e}", userId: "${t}"`);let{data:a,error:n}=await f(()=>h.select().from(o.appUsers).where((0,Dr.and)((0,Dr.eq)(o.appUsers.app,e),(0,Dr.eq)(o.appUsers.user,t),(0,Dr.eq)(o.appUsers.status,"active"))));if(n)throw console.error("[getUserAccess] Database query failed:",n),new m("Error checking user access","ERROR_CHECKING_USER_ACCESS",500,n);if(!a||a.length===0)throw console.warn(`[getUserAccess] Unauthorized: No active record in app_users for appId: "${e}", userId: "${t}"`),new m("User does not have access to this app","UNAUTHORIZED",401);return console.log("[getUserAccess] Found active user access record:",JSON.stringify(a[0])),a[0]}var Dr,Md=T(()=>{"use strict";Dr=require("drizzle-orm");N();I()});var $d,_i,Hd=T(()=>{"use strict";$d=require("zod");Ld();wa();Ud();N();R();Md();_i=class extends P{getValidationSchema(){return $d.z.any()}async execute(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET",500);if(this.context.userAccess)return{access:!0,role:this.context.userAccess.role,permissions:this.context.userAccess.permissions};let e=await Gd(this.context),t=e.role||"user",a=await Nd(),n=Fd({role:t,roleMap:a,userOverride:e.permissions});return this.context.delegatedScopes&&(n=vi(n,this.context.delegatedScopes)),{access:!0,role:t,permissions:n}}}});var xa,Di,qd,ki,zd=T(()=>{"use strict";xa=require("drizzle-orm"),Di=require("lodash-es"),qd=require("zod");I();ee();R();ki=class extends P{getValidationSchema(){return qd.z.undefined()}async execute(){if(!this.context)throw v("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:e}=this.context,{data:t,error:a}=await f(()=>h.select({id:o.appPages.id,designTokens:o.appPages.designTokens,name:o.appPages.name,slug:o.appPages.slug,links:o.appPages.links,partialBlocks:o.appPages.partialBlocks}).from(o.appPages).where((0,xa.and)((0,xa.eq)(o.appPages.lang,""),(0,xa.eq)(o.appPages.app,e))));if(a)throw v("FETCH_SITE_DATA_FAILED",a);let n={};return(0,Di.each)(t,i=>{var s,l;n[i.id]={name:i.name,isPartial:(0,Di.isEmpty)(i.slug),partialBlocks:i.partialBlocks?(s=i.partialBlocks)==null?void 0:s.split("|").filter(Boolean):[],links:i.links?i.links.split("|").filter(Boolean):[],designTokens:(l=i.designTokens)!=null?l:{}}}),n}}});var Vd,Kd,jd,Ns,Br,Ls=T(()=>{"use strict";Vd=require("crypto"),Kd=require("drizzle-orm"),jd=require("lodash-es"),Ns=require("zod");R();I();ee();Br=class extends P{getValidationSchema(){return Ns.z.object({draft:Ns.z.boolean()})}async execute(e){var d;if(!this.context)throw v("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,{draft:a}=e,n=a?o.apps:o.appsOnline,{data:i,error:s}=await f(()=>h.select({theme:n.theme,fallbackLang:n.fallbackLang,languages:n.languages,settings:n.settings,designTokens:n.designTokens,changes:n.changes,consentConfig:n.consentConfig,configData:n.configData}).from(n).where((0,Kd.eq)(n.id,t)).limit(1));if(s)throw v("ERROR_PROJECT_CONFIG",s);if(!i||i.length===0)throw v("PROJECT_NOT_FOUND",new Error("Project not found"));let l=(0,jd.first)(i),c=(d=l==null?void 0:l.changes)!=null?d:[];return{...this.getDefaultSettings(),...l,fallbackLang:(l==null?void 0:l.fallbackLang)||this.getDefaultSettings().fallbackLang,languages:(l==null?void 0:l.languages)||this.getDefaultSettings().languages,theme:(l==null?void 0:l.theme)||this.getDefaultSettings().theme,appKey:this.generateDeterministicUuid(t),appChanges:c}}getDefaultSettings(){return{fallbackLang:"en",languages:[],theme:{colors:{card:["#FFFFFF","#09090B"],ring:["#2563EB","#3B82F6"],input:["#E4E4E7","#27272A"],muted:["#F4F4F5","#27272A"],accent:["#F4F4F5","#27272A"],border:["#E4E4E7","#27272A"],popover:["#FFFFFF","#09090B"],primary:["#2563EB","#3B82F6"],secondary:["#F4F4F5","#27272A"],background:["#FFFFFF","#09090B"],foreground:["#09090B","#FFFFFF"],destructive:["#EF4444","#7F1D1D"],"card-foreground":["#09090B","#FFFFFF"],"muted-foreground":["#71717A","#A1A1AA"],"accent-foreground":["#09090B","#FFFFFF"],"popover-foreground":["#09090B","#FFFFFF"],"primary-foreground":["#FFFFFF","#FFFFFF"],"secondary-foreground":["#09090B","#FFFFFF"],"destructive-foreground":["#FFFFFF","#FFFFFF"]},fontFamily:{body:"Roboto",heading:"Poppins"},borderRadius:"30px"},settings:{},designTokens:{},consentConfig:{},configData:{}}}generateDeterministicUuid(e){let t=(0,Vd.createHash)("sha256").update(e).digest("hex");return[t.substring(0,8),t.substring(8,12),"4"+t.substring(13,16),(parseInt(t.substring(16,17),16)&3|8).toString(16)+t.substring(17,20),t.substring(20,32)].join("-")}}});var Wd,Bi,Yd=T(()=>{"use strict";Wd=require("zod");R();ts();rs();Ts();Ps();Ls();Bi=class extends P{getValidationSchema(){return Wd.z.object({}).optional().default({})}async execute(){let e=new Br,t=new Ir,a=new xr,n=new yr,i=new fr;this.context&&(e.setContext(this.context),t.setContext(this.context),a.setContext(this.context),n.setContext(this.context),i.setContext(this.context));let[s,l,c,d,u]=await Promise.all([e.execute({draft:!0}),t.execute({lang:""}),a.execute(),n.execute(),i.execute()]);return{websiteSettings:s,websitePages:l,pageTypes:c,libraries:d,collections:u}}}});var j,De,Ia,Ni,Qd=T(()=>{"use strict";j=require("drizzle-orm"),De=require("lodash-es"),Ia=require("zod");I();Ge();N();R();Ni=class extends P{constructor(){super(...arguments);this.appId="";this.revisionsEnabled=!1}getValidationSchema(){return Ia.z.object({ids:Ia.z.array(Ia.z.string()).optional(),revisions:Ia.z.boolean().optional()})}async execute(t){var a,n;this.validateContext(),this.appId=this.context.appId,this.revisionsEnabled=(a=t.revisions)!=null?a:!1;try{let i=(n=t.ids)!=null?n:[];if(i.length===0)throw new m("IDS_REQUIRED","At least one page ID or THEME must be provided");let s=await Promise.all(i.map(d=>d==="THEME"?this.publishTheme():d==="DESIGN_TOKENS"?this.publishDesignToken():this.publishPage(d)));await this.clearChanges(i);let l=(0,De.uniq)((0,De.flattenDeep)(s.map(d=>d.tags))),c=(0,De.uniq)((0,De.flattenDeep)(s.map(d=>d.paths)));return{tags:l,paths:c}}catch(i){return this.handleExecutionError(i)}}validateContext(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET")}async publishTheme(){let t=await this.cloneApp(),{error:a}=await f(()=>h.delete(o.appsOnline).where((0,j.eq)(o.appsOnline.id,this.appId)));if(a)throw new m("Error deleting online theme","ERROR_PUBLISHING_THEME",500,a);let{error:n}=await f(()=>h.insert(o.appsOnline).values({...t,changes:null}));if(n)throw new m("Error inserting online theme","ERROR_PUBLISHING_THEME",500,n);return await this.removeFromChangesArray("THEME","ERROR_PUBLISHING_THEME"),{tags:[`website-settings-${this.appId}`],paths:[]}}async publishDesignToken(){let t=await this.cloneApp(),{error:a}=await f(()=>h.delete(o.appsOnline).where((0,j.eq)(o.appsOnline.id,this.appId)));if(a)throw new m("Error deleting online app","ERROR_PUBLISHING_DESIGN_TOKEN",500,a);let{error:n}=await f(()=>h.insert(o.appsOnline).values({...t,changes:null}));if(n)throw new m("Error inserting online app","ERROR_PUBLISHING_DESIGN_TOKEN",500,n);return await this.removeFromChangesArray("DESIGN_TOKENS","ERROR_PUBLISHING_DESIGN_TOKEN"),{tags:[`website-settings-${this.appId}`],paths:[]}}async removeFromChangesArray(t,a){var d,u;let{data:n,error:i}=await f(()=>h.select({changes:o.apps.changes}).from(o.apps).where((0,j.eq)(o.apps.id,this.appId)));if(i)throw new m("Error fetching changes",a,500,i);let l=((u=(d=n==null?void 0:n[0])==null?void 0:d.changes)!=null?u:[]).filter(g=>g!==t),{error:c}=await f(()=>h.update(o.apps).set({changes:l.length>0?l:null}).where((0,j.eq)(o.apps.id,this.appId)));if(c)throw new m("Error updating changes",a,500,c)}async cloneApp(){let{data:t,error:a}=await f(()=>h.query.apps.findFirst({where:(0,j.eq)(o.apps.id,this.appId)}));if(a||!t)throw new m("Site not found","SITE_NOT_FOUND",404,a);return t}async clearChanges(t){let a=t.filter(i=>i!=="THEME"&&i!=="DESIGN_TOKENS");if(a.length===0)return;let{error:n}=await f(()=>h.update(o.appPages).set({changes:null,online:!0}).where((0,j.and)((0,j.inArray)(o.appPages.id,a),(0,j.eq)(o.appPages.app,this.appId))));if(n)throw new m("Error clearing changes","ERROR_CLEARING_CHANGES",500,n)}async getLinkingPages(t){let{data:a}=await f(()=>h.query.appPagesOnline.findMany({where:(0,j.and)((0,j.eq)(o.appPagesOnline.app,this.appId),(0,j.like)(o.appPagesOnline.links,`%${t}%`)),columns:{id:!0,slug:!0}})),n=[],i=[];return(a!=null?a:[]).forEach(s=>{n.push(`page-${s.id}`),(0,De.isEmpty)(s.slug)||i.push(s.slug)}),{tags:n,paths:i}}async getPartialBlockUsage(t){let{data:a}=await f(()=>h.query.appPagesOnline.findMany({where:(0,j.and)((0,j.eq)(o.appPagesOnline.app,this.appId),(0,j.like)(o.appPagesOnline.partialBlocks,`%${t}%`)),columns:{id:!0,slug:!0}})),n=[],i=[];return(a!=null?a:[]).forEach(s=>{n.push(`page-${s.id}`),(0,De.isEmpty)(s.slug)||i.push(s.slug)}),{tags:n,paths:i}}async publishPage(t){var l;let a=await this.clonePage(t);await this.addOnlinePage(a);let n=(l=a.primaryPage)!=null?l:a.id,i=[`page-${n}`,`breadcrumb-${n}`],s=[];if((0,De.isEmpty)(a.slug)){let c=await this.getPartialBlockUsage(n);i.push(...c.tags),s.push(...c.paths)}else{s.push(`${a.slug}`),i.push(ot(a.slug));let c=await this.getLinkingPages(n);i.push(...c.tags),s.push(...c.paths)}return{tags:(0,De.uniq)(i),paths:(0,De.uniq)(s)}}async createRevision(t){if(!this.revisionsEnabled)return!1;let{data:a,error:n}=await f(()=>h.query.appPagesOnline.findFirst({where:(0,j.eq)(o.appPagesOnline.id,t)}));if(n||!a||!(0,De.isEmpty)(a.primaryPage))return!1;let{error:i}=await f(()=>h.insert(o.appPagesRevisions).values({...a,type:"published",uid:void 0}));if(i)throw new m("Error creating revision","ERROR_CREATING_REVISION",500,i);return!0}async addOnlinePage(t){await this.createRevision(t.id);let{error:a}=await f(()=>h.delete(o.appPagesOnline).where((0,j.eq)(o.appPagesOnline.id,t.id)));if(a)throw new m("Error deleting online page","ERROR_PUBLISHING_PAGE",500,a);let{changes:n,createdAt:i,...s}=t,{data:l,error:c}=await f(()=>{var u;return h.insert(o.appPagesOnline).values({...s,currentEditor:(u=this.context)==null?void 0:u.userId}).returning()});if(c||!l||l.length===0)throw new m("Error publishing page","ERROR_PUBLISHING_PAGE",500,c);let{error:d}=await f(()=>h.update(o.appPages).set({changes:null}).where((0,j.eq)(o.appPages.id,t.id)));if(d)throw new m("Error clearing page changes","ERROR_PUBLISHING_PAGE",500,d);return l[0]}async clonePage(t){let{data:a,error:n}=await f(()=>h.query.appPages.findFirst({where:(0,j.and)((0,j.eq)(o.appPages.id,t),(0,j.eq)(o.appPages.app,this.appId))}));if(n||!a)throw new m("Page not found","PAGE_NOT_FOUND",404,n);return a}handleExecutionError(t){throw t instanceof m?t:new m(`Failed to publish changes: ${t instanceof Error?t.message:"Unknown error"}`,"PUBLISH_CHANGES_FAILED")}}});var Os,Jd,Fs,Li,Xd=T(()=>{"use strict";Os=require("drizzle-orm"),Jd=require("lodash-es"),Fs=require("zod");I();ee();R();Li=class extends P{getValidationSchema(){return Fs.z.object({settings:Fs.z.any()})}async execute(e){var y;if(!this.context)throw v("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,a=(0,Jd.pick)(e.settings,["theme","designTokens"]),{data:n,error:i}=await f(()=>h.select({changes:o.apps.changes}).from(o.apps).where((0,Os.eq)(o.apps.id,t)));if(i)throw v("ERROR_UPDATE_WEBSITE_FIELDS",i);let s=(y=n[0].changes)!=null?y:[],l={theme:"THEME",designTokens:"DESIGN_TOKENS"},c=Object.keys(a).map(b=>l[b]).filter(Boolean),d=[...new Set([...s,...c])],u={...a,changes:d},{error:g}=await f(()=>h.update(o.apps).set(u).where((0,Os.eq)(o.apps.id,t)));if(g)throw v("ERROR_UPDATE_WEBSITE_FIELDS",g);return{success:!0}}}});function S(r,e){return r.requiredPermission=e,r}var Un,jo=T(()=>{"use strict";ja();Sc();Rc();Lc();Oc();Fc();Gc();zc();Vc();jc();Wc();Qc();Jc();ep();tp();rp();ap();np();ip();op();Bp();ts();rs();Up();Mp();$p();qp();Kp();jp();Wp();Go();Yp();ds();Jp();Xp();us();Zp();hs();td();rd();Ts();bs();Ps();id();od();sd();ld();Mo();cd();pd();gd();ud();hd();fd();yd();Td();Pd();Ed();wd();Id();Rd();vd();_d();kd();Dd();Hd();zd();Yd();Ls();Qd();Xd();Un={AI_EDIT_BLOCK:S(new nn,x["ai:use"]),AI_EDIT_PAGE:S(new ln,x["ai:use"]),AI_GENERATE_IMAGE:S(new pn,x["ai:generate_image"]),AI_EDIT_LANG_PAGE:S(new on,x["ai:use"]),AI_GENERATE_SEO_FIELD:S(new un,x["ai:use"]),AI_ENHANCE_CONTEXT:S(new dn,x["ai:use"]),AI_GENERATE_THEME:S(new mn,x["ai:generate_theme"]),AI_SAVE_CONTEXT:S(new bn,x["ai:use"]),AI_GET_CONTEXT:S(new fn,x["ai:read"]),AI_GET_CREDITS:S(new yn,x["ai:read"]),AI_GET_ADDONS:S(new hn,x["ai:read"]),AI_GENERATE_IMAGE_DESCRIPTION:S(new gn,x["ai:use"]),CHECK_USER_ACCESS:new _i,CREATE_PAGE:S(new Wn,x["pages:create"]),DELETE_PAGE:S(new Nt,x["pages:delete"]),DUPLICATE_PAGE:S(new Yn,x["pages:create"]),UPDATE_PAGE:S(new mr,x["pages:update"]),UPDATE_PAGE_METADATA:S(new li,x["pages:update"]),PUBLISH_CHANGES:S(new Ni,x["pages:publish"]),TAKE_OFFLINE:S(new si,x["pages:unpublish"]),ACQUIRE_PAGE_LOCK:S(new jn,x["pages:update"]),RELEASE_PAGE_LOCK:S(new ri,x["pages:update"]),GET_WEBSITE_PAGES:S(new Ir,x["pages:read"]),GET_MENU_PAGES:S(new ei,x["pages:read"]),GET_DRAFT_PAGE:S(new Ar,x["pages:read"]),GET_LANGUAGE_PAGES:S(new Cr,x["pages:read"]),GET_DYNAMIC_PAGES:S(new Zn,x["pages:read"]),GET_PAGE_ALL_DATA:S(new ti,x["pages:read"]),GET_BUILDER_PAGE_DATA:S(new Tr,x["pages:read"]),GET_CHANGES:S(new Qn,x["pages:read"]),GET_COMPARE_DATA:S(new Xn,x["pages:read"]),SEARCH_PAGES:S(new oi,x["pages:read"]),GET_PAGE_TYPES:S(new xr,x["pages:read"]),SEARCH_PAGE_TYPE_ITEMS:S(new ni,x["pages:read"]),GET_PAGE_REVISIONS:S(new pi,x["revisions:read"]),GET_REVISION_PAGE:S(new gi,x["revisions:read"]),DELETE_PAGE_REVISION:S(new ci,x["revisions:delete"]),RESTORE_PAGE_REVISION:S(new ui,x["revisions:restore"]),GET_WEBSITE_DATA:S(new Bi,x["app:read"]),GET_WEBSITE_DRAFT_SETTINGS:S(new Br,x["app:read"]),GET_SITE_GLOBAL_DATA:S(new Er,x["app:read"]),GET_SITE_WIDE_USAGE:S(new ki,x["app:read"]),GET_COLLECTIONS:S(new fr,x["app:read"]),UPDATE_WEBSITE_FIELDS:S(new Li,x["app:update"]),GET_LIBRARIES:S(new yr,x["library:read"]),GET_LIBRARY_GROUPS:S(new Hn,x["library:read"]),GET_LIBRARY_ITEM:S(new zn,x["library:read"]),GET_LIBRARY_ITEMS:S(new Vn,x["library:read"]),GET_TEMPLATES_BY_TYPE:S(new Ti,x["library:read"]),UPSERT_LIBRARY_ITEM:S(new Kn,x["library:update"]),MARK_AS_TEMPLATE:S(new Ai,x["library:update"]),UNMARK_AS_TEMPLATE:S(new Pi,x["library:update"]),DELETE_LIBRARY_ITEM:S(new qn,x["library:delete"]),GET_ASSETS:S(new In,x["assets:read"]),GET_ASSET:S(new xn,x["assets:read"]),SEARCH_IMAGES:S(new Sn,x["assets:read"]),CREATE_ASSET:S(new Pn,x["assets:create"]),DOWNLOAD_SEARCH_IMAGE:S(new wn,x["assets:create"]),UPDATE_ASSET:S(new Rn,x["assets:update"]),DELETE_ASSET:S(new En,x["assets:delete"]),TRASH_ENTITY:S(new xi,x["pages:delete"]),GET_TRASHED_ITEMS:S(new Ei,x["trash:read"]),RESTORE_TRASHED_ITEM:S(new wi,x["trash:restore"]),DELETE_PERMANENTLY:S(new Ci,x["trash:delete_permanently"]),GET_ROLES:S(new yi,x["roles:read"]),GET_ROLE:S(new fi,x["roles:read"]),CREATE_ROLE:S(new mi,x["roles:create"]),UPDATE_ROLE:S(new bi,x["roles:update"]),DELETE_ROLE:S(new hi,x["roles:delete"]),GET_BLOCK_ASYNC_PROPS:new $n}});var WR,_f,ke,Gn=T(()=>{"use strict";WR=require("server-only");Ga();jo();Uo();Ho();_n();zo();_f={drizzle:null,schema:ze},ke={debugLevel:0,globalDataProvider:qo,pageTypes:Fo,collections:[],blockDataProviders:{},trash:$o,actions:Un,builderActions:Un,extraPermissions:[],roles:void 0,ai:gr,db:_f}});function pa(r){Be=r}function Wo(){return Be}function hr(){return Be.pageTypes}function st(r){return Be.pageTypes.find(e=>e.key===r)}function We(r){let e=st(r);return e?Et(e):void 0}function Yo(){return hr().map(Et)}function da(){return Be.collections}function Xt(r){return Be.collections.find(e=>e.id===r)}function Ct(r){return Be.trash.find(e=>e.key===r)}function kp(){return Be.globalDataProvider}async function ga(r){var e;try{return(e=await kp()(r))!=null?e:{}}catch(t){return console.error(t),{}}}function Qo(){return Be.blockDataProviders}function Jo(r){return Be.blockDataProviders[r]}function Od(){return Be.roles}function ft(){return Be.ai}function _o(r){return Be.actions[r]}function Et(r){var e;return{...r,hasSlug:r.partial?!1:(e=r.hasSlug)!=null?e:!0}}var tv,Be,je=T(()=>{"use strict";tv=require("server-only");I();Gn();Be=ke});function Xo(r,e){Vl(r,e)}function Zo(r=Qo()){for(let[e,t]of Object.entries(r))Xo(e,t)}function es(r){var a;let e=Ve(r);if(e!=null&&e.dataProvider&&(0,Us.isFunction)(e.dataProvider))return e.dataProvider;let t=Jo(r);if(!(!t||!(0,Us.isFunction)(t)))return Xo(r,t),(a=Ve(r))==null?void 0:a.dataProvider}var Us,iv,Mn=T(()=>{"use strict";Us=require("lodash-es"),iv=require("server-only");Ka();je()});function $s(r){return dg.has(r)}function Gt(r){return r instanceof m?{code:r.code,message:r.message,status:r.status,...r.metadata?{metadata:r.metadata}:{}}:r&&typeof r=="object"&&"code"in r&&"message"in r&&"status"in r&&typeof r.code=="string"&&typeof r.message=="string"&&typeof r.status=="number"?r:r instanceof Error?{code:"INTERNAL_ERROR",message:r.message,status:500}:{code:"INTERNAL_ERROR",message:"Something went wrong.",status:500}}function Ra(r){if(r instanceof m)return r;let e=Gt(r);return new m(e.message,e.code,e.status)}var dg,Ui=T(()=>{"use strict";N();dg=new Set(["AI_EDIT_BLOCK","AI_EDIT_LANG_PAGE","AI_GENERATE_IMAGE"])});function Hs(r){return Bf.has(r)?"public":"authenticated"}var Bf,qs=T(()=>{"use strict";Bf=new Set([])});var Vs={};$t(Vs,{dispatchChaiAction:()=>et,tryChaiAction:()=>Gi});function Nf(r){var e;return{role:r.role||"user",permissions:(e=r.permissions)!=null?e:null}}async function Lf(r,e,t,a){let n=aa(zs);if(!n)throw new m(`Action ${zs} not found`,"ACTION_NOT_FOUND",404);n.setContext({appId:r,userId:e,action:t,delegatedScopes:a});let i=await n.run({});if(!i||i.access===!1)throw new m("User does not have access to this app","UNAUTHORIZED",401);return Nf(i)}function Of(r,e,t){var n;let a=r.requiredPermission;return a?typeof a=="function"?(n=a(e,t))!=null?n:null:a:null}function Ff(r,e,t){var i,s;let a=Of(r,e,t);if(!a)return;let n=(s=(i=t.userAccess)==null?void 0:i.permissions)!=null?s:null;if(!Ri(n,a))throw new m(`Missing permission: ${a}`,"FORBIDDEN",403)}async function et(r,e){var t;try{let a=aa(r);if(!a)throw new m(`Action ${r} not found`,"ACTION_NOT_FOUND",404);let n=Hs(r),i;if(n==="authenticated"){let s=nr(),l=(t=s.delegatedScopes)!=null?t:null,c=r===zs?void 0:await Lf(s.appId,s.userId,r,l);i={appId:s.appId,userId:s.userId,action:r,delegatedScopes:l,...c?{userAccess:c}:{}}}else i={appId:O().appId,action:r};return a.setContext(i),Ff(a,e,i),await a.run(e)}catch(a){throw console.error(`[dispatchChaiAction] Error executing action "${r}":`,a),Ra(a)}}async function Gi(r,e){try{return{ok:!0,data:await et(r,e)}}catch(t){return{ok:!1,error:Gt(t)}}}var zs,Zt=T(()=>{"use strict";z();wa();N();qs();Ui();Qe();zs="CHECK_USER_ACCESS"});var gg,Uf,ug=T(()=>{"use strict";gg=fe(require("tailwindcss/plugin"),1),Uf=(0,gg.default)(function({addBase:r,theme:e}){r({"h1,h2,h3,h4,h5,h6":{fontFamily:e("fontFamily.heading")},body:{fontFamily:e("fontFamily.body"),color:e("colors.foreground"),backgroundColor:e("colors.background")}})})});var Gf,mg,Mf,$f,Ks=T(()=>{"use strict";Gf=require("cnfast"),mg=require("lodash-es"),Mf=require("nanoid"),$f=require("cnfast")});var Ws,va,js,Hf,qf,zf,Vf,Kf,jf,Wf,Yf,Qf,Jf,Xf,hg,Zf,ey,fg,yg=T(()=>{"use strict";Ws=require("eta/core"),va=require("lodash-es"),js=/\{\{(.*?)\}\}/g,Hf=/^[\w$][\w$.]*$/,qf=/[\[\]():?+\-*/%=&|<>!,'"\\`]/u,zf=/[\[\]():?+*%=&|<>!,'"\\`]/u,Vf=new Set(["content","htmlCode","icon"]),Kf=new Ws.Eta({tags:["{{","}}"],autoEscape:!0,autoTrim:!1,useWith:!0,parse:{interpolate:"",exec:"~",raw:"~"},functionHeader:'const safeGet = (obj, path) => { const parts = path.split("."); let val = obj; for (const p of parts) { if (val == null) return undefined; val = val[p]; } return val; };'}),jf=new Ws.Eta({tags:["{{","}}"],autoEscape:!1,autoTrim:!1,useWith:!0,parse:{interpolate:"",exec:"~",raw:"~"},functionHeader:'const safeGet = (obj, path) => { const parts = path.split("."); let val = obj; for (const p of parts) { if (val == null) return undefined; val = val[p]; } return val; };'}),Wf=r=>r.split(".").map(e=>e.trim()).join("."),Yf=(r,e)=>{let t=e.split("."),a=r;for(let n of t){if(a==null)return;a=a[n]}return a},Qf=r=>Hf.test(r)?!0:r.includes(".")?r.split(".").map(t=>t.trim()).every(t=>t.length>0&&!qf.test(t)):!zf.test(r)&&(r.startsWith("#")||r.includes("/")),Jf=(r,e,t)=>{let a=t.slice(2,-2).trim();return e!==-1&&(0,va.startsWith)(r,"$index.")?`${a}.${e}.${r.slice(7)}`:e!==-1&&(0,va.startsWith)(r,"$index")?`${a}.${e}`:r},Xf=(r,e,t)=>{if(e===-1||!t)return r;let a=t.slice(2,-2).trim();return r.replace(/\$index\./g,`safeGet(it, "${a}.${e}").`).replace(/\$index/g,`safeGet(it, "${a}.${e}")`)},hg=(r,e,t)=>Qf(r)?Wf(Jf(r,e,t)):null,Zf=(r,e,t)=>r.replace(js,(a,n)=>{let i=n.trim();if(!i)return'{{""}}';let s=hg(i,e,t);return s?`{{safeGet(it, ${JSON.stringify(s)}) ?? ""}}`:`{{${Xf(i,e,t)}}}`}),ey=(r,e,t,a,n)=>{try{return(n!=null&&n.renderRaw?jf:Kf).renderString(Zf(r,t,a),e)}catch(i){return""}},fg=(r,e,t,a,n)=>{js.lastIndex=0;let i=r.match(js);if(!i)return r;let s=n==="image"||n==="mobileImage",l=n!==void 0&&Vf.has(n);for(let c of i){let d=c.slice(2,-2).trim(),u=hg(d,t,a);if(!u)continue;let g=Yf(e,u);if((0,va.isArray)(g)||s&&g!==void 0)return g}return ey(r,e,t,a,{renderRaw:l})}});var se,Ys,bg,Tg=T(()=>{"use strict";se=require("lodash-es");zt();yg();Ys=(r,e,{index:t,key:a},n)=>{if((0,se.isString)(r))return fg(r,e,t,a,n);if((0,se.isArray)(r))return r.map(i=>Ys(i,e,{index:t,key:a},n));if(r&&typeof r=="object"){let i={};return(0,se.forEach)((0,se.keys)(r),s=>{!(0,se.startsWith)(s,"_")&&s!=="$repeaterItemsKey"?i[s]=Ys(r[s],e,{index:t,key:a},s):i[s]=r[s]}),i}return r},bg=(r,e,{index:t,key:a})=>{let n=(0,se.cloneDeep)(r);if(n.repeaterItems){let i=n.repeaterItems;if(n.$repeaterItemsKey=n.repeaterItems,(0,se.startsWith)(n.repeaterItems,`{{${"#"}`)&&(n.$repeaterItemsKey=n.repeaterItems=`${n.repeaterItems.replace("}}",`/${n._id}}}`)}`),!(0,se.isEmpty)(n.repeaterItems)&&n.pagination){let s=`${i.replace("}}",`/${n._id}/totalItems}}`)}`,l=(0,se.get)(e,s.slice(2,-2));n.repeaterTotalItems=l,n.totalItems=l}}return Ys(n,e,{index:t,key:a})}});var qi,Qs=T(()=>{"use strict";Tg();qi=(r,e)=>bg(r,e,{index:-1,key:""})});var Ag,Pg=T(()=>{"use strict";zt();Ag=r=>{if(r=r.replace(vt,""),!r)return{baseClasses:"",classes:""};let e=r.split(/,(?![^\[]*\])/);if(e.length===1)return{baseClasses:"",classes:e[0].trim()};let[t,...a]=e;return{baseClasses:t.trim(),classes:a.join(",").trim().replace(/ +(?= )/g,"")}}});var Ne,Cg,Eg,ry,wg,Qv,xg=T(()=>{"use strict";Ne=require("lodash-es"),Cg=require("cnfast");Pg();Kr();zt();_t();Qs();Eg=(r,e,t)=>r?r.split(" ").map(a=>{var n;return a.startsWith("dt#")?t.has(a)?"":(t.add(a),Eg((n=e[a])==null?void 0:n.value,e,t)):a}).filter(Boolean).join(" "):"",ry=(0,Ne.memoize)(r=>({...kt,...r})),wg=(r,e)=>{let t=ry(e),{baseClasses:a,classes:n}=Ag(r),s=n.split(" ").filter(c=>c.startsWith("dt#")).map(c=>{var d;return Eg((d=t[c])==null?void 0:d.value,t,new Set([c]))}),l=n.split(" ").filter(c=>!c.startsWith("dt#")).join(" ");return Cg.twMerge.apply(null,[a,...s,l])},Qv=(0,Ne.memoize)(r=>{var n,i;let e=Ve(r),t=(i=(n=e==null?void 0:e.props)==null?void 0:n.schema)!=null?i:{},a=(0,Ne.get)(t,"properties",{});return Object.fromEntries(Object.entries(a).filter(([,s])=>(0,Ne.get)(s,"runtime",!1)))})});var Lr,Xs,Ig=T(()=>{"use strict";Lr=require("lodash-es");xg();zt();Xs=(r,e)=>r.map(t=>{let a=(0,Lr.keys)(t).filter(n=>(0,Lr.isString)(t[n])&&t[n].startsWith(vt));return(0,Lr.each)(a,n=>{t[n]=`${vt},${wg(t[n],e)}`}),t})});var ay,Sg=T(()=>{"use strict";ay=require("lodash-es")});var Rg,te,vg=T(()=>{"use strict";Rg=require("himalaya"),te=require("lodash-es");Ya();Ks();zt();oo();_t();Sg()});var _g=T(()=>{"use strict";vg()});var kg=T(()=>{"use strict"});var iy,oy,sy,Dg=T(()=>{"use strict";iy=fe(require("@tailwindcss/container-queries"),1),oy=fe(require("@tailwindcss/forms"),1),sy=fe(require("@tailwindcss/typography"),1)});var Or,Bg,Ng=T(()=>{"use strict";Or=require("lodash-es");_t();Bg=r=>({fontFamily:r.fontFamily?(0,Or.keys)(r.fontFamily).reduce((t,a)=>({...t,[a.replace("font-","")]:`var(--${a})`}),{}):{},borderRadius:r.borderRadius?{lg:"var(--radius)",md:"calc(var(--radius) - 2px)",sm:"calc(var(--radius) - 4px)"}:{},colors:r.colors?(0,Or.flatten)(r.colors.map(t=>Object.entries(t.items))).reduce((t,[a])=>({...t,[a]:`hsl(var(--${a}))`}),{}):{}})});var Lg,Og=T(()=>{"use strict";Lg={fontFamily:{"font-heading":"Arial","font-body":"Arial"},borderRadius:"10px",colors:[{group:"Body",items:{background:["#FFFFFF","#121212"],foreground:["#121212","#FFFFFF"]}},{group:"Primary",items:{primary:["#2563EB","#3B82F6"],"primary-foreground":["#FFFFFF","#FFFFFF"]}},{group:"Secondary",items:{secondary:["#F3F4F6","#374151"],"secondary-foreground":["#1F2937","#F9FAFB"]}},{group:"Border, Input & Ring",items:{border:["#E5E7EB","#374151"],input:["#E5E7EB","#374151"],ring:["#2563EB","#3B82F6"]}},{group:"Card",items:{card:["#FFFFFF","#1F2937"],"card-foreground":["#121212","#FFFFFF"]}},{group:"Popover",items:{popover:["#FFFFFF","#1F2937"],"popover-foreground":["#121212","#FFFFFF"]}},{group:"Muted",items:{muted:["#F3F4F6","#374151"],"muted-foreground":["#6B7280","#9CA3AF"]}},{group:"Accent",items:{accent:["#F3F4F6","#374151"],"accent-foreground":["#1F2937","#FFFFFF"]}},{group:"Destructive",items:{destructive:["#DC2626","#EF4444"],"destructive-foreground":["#FFFFFF","#FFFFFF"]}}]}});var Zs,Fg=T(()=>{"use strict";Ng();Og();Zs=(r=Lg)=>({container:{center:!0,padding:"1rem",screens:{"2xl":"1400px"}},...Bg(r)})});function _a(r){return r.replace("%3A",":").replace("%2E",".").replace(/^www\./,"")}var el=T(()=>{"use strict"});var ka=T(()=>{"use strict";ug();Ks();Qs();Ig();_g();kg();Dg();Fg();el()});function Ug(r,e){let t=e.map($g).join(":");return t?`${r}:${t}`:r}function Gg(r){return r.join(":")}function tl(r,e){if(e.length===0)return r;let t=e.map(yy).filter(Boolean);return t.length>0?t.join(" \xB7 "):r}function Mg(r){return r.map(e=>e.startsWith("website-settings-")?`app=${X(e.replace("website-settings-",""))}`:e.startsWith("pages-metadata-")?ly(e):e.startsWith("page-by-slug-")?cy(e):e.startsWith("page-slugs-batch-")?dy(e):e.startsWith("page-slug-")?py(e):e.startsWith("alternate-")?gy(e):e.startsWith("breadcrumb-")?uy(e):e.startsWith("page-details-")?my(e):e.startsWith("full-page-")?hy(e):e.startsWith("page-styles-")?fy(e):e.includes("-")&&e.length>20?X(e):e).join(" \xB7 ")}function ly(r){let e=r.slice(15),t=e.endsWith("-draft")?"draft":e.endsWith("-online")?"online":"unknown",a=e.replace(/-(draft|online)$/,"");return`app=${X(a)} \xB7 ${t}`}function zi(r,e,t){let a=r.slice(e.length),n=a.endsWith("-draft")?"draft":a.endsWith("-online")?"online":"unknown",s=a.replace(/-(draft|online)(-.+)?$/,""),l=a.includes("-draft-")?a.split("-draft-")[1]:a.includes("-online-")?a.split("-online-")[1]:void 0;return l?`app=${X(s)} \xB7 ${n} \xB7 ${t}=${l.slice(0,12)}`:`app=${X(s)} \xB7 ${n}`}function cy(r){return zi(r,"page-by-slug-","slug")}function py(r){return zi(r,"page-slug-","page")}function dy(r){let e=r.slice(17),t=e.indexOf("-online-"),a=e.indexOf("-draft-");if(t>0){let n=e.slice(0,t),i=e.slice(t+8),s=i?i.split(",").filter(Boolean).length:0;return`app=${X(n)} \xB7 online \xB7 ids=${s}`}if(a>0){let n=e.slice(0,a),i=e.slice(a+7),s=i?i.split(",").filter(Boolean).length:0;return`app=${X(n)} \xB7 draft \xB7 ids=${s}`}return X(e)}function gy(r){return zi(r,"alternate-","alt")}function uy(r){return zi(r,"breadcrumb-","crumb")}function my(r){let e=r.slice(13);if(e.length<=36)return`app=${X(e)}`;let t=e.slice(0,36),a=e.slice(37);return`app=${X(t)} page=${X(a)}`}function hy(r){let e=r.slice(10);if(e.length<=36)return`app=${X(e)}`;let t=e.slice(0,36),a=e.slice(37);return`app=${X(t)} page=${X(a)}`}function fy(r){let e=r.slice(12);if(e.length<=36)return`app=${X(e)}`;let t=e.slice(0,36),a=e.slice(37);return`app=${X(t)} page=${X(a)}`}function $g(r){if(r===null)return"null";if(r===void 0)return"undefined";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);try{return JSON.stringify(r)}catch(e){return String(r)}}function yy(r){if(typeof r=="string")return r.length>36&&r.includes("-")?X(r):r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(r&&typeof r=="object"){let t=r;if(typeof t.slug=="string"||typeof t.pageType=="string"){let a=[typeof t.slug=="string"?`slug=${t.slug}`:null,typeof t.pageType=="string"?`type=${t.pageType}`:null,typeof t.pageLang=="string"?`lang=${t.pageLang}`:null,typeof t.pageId=="string"?`page=${X(t.pageId)}`:null].filter(Boolean);if(a.length>0)return a.join(" ")}if(typeof t.id=="string")return[`page=${X(t.id)}`,typeof t.slug=="string"?`slug=${t.slug}`:null,typeof t.lang=="string"?`lang=${t.lang}`:null].filter(Boolean).join(" ");if(Array.isArray(t))return`[${t.length} items]`}let e=$g(r);return e.length>60?`${e.slice(0,57)}\u2026`:e}function X(r){return r.length<=8?r:r.slice(0,8)}var G_,Hg=T(()=>{"use strict";G_=require("server-only")});function qg(r,e){return e!=null?e:r.name||"anonymous"}function ae(r,e){let t=qg(r,e),a=(0,rl.cache)((...n)=>(L(1)&&To("request",t,tl(t,n)),r(...n)));return((...n)=>{var c;let i=Ug(t,n),s=le(),l=(c=s==null?void 0:s.cacheKeys.has(i))!=null?c:!1;return l&&L(1)&&bo("request",t,tl(t,n)),s&&!l&&s.cacheKeys.set(i,!0),a(...n)})}function Da(r,e,t=[],a=!1,n){let i=qg(r,n),s=Gg(e),l=Mg(e),c=async(...u)=>{let g=le();return go(g,async()=>{let y=le();return y&&y.cacheKeys.set(`persistent:${s}`,!0),L(1)&&To("persistent",i,l),r(...u)})},d=Rt().persistentCache(c,e,{revalidate:a,tags:t});return(0,rl.cache)(async(...u)=>{let g=`persistent-pending:${s}`,y=le();y&&(y.cacheKeys.delete(`persistent:${s}`),y.cacheKeys.set(g,!0));let b=await go(y,()=>d(...u));return L(1)&&(y!=null&&y.cacheKeys.has(g))&&!y.cacheKeys.has(`persistent:${s}`)&&bo("persistent",i,l),y==null||y.cacheKeys.delete(g),b})}function Z(r,e,t,a=!1,n){if((O().draftMode?"memory":"persistent")==="memory")return ae(r,n);if(!e)throw new Error("keyParts required for persistent cache strategy");return Da(r,e,t,a,n)}var rl,ne=T(()=>{"use strict";rl=require("react");$r();Hg();Ke();ht();z()});var Yg,Qg,Jg,Xg,rt,Zg,eu,Wg,nl,Py,Vi,jg,Cy,tu,Ey,wy,xy,Iy,ru,au=T(()=>{"use strict";Yg=fe(require("autoprefixer"),1),Qg=require("fs"),Jg=require("fs/promises"),Xg=require("module"),rt=fe(require("path"),1),Zg=require("url"),eu=fe(require("postcss"),1),Wg={},nl="virtual:chai-builder-tailwind-config",Py=/[^<>"'`\s]*[^<>"'`\s:]/g,jg=r=>rt.default.dirname((0,Xg.createRequire)(r).resolve("tailwindcss/package.json")),Cy=()=>{for(let r=process.cwd();;r=rt.default.dirname(r)){let e=rt.default.join(r,"node_modules","tailwindcss","package.json");if((0,Qg.existsSync)(e))return rt.default.dirname(e);if(r===rt.default.dirname(r))break}throw new Error("Unable to locate tailwindcss in node_modules.")},tu=()=>{if(Vi)return Vi;let r=[()=>rt.default.dirname((0,Zg.fileURLToPath)(Wg.resolve("tailwindcss/package.json"))),()=>jg(Wg.url),()=>jg(rt.default.join(process.cwd(),"package.json")),Cy];for(let e of r)try{return Vi=e(),Vi}catch(t){continue}throw new Error("Unable to resolve Tailwind CSS from the current project. Ensure `tailwindcss` is installed.")},Ey=r=>{let e=tu(),a={tailwindcss:"index.css","tailwindcss/index.css":"index.css","tailwindcss/theme":"theme.css","tailwindcss/theme.css":"theme.css","tailwindcss/preflight":"preflight.css","tailwindcss/preflight.css":"preflight.css","tailwindcss/utilities":"utilities.css","tailwindcss/utilities.css":"utilities.css"}[r];if(!a)throw new Error(`Unsupported Tailwind stylesheet import: ${r}`);return rt.default.join(e,a)},wy=async(r,e)=>{let t=r.startsWith("tailwindcss")?Ey(r):rt.default.resolve(e,r);return{path:t,base:rt.default.dirname(t),content:await(0,Jg.readFile)(t,"utf8")}},xy=(r,e=[])=>{let t=new Set(e);for(let a of r){let n=a.match(Py)||[];for(let i of n)t.add(i)}return Array.from(t)},Iy=async({compile:r,includeBaseStyles:e,config:t,candidates:a})=>{let n=e?`@config "${nl}";
802
+ @import "tailwindcss";`:`@config "${nl}";
803
+ @import "tailwindcss/theme";
804
+ @import "tailwindcss/utilities";`;return(await r(n,{base:tu(),loadModule:async(s,l,c)=>{if(s===nl&&c==="config")return{path:s,base:l,module:t};throw new Error(`Unsupported Tailwind ${c} import: ${s}`)},loadStylesheet:wy})).build(a)},ru=async({markupStrings:r,safelist:e=[],includeBaseStyles:t=!1,config:a})=>{var l;let n=await import("tailwindcss");if(typeof n.compile=="function")return Iy({compile:n.compile,includeBaseStyles:t,config:a,candidates:xy(r,e)});let i=[t?"@tailwind base;":"","@tailwind components;","@tailwind utilities;"].filter(Boolean).join(`
805
+ `);return(await(0,eu.default)([(l=n.default)==null?void 0:l.call(n,{...a,safelist:e,content:[{raw:`<div>${r.join(" ")}</div>`,extension:"html"}]}),(0,Yg.default)()]).process(i,{from:void 0})).css}});var su={};$t(su,{getBlocksStyles:()=>il});var nu,iu,ou,il,ol=T(()=>{"use strict";nu=fe(require("@tailwindcss/container-queries"),1),iu=fe(require("@tailwindcss/forms"),1),ou=fe(require("@tailwindcss/typography"),1);ka();au();il=async r=>{let e=JSON.stringify(r,null,2).replace(/#styles:([^"]*)/g,(t,a)=>a.replace(/#styles:,/g,"").replace(/#styles:/g,"").replace(/^,/g,""));return ru({markupStrings:[e],includeBaseStyles:!1,config:{darkMode:"class",theme:{extend:{...Zs(),keyframes:{"accordion-down":{from:{height:"0"},to:{height:"var(--radix-accordion-content-height)"}},"accordion-up":{from:{height:"var(--radix-accordion-content-height)"},to:{height:"0"}}},animation:{"accordion-down":"accordion-down 0.2s ease-out","accordion-up":"accordion-up 0.2s ease-out"}}},plugins:[iu.default,ou.default,nu.default],corePlugins:{preflight:!1}}})}});async function Sy(){return cu.default.resolve("./public/chaistyles.css")}async function pu(r){try{let e=await Sy(),t=await lu.default.readFile(e,"utf-8"),a=sl.default.parse(t),n=sl.default.parse(r),i=new Set;return a.walkRules(s=>{i.add(s.selector)}),n.walkRules(s=>{var c;let l=((c=s.parent)==null?void 0:c.type)==="atrule"&&"name"in s.parent&&s.parent.name==="media";i.has(s.selector)&&!l&&s.remove()}),n.toString()}catch(e){return console.error("Error filtering styles:",e),r}}var lu,cu,sl,du=T(()=>{"use strict";lu=fe(require("fs/promises"),1),cu=fe(require("path"),1),sl=fe(require("postcss"),1)});var mu={};$t(mu,{fetchPageStylesUncached:()=>uu,getPageStyles:()=>ll});async function uu(r){let e=r.length,t=performance.now();try{let n=(await il(r)).replace(/\s+/g," ").trim();return await pu(n)}finally{let a=Math.round(performance.now()-t);a>Ry&&vy.warn(`Slow page styles compile: ${a}ms \xB7 blocks: ${e}`)}}var gu,Ry,vy,ll,cl=T(()=>{"use strict";gu=require("consola");z();ne();ol();du();Ry=30,vy=gu.consola.withTag("ChaiPageStyles");ll=async(r,e)=>{let t=O();return await Z(uu,[`page-styles-${t.appId}-${r}`],["page-styles",`page-${r}`],!1,"fetchPageStyles")(e)}});var Ob={};$t(Ob,{ActionError:()=>m,BuilderActionsRegistry:()=>An,CHAI_PERMISSIONS:()=>x,CHAI_PERMISSION_LIST:()=>kr,ChaiActionsRegistry:()=>na,ChaiBaseAIAction:()=>Q,ChaiBaseAction:()=>P,DEFAULT_CHAI_BUILDER_SERVER_CONFIG:()=>ke,LANGUAGES:()=>xl,buildChaiBuilderConfig:()=>eg,createPostgresConnection:()=>Rl,createPostgresDB:()=>Km,createPostgresInstance:()=>ao,createStreamingErrorResponse:()=>$i,db:()=>h,dispatchChaiAction:()=>et,ensureDbReady:()=>qa,expandGrantMap:()=>Ea,formatStreamingError:()=>Mi,getChaiBuilder:()=>Hm,getChaiBuilderConfigOnInit:()=>Oi,getChaiContextResolver:()=>Nr,getDb:()=>qr,getDbDialect:()=>Ha,hasPermission:()=>Ri,initChaiActionHandler:()=>ro,initChaiBuilderActionHandler:()=>Il,intersectPermissions:()=>vi,isMissingTextStream:()=>Hi,registerDb:()=>er,resetChaiContextResolverForTests:()=>rg,resetDbForTests:()=>io,resolveAppIdByHostname:()=>Wm,resolveChaiBuilderConfig:()=>Fn,resolveDbConfig:()=>sa,safeQuery:()=>f,schema:()=>o,setChaiContextResolver:()=>tg,staticDefaultChaiContext:()=>Sa,toActionError:()=>Ra,toActionErrorPayload:()=>Gt,tryChaiAction:()=>Gi});module.exports=sh(Ob);var KN=require("server-only"),Gr=require("next/cache"),Ym=require("next/navigation"),Qm=require("next/server");var Ol=r=>r.length>=2?(e,t)=>r(e,t):e=>r(e);$r();var cv=require("server-only");za();Mn();je();ie();var Zd=new WeakMap;function Oi(r){return Zd.get(r)}function eg(r,e){var n;let a={...Fn(r),...(n=e==null?void 0:e.extend)!=null?n:{}};return er(a.db),pa(a),Zo(a.blockDataProviders),e!=null&&e.onInit&&Zd.set(a,e.onInit),Object.freeze(a)}var hv=require("server-only"),Gs=globalThis;function tg(r){Gs.__chaiContextResolver=r}function Nr(){var r;return(r=Gs.__chaiContextResolver)!=null?r:null}function rg(){Gs.__chaiContextResolver=void 0}function Sa(r){var e,t,a;return{appId:(t=(e=process.env.CHAIBUILDER_API_KEY)!=null?e:process.env.CHAIBUILDER_APP_KEY)!=null?t:"",siteUrl:(a=process.env.SITE_URL)!=null?a:null,draft:!1,userId:null,lang:"en",...r}}ie();var KB=require("server-only");I();z();Ke();ht();var yv=require("server-only");ht();Ke();Yr();async function ag(r,e,t){return L(1)?ho(async()=>{en(r,t);let a=performance.now();try{return await e()}finally{Jr(r,Math.round(performance.now()-a))}}):e()}async function ng(r,e,t="api"){if(!L(2))return e();let a=performance.now();try{return await e()}finally{let n=Math.round(performance.now()-a);t==="action"?yc(r,n):fc(r,n)}}Yr();je();var Ms=require("react"),Cv=require("server-only");var kf=(0,Ms.cache)(()=>({context:null})),Fi=null;function lg(){return process.env.VITEST==="true"?(Fi!=null||(Fi={context:null}),Fi):kf()}async function ig(r){var n;let e=Nr(),t=Sa();if(!e)return sg(t,r.request);let a=await e(r);return sg({...t,...a,siteUrl:(n=a.siteUrl)!=null?n:t.siteUrl},r.request)}function og(r){var t;return r&&((t=r.split(",")[0])==null?void 0:t.trim())||null}function sg(r,e){var a;if(!e)return r;let t=r.siteUrl;if(!t){let n=(a=og(e.headers.get("host")))!=null?a:Df(e.url);n&&(t=`https://${n}`)}return{...r,siteUrl:t,licenseCheck:og(e.headers.get("x-chai-license-check"))}}function Df(r){try{return new URL(r).host}catch(e){return null}}var cg=(0,Ms.cache)(()=>{process.env.VITEST!=="true"&&(lg().context=null)});async function pg(r,e){let t=lg();if(r!==void 0){if(!Nr())throw new Error("ChaiBuilder: route props require a context resolver. Register one with `setChaiContextResolver(...)`, or call `getChaiBuilder(config)` without route props.");let n=await ig({routeProps:r,request:e});return t.context=n,n}if(t.context)return t.context;let a=Nr()?await ig({}):Sa();return t.context=a,a}var Nu=require("lodash-es");$r();Ui();Zt();function Mi(r){return`--START--
806
+ --MSG=${r.message}--
807
+ --END--`}function $i(r,e){let t=new TextEncoder,a=new ReadableStream({start(n){n.enqueue(t.encode(e)),n.close()}});return new Response(a,{status:200,headers:{"Content-Type":"text/plain; charset=utf-8","Cache-Control":"no-cache","X-AI-Error":"true","X-AI-Error-Code":r}})}function Hi(r){var e;return(r==null?void 0:r._streamingResponse)&&(r==null?void 0:r._streamResult)&&!((e=r._streamResult)!=null&&e.textStream)}var bu=require("consola"),Ba=require("drizzle-orm"),Ur=require("lodash-es"),ck=require("server-only");Kr();I();z();ka();var $e=require("drizzle-orm"),tt=require("lodash-es"),Vg=require("nanoid");I();z();ne();var Kg=4;function by(r){let e=new Map;return r.forEach(t=>{e.set(t._id,(0,Vg.nanoid)())}),r.map(t=>{var a;return{...t,_id:e.get(t._id),_parent:t._parent&&(a=e.get(t._parent))!=null?a:t._parent}})}function zg(r){return r.filter(({_type:e})=>e==="GlobalBlock"||e==="PartialBlock").map(e=>(0,tt.get)(e,"partialBlockId",(0,tt.get)(e,"globalBlock",""))).filter(e=>e!=="")}async function Ty(r,e,t){let a=e?o.appPages:o.appPagesOnline,n=new Map,i=new Set,s=zg(r).filter(l=>!i.has(l));for(let l=0;l<Kg&&s.length>0;l++){let{data:c}=await f(()=>h.select({id:a.id,blocks:a.blocks}).from(a).where((0,$e.and)((0,$e.eq)(a.app,t),(0,$e.inArray)(a.id,s)))),d=[];c&&c.forEach(u=>{var b;let g=(b=u.blocks)!=null?b:[];n.set(u.id,g),i.add(u.id),zg(g).forEach(A=>{!i.has(A)&&!d.includes(A)&&d.push(A)})}),s.forEach(u=>i.add(u)),s=d}return al(r,n)}function al(r,e,t=new Set,a=0){var i;if(a>=Kg)return r;let n=[];for(let s of r)if(s._type==="GlobalBlock"||s._type==="PartialBlock"){let l=(0,tt.get)(s,"partialBlockId",(0,tt.get)(s,"globalBlock",""));if(l===""){n.push(s);continue}if(t.has(l)){n.push(s);continue}let c=(i=e.get(l))!=null?i:[];if(c.length===0){n.push(s);continue}c=by(c),c=c.map(g=>((0,tt.isEmpty)(g._parent)&&(g._parent=s._parent),(0,tt.has)(s,"_show")&&(g._show=s._show),g));let d=new Set(t);d.add(l);let u=al(c,e,d,a+1);n.push(...u)}else n.push(s);return n}var Fr=async(r,e)=>{let t=O();return await Z(Ay,[`full-page-${t.appId}-${r}`],["full-page",`page-${r}`],!1,"fetchFullPage")(t.appId,t.draftMode,r,e)};async function Ay(r,e,t,a){var C,w,k,D,B,_,H;let n=e?o.appPages:o.appPagesOnline,i=(a==null?void 0:a.partialBlocks)!==void 0,s=null,l=t,c=(C=a==null?void 0:a.partialBlocks)!=null?C:"";if(!i){let{data:W,error:Se}=await f(()=>h.select({id:n.id,name:n.name,slug:n.slug,lang:n.lang,primaryPage:n.primaryPage,seo:n.seo,currentEditor:n.currentEditor,pageType:n.pageType,lastSaved:n.lastSaved,dynamic:n.dynamic,parent:n.parent,partialBlocks:n.partialBlocks}).from(n).where((0,$e.and)((0,$e.eq)(n.app,r),(0,$e.eq)(n.id,t))).limit(1));if(Se||!W||W.length===0)throw new Error("PAGE_NOT_FOUND");if(s=W[0],!s)throw new Error("PAGE_NOT_FOUND");l=(w=s.primaryPage)!=null?w:s.id,c=(k=s.partialBlocks)!=null?k:""}let d=(0,tt.compact)((c||"").split("|")),u=[l,...d.filter(W=>W!==l)],{data:g,error:y}=await f(()=>h.select({id:n.id,blocks:n.blocks}).from(n).where((0,$e.and)((0,$e.eq)(n.app,r),(0,$e.inArray)(n.id,u))));if(y)throw new Error("FAILED_TO_FETCH_PAGE_BLOCKS");let b=new Map;g&&g.forEach(W=>{var Se;b.set(W.id,(Se=W.blocks)!=null?Se:[])});let A=(D=b.get(l))!=null?D:[],E=(_=(B=a==null?void 0:a.mergeGlobal)!=null?B:a==null?void 0:a.mergePartials)!=null?_:!0;if(E&&d.length>0){let W=new Map;d.forEach(Se=>{let Mr=b.get(Se);Mr&&W.set(Se,Mr)}),A=al(A,W)}else E&&(A=await Ty(A,e,r));return s?{id:t,name:s.name,slug:s.slug,lang:s.lang,primaryPage:s.primaryPage,seo:(H=s.seo)!=null?H:{},currentEditor:s.currentEditor,pageType:s.pageType,lastSaved:s.lastSaved,dynamic:s.dynamic,parent:s.parent,blocks:A}:{id:t,name:"",slug:"",lang:"",primaryPage:null,seo:{},currentEditor:null,pageType:null,lastSaved:null,dynamic:null,parent:null,blocks:A}}cl();var hu=require("drizzle-orm");I();z();ne();async function _y(r,e){let t=e?h.query.apps:h.query.appsOnline,{data:a,error:n}=await f(()=>t.findFirst({where:(0,hu.eq)(o.apps.id,r),columns:{theme:!0,fallbackLang:!0,languages:!0,settings:!0,designTokens:!0,consentConfig:!0,configData:!0}}));if(n||!a)throw console.error("Error fetching site settings",n),new Error("SITE_SETTINGS_NOT_FOUND");return{...a,appKey:""}}var Ie=async()=>{let r=O();return await Z(_y,[`website-settings-${r.appId}`],["website-settings",`website-settings-${r.appId}`],!1,"fetchSiteSettings")(r.appId,r.draftMode)};var fu=3,ky=/^page-([a-zA-Z0-9_-]+)$/,Dy=new Set(["styles"]),pl=bu.consola.withTag("ChaiPublishWarmup");function By(r){let e=new Set;for(let t of r){let a=t.match(ky);if(!a)continue;let n=a[1];Dy.has(n)||e.add(n)}return Array.from(e)}function Ny(r,e){return`${r.replace(/\/$/,"")}${e.startsWith("/")?e:`/${e}`}`}async function Ly(r,e){let{data:t}=await f(()=>h.query.appPagesOnline.findFirst({where:(0,Ba.and)((0,Ba.eq)(o.appPagesOnline.app,r),(0,Ba.eq)(o.appPagesOnline.slug,e)),columns:{id:!0,primaryPage:!0,dynamic:!0,slug:!0}}));return t!=null?t:null}async function Oy(r,e){let t=await fetch(Ny(r,e),{headers:{"User-Agent":"ChaiBuilder-Publish-Warmup"}});if(!t.ok)throw new Error(`Route prefetch failed with status ${t.status} for ${e}`)}async function Fy(r){var i;let e=await Fr(r,{mergePartials:!0});if((0,Ur.isEmpty)(e.slug))return!1;let t=await Ie(),a={...kt,...(0,Ur.get)(t,"designTokens",{})},n=Xs((i=e.blocks)!=null?i:[],a);return await ll(r,n),!0}function Uy(r,e){r.add(e.id),e.primaryPage&&r.add(e.primaryPage)}async function yu(r,e,t){for(let a=0;a<r.length;a+=e)await Promise.all(r.slice(a,a+e).map(t))}async function Tu(r){let{appId:e,tags:t,paths:a,siteUrl:n}=r,i=By(t),s=(0,Ur.uniq)(a.filter(Boolean)),l=new Set,c={routesWarmed:0,routesSkipped:0,routesFailed:0,stylesWarmed:0,stylesSkipped:0,stylesFailed:0,totalMs:0};if(i.length===0&&s.length===0)return c;let d=performance.now();return await mt({appId:e,draft:!1},async()=>{n&&s.length>0?await yu(s,fu,async u=>{try{let g=await Ly(e,u);if(!g||g.dynamic){c.routesSkipped+=1;return}await Oy(n,u),Uy(l,g),c.routesWarmed+=1}catch(g){c.routesFailed+=1,pl.warn(`Failed to prefetch route ${u}: ${g instanceof Error?g.message:"Unknown error"}`)}}):s.length>0&&(c.routesSkipped+=s.length),i.length>0&&await yu(i,fu,async u=>{if(l.has(u)){c.stylesSkipped+=1;return}try{await Fy(u)?c.stylesWarmed+=1:c.stylesSkipped+=1}catch(g){c.stylesFailed+=1,pl.warn(`Failed to warm page styles for ${u}: ${g instanceof Error?g.message:"Unknown error"}`)}})}),c.totalMs=Math.round(performance.now()-d),pl.info(`Publish warmup complete \xB7 routes: ${c.routesWarmed}/${c.routesSkipped}/${c.routesFailed} \xB7 styles: ${c.stylesWarmed}/${c.stylesSkipped}/${c.stylesFailed} \xB7 ${c.totalMs}ms`),c}z();var Kk=require("server-only");var Au="https://chaibuilder.com/pro-api/validate";var Pu="MCowBQYDK2VwAyEAft33iIqz6lHFVh0pK9rVxmd8t2RKd+IUGkxEpnQ4yAo=";var Ki="0.1.0";var Tk=require("server-only"),Gy=require("consola");Ke();var Ek=require("server-only");z();el();var Cu=()=>process.env.NODE_ENV==="development";var My=new Set(["localhost","127.0.0.1","0.0.0.0","::1","[::1]"]);function wu(){let r=process.env.CHAIBUILDER_LICENSE_DEBUG;return r==="1"||r==="true"}function $y(r){let e=r.trim();if(!e)return null;try{let t=new URL(e.includes("://")?e:`https://${e}`);return _a(t.hostname).toLowerCase()}catch(t){return null}}function Hy(r){return My.has(r)||r.endsWith(".localhost")}function ji(){var t,a,n;let r=(n=(a=(t=le())==null?void 0:t.siteUrl)!=null?a:process.env.SITE_URL)!=null?n:null;if(!r)return null;let e=$y(r);return e?Hy(e)&&!wu()?null:e:null}function xu(){return wu()?ji()===null:Cu()||process.env.VITEST==="true"||process.env.VERCEL_ENV==="preview"?!0:ji()===null}var $k=require("server-only");var Ok=require("server-only"),vu=require("crypto");var vk=require("server-only");function Iu(){var r;return(r=process.env.CHAIBUILDER_LICENSE_KEY)!=null?r:""}var Wi=require("crypto"),Bk=require("server-only");var dl=null,Su=null;function qy(){return Su||(dl||(dl=(0,Wi.createPublicKey)({key:Buffer.from(Pu,"base64"),format:"der",type:"spki"})),dl)}var zy=new Set(["trial","active","expired","version_blocked","limit_reached","invalid"]);function Vy(r){if(!r||typeof r!="object")return!1;let e=r;return typeof e.domain=="string"&&typeof e.status=="string"&&zy.has(e.status)&&(e.trialEndsAt===null||typeof e.trialEndsAt=="string")&&(e.updatesUntil===null||typeof e.updatesUntil=="string")&&typeof e.issuedAt=="string"&&typeof e.expiresAt=="string"&&typeof e.nonce=="string"&&(e.graceDays===void 0||typeof e.graceDays=="number"&&Number.isFinite(e.graceDays)&&e.graceDays>=0)}function Ru(r,e){try{let t=Buffer.from(r,"base64"),a=Buffer.from(e,"base64");if(t.length===0||a.length===0||!(0,Wi.verify)(null,t,qy(),a))return null;let i=JSON.parse(t.toString("utf8"));return Vy(i)?i:null}catch(t){return null}}async function _u(r){let e=(0,vu.randomUUID)(),t;try{t=await fetch(Au,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({domain:r,licenseKey:Iu(),version:Ki,nonce:e}),signal:AbortSignal.timeout(5e3)})}catch(s){return{ok:!1,error:s instanceof Error?s.message:"network error"}}if(!t.ok)return{ok:!1,error:`validate endpoint returned ${t.status}`};let a;try{a=await t.json()}catch(s){return{ok:!1,error:"invalid JSON from validate endpoint"}}if(typeof a.payload!="string"||typeof a.signature!="string")return{ok:!1,error:"malformed validate response"};let n=Ru(a.payload,a.signature);if(!n)return{ok:!1,error:"signature verification failed"};if(n.nonce!==e)return{ok:!1,error:"nonce mismatch (possible replay)"};if(n.domain!==r)return{ok:!1,error:"domain mismatch"};let i=Date.parse(n.issuedAt);return Number.isNaN(i)||Math.abs(Date.now()-i)>3e5?{ok:!1,error:"issuedAt outside accepted clock skew"}:{ok:!0,payload:n}}var Qy=1440*60*1e3,Jy=200,gl=globalThis;function ul(){return gl.__chaiLicenseState||(gl.__chaiLicenseState={verdicts:new Map,inFlight:new Map,lastAttempt:new Map}),gl.__chaiLicenseState}function ml(r){var e;return(e=ul().verdicts.get(r))!=null?e:null}function Xy(r,e){let{verdicts:t}=ul();for(t.delete(r),t.set(r,e);t.size>Jy;){let a=t.keys().next().value;if(a===void 0)break;t.delete(a)}}async function ku(r){var i;let{inFlight:e,lastAttempt:t}=ul(),a=e.get(r);if(a)return a;if(Date.now()-((i=t.get(r))!=null?i:0)<6e5){return}t.set(r,Date.now());let n=(async()=>{let s=await _u(r);s.ok?(Xy(r,s.payload),s.payload.status,void 0):(s.error,void 0)})().catch(s=>{console.error("[chai-license] revalidation failed",s)}).finally(()=>{e.delete(r)});return e.set(r,n),n}function Du(r,e=Date.now()){var n;if(!r)return"unvalidated";if(r.status==="version_blocked")return"version_blocked";if(r.status==="expired")return"expired";if(r.status==="limit_reached")return"limit_reached";if(r.status==="invalid")return"invalid";let t=Date.parse(r.expiresAt);if(Number.isNaN(t))return"unvalidated";if(e<=t)return"valid";let a=((n=r.graceDays)!=null?n:3)*Qy;return e<=t+a?"grace":"expired"}function eb(r){if(!r)return null;let e=Number(r);return Number.isFinite(e)&&e>0?e:null}function tb(r,e){let t=Date.parse(r);return Number.isFinite(t)&&e>=t}async function Bu(r){var g,y,b,A;if(xu())return null;let e=ji();if(!e)return null;let t=Date.now(),a=ml(e),n=eb(r),i=n!==null?Math.min(n,t):null,s=a!==null&&tb(a.expiresAt,t),l=i===null||t-i>=18e6,c=a===null||s||l,d=a===null?"no-verdict":s?"ttl-expired":l?"throttle-elapsed":"fresh";c&&(await ku(e),a=ml(e));let u=Du(a,t);return(g=a==null?void 0:a.status)!=null,{state:u,status:(y=a==null?void 0:a.status)!=null?y:null,trialEndsAt:(b=a==null?void 0:a.trialEndsAt)!=null?b:null,updatesUntil:(A=a==null?void 0:a.updatesUntil)!=null?A:null,version:Ki,refreshed:c}}function Lu(r){if(!r)return[];if(Array.isArray(r))return r.flatMap(e=>e&&typeof e=="object"&&"tags"in e&&Array.isArray(e.tags)?e.tags:[]);if((0,Nu.has)(r,"tags")){let{tags:e}=r;return e!=null?e:[]}return[]}function Ou(r){if(!r||typeof r!="object"||!("paths"in r))return[];let{paths:e}=r;return e!=null?e:[]}async function rb(r,e){var c;let{invalidatePath:t,invalidateTag:a}=Rt(),n=Lu(r),i=Ou(r);if(n.length===0&&!(i!=null&&i.length))return;let s=d=>a.length>=2?a(d,"max"):a(d),l=[];n.some(d=>d.startsWith("website-settings-"))&&l.push(...(c=e==null?void 0:e.map(d=>t(d,"layout")))!=null?c:[],s("website-settings")),n.length&&l.push(...n.map(s)),i!=null&&i.length&&l.push(...i.map(d=>t(d))),l.length&&await Promise.all(l)}function Fu(r,e){return new Response(JSON.stringify(r),{status:e,headers:{"Content-Type":"application/json"}})}function Uu(r,e){return e?{...r,license:e}:r}function hl(r,e,t){let a=Gt(e);if($s(r)){let i=Mi({code:a.code,message:a.message,statusCode:a.status});return $i(a.code,i)}return Fu(Uu({ok:!1,error:a},t),a.status)}function ab(r,e){return Fu(Uu({ok:!0,data:r},e),200)}async function Gu(r,e={}){var s,l;let{catchAllRoute:t=["/(public)/[[...slug]]"]}=e,{action:a,data:n}=r,i=Bu((s=le())==null?void 0:s.licenseCheck).catch(()=>null);try{let c=await et(a,n);if(c&&typeof c=="object"&&"_streamingResponse"in c&&"_streamResult"in c){let g=c;return(l=g._streamResult)!=null&&l.isDataStream?g._streamResult.dataStream?g._streamResult.dataStream:hl(a,{code:"NO_STREAM",message:"No streaming response available. Please try again.",status:500},await i):Hi(g)?hl(a,{code:"NO_STREAM",message:"No streaming response available. Please try again.",status:500},await i):new Response(g._streamResult.textStream,{headers:{"Content-Type":"text/plain; charset=utf-8","Cache-Control":"no-cache"}})}await rb(c,t);let d=Lu(c),u=Ou(c);if(a==="PUBLISH_CHANGES"&&(d.length>0||u.length>0)){let{appId:g,siteUrl:y}=nr();Rt().runAfterResponse(()=>Tu({appId:g,siteUrl:y,tags:d,paths:u}))}return ab(c,await i)}catch(c){return hl(a,c,await i)}}z();var Yi=r=>{let e=Za();e.lang=r},Mu=()=>Wr().siteUrl;ka();var $u=(r,e)=>{var E,C,w,k,D,B;let t=qi((C=(E=r.page)==null?void 0:E.seo)!=null?C:{},r.pageData),{alternatePages:a=[],fallbackLang:n,lang:i,slug:s,primaryPage:l}=r.page,c=(k=(w=Mu())==null?void 0:w.replace(/\/$/,""))!=null?k:"",d={};for(let _ of a)_.lang&&(d[_.lang]=c?`${c}${_.slug}`:_.slug);n&&d[n]&&(d["x-default"]=d[n]);let u=l&&(B=(D=a.find(_=>_.id===l))==null?void 0:D.slug)!=null?B:s,g=(t==null?void 0:t.canonicalUrl)||(l?u:s),y=c?`${c}${g}`:g,b;if(t!=null&&t.metaOther)try{let _=typeof t.metaOther=="string"?JSON.parse(t.metaOther):t.metaOther;_&&typeof _=="object"&&Object.keys(_).length>0&&(b=_)}catch(_){}let A={title:t==null?void 0:t.title,description:t==null?void 0:t.description,...c?{metadataBase:new URL(c)}:{},openGraph:{title:(t==null?void 0:t.ogTitle)||(t==null?void 0:t.title),description:(t==null?void 0:t.ogDescription)||(t==null?void 0:t.description),images:t!=null&&t.ogImage?[t==null?void 0:t.ogImage]:[],url:y||void 0,locale:i||void 0},alternates:{canonical:y,...Object.keys(d).length>0?{languages:d}:{}},robots:{index:!(t!=null&&t.noIndex),follow:!(t!=null&&t.noFollow),googleBot:{index:!(t!=null&&t.noIndex),follow:!(t!=null&&t.noFollow)}},...b?{other:b}:{}};return e?e(A,{...r,seo:t}):A};var He=require("drizzle-orm");I();z();ne();async function nb(r,e,t,a){let n=t.draft?o.appPages:o.appPagesOnline,i=[(0,He.eq)(n.app,r),(0,He.eq)(n.pageType,e),(0,He.eq)(n.dynamic,!0),(0,He.isNotNull)(n.slug),(0,He.ne)(n.slug,"")];t.lang&&t.lang!==a?i.push((0,He.eq)(n.lang,t.lang)):i.push((0,He.eq)(n.lang,""));let{data:s,error:l}=await f(()=>h.select({slug:n.slug,lang:n.lang,pageId:n.id,primaryPageId:n.primaryPage,dynamicSlugCustom:n.dynamicSlugCustom}).from(n).where((0,He.and)(...i)));if(l)throw l;return(s!=null?s:[]).map(c=>({slug:c.slug,lang:c.lang||a,pageId:c.pageId,primaryPageId:c.primaryPageId,dynamicSlugCustom:c.dynamicSlugCustom}))}async function Hu(r,e={}){var n,i;let t=O(),a=(i=(n=e.draft)!=null?n:t.draftMode)!=null?i:!1;return await ae(nb,"fetchBaseSlugs")(t.appId,r,{...e,draft:a},t.fallbackLang)}var qu=require("drizzle-orm");I();ne();async function ib(r){var i,s,l,c,d,u,g,y;let{data:e,error:t}=await f(()=>h.select().from(o.clients).where((0,qu.eq)(o.clients.id,r)).limit(1)),a=e==null?void 0:e[0];if(t||!a)throw t||new Error("Client not found");let n=()=>{var w,k,D;let b=a==null?void 0:a.plansAndAddOns,A=(b==null?void 0:b.paymentEnv)||"sandbox",E=a,C=A==="sandbox"?((b==null?void 0:b.plans)||[]).map(B=>({...B,items:((B==null?void 0:B.items)||[]).map(_=>({..._,id:_==null?void 0:_.sandboxId}))})):b==null?void 0:b.plans;return{...b||{},plans:C,paymentEnv:A,sandboxToken:((D=(k=(w=E==null?void 0:E.envs)==null?void 0:w.payment)==null?void 0:k.sandbox)==null?void 0:D.client)||""}};return{id:a.id,...(a==null?void 0:a.settings)||{},name:((i=a==null?void 0:a.settings)==null?void 0:i.name)||"Your Builder",logo:((s=a==null?void 0:a.settings)==null?void 0:s.logo)||"https://placehold.co/52x52",favicon:((l=a==null?void 0:a.settings)==null?void 0:l.favicon)||"https://placehold.co/52x52",feedbackSubmissions:((c=a==null?void 0:a.settings)==null?void 0:c.feedbackSubmissions)||"",loginProviders:((d=a==null?void 0:a.settings)==null?void 0:d.loginProviders)||[],defaultSiteLang:((u=a==null?void 0:a.settings)==null?void 0:u.defaultSiteLang)||"en",theme:((g=a==null?void 0:a.settings)==null?void 0:g.theme)||"",senderEmail:((y=a==null?void 0:a.settings)==null?void 0:y.senderEmail)||"",coreFeatures:(a==null?void 0:a.coreFeatures)||{},plansAndAddOns:n(),rolesAndPermissions:(a==null?void 0:a.rolesAndPermissions)||{},ai:(a==null?void 0:a.ai)||{models:[]},loginHtml:a.loginHtml,helpHtml:(a==null?void 0:a.helpHtml)||null,superAdmins:(a==null?void 0:a.superAdmins)||[],madeWithBadge:(a==null?void 0:a.madeWithBadge)||null}}var zu=async r=>await Da(ib,[`client-settings-${r}`],["client-settings",`settings-${r}`])(r);var Qi=require("react");$r();z();ne();var Mt=require("drizzle-orm");I();z();ne();Ge();async function ob(r,e,t,a){let n=e?o.appPages:o.appPagesOnline,{data:i}=await f(()=>h.select({id:n.id,name:n.name,slug:n.slug,lang:n.lang,dynamic:n.dynamic,primaryPage:n.primaryPage}).from(n).where((0,Mt.and)((0,Mt.eq)(n.app,r),(0,Mt.or)((0,Mt.eq)(n.primaryPage,t),(0,Mt.eq)(n.id,t))))),l=O().fallbackLang;return(i!=null?i:[]).filter(c=>(c.lang||l)!==a).map(c=>{var d;return{id:c.id,name:c.name,slug:c.slug,lang:c.lang||l,dynamic:(d=c.dynamic)!=null?d:!1,primaryLang:c.id===t}})}async function fl(r,e){let t=O();return await Z(ob,yp(t.appId,t.draftMode,r,e),[`alternate-${r}`,`page-${r}`],!1,"getAlternateLangPages")(t.appId,t.draftMode,r,e)}var Vu=require("drizzle-orm");I();la();z();ne();Ge();function sb(r){return{id:r.id,name:r.name,slug:r.slug,lang:r.lang,primaryPage:r.primaryPage,pageType:r.pageType,dynamic:r.dynamic,dynamicSlugCustom:r.dynamicSlugCustom,parent:r.parent}}async function lb(r,e){let t=e?o.appPages:o.appPagesOnline,{data:a}=await f(()=>h.select(sb(t)).from(t).where((0,Vu.eq)(t.app,r)));return a!=null?a:[]}function cb(r,e,t){let a=O(),n=new ve(t),i=e.filter(y=>!y.primaryPage),s=e.filter(y=>y.primaryPage),l=n.buildPrimaryTree(i),c=n.buildLanguageTree(s,l),d=r.primaryPage?c:l,u=(y,b,A=[])=>{var E;for(let C of y){if(C.id===b)return[...A,C];if(((E=C.children)==null?void 0:E.length)>0){let w=u(C.children,b,[...A,C]);if(w)return w}}return null},g=u(d,r.id);return g?g.map(y=>({id:y.id,name:y.name,slug:y.slug,lang:y.lang||r.lang||a.fallbackLang})):[{id:r.id,name:r.name,slug:r.slug,lang:r.lang||a.fallbackLang}]}async function pb(r,e,t){let a=await lb(r,e),n=a.find(i=>i.id===t);if(!n)throw new Error("PAGE_NOT_FOUND");return cb(n,a,r)}async function Ku(r){let e=O();return await Z(pb,bp(e.appId,e.draftMode,r),[`page-${r}`,`breadcrumb-${r}`],!1,"getBreadcrumb")(e.appId,e.draftMode,r)}var Oe=require("drizzle-orm");I();z();ne();Ge();ie();var Le=require("lodash-es");function yl(r,e,t){let a=e.find(u=>u.slug===r&&!u.dynamic);if(a)return a;let n=r.slice(1),i=`/${(0,Le.take)(n.split("/"),1).join("/")}`,s=`/${(0,Le.take)(n.split("/"),2).join("/")}`,l=e.filter(u=>u.dynamic&&(u.slug.includes(i)||u.slug.includes(s)));if(l.length===0)throw new Error("PAGE_NOT_FOUND");let c=(0,Le.reverse)((0,Le.sortBy)(l,u=>u.slug.split("/").length)),d=(0,Le.keys)(t);d.length>0&&c.sort((u,g)=>{let y=d.indexOf(u.pageType||""),b=d.indexOf(g.pageType||""),A=y===-1?Number.MAX_SAFE_INTEGER:y,E=b===-1?Number.MAX_SAFE_INTEGER:b;return A-E});for(let u of c){if((0,Le.isEmpty)(u.slug))continue;let g=u.pageType||"",y=(0,Le.get)(t,g,""),b=u.dynamicSlugCustom||"",A=u.slug+y+b,E=new RegExp(A),C=r.match(E);if(C&&C[0]===r)return u}throw new Error("PAGE_NOT_FOUND")}function ju(){return Yo().reduce((e,t)=>(t.dynamicSegments&&(e[t.key]=t.dynamicSegments),e),{})}async function db(r,e,t){var i;let a=e?o.appPages:o.appPagesOnline,{data:n}=await f(()=>h.select({id:a.id,name:a.name,slug:a.slug,lang:a.lang,primaryPage:a.primaryPage,pageType:a.pageType,dynamic:a.dynamic,dynamicSlugCustom:a.dynamicSlugCustom,parent:a.parent}).from(a).where((0,Oe.and)((0,Oe.eq)(a.app,r),(0,Oe.eq)(a.slug,t),(0,Oe.or)((0,Oe.eq)(a.dynamic,!1),(0,Oe.isNull)(a.dynamic)))).limit(1));return(i=n==null?void 0:n[0])!=null?i:null}async function gb(r,e){let t=e?o.appPages:o.appPagesOnline,{data:a}=await f(()=>h.select({id:t.id,name:t.name,slug:t.slug,lang:t.lang,primaryPage:t.primaryPage,pageType:t.pageType,dynamic:t.dynamic,dynamicSlugCustom:t.dynamicSlugCustom,parent:t.parent}).from(t).where((0,Oe.and)((0,Oe.eq)(t.app,r),(0,Oe.eq)(t.dynamic,!0))));return a!=null?a:[]}async function ub(r,e,t){let a=await db(r,e,t);if(a)return a;let n=await gb(r,e),i=ju();return yl(t,n,i)}async function Wu(r){let e=O();return await Z(ub,mp(e.appId,e.draftMode,r),Tp(r),!1,"resolvePageBySlug")(e.appId,e.draftMode,r)}var Na=require("drizzle-orm");I();z();ne();Ln();async function mb(r,e,t){var l,c;let a=e?o.appPages:o.appPagesOnline,{data:n,error:i}=await f(()=>h.select({seo:a.seo,currentEditor:a.currentEditor,lastSaved:a.lastSaved,tracking:a.tracking,metadata:a.metadata}).from(a).where((0,Na.and)((0,Na.eq)(a.app,r),(0,Na.eq)(a.id,t))).limit(1));if(i||!(n!=null&&n[0]))throw new Error("PAGE_NOT_FOUND");let s=n[0];return{seo:(l=s.seo)!=null?l:{},currentEditor:s.currentEditor,lastSaved:s.lastSaved,tracking:s.tracking,metadata:(c=s.metadata)!=null?c:{}}}async function bl(r){let e=O();return await Z(mb,Pp(e.appId,r),Cp(r),!1,"fetchPageDetails")(e.appId,e.draftMode,r)}z();var Tl=async r=>{O();let e=r.split("/").pop();if(!e)throw new Error("PAGE_NOT_FOUND");let t=await Ie(),a=await Fr(e),n=r.split("/").length>3?r.split("/")[2]:t==null?void 0:t.fallbackLang;return{...a,lang:n,breadcrumbPages:[],langPages:[]}};async function hb(r,e){var c,d,u;let t=(c=r.primaryPage)!=null?c:r.id,a=r.lang||e,[n,i,s]=await Promise.all([bl(r.id),Ie(),fl(t,a)]),l=(i==null?void 0:i.fallbackLang)||e;return{id:r.id,name:r.name,slug:r.slug,lang:r.lang||l,primaryPage:r.primaryPage,seo:(d=n.seo)!=null?d:{},currentEditor:n.currentEditor,pageType:r.pageType,lastSaved:n.lastSaved,dynamic:r.dynamic,dynamicSlugCustom:r.dynamicSlugCustom,parent:r.parent,blocks:[],fallbackLang:l,breadcrumb:[],alternatePages:s,tracking:n.tracking,metadata:(u=n.metadata)!=null?u:{}}}async function fb(r,e){var g,y,b;let t=(g=r.primaryPage)!=null?g:r.id,a=r.lang||e,[n,i,s,l,c]=await Promise.all([Fr(t,{mergePartials:!0}),bl(r.id),Ie(),Ku(r.id),fl(t,a)]),d=n.blocks,u=(s==null?void 0:s.fallbackLang)||e;return{id:r.id,name:r.name,slug:r.slug,lang:r.lang||u,primaryPage:r.primaryPage,seo:(y=i.seo)!=null?y:{},currentEditor:i.currentEditor,pageType:r.pageType,lastSaved:i.lastSaved,dynamic:r.dynamic,dynamicSlugCustom:r.dynamicSlugCustom,parent:r.parent,blocks:d,fallbackLang:u,breadcrumb:l,alternatePages:c,tracking:i.tracking,metadata:(b=i.metadata)!=null?b:{}}}var Yu=(0,Qi.cache)(async r=>(O(),Wu(r))),Qu=(0,Qi.cache)(async r=>{if(r.startsWith("/_partial/"))return await Tl(r);let e=O();try{let t=await Yu(r);return await ae(hb,"fetchPageMetadata")(t,e.fallbackLang)}catch(t){throw t instanceof Error&&t.message==="PAGE_NOT_FOUND"&&Rt().pageNotFound(),t}}),Ji=(0,Qi.cache)(async r=>{if(r.startsWith("/_partial/"))return await Tl(r);let e=O();try{let t=await Yu(r);return await ae(fb,"fetchPageData")(t,e.fallbackLang)}catch(t){throw t instanceof Error&&t.message==="PAGE_NOT_FOUND"&&Rt().pageNotFound(),t}});var Al=require("lodash-es");ie();z();ne();async function yb(r,e,t){return await ga({lang:t,draft:e,inBuilder:!1})}var La=async r=>{let e=O(),t=e.appId;return await Z(yb,[`site-global-data-${t}-${r}`],["site-global-data",`site-global-data-${t}`,"global:site-settings"],!1,"fetchSiteGlobalData")(t,e.draftMode,r)};async function bb(r,e,t,a){let n=We(r);return n!=null&&n.dataProvider?await n.dataProvider({lang:e,draft:t,inBuilder:!1,pageProps:a}):{}}var Oa=async r=>{var c,d;let e=O(),{pageType:t,pageProps:a,lang:n}=r,i=e.appId,s=(c=a.slug)!=null?c:"",l=(d=a.pageId)!=null?d:"";return await Z(bb,[`page-type-data-${i}-${t}-${n}-${s}-${l}`],["page-type-data",`page-type-data-${i}`,`page-type-data-${i}-${t}`],!1,"fetchDataByPageType")(t,n,e.draftMode,a)};async function Tb(r,e,t,a,n,i){var l,c;let s=Xt(r);if(!s)return{[`#${r}/${e}`]:[],[`#${r}/${e}/totalItems`]:-1};try{let d=await s.fetch({lang:t,draft:a,inBuilder:!1,pageProps:n,block:i});return{[`#${r}/${e}`]:(l=(0,Al.get)(d,"items",[]))!=null?l:[],[`#${r}/${e}/totalItems`]:(c=(0,Al.get)(d,"totalItems",-1))!=null?c:-1}}catch(d){return{[`#${r}/${e}`]:[],[`#${r}/${e}/totalItems`]:-1}}}var Pl=async r=>{let e=O(),{blocks:t,pageProps:a,lang:n}=r,i=t.filter(c=>{var d;return c._type==="Repeater"&&((d=c==null?void 0:c.repeaterItems)==null?void 0:d.includes("{{#"))});if(i.length===0)return{};let s=i.map(c=>{let d=c.repeaterItems.replace("{{#","").replace("}}","");return ae(Tb,"fetchCollectionData")(d,c._id,n,e.draftMode,a,c)});return(await Promise.all(s)).reduce((c,d)=>({...c,...d}),{})},Xi=async r=>{let{blocks:e,pageProps:t,pageType:a,lang:n}=r,[i,s,l]=await Promise.all([La(n),Oa({pageType:a,pageProps:t,lang:n}),Pl({blocks:e,pageProps:t,lang:n})]);return{...s,global:i,...l}};var Ju=require("react");var Xu=(0,Ju.cache)(async r=>{let[e,t]=await Promise.all([Qu(r),Ie()]);Yi(e.lang);let a={slug:r,pageType:e.pageType,fallbackLang:e.fallbackLang,pageLang:e.lang,pageId:e.id,primaryPageId:e.primaryPage||e.id,languagePageId:e.id},[n,i]=await Promise.all([La(e.lang),Oa({pageType:e.pageType,pageProps:a,lang:e.lang})]),s={...i,global:n};return{page:e,settings:t,pageData:s}});var tm=require("react");var Zi=require("lodash-es"),em=require("react");ie();z();ne();var St=require("drizzle-orm");I();z();ne();Ge();async function Ab(r,e,t){var s;let a=e?o.appPages:o.appPagesOnline,{data:n,error:i}=await f(()=>h.select({slug:a.slug}).from(a).where((0,St.and)((0,St.eq)(a.app,r),(0,St.eq)(a.id,t))).limit(1));if(i||!((s=n==null?void 0:n[0])!=null&&s.slug))throw new Error("PAGE_NOT_FOUND");return n[0].slug}async function Pb(r,e,t){if(t.length===0)return{};let a=e?o.appPages:o.appPagesOnline,{data:n,error:i}=await f(()=>h.select({id:a.id,slug:a.slug}).from(a).where((0,St.and)((0,St.eq)(a.app,r),(0,St.inArray)(a.id,t))));if(i||!n)return{};let s={};for(let l of n)l.slug&&(s[l.id]=l.slug);return s}async function Cl(r){let e=O();try{return await Z(Ab,hp(e.appId,e.draftMode,r),[`page-${r}`],!1,"resolvePageSlug")(e.appId,e.draftMode,r)}catch(t){return null}}async function Zu(r){let e=O(),t=[...new Set(r.filter(Boolean))];if(t.length===0)return new Map;if(t.length===1){let n=await Cl(t[0]);return n?new Map([[t[0],n]]):new Map}let a=await Z(Pb,fp(e.appId,e.draftMode,t),ur(t),!1,"resolvePageSlugs")(e.appId,e.draftMode,t);return new Map(Object.entries(a))}function Cb(r){let e=[],t=new Set;function a(n){if(n)if(typeof n=="string"&&(0,Zi.startsWith)(n,"pageType:")){let i=n.split(":");if(i.length===3&&i[1]&&i[2]){let s=n;t.has(s)||(t.add(s),e.push({pageTypeKey:i[1],id:i[2],href:s}))}}else typeof n=="object"&&n!==null&&(Array.isArray(n)?n.forEach(a):Object.values(n).forEach(a))}return r.forEach(n=>a(n)),e}async function Eb(r,e,t,a,n){let i=Cb(n);if(i.length===0)return n;let s=new Map,l=new Map;i.forEach(d=>{let u=l.get(d.pageTypeKey)||[];u.push(d),l.set(d.pageTypeKey,u)}),await Promise.all(Array.from(l.entries()).map(async([d,u])=>{let g=We(d);if(!g){u.forEach(b=>s.set(b.href,"#"));return}if(g.resolveLink){await Promise.all(u.map(async b=>{try{let A=await g.resolveLink(b.id,e,t);s.set(b.href,A)}catch(A){s.set(b.href,"#")}}));return}let y=await Zu(u.map(b=>b.id));u.forEach(b=>{var A;s.set(b.href,(A=y.get(b.id))!=null?A:"#")})}));function c(d){if(!d)return d;if(typeof d=="string"&&(0,Zi.startsWith)(d,"pageType:"))return s.get(d)||d;if(Array.isArray(d))return d.map(c);if(typeof d=="object"&&d!==null){let u={};for(let[g,y]of Object.entries(d))u[g]=c(y);if(typeof d.href=="string"&&(0,Zi.startsWith)(d.href,"pageType:")){let g=d.href.split(":");g.length===3&&g[2]&&(u.pageId=g[2])}return u}return d}return n.map(d=>c(d))}var eo=(0,em.cache)(async(r,e)=>{let t=O(),a=e||t.lang||t.fallbackLang;return await ae(Eb,"resolveLinksData")(t.appId,t.draftMode,a,r.id,r.blocks)});var rm=(0,tm.cache)(async(r,e)=>{let[t,a]=await Promise.all([Ji(r),Ie()]);Yi(t.lang);let n={slug:r,pageType:t.pageType,fallbackLang:t.fallbackLang,pageLang:t.lang,dynamic:t.dynamic,dynamicSlugCustom:t.dynamicSlugCustom,pageBaseSlug:t.slug,pageId:t.id,primaryPageId:t.primaryPage||t.id,languagePageId:t.id},i=e?{...n,...e(t,a)}:n,s=await eo(t),l=await Xi({blocks:s,pageProps:i,pageType:t.pageType,lang:t.lang});return{page:{...t,blocks:s},settings:a,pageData:l,pageProps:i}});var dt=require("drizzle-orm");I();z();ne();async function wb(r,e,t,a){let n=e==="live"?o.appPagesOnline:o.appPages,i={};for(let d of t)d==="updatedAt"?i.updatedAt=n.lastSaved:n[d]&&(i[d]=n[d]);i.id||(i.id=n.id),i.slug||(i.slug=n.slug),i.updatedAt||(i.updatedAt=n.lastSaved),i.name||(i.name=n.name),i.lang||(i.lang=n.lang);let s=[(0,dt.eq)(n.app,r),(0,dt.isNull)(n.deletedAt),(0,dt.ne)(n.slug,"")],{data:l,error:c}=await f(()=>h.select(i).from(n).where((0,dt.and)(...s)).orderBy((0,dt.desc)(n.lastSaved)));if(c)throw new Error(`Error getting pages: ${c.message}`);return!l||l.length===0?[]:l.map(d=>({...d,lang:d.lang||a}))}async function am(r,e){let t=Za(),{fields:a=["id","slug","updatedAt","name","lang"]}=e||{};return ae(wb)(t.appId,r,a,t.fallbackLang)}var nm=require("drizzle-orm");I();z();ne();async function xb(r){var a;let{data:e,error:t}=await f(()=>h.query.appDomains.findFirst({where:(0,nm.eq)(o.appDomains.app,r),columns:{subdomain:!0,domain:!0,domainConfigured:!0}}));if(t||!(e!=null&&e.subdomain))throw console.error("Error fetching site domains",t),new Error("SITE_DOMAINS_NOT_FOUND");return{subdomain:e.subdomain,domain:e.domain,domainConfigured:(a=e.domainConfigured)!=null?a:!1}}var im=async()=>{let r=O();if(!r.appId)throw new Error("APP_ID_NOT_FOUND");return await ae(xb)(r.appId)};var om=require("lodash-es");ie();z();ne();async function Ib(r,e){if(!(0,om.startsWith)(r,"pageType:"))return r;let t=r.split(":");if(t.length!==3||!t[1]||!t[2])return"#";let a=t[1],n=t[2],i=We(a);if(!i)return"#";let s=O();if(i.resolveLink)return await i.resolveLink(n,s.draftMode,e);let l=await Cl(n);return l!=null?l:"#"}var sm=ae(Ib,"resolveLink");Zt();var U=async(r,e)=>et(r,e),lm=r=>U("GET_ASSET",r),cm=(r={})=>U("GET_ASSETS",r),pm=r=>U("SEARCH_IMAGES",r),dm=r=>U("UPDATE_ASSET",r),gm=r=>U("CREATE_PAGE",r),um=r=>U("DELETE_PAGE",r),mm=r=>U("DUPLICATE_PAGE",r),hm=r=>U("GET_WEBSITE_PAGES",r),fm=r=>U("TAKE_OFFLINE",r),ym=r=>U("UPDATE_PAGE",r),bm=r=>U("UPDATE_PAGE_METADATA",r),Tm=()=>U("GET_LIBRARIES",{}),Am=()=>U("GET_LIBRARY_GROUPS",{}),Pm=r=>U("DELETE_LIBRARY_ITEM",r),Cm=r=>U("GET_LIBRARY_ITEM",r),Em=r=>U("GET_LIBRARY_ITEMS",r),wm=r=>U("UPSERT_LIBRARY_ITEM",r),xm=r=>U("GET_TEMPLATES_BY_TYPE",r),Im=r=>U("MARK_AS_TEMPLATE",r),Sm=r=>U("UNMARK_AS_TEMPLATE",r),Rm=r=>U("DELETE_PERMANENTLY",r),vm=r=>U("GET_TRASHED_ITEMS",r),_m=r=>U("PERMANENTLY_DELETE_BY_DAYS",r),km=r=>U("RESTORE_TRASHED_ITEM",r),Dm=r=>U("TRASH_ENTITY",r),Bm=()=>U("GET_ROLES",{}),Nm=r=>U("GET_ROLE",r),Lm=r=>U("CREATE_ROLE",r),Om=r=>U("UPDATE_ROLE",r),Fm=r=>U("DELETE_ROLE",r),Um=r=>U("DELETE_PAGE_REVISION",r),Gm=r=>U("GET_PAGE_REVISIONS",r),Mm=r=>U("GET_REVISION_PAGE",r),$m=r=>U("RESTORE_PAGE_REVISION",r);var to=null;function Sb(r,e){var t;if(r==="getPagePayload"||r==="getPage"||r==="getPageMetadataPayload")return typeof e[0]=="string"?`slug=${e[0]}`:void 0;if(r==="runAction"||r.startsWith("runAction:")||r.startsWith("tryAction:"))return typeof e[0]=="string"?e[0]:void 0;if(r==="handleHttpAction"&&e[0]&&typeof e[0]=="object"&&"action"in e[0])return String((t=e[0].action)!=null?t:"")}function wl(r,e,t,a="api"){return(...n)=>mt(r,()=>{var s,l,c;let i=Sb(t,n);if(uo(t,i)&&ut()>=1?fo(t,(s=i!=null?i:mo())!=null?s:void 0):(l=le())!=null&&l.traceId&&ut()>=1&&en(t,(c=i!=null?i:mo())!=null?c:void 0),ut()>=2)return ng(t,()=>e(...n),a);if(ut()>=1){let d=performance.now(),u=e(...n),g=()=>Jr(t,Math.round(performance.now()-d));return u instanceof Promise?u.finally(g):(g(),u)}return e(...n)})}function El(r,e,t){return(...a)=>{let n=t(...a);return wl(r,e,n,"action")(...a)}}async function Hm(r,e,t){let{config:a,routeProps:n,request:i}="config"in r?r:{config:r,routeProps:e,request:t};if(to||(to=vb(a)),i!==void 0&&n===void 0)throw new Error("ChaiBuilder: when passing a request, supply route props as the second argument ({ params, searchParams }).");cg();let s=performance.now(),l=await pg(n,i);return await qa(),await to.ensureSynced(),ut()>=1&&mc("getChaiBuilder",Math.round(performance.now()-s)),Rb(to,l)}function Rb(r,e){let{config:t}=r,a=(g,y)=>wl(e,g,y),n=wl(e,async g=>await t.globalDataProvider(g),"getGlobalData"),i=async(g,y)=>{let{dispatchChaiAction:b}=await Promise.resolve().then(()=>(Zt(),Vs));return b(g,y)},s=async(g,y)=>{let{tryChaiAction:b}=await Promise.resolve().then(()=>(Zt(),Vs));return b(g,y)},l=El(e,i,(g,y)=>`runAction:${g}`),c=El(e,s,(g,y)=>`tryAction:${g}`),d=qr(),u={db:d,schema:o};return{config:t,getConfig:g=>t[g],context:Object.freeze({...e}),db:d,schema:o,safeQuery:g=>f(()=>g(u)),runPageRequest:g=>Promise.resolve(mt(e,g)),withRenderPhase:(g,y,b)=>Promise.resolve(mt(e,()=>ag(g,y,b))),runPageRender:(g,y)=>Promise.resolve(mt(e,async()=>{let b=performance.now();uo("renderPage",`slug=${g}`)&&fo("renderPage",`slug=${g}`);try{return await y()}finally{ut()>=1&&Jr("renderPage",Math.round(performance.now()-b))}})),getPage:a(Ji,"getPage"),getPagePayload:a(rm,"getPagePayload"),getPageData:a(Xi,"getPageData"),generateMetaData:a($u,"generateMetaData"),getPageMetadataPayload:a(Xu,"getPageMetadataPayload"),getPages:a(am,"getPages"),getBaseSlugs:a(Hu,"getBaseSlugs"),getSiteGlobalData:a(La,"getSiteGlobalData"),getDataByPageType:a(Oa,"getDataByPageType"),getDataByCollections:a(Pl,"getDataByCollections"),getGlobalData:n,getPageStyles:a(async(...g)=>{let{getPageStyles:y}=await Promise.resolve().then(()=>(cl(),mu));return y(...g)},"getPageStyles"),getBlocksStyles:a(async(...g)=>{let{getBlocksStyles:y}=await Promise.resolve().then(()=>(ol(),su));return y(...g)},"getBlocksStyles"),resolveLink:a(sm,"resolveLink"),resolveLinksInBlocks:a(eo,"resolveLinksInBlocks"),getSiteSettings:a(Ie,"getSiteSettings"),getSiteDomains:a(im,"getSiteDomains"),getClientSettings:a(zu,"getClientSettings"),getPageType:st,getPageTypes:hr,getCollection:Xt,getCollections:da,getTrashEntity:Ct,getAIConfig:ft,runAction:l,tryAction:c,handleHttpAction:El(e,Gu,g=>{var y;return(y=g==null?void 0:g.action)!=null?y:"handleHttpAction"}),getAssets:a(cm,"getAssets"),getAsset:a(lm,"getAsset"),updateAsset:a(dm,"updateAsset"),searchImages:a(pm,"searchImages"),createPage:a(gm,"createPage"),deletePage:a(um,"deletePage"),duplicatePage:a(mm,"duplicatePage"),getWebsitePages:a(hm,"getWebsitePages"),updatePage:a(ym,"updatePage"),updatePageMetadata:a(bm,"updatePageMetadata"),takeOffline:a(fm,"takeOffline"),getLibraries:a(Tm,"getLibraries"),getLibraryGroups:a(Am,"getLibraryGroups"),getLibraryItem:a(Cm,"getLibraryItem"),getLibraryItems:a(Em,"getLibraryItems"),upsertLibraryItem:a(wm,"upsertLibraryItem"),deleteLibraryItem:a(Pm,"deleteLibraryItem"),getTemplatesByType:a(xm,"getTemplatesByType"),markAsTemplate:a(Im,"markAsTemplate"),unmarkAsTemplate:a(Sm,"unmarkAsTemplate"),getTrashedItems:a(vm,"getTrashedItems"),restoreTrashedItem:a(km,"restoreTrashedItem"),deleteTrashedItemPermanently:a(Rm,"deleteTrashedItemPermanently"),permanentlyDeleteByDays:a(_m,"permanentlyDeleteByDays"),trashEntity:a(Dm,"trashEntity"),getPageRevisions:a(Gm,"getPageRevisions"),getRevisionPage:a(Mm,"getRevisionPage"),deletePageRevision:a(Um,"deletePageRevision"),restorePage:a($m,"restorePage"),roles:{getAll:a(Bm,"roles.getAll"),get:a(Nm,"roles.get"),create:a(Lm,"roles.create"),update:a(Om,"roles.update"),delete:a(Fm,"roles.delete")}}}function vb(r){er(r.db),pa(r),pc(r.debugLevel);let e=Object.freeze(r),t=null;return{config:e,ensureSynced:async()=>{t||(t=(async()=>{let a=Oi(e);a&&await a(Wo())})()),await t}}}I();N();Qe();R();nt();var xl={ab:"Abkhazian",aa:"Afar",af:"Afrikaans",ak:"Akan",sq:"Albanian",am:"Amharic",ar:"Arabic",an:"Aragonese",hy:"Armenian",as:"Assamese",av:"Avaric",ae:"Avestan",ay:"Aymara",az:"Azerbaijani",bm:"Bambara",ba:"Bashkir",eu:"Basque",be:"Belarusian",bn:"Bengali",bh:"Bihari",bi:"Bislama",bs:"Bosnian",br:"Breton",bg:"Bulgarian",my:"Burmese",ca:"Catalan",ch:"Chamorro",ce:"Chechen",ny:"Chichewa",zh:"Chinese","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cv:"Chuvash",kw:"Cornish",co:"Corsican",cr:"Cree",hr:"Croatian",cs:"Czech",da:"Danish",dv:"Maldivian",nl:"Dutch",dz:"Dzongkha",en:"English",eo:"Esperanto",et:"Estonian",ee:"Ewe",fo:"Faroese",fj:"Fijian",fi:"Finnish",fr:"French",ff:"Fula, Pular",gl:"Galician",gd:"Gaelic (Scottish)",gv:"Manx",ka:"Georgian",de:"German",el:"Greek",kl:"Kalaallisut",gn:"Guarani",gu:"Gujarati",ht:"Haitian Creole",ha:"Hausa",he:"Hebrew",hz:"Herero",hi:"Hindi",ho:"Hiri Motu",hu:"Hungarian",is:"Icelandic",io:"Ido",ig:"Igbo",id:"Indonesian",ia:"Interlingua",ie:"Interlingue",iu:"Inuktitut",ik:"Inupiak",ga:"Irish",it:"Italian",ja:"Japanese",jv:"Javanese",kn:"Kannada",kr:"Kanuri",ks:"Kashmiri",kk:"Kazakh",km:"Khmer",ki:"Kikuyu",rw:"Kinyarwanda",rn:"Kirundi",ky:"Kyrgyz",kv:"Komi",kg:"Kongo",ko:"Korean",ku:"Kurdish",kj:"Kwanyama",lo:"Lao",la:"Latin",lv:"Latvian",li:"Limburgish",ln:"Lingala",lt:"Lithuanian",lu:"Luga-Katanga",lg:"Luganda, Ganda",lb:"Luxembourgish",mk:"Macedonian",mg:"Malagasy",ms:"Malay",ml:"Malayalam",mt:"Maltese",mi:"Maori",mr:"Marathi",mh:"Marshallese",mo:"Moldavian",mn:"Mongolian",na:"Nauru",nv:"Navajo",ng:"Ndonga",nd:"Northern Ndebele",ne:"Nepali",no:"Norwegian",nb:"Norwegian bokm\xE5l",nn:"Norwegian nynorsk",ii:"Sichuan Yi",oc:"Occitan",oj:"Ojibwe",cu:"Old Church Slavonic",or:"Oriya",om:"Oromo",os:"Ossetian",pi:"P\u0101li",ps:"Pashto, Pushto",fa:"Persian (Farsi)",pl:"Polish",pt:"Portuguese",pa:"Punjabi (Eastern)",qu:"Quechua",rm:"Romansh",ro:"Romanian",ru:"Russian",se:"Sami",sm:"Samoan",sg:"Sango",sa:"Sanskrit",sr:"Serbian",sh:"Serbo-Croatian",st:"Sesotho",tn:"Setswana",sn:"Shona",sd:"Sindhi",si:"Sinhalese",ss:"Swati",sk:"Slovak",sl:"Slovenian",so:"Somali",nr:"Southern Ndebele",es:"Spanish",su:"Sundanese",sw:"Swahili (Kiswahili)",sv:"Swedish",tl:"Tagalog",ty:"Tahitian",tg:"Tajik",ta:"Tamil",tt:"Tatar",te:"Telugu",th:"Thai",bo:"Tibetan",ti:"Tigrinya",to:"Tonga",ts:"Tsonga",tr:"Turkish",tk:"Turkmen",tw:"Twi",ug:"Uyghur",uk:"Ukrainian",ur:"Urdu",uz:"Uzbek",ve:"Venda",vi:"Vietnamese",vo:"Volap\xFCk",wa:"Wallon",cy:"Welsh",wo:"Wolof",fy:"Western Frisian",xh:"Xhosa",yi:"Yiddish",yo:"Yoruba",za:"Zhuang, Chuang",zu:"Zulu"};Ui();Zt();qs();z();Zt();var ro=r=>async e=>{let{apiKey:t,userId:a}=r,{action:n,data:i}=e;return mt({appId:t,userId:a},()=>et(n,i))},Il=ro;Qe();Qe();N();R();var zm=require("drizzle-orm/postgres-js"),Vm=fe(require("postgres"),1);Ga();ht();var Sl={logQuery(r,e){hc(r,e)}};Ke();ht();function _b(r){var a;let[e,...t]=r;return Array.isArray(e)&&"raw"in e?e.reduce((i,s,l)=>{var c;return i+s+((c=t[l])!=null?c:"")},""):String((a=r[0])!=null?a:"query")}function kb(r){return r!==null&&typeof r=="object"&&typeof r.then=="function"&&typeof r.values=="function"}function Db(r,e,t){return r.then(()=>Qr(Math.round(performance.now()-t),e()),()=>Qr(Math.round(performance.now()-t),e())),r}function qm(r,e,t){return kb(r)?Db(r,e,t):r&&typeof r.then=="function"?r.then(a=>(Qr(Math.round(performance.now()-t),e()),a),a=>{throw Qr(Math.round(performance.now()-t),e()),a}):r}function Bb(r){return new Proxy(r,{apply(e,t,a){if(!L(1))return Reflect.apply(e,t,a);let n=performance.now(),i=Reflect.apply(e,t,a);return qm(i,()=>_b(a),n)},get(e,t,a){let n=Reflect.get(e,t,a);return typeof n=="function"&&t==="unsafe"?(...i)=>{if(!L(1))return n.apply(e,i);let s=performance.now(),l=n.apply(e,i);return qm(l,()=>{var c;return String((c=i[0])!=null?c:"unsafe query")},s)}:typeof n=="function"?n.bind(e):n}})}function ao(r,e,t){return(0,zm.drizzle)(Bb(r),{schema:e,logger:t})}function Nb(r,e,t){var s,l,c;let a;try{a=new URL(r.replace(/^postgres:/,"postgresql:"))}catch(d){a=new URL("postgresql://localhost")}let n=a.port==="6543"||a.searchParams.get("pgbouncer")==="true",i=a.hostname.includes("supabase");return{max:(s=e==null?void 0:e.max)!=null?s:n?5:1,idle_timeout:(l=e==null?void 0:e.idle_timeout)!=null?l:n&&i?5:20,connect_timeout:(c=e==null?void 0:e.connect_timeout)!=null?c:10,prepare:!1,...i?{ssl:"require"}:{},...t?{connection:{search_path:t}}:{}}}function Rl(r,e,t){return(0,Vm.default)(r,Nb(r,e,t))}function Lb(r){if(+("url"in r)+ +("sql"in r)+ +("drizzle"in r)!==1)throw new Error("ChaiBuilder: createPostgresDB expects exactly one of `url`, `sql`, or `drizzle`.")}function Km(r){if(Lb(r),"drizzle"in r)return{drizzle:r.drizzle,schema:ze,dialect:"pg"};if("sql"in r)return{drizzle:ao(r.sql,ze,Sl),schema:ze,dialect:"pg"};let e=Rl(r.url,r.pool,r.schema);return{drizzle:ao(e,ze,Sl),schema:ze,dialect:"pg",teardown:()=>{e.end()}}}wa();var Fa=require("drizzle-orm"),$N=require("server-only");I();ka();ne();async function jm(r){let{data:e,error:t}=await f(()=>h.query.appDomains.findFirst({where:(0,Fa.or)((0,Fa.eq)(o.appDomains.domain,r),(0,Fa.eq)(o.appDomains.subdomain,r)),columns:{app:!0}}));if(!(e!=null&&e.app))throw new Error(`No site found for hostname: ${r}`,{cause:t});return e.app}async function Wm(r,e){let t=_a(r);return e!=null&&e.draft?ae(jm,"resolveAppIdByHostname")(t):Da(jm,["hostname",t],[`hostname-${t}`],!1,"resolveAppIdByHostname")(t)}Gl({persistentCache:Gr.unstable_cache,invalidatePath:Gr.revalidatePath,invalidateTag:Ol(Gr.revalidateTag),runAfterResponse:Qm.after,pageNotFound:Ym.notFound});0&&(module.exports={ActionError,BuilderActionsRegistry,CHAI_PERMISSIONS,CHAI_PERMISSION_LIST,ChaiActionsRegistry,ChaiBaseAIAction,ChaiBaseAction,DEFAULT_CHAI_BUILDER_SERVER_CONFIG,LANGUAGES,buildChaiBuilderConfig,createPostgresConnection,createPostgresDB,createPostgresInstance,createStreamingErrorResponse,db,dispatchChaiAction,ensureDbReady,expandGrantMap,formatStreamingError,getChaiBuilder,getChaiBuilderConfigOnInit,getChaiContextResolver,getDb,getDbDialect,hasPermission,initChaiActionHandler,initChaiBuilderActionHandler,intersectPermissions,isMissingTextStream,registerDb,resetChaiContextResolverForTests,resetDbForTests,resolveAppIdByHostname,resolveChaiBuilderConfig,resolveDbConfig,safeQuery,schema,setChaiContextResolver,staticDefaultChaiContext,toActionError,toActionErrorPayload,tryChaiAction});