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,829 @@
1
+ "use strict";var wh=Object.create;var Ba=Object.defineProperty;var Ih=Object.getOwnPropertyDescriptor;var Sh=Object.getOwnPropertyNames;var Rh=Object.getPrototypeOf,_h=Object.prototype.hasOwnProperty;var T=(r,e)=>()=>(r&&(e=r(r=0)),e);var zt=(r,e)=>{for(var t in e)Ba(r,t,{get:e[t],enumerable:!0})},Ml=(r,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Sh(e))!_h.call(r,n)&&n!==t&&Ba(r,n,{get:()=>e[n],enumerable:!(a=Ih(e,n))||a.enumerable});return r};var Q=(r,e,t)=>(t=r!=null?wh(Rh(r)):{},Ml(e||!r||!r.__esModule?Ba(t,"default",{value:r,enumerable:!0}):t,r)),kh=r=>Ml(Ba({},"__esModule",{value:!0}),r);var ft,Kt=T(()=>{"use strict";ft="#styles:"});var W,vh,yt,jr,xe,Na,Zi,Dh,$l,Bh,Nh,Hl,La,ql,zr,Oa=T(()=>{"use strict";W=require("lodash-es"),vh=require("react"),yt={},jr=()=>yt,xe=r=>(0,W.get)(yt,r),Na=r=>{let e=(0,W.memoize)(r),t=(a=>(0,W.has)(yt,a)?e(a):r(a));return t.cache=e.cache,t},Zi=Na(r=>{var i,o;let e=(0,W.get)(yt,r),t=(o=(i=e==null?void 0:e.props)==null?void 0:i.schema)!=null?o:{},a=(0,W.get)(t,"properties",{}),n={};return(0,W.each)(a,(l,c)=>{(0,W.has)(l,"block")||(0,W.set)(n,c,l.default)}),n}),Dh=Na(r=>(0,W.get)(yt,`${r}.i18nProps`,[])),$l=Na(r=>(0,W.get)(yt,`${r}.aiProps`,[])),Bh=Na(r=>{var c,d,u,g;let e=xe(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,W.cloneDeep)(t),i=(0,W.get)(n,"properties",{}),o=(0,W.omitBy)(i,f=>(f==null?void 0:f.styles)===!0);return(0,W.set)(n,"properties",o),{schema:n,uiSchema:a||{}}}),Nh=[Zi,Dh,$l,Bh],Hl=r=>{for(let e of Nh)e.cache.delete(r)},La=r=>r.map(e=>(0,W.has)(yt,e._type)?{...Zi(e._type),...e}:e),ql=(r,e)=>{var a;let t=xe(r);(0,W.set)(yt,r,{...t,type:(a=t==null?void 0:t.type)!=null?a:r,dataProvider:e}),Hl(r)},zr=(r,e)=>{let t=xe(r);(0,W.set)(yt,r,{...t,component:e}),Hl(r)}});var Ue,Lh,Oh,eo,Vl=T(()=>{"use strict";Ue=require("lodash-es");Ge();Lh=r=>{let e=(0,Ue.filter)((0,Ue.compact)((0,Ue.map)(r,to)),t=>(0,Ue.has)(t,"src"));return Oh(e)},Oh=r=>!r||r.length===0?"":(0,Ue.uniqBy)(r,"family").map(e=>e.src.map(t=>`@font-face {
2
+ font-family: "${e.family}";
3
+ src: url("${t.url}") format("${t.format}");
4
+ font-display: swap;
5
+ font-optical-sizing: auto;
6
+ ${t.fontWeight?`font-weight: ${t.fontWeight};`:""}
7
+ ${t.fontStyle?`font-style: ${t.fontStyle};`:""}
8
+ ${t.fontStretch?`font-stretch: ${t.fontStretch};`:""}
9
+ }`).join(`
10
+ `)).join(`
11
+ `),eo=async(r,e)=>{let t=Lh([r,e]),a=[];return[r,...r!==e?[e]:[]].forEach(i=>{let o=to(i);o&&(0,Ue.has)(o,"src")&&o.src&&o.src.length>0&&a.push(o.src[0].url)}),{fontStyles:t,preloads:(0,Ue.uniqBy)(a,i=>i)}}});var jl,to,zl,Kl=T(()=>{"use strict";Vl();jl=[{family:"Arial",fallback:"Helvetica, sans-serif"},{family:"Times New Roman",fallback:"Georgia, serif"},{family:"Courier New",fallback:"Courier, monospace"}],to=r=>jl.find(e=>e.family===r),zl=()=>jl});var Wl=T(()=>{"use strict";Oa();Kl()});var sr,Ge=T(()=>{"use strict";sr=require("lodash-es");Kt();Wl()});function Yl(r){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r),t=parseInt(e[1],16),a=parseInt(e[2],16),n=parseInt(e[3],16);t/=255,a/=255,n/=255;let i=Math.max(t,a,n),o=Math.min(t,a,n),l=0,c=0,d=(i+o)/2;if(i==o)l=c=0;else{let u=i-o;switch(c=d>.5?u/(2-i-o):u/(i+o),i){case t:l=(a-n)/u+(a<n?6:0);break;case a:l=(n-t)/u+2;break;case n:l=(t-a)/u+4;break}l/=6}return`${Math.round(l*360)} ${Math.round(c*100)}% ${Math.round(d*100)}%`}var bt,Jl,Fh,Fa,Ql,Xl,Ua=T(()=>{"use strict";bt=require("lodash-es");Ge();Jl=r=>({fontFamily:r.fontFamily?(0,bt.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,bt.flatten)(r.colors.map(t=>Object.entries(t.items))).reduce((t,[a])=>({...t,[a]:`hsl(var(--${a}))`}),{}):{}});Fh=r=>{let t=zl().find(a=>a.family===r);return`"${r}", ${(0,bt.get)(t,"fallback","")}`},Fa=({theme:r})=>{let e=r;return`:root {
12
+ ${r.fontFamily?Object.entries(r.fontFamily).map(([t,a])=>`--font-${t}: ${Fh(a)};`).join(`
13
+ `):""}
14
+ ${e.borderRadius?`--radius: ${e.borderRadius};`:""}
15
+ ${e.colors?Object.entries(e.colors).map(([t,a])=>`--${t}: ${Yl(a[0])};`).join(`
16
+ `):""}
17
+ }
18
+ .dark {
19
+ ${e.colors?Object.entries(e.colors).map(([t,a])=>`--${t}: ${Yl(a[1])};`).join(`
20
+ `):""}
21
+ }`},Ql=r=>!r||r.length===0?"":(0,bt.uniqBy)(r,"family").map(e=>`<link rel="stylesheet" href="${e.url}" />`).join(`
22
+ `),Xl=r=>!r||r.length===0?"":(0,bt.uniqBy)(r,"family").map(e=>`@import url("${e.url}");`).join(`
23
+ `)});var ro,ao=T(()=>{"use strict";Kt();ro=r=>{if(r=r.replace(ft,""),!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 ec,no,tc=T(()=>{"use strict";ec=Q(require("tailwindcss/plugin"),1),no=(0,ec.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 Uh,rc,Gh,Mh,io=T(()=>{"use strict";Uh=require("cnfast"),rc=require("lodash-es"),Gh=require("nanoid"),Mh=require("cnfast")});var so,Kr,oo,$h,Hh,qh,Vh,jh,zh,Kh,Wh,Yh,Jh,Qh,ac,Xh,Zh,lo,nc,co=T(()=>{"use strict";so=require("eta/core"),Kr=require("lodash-es"),oo=/\{\{(.*?)\}\}/g,$h=/^[\w$][\w$.]*$/,Hh=/[\[\]():?+\-*/%=&|<>!,'"\\`]/u,qh=/[\[\]():?+*%=&|<>!,'"\\`]/u,Vh=new Set(["content","htmlCode","icon"]),jh=new so.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; };'}),zh=new so.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; };'}),Kh=r=>r.split(".").map(e=>e.trim()).join("."),Wh=(r,e)=>{let t=e.split("."),a=r;for(let n of t){if(a==null)return;a=a[n]}return a},Yh=r=>$h.test(r)?!0:r.includes(".")?r.split(".").map(t=>t.trim()).every(t=>t.length>0&&!Hh.test(t)):!qh.test(r)&&(r.startsWith("#")||r.includes("/")),Jh=(r,e,t)=>{let a=t.slice(2,-2).trim();return e!==-1&&(0,Kr.startsWith)(r,"$index.")?`${a}.${e}.${r.slice(7)}`:e!==-1&&(0,Kr.startsWith)(r,"$index")?`${a}.${e}`:r},Qh=(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}")`)},ac=(r,e,t)=>Yh(r)?Kh(Jh(r,e,t)):null,Xh=(r,e,t)=>r.replace(oo,(a,n)=>{let i=n.trim();if(!i)return'{{""}}';let o=ac(i,e,t);return o?`{{safeGet(it, ${JSON.stringify(o)}) ?? ""}}`:`{{${Qh(i,e,t)}}}`}),Zh=(r,e,t,a,n)=>{try{return(n!=null&&n.renderRaw?zh:jh).renderString(Xh(r,t,a),e)}catch(i){return""}},lo=(r,e,t,a,n)=>{oo.lastIndex=0;let i=r.match(oo);if(!i)return r;let o=n==="image"||n==="mobileImage",l=n!==void 0&&Vh.has(n);for(let c of i){let d=c.slice(2,-2).trim(),u=ac(d,t,a);if(!u)continue;let g=Wh(e,u);if((0,Kr.isArray)(g)||o&&g!==void 0)return g}return Zh(r,e,t,a,{renderRaw:l})},nc=(r,e)=>lo(r,e,-1,"")});var ie,po,Ga,go=T(()=>{"use strict";ie=require("lodash-es");Kt();co();po=(r,e,{index:t,key:a},n)=>{if((0,ie.isString)(r))return lo(r,e,t,a,n);if((0,ie.isArray)(r))return r.map(i=>po(i,e,{index:t,key:a},n));if(r&&typeof r=="object"){let i={};return(0,ie.forEach)((0,ie.keys)(r),o=>{!(0,ie.startsWith)(o,"_")&&o!=="$repeaterItemsKey"?i[o]=po(r[o],e,{index:t,key:a},o):i[o]=r[o]}),i}return r},Ga=(r,e,{index:t,key:a})=>{let n=(0,ie.cloneDeep)(r);if(n.repeaterItems){let i=n.repeaterItems;if(n.$repeaterItemsKey=n.repeaterItems,(0,ie.startsWith)(n.repeaterItems,`{{${"#"}`)&&(n.$repeaterItemsKey=n.repeaterItems=`${n.repeaterItems.replace("}}",`/${n._id}}}`)}`),!(0,ie.isEmpty)(n.repeaterItems)&&n.pagination){let o=`${i.replace("}}",`/${n._id}/totalItems}}`)}`,l=(0,ie.get)(e,o.slice(2,-2));n.repeaterTotalItems=l,n.totalItems=l}}return po(n,e,{index:t,key:a})}});var lr,uo=T(()=>{"use strict";go();lr=(r,e)=>Ga(r,e,{index:-1,key:""})});function cr(...r){return(0,oc.twMerge)((0,ic.clsx)(r))}var ic,oc,mo=T(()=>{"use strict";ic=require("cnfast"),oc=require("cnfast")});var nt,pr=T(()=>{"use strict";mo();nt={"dt#btn":{name:"Button",description:"Base button styles",value:cr("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:cr("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:cr("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:cr("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"}}});function pc(r,e,t){let a=(0,q.get)(t,"i18nProps",[]);if((0,q.isEmpty)(e)||!(0,q.isArray)(a)||(0,q.isEmpty)(a))return r;let n=null;return a.forEach(i=>{if(!(0,q.isString)(i)||(0,q.isEmpty)(i)||!Object.prototype.hasOwnProperty.call(r,i))return;let o=(0,q.get)(r,i),l=(0,q.get)(r,`${i}-${e}`,""),c=(0,q.isString)(o)?(0,q.isString)(l)&&!(0,q.isEmpty)(l.trim())&&l.trimStart()||o:(0,q.isEmpty)(l)?o:l;c!==o&&(n||(n={...r}),n[i]=c)}),n||r}function of(r,e){return(0,q.get)(r,`${e}_attrs`,{})}function gc(r,e=!0,t={}){let a=lc.get(r);a||(a=new WeakMap,lc.set(r,a));let n=a.get(t);n||(n={},a.set(t,n));let i=e?"inBuilder":"inRenderer",o=n[i];if(o)return o;let l={};return Object.keys(r).forEach(c=>{if((0,q.isString)(r[c])&&r[c].startsWith(ft)){let d=nf(r[c],t),u=of(r,c);l[c]={...!(0,q.isEmpty)(d)&&{className:d},...u,...e?{"data-style-prop":c,"data-block-parent":r._id,"data-style-id":`${c}-${r._id}`}:{}}}}),n[i]=l,l}var q,cc,dc,tf,sc,lc,rf,af,nf,fo,uc,yo,bo=T(()=>{"use strict";q=require("lodash-es"),cc=require("cnfast");ao();pr();Kt();Ge();uo();dc=(r,e,t)=>r?r.split(" ").map(a=>{var n;return a.startsWith("dt#")?t.has(a)?"":(t.add(a),dc((n=e[a])==null?void 0:n.value,e,t)):a}).filter(Boolean).join(" "):"",tf=(0,q.memoize)(r=>({...nt,...r})),sc=new WeakMap,lc=new WeakMap,rf=5e3,af=r=>{for(;r.size>rf;){let e=r.keys().next().value;if(!e)return;r.delete(e)}},nf=(r,e)=>{let t=sc.get(e);t||(t=new Map,sc.set(e,t));let a=t.get(r);if(a!==void 0)return a;let n=fo(r,e);return t.set(r,n),af(t),n},fo=(r,e)=>{let t=tf(e),{baseClasses:a,classes:n}=ro(r),o=n.split(" ").filter(c=>c.startsWith("dt#")).map(c=>{var d;return dc((d=t[c])==null?void 0:d.value,t,new Set([c]))}),l=n.split(" ").filter(c=>!c.startsWith("dt#")).join(" ");return cc.twMerge.apply(null,[a,...o,l])};uc=(0,q.memoize)(r=>{var n,i;let e=xe(r),t=(i=(n=e==null?void 0:e.props)==null?void 0:n.schema)!=null?i:{},a=(0,q.get)(t,"properties",{});return Object.fromEntries(Object.entries(a).filter(([,o])=>(0,q.get)(o,"runtime",!1)))}),yo=(r,e)=>{if(!(0,q.isArray)(r))return r;let t=r,a;return typeof e.limit=="number"&&e.limit>0&&(a=e.limit),a!==void 0&&(t=t.slice(0,a)),t}});var dr,Wt,mc=T(()=>{"use strict";dr=require("lodash-es");bo();Kt();Wt=(r,e)=>r.map(t=>{let a=(0,dr.keys)(t).filter(n=>(0,dr.isString)(t[n])&&t[n].startsWith(ft));return(0,dr.each)(a,n=>{t[n]=`${ft},${fo(t[n],e)}`}),t})});var hc,Ma,$a=T(()=>{"use strict";hc=require("lodash-es");Ge();Ma=(r,e)=>{let t=r==null?void 0:r.pageTypes;return!Array.isArray(t)||t.length===0?!0:t.includes(e)}});var sf,fc=T(()=>{"use strict";sf=require("lodash-es")});var yc,te,bc=T(()=>{"use strict";yc=require("himalaya"),te=require("lodash-es");$a();io();Kt();mo();Ge();fc()});var Tc=T(()=>{"use strict";bc()});var Pc=T(()=>{"use strict"});var cf,pf,df,Ac=T(()=>{"use strict";cf=Q(require("@tailwindcss/container-queries"),1),pf=Q(require("@tailwindcss/forms"),1),df=Q(require("@tailwindcss/typography"),1)});var Cc,Ec=T(()=>{"use strict";Cc={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 Wr,xc=T(()=>{"use strict";Ua();Ec();Wr=(r=Cc)=>({container:{center:!0,padding:"1rem",screens:{"2xl":"1400px"}},...Jl(r)})});function To(r){return r.replace("%3A",":").replace("%2E",".").replace(/^www\./,"")}var Po=T(()=>{"use strict"});var Bt=T(()=>{"use strict";tc();io();uo();mc();Tc();Pc();Ac();xc();Po()});var Sc,Rc,_c,kc,Ye,vc,Dc,Ic,Ao,gf,Ha,wc,uf,Bc,mf,hf,ff,yf,qa,Co=T(()=>{"use strict";Sc=Q(require("autoprefixer"),1),Rc=require("fs"),_c=require("fs/promises"),kc=require("module"),Ye=Q(require("path"),1),vc=require("url"),Dc=Q(require("postcss"),1),Ic={},Ao="virtual:chai-builder-tailwind-config",gf=/[^<>"'`\s]*[^<>"'`\s:]/g,wc=r=>Ye.default.dirname((0,kc.createRequire)(r).resolve("tailwindcss/package.json")),uf=()=>{for(let r=process.cwd();;r=Ye.default.dirname(r)){let e=Ye.default.join(r,"node_modules","tailwindcss","package.json");if((0,Rc.existsSync)(e))return Ye.default.dirname(e);if(r===Ye.default.dirname(r))break}throw new Error("Unable to locate tailwindcss in node_modules.")},Bc=()=>{if(Ha)return Ha;let r=[()=>Ye.default.dirname((0,vc.fileURLToPath)(Ic.resolve("tailwindcss/package.json"))),()=>wc(Ic.url),()=>wc(Ye.default.join(process.cwd(),"package.json")),uf];for(let e of r)try{return Ha=e(),Ha}catch(t){continue}throw new Error("Unable to resolve Tailwind CSS from the current project. Ensure `tailwindcss` is installed.")},mf=r=>{let e=Bc(),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 Ye.default.join(e,a)},hf=async(r,e)=>{let t=r.startsWith("tailwindcss")?mf(r):Ye.default.resolve(e,r);return{path:t,base:Ye.default.dirname(t),content:await(0,_c.readFile)(t,"utf8")}},ff=(r,e=[])=>{let t=new Set(e);for(let a of r){let n=a.match(gf)||[];for(let i of n)t.add(i)}return Array.from(t)},yf=async({compile:r,includeBaseStyles:e,config:t,candidates:a})=>{let n=e?`@config "${Ao}";
24
+ @import "tailwindcss";`:`@config "${Ao}";
25
+ @import "tailwindcss/theme";
26
+ @import "tailwindcss/utilities";`;return(await r(n,{base:Bc(),loadModule:async(o,l,c)=>{if(o===Ao&&c==="config")return{path:o,base:l,module:t};throw new Error(`Unsupported Tailwind ${c} import: ${o}`)},loadStylesheet:hf})).build(a)},qa=async({markupStrings:r,safelist:e=[],includeBaseStyles:t=!1,config:a})=>{var l;let n=await import("tailwindcss");if(typeof n.compile=="function")return yf({compile:n.compile,includeBaseStyles:t,config:a,candidates:ff(r,e)});let i=[t?"@tailwind base;":"","@tailwind components;","@tailwind utilities;"].filter(Boolean).join(`
27
+ `);return(await(0,Dc.default)([(l=n.default)==null?void 0:l.call(n,{...a,safelist:e,content:[{raw:`<div>${r.join(" ")}</div>`,extension:"html"}]}),(0,Sc.default)()]).process(i,{from:void 0})).css}});var Yr={};zt(Yr,{aiAddonPurchases:()=>vf,aiCreditAddons:()=>kf,aiLogs:()=>Mf,appApiKeys:()=>Pf,appAssets:()=>Df,appDomains:()=>If,appFormSubmissions:()=>wf,appPages:()=>_f,appPagesMetadata:()=>$f,appPagesOnline:()=>Uf,appPagesRevisions:()=>Of,appTrash:()=>Lf,appUserAddons:()=>Nf,appUserPlans:()=>xf,appUsers:()=>Sf,apps:()=>De,appsOnline:()=>Cf,clientUsers:()=>Bf,clients:()=>Je,invitedUsers:()=>Af,libraries:()=>Eo,libraryItems:()=>Gf,libraryTemplates:()=>Ff,roles:()=>Rf,webhookEvents:()=>Ef});var Gc,p,Uc,K,Pf,Af,De,Cf,Eo,Ef,xf,Je,wf,If,Sf,Rf,_f,kf,vf,Df,Bf,Nf,Lf,Of,Ff,Uf,Gf,Mf,$f,xo=T(()=>{"use strict";Gc=require("drizzle-orm"),p=require("drizzle-orm/pg-core"),Uc=process.env.CHAIBUILDER_POSTGRESS_SCHEMA,K=Uc?(0,p.pgSchema)(Uc).table:p.pgTable,Pf=K("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:[De.id],name:"app_api_keys_app_fkey"})]),Af=K("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:[De.id],name:"invited_users_app_fkey"}),(0,p.foreignKey)({columns:[r.client],foreignColumns:[Je.id],name:"invited_users_client_fkey"})]),De=K("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:[Je.id],name:"apps_client_fkey"})]),Cf=K("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:[Je.id],name:"apps_online_client_fkey"})]),Eo=K("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:[De.id],name:"libraries_app_fkey"})]),Ef=K("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:[Je.id],name:"webhook_events_clientId_fkey"})]),xf=K("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:[Je.id],name:"app_user_plans_client_fkey"})]),Je=K("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:""}}})}),wf=K("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:[De.id],name:"app_form_submissions_app_fkey"})]),If=K("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:[De.id],name:"app_domains_app_fkey"})]),Sf=K("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:[De.id],name:"app_users_app_fkey"})]),Rf=K("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)]),_f=K("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:[De.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)]),kf=K("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:[Je.id],name:"ai_credit_addons_client_fkey"})]),vf=K("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:[Je.id],name:"ai_addon_purchases_client_fkey"})]),Df=K("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:[De.id],name:"app_assets_app_fkey"})]),Bf=K("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:[Je.id],name:"client_users_client_fkey"}),(0,p.unique)("client_users_user_client_unique").on(r.user,r.client)]),Nf=K("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:[Je.id],name:"app_user_addons_client_fkey"})]),Lf=K("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:[De.id],name:"trash_app_fkey"})]),Of=K("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:[De.id],name:"app_pages_revisions_app_fkey"})]),Ff=K("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:[Eo.id],name:"library_templates_library_fkey"})]),Uf=K("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:[De.id],name:"app_pages_online_app_fkey"}),(0,p.index)("idx_app_pages_online_app_slug").on(r.app,r.slug)]),Gf=K("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:[Eo.id],name:"library_items_library_fkey"})]),Mf=K("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(Gc.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:[De.id],name:"ai_logs_app_fkey"}),(0,p.foreignKey)({columns:[r.client],foreignColumns:[Je.id],name:"ai_logs_client_fkey"})]),$f=K("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 Hf(){Jr&&Jr(),Yt=null,Va=null,ja="pg",Jr=null}function za(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(Yt!==null&&Yt===r.drizzle){Va=r.schema,ja=(e=r.dialect)!=null?e:"pg",Jr=(t=r.teardown)!=null?t:null;return}Hf(),Yt=r.drizzle,Va=r.schema,ja=(a=r.dialect)!=null?a:"pg",Jr=(n=r.teardown)!=null?n:null}function wo(){return ja}async function Io(){if(!Yt)throw new Error("ChaiBuilder database was not initialized. Pass `db` to `buildChaiBuilderConfig` (`db: createPostgresDB(...)`, `createLibsqlDB(...)`, etc.).")}function Ka(){if(!Yt)throw new Error("ChaiBuilder database was not initialized. Pass `db` to `buildChaiBuilderConfig` (`db: createPostgresDB(...)`, `createLibsqlDB(...)`, etc.).");return Yt}async function y(r){try{return{data:await r(),error:null}}catch(e){return{data:null,error:e}}}var Yt,Va,ja,Jr,h,s,Wa=T(()=>{"use strict";xo();Yt=null,Va=null,ja="pg",Jr=null;h=new Proxy({},{get(r,e){return Ka()[e]}});s=new Proxy({},{get(r,e){return(Va||Yr)[e]}})});var R=T(()=>{"use strict";Wa()});var w,nA,Ya=T(()=>{"use strict";w={"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"},nA=Object.keys(w)});var m,N=T(()=>{"use strict";m=class extends Error{constructor(t,a="ACTION_ERROR",n=400,i,o){super(t);this.code=a;this.status=n;this.error=i;this.metadata=o;this.name="ActionError",i&&console.error(i)}}});function ot(r){throw new m(r.message,r.code,r.statusCode)}var Ja=T(()=>{"use strict";N()});var Me,Qa=T(()=>{"use strict";Me=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 Vf,Mc,jf,So,$c=T(()=>{"use strict";Vf=`
28
+ # ANIMATION RULES
29
+ - Add \`data-animation\` attribute to elements when appropriate to add entry animations on scroll.
30
+ - **Do not overuse animations.** Only animate important elements like hero images, feature cards & section heading etc.
31
+ - The format MUST exactly be: \`data-animation="ANIMATION|EASING|DURATION|DELAY|TIME"\`
32
+ - **ANIMATION**: fade-in, slide-up, slide-down, slide-left, slide-right, zoom-in, zoom-out, flip-x, flip-y, rotate-in
33
+ - **EASING**: linear, ease-in, ease-out, ease-in-out
34
+ - **DURATION**: in milliseconds (e.g., 500, 700, 1000)
35
+ - **DELAY**: in milliseconds (e.g., 0, 200, 300) so that the animation starts after a delay and not immediately
36
+ - **TIME**: once (plays once) or infinite (repeats every time it enters the viewport)
37
+ - Example: \`<div data-animation="slide-up|ease-in-out|500|300|once" class="...">\`
38
+ `,Mc='\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',jf=`\u{1F6A8} CRITICAL FORMAT REQUIREMENT: Your response MUST start with '--START--' immediately. NEVER include any text, thinking, or reasoning before '--START--'. \u{1F6A8}
39
+
40
+ # 1. RESPONSE FORMAT RULES (ALWAYS OBEY FIRST)
41
+
42
+ Every response MUST follow this structure:
43
+
44
+ --START--
45
+ --THINKING={short plain-language reasoning}
46
+ (one or more ACTION blocks: ADD / EDIT / REMOVE)
47
+ --END--
48
+
49
+ Rules:
50
+ - The VERY FIRST characters must be '--START--'.
51
+ - '--THINKING=' must appear immediately after '--START--'.
52
+ - No commentary, markdown, or text outside '--START--' and '--END--'.
53
+ - Use simple natural language in THINKING. Do NOT mention ids, attributes, DOM, HTML tags, or technical terms.
54
+ - If no action is required, still output:
55
+ --START--
56
+ --THINKING={why no changes needed}
57
+ --END--
58
+
59
+
60
+ # 2. ACTION FORMAT DEFINITIONS (MANDATORY)
61
+
62
+ ### ADD Action
63
+ Used to insert new HTML.
64
+ Do not add bid attribute to any element.
65
+
66
+ Format:
67
+ --ACTION=ADD|PARENT={parent_id or 'undefined'}|POS={position or -1}--
68
+ --TASK={plain-language description of what you are adding}
69
+ --HTML--
70
+ {HTML here}
71
+ --ENDHTML--
72
+ --MSG={plain-language explanation}
73
+ --ENDACTION--
74
+
75
+ Rules:
76
+ - PARENT = bid of parent, or 'undefined' for root.
77
+ - POS = -1 to append at the end.
78
+ - HTML must include full and valid tags.
79
+
80
+
81
+ ### EDIT Action
82
+ Used to replace an existing element completely.
83
+ Combine multiple edits into one action with one edit id where possible.
84
+
85
+ Format:
86
+ --ACTION=EDIT|ID={target_id}--
87
+ --TASK={plain-language description of what you are changing}
88
+ --HTML--
89
+ {full replacement HTML here}
90
+ --ENDHTML--
91
+ --MSG={plain-language explanation}
92
+ --ENDACTION--
93
+
94
+ Rules:
95
+ - Must include full tag being replaced.
96
+ - Never partially edit; always replace full HTML for the target element.
97
+
98
+ ### REMOVE Action
99
+ Used to delete elements.
100
+
101
+ Format:
102
+ --ACTION=REMOVE|IDS={id1, id2, ...}--
103
+ --TASK={plain-language description of what you are removing}
104
+ --MSG={plain-language explanation}
105
+ --ENDACTION--
106
+
107
+
108
+ ### THINKING Block (STRICT)
109
+ Placed immediately after '--START--'.
110
+
111
+ Format:
112
+ --THINKING={short plain-language reasoning}
113
+
114
+ Rules:
115
+ - Only one concise line.
116
+ - No mentions of tags, ids, attributes, DOM, or code.
117
+ - Focus on visual/content intentions.
118
+
119
+
120
+ # 3. HTML GENERATION RULES (MANDATORY)
121
+
122
+ You are an expert HTML/CSS developer specializing in Tailwind CSS and shadcn/ui patterns.
123
+ You produce clean, semantic, accessible, production-ready HTML.
124
+ Generate **pure HTML**, with no markdown, no comments, no extra text.
125
+
126
+ ### General Guidelines
127
+ 1. Use **only Tailwind CSS v3 utility classes**, no custom CSS.
128
+ 2. Use **shadcn/ui design system** semantic tokens for all colors.
129
+ 3. Use **semantic HTML** with proper accessibility.
130
+ 4. Always produce **responsive, mobile-first** layout.
131
+ 5. **Do NOT include** <!DOCTYPE>, <html>, <head>, or <body>.
132
+ 6. Keep UI varied \u2014 don't repeat the same layout patterns.
133
+ 7. Use \`<details><summary>\` for accordion, FAQ, and mobile menu interactions.
134
+ 8. Do NOT use Tailwind container queries.
135
+ 9. If UI is generated from a user-provided image, ensure full responsiveness.
136
+ 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.**
137
+ - Match structure as closely as possible
138
+ - Maintain the Tailwind + shadcn theme rules
139
+ - The HTML output should reflect the exact design of the provided image
140
+
141
+ ### \u{1F6A8} CRITICAL: Avoid HTML "Div Soup" for Decorative UI Elements
142
+ **NEVER generate complex HTML markup for decorative UI elements that should be images:**
143
+ - \u274C DO NOT create HTML mockups of: code snippets, terminal windows, browser frames, device mockups, window chrome, syntax-highlighted code blocks
144
+ - \u2705 INSTEAD: Use placeholder images for these decorative elements
145
+ - **Reasoning**: Complex nested div structures for visual decoration create "div soup" that bloats markup unnecessarily
146
+ - **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)
147
+ - **Examples**:
148
+ * 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">\`
149
+ * 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">\`
150
+ * For actual interactive content \u2192 Use semantic HTML
151
+
152
+ ### \u{1F6A8} Design Tokens (MANDATORY)
153
+ You MUST use design tokens whenever appropriate. Design tokens are predefined groupings of Tailwind classes identified by the \`dt#\` prefix.
154
+ 1. **Placement**: Always place design tokens at the START of the \`class\` attribute.
155
+ 2. **Overrides**: Any Tailwind classes following a design token act as overrides, similar to how \`tailwind-merge\` works.
156
+ 3. **Example**: \`<button class="dt#btn p-2">\` where \`p-2\` overrides the default padding in \`dt#btn\`.
157
+
158
+ **Available Design Tokens**:
159
+ {{DESIGN_TOKENS_LIST}}
160
+
161
+ # 3.1 DESIGN EXCELLENCE & CREATIVITY (CRITICAL)
162
+
163
+ Create distinctive, production-grade interfaces that avoid generic "AI slop" aesthetics. Every UI you generate should be visually striking, memorable, and intentionally designed.
164
+
165
+ ### Design Thinking Process
166
+ Before generating HTML, commit to a BOLD aesthetic direction:
167
+ - **Purpose**: Consider what problem this interface solves and who uses it
168
+ - **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
169
+
170
+ **CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
171
+
172
+ ### Design Excellence Guidelines
173
+
174
+ **Typography & Font Selection**:
175
+ - Choose fonts that are beautiful, unique, and interesting
176
+ - AVOID generic fonts: Arial, Inter, Roboto, system fonts
177
+ - Use distinctive font combinations that elevate the design
178
+ - Pair a distinctive display font with a refined body font
179
+ - Consider: font-serif, font-mono for variety, or use weight variations (font-light, font-bold) creatively
180
+
181
+ **Color & Visual Hierarchy**:
182
+ - Commit to a cohesive aesthetic with dominant colors and sharp accents
183
+ - Avoid timid, evenly-distributed palettes
184
+ - Use shadcn tokens creatively (not just bg-background everywhere)
185
+ - Consider bold color blocking, dramatic contrasts, or refined monochrome
186
+ - AVOID: purple gradients on white backgrounds, predictable color schemes
187
+
188
+ **Spatial Composition**:
189
+ - Create unexpected layouts with asymmetry, overlap, diagonal flow
190
+ - Use grid-breaking elements and generous negative space OR controlled density
191
+ - Avoid predictable grid patterns - be creative with positioning
192
+ - Consider: absolute positioning, creative flexbox/grid layouts, overlapping elements
193
+
194
+ **Backgrounds & Visual Details**:
195
+ - Create atmosphere and depth rather than defaulting to solid colors
196
+ - Consider: gradient meshes, subtle textures, geometric patterns
197
+ - Use layered transparencies, dramatic shadows, decorative borders
198
+ - Add visual interest with background patterns or accent elements
199
+
200
+ **NEVER Use Generic AI Aesthetics**:
201
+ - Overused font families (Inter, Roboto, Arial, system fonts)
202
+ - Cliched color schemes (purple gradients on white)
203
+ - Predictable layouts and component patterns
204
+ - Cookie-cutter designs lacking context-specific character
205
+ - NEVER converge on common choices (Space Grotesk, etc.) across generations
206
+
207
+ **Implementation Complexity**:
208
+ - Match complexity to the aesthetic vision
209
+ - Maximalist designs: elaborate code with extensive effects
210
+ - Minimalist designs: restraint, precision, careful spacing and typography
211
+ - Elegance comes from executing the vision well
212
+
213
+ **Variation Mandate**:
214
+ - Every design should be different
215
+ - Vary between light and dark themes
216
+ - Change fonts, layouts, color schemes between generations
217
+ - Interpret user requests creatively with unexpected choices
218
+
219
+
220
+ # 4. ATTRIBUTE & CUSTOM COMPONENT RULES
221
+
222
+ ### chai-name
223
+ - Add \`chai-name\` attribute to tags
224
+ - Use descriptive section names (e.g., "Hero Section", "Navigation").
225
+
226
+ ## Custom Web components(CRITICAL)
227
+ - Html can have custom web components. All web components starts with <chai- prefix.
228
+ - Use "about-this-component" attribute to understand what the component does.
229
+ - Check for can-move and can-delete attribute to check if the component can be moved or deleted.
230
+ - If an attribute value starts with #styles: treat it like class attribute with tailwind classes.
231
+ Use the attribute key to understand what the attribute does and apply classes. Maintain the #styles: at start followed by tailwind classes.
232
+ - Do not change the chai-type attribute. Do not remove any attributes.
233
+
234
+ ## Tool Usage Rules
235
+ - To ADD a registered custom block (listed in "Available Custom Blocks"), USE THE add_custom_block TOOL \u2014 do NOT generate HTML for it.
236
+ - To REMOVE blocks, USE THE remove_blocks TOOL \u2014 do NOT use --ACTION=REMOVE-- text protocol.
237
+ - To SET a data binding on an existing block prop, USE THE bind_prop TOOL.
238
+ - When building a full page layout or when the user asks to include a header, footer, or any global section,
239
+ CALL get_partial_blocks FIRST to discover available partial block IDs, then place them with <chai-partial-block partial-id="ID">.
240
+ - Continue using --ACTION=ADD-- with --HTML-- for new standard HTML sections (hero, cards, grids, etc.) \u2014 these benefit from streaming preview.
241
+ - Continue using --ACTION=EDIT-- with --HTML-- for editing existing HTML blocks.
242
+
243
+ ## Data Binding (CRITICAL)
244
+ - Block prop values may contain binding expressions using double-curly syntax: {{path.to.data}}
245
+ - 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.
246
+ - You MAY use binding expressions when setting props on custom blocks, but ONLY using paths listed in the "Available Data Binding Paths" section below.
247
+ - Repeater blocks use a special prop: repeater-items="{{collectionName}}" where collectionName is the array to iterate.
248
+ - Inside a Repeater, child block props can reference each item's fields via {{$index.fieldName}}.
249
+ - Binding syntax must use exactly two curly braces: {{path}} \u2014 not {path} or \${{path}}.
250
+ - (global) paths are site-wide and available on every page. (page) paths are only available on this specific page type.
251
+
252
+ **Available Data Binding Paths**:
253
+ {{DATA_BINDING_PATHS}}
254
+
255
+ ## Current Page Type
256
+ {{PAGE_TYPE_CONTEXT}}
257
+
258
+ ## Available Custom Blocks
259
+ 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.
260
+
261
+ {{CUSTOM_BLOCK_CATALOG}}
262
+
263
+ ## Special Blocks
264
+
265
+ ### Repeater \u2014 <chai-repeater>
266
+ Used to render a list by iterating over an array data binding.
267
+ - Required prop: \`repeater-items="{{arrayPath}}"\` where \`arrayPath\` is an array-type binding path.
268
+ - Only bind to paths marked as arrays in "Available Data Binding Paths".
269
+ - Child blocks inside a Repeater reference the current item's fields using \`{{$index.fieldName}}\`.
270
+ - Example: \`<chai-repeater repeater-items="{{page.products}}"><h3>{{$index.name}}</h3></chai-repeater>\`
271
+ - Do NOT use a Repeater for static lists \u2014 only when iterating over bound data.
272
+
273
+ ### PartialBlock \u2014 <chai-partial-block>
274
+ Partial blocks are global reusable blocks (e.g. header, footer, navigation) shared across pages.
275
+ - Reference them by their ID: \`<chai-partial-block partial-id="THE_PARTIAL_ID"></chai-partial-block>\`
276
+ - Never modify a partial block's content inline \u2014 only reference it.
277
+ - When asked to build a full page layout, use the \`get_partial_blocks\` tool (available in Plan 007)
278
+ to discover available partial IDs before placing them.
279
+ - If the tool is not available, ask the user for the partial IDs to use.
280
+
281
+ ## Icons
282
+ - Icons use the **Lucide** icon set (https://lucide.dev/icons).
283
+ - Always include \`chai-type="Icon"\` on icon elements and preserve any existing attributes (e.g. \`bid\`).
284
+ - Express each icon as \`<chai-icon chai-type="Icon" icon-name="kebab-case-name" width="16" height="16">\`
285
+ 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">\`.
286
+ - Pick semantically appropriate icon names from Lucide; do not embed raw \`<svg>\` markup inside \`<chai-icon>\`.
287
+
288
+ ### SVG
289
+ - Always include width/height attributes.
290
+ - Ensure correct \`viewBox\`.
291
+
292
+
293
+ # 5. SHADCN/THEME COLOR RULES (STRICT)
294
+
295
+ Use ONLY these semantic tokens:
296
+ - bg-background + text-foreground
297
+ - bg-card + text-card-foreground
298
+ - bg-primary + text-primary-foreground
299
+ - bg-secondary + text-secondary-foreground
300
+ - bg-muted + text-muted-foreground
301
+ - bg-accent + text-accent-foreground
302
+ - bg-destructive + text-destructive-foreground
303
+ - border-border, border-input
304
+ - ring-ring
305
+
306
+ ### Contrast Rules
307
+ - Always maintain clear readable contrast.
308
+ - Never pair same-family bg/text tokens (e.g., bg-primary + text-primary).
309
+
310
+ ### Hover Rules
311
+ - Primary buttons: hover:bg-primary/90
312
+ - Cards: hover:bg-accent hover:text-accent-foreground
313
+ - Links: text-muted-foreground hover:text-foreground
314
+ - Nav links: text-foreground/80 hover:text-foreground
315
+
316
+
317
+ # 6. RESPONSIVENESS RULES
318
+
319
+ - Mobile-first approach.
320
+ - Breakpoints: sm, md, lg, xl.
321
+ - Smooth scaling between sizes.
322
+ - At md breakpoint:
323
+ * Reduce grid columns (lg:4 \u2192 md:2 \u2192 sm:1)
324
+ * Adjust padding, spacing, and layouts
325
+ * Ensure nav/mobilmenus behave correctly
326
+ * Ensure cards remain aligned
327
+
328
+
329
+ # 7. SPECIFIC UI PATTERNS
330
+
331
+ ### Forms & Fields
332
+ - 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"\`).
333
+
334
+ ### Mobile Menu (<details><summary>)
335
+ - Use 'summary' containing an SVG hamburger icon.
336
+ - Mobile menu container sample:
337
+ absolute right-1 mt-2 min-w-64 bg-card border border-border rounded-lg shadow-lg z-50 p-4
338
+ - Menu item sample:
339
+ block py-2 px-4 hover:bg-accent rounded-md transition-colors
340
+ - Touch targets must be at least 44px tall.
341
+
342
+ ### Accordions / Nested Menus
343
+ - Always use <details> and <summary>.
344
+
345
+
346
+ # 8. COMMON RULES
347
+
348
+ {{ANIMATION_RULES}}
349
+ {{IMAGE_RULES}}
350
+
351
+ # 9. OUTPUT RESTRICTIONS
352
+ - Output ONLY the exact allowed action blocks inside the mandatory format.
353
+ - NEVER include stray text.
354
+ - NEVER include markdown.
355
+ - NEVER break the format.
356
+ - NEVER place ANYTHING before '--START--' and after '--END--'.
357
+ - The output must always begin with '--START--' and end with '--END--'.
358
+ `.trim(),So=r=>{let e=jf;return r!=null&&r.animation?e=e.replace("{{ANIMATION_RULES}}",Vf):e=e.replace("{{ANIMATION_RULES}}",""),r!=null&&r.image,e=e.replace("{{IMAGE_RULES}}",Mc),e}});var Hc,qc=T(()=>{"use strict";Hc=`Generate image based on the user request.
359
+ The image should be suitable for use as a website asset such as hero backgrounds, product images, team photos, icons, or decorative elements.
360
+ 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 Vc,jc=T(()=>{"use strict";Vc=`You are an expert language translator specializing in preserving data structure integrity while translating content.
361
+
362
+ TASK: Translate all text content within the provided JSON structure to the target language.
363
+
364
+ TRANSLATION PATTERN:
365
+ 1. Content Translation Strategy:
366
+ - Identify text content properties (e.g., 'content', 'label', 'text', 'title', 'description')
367
+ - Preserve the original property as the default language content
368
+ - Add language-specific variants using the pattern: '{propertyName}-{languageCode}'
369
+
370
+ 2. Property Naming Convention:
371
+ - Original: 'content' (default language)
372
+ - Translated: 'content-fr', 'content-es', 'content-de', etc.
373
+ - Examples: 'label' \u2192 'label-fr', 'title' \u2192 'title-es', 'description' \u2192 'description-de'
374
+
375
+ 3. Implementation Rules:
376
+ - NEVER override or remove the original property
377
+ - Language code is provided in the user request
378
+ - If there is already a property with the same name as the translated property, replace it with the translated property.
379
+
380
+ REQUIREMENTS (Common):
381
+ 1. Return ONLY the translated JSON structure - no markdown formatting, code blocks, or explanations
382
+ 2. Preserve the exact JSON structure, keys, and data types
383
+ 3. Maintain proper grammar, tone, and cultural context in the target language
384
+ 4. Maintain the original structure and data types
385
+ 5. Translate ONLY human-readable text content - do NOT translate:
386
+ - JSON keys/property names
387
+ - Data binding placeholders (format: {{dataBindingId}})
388
+ - HTML attributes (class, id, data-*, etc.)
389
+ - URLs, file paths, or technical identifiers
390
+ - Code snippets or technical values
391
+ 6. Ensure translated text fits naturally within the original context
392
+ 7. Keep numbers, dates, and technical terms unchanged unless culturally appropriate to translate
393
+
394
+ OUTPUT FORMAT: Valid JSON only, ready to be parsed directly.`});var zc,Kc=T(()=>{"use strict";zc=`You are an expert language translator and content editor specializing in preserving data structure integrity while modifying content.
395
+
396
+ TASK: Modify content within the provided JSON structure according to user request for the target language.
397
+
398
+ CONTENT MODIFICATION STRATEGY:
399
+ 1. Language Property Selection:
400
+ - First, check if '{propertyName}-{languageCode}' exists (e.g., 'content-fr', 'label-es', 'title-de')
401
+ - If language-specific property exists: Use and modify that property's content
402
+ - 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
403
+
404
+ 2. Property Naming Convention:
405
+ - Default language: 'content', 'label', 'text', 'title', 'description'
406
+ - Language-specific: 'content-{languageCode}', 'label-{languageCode}', etc.
407
+ - Examples: 'content-fr', 'label-es', 'title-de', 'description-ja'
408
+
409
+ 3. Implementation Rules:
410
+ - NEVER modify the original default language property
411
+ - Only modify or create the language-specific property ('{propertyName}-{languageCode}')
412
+ - Language code is provided in the user request
413
+ - Preserve all other language variants unchanged
414
+
415
+ REQUIREMENTS (Common):
416
+ 1. Return ONLY the modified JSON structure - no markdown formatting, code blocks, or explanations
417
+ 2. Preserve the exact JSON structure, keys, and data types
418
+ 3. Maintain proper grammar, tone, and cultural context in the target language
419
+ 4. Maintain the original structure and data types
420
+
421
+ CRITICAL REQUIREMENTS (Content Modification):
422
+ 1. Apply user-requested modifications (improve, lengthen, shorten, fix grammar, change tone, rephrase, etc.) to the language-specific property
423
+ 2. If language-specific property exists: Modify its content according to user request
424
+ 3. If language-specific property does NOT exist: Translate default content to target language first, then apply modifications
425
+ 4. Do NOT translate or modify:
426
+ - JSON keys/property names
427
+ - Data binding placeholders (format: {{dataBindingId}})
428
+ - HTML attributes (class, id, data-*, etc.)
429
+ - URLs, file paths, or technical identifiers
430
+ - Code snippets or technical values
431
+ 5. Preserve all other language variants and properties unchanged
432
+ 6. Apply changes consistently across related properties when applicable
433
+
434
+ OUTPUT FORMAT: Valid JSON only, ready to be parsed directly.`});function gr(r=null,e={}){if(r)switch(r){case"GENERATE_IMAGE":return Hc;case"TRANSLATE_CONTENT":return Vc;case"UPDATE_CONTENT":return zc;default:return So(e)}return So(e)}var Xa=T(()=>{"use strict";$c();qc();jc();Kc()});var Wc,Yc=T(()=>{"use strict";Wc=r=>{let e=r.trim();return e.startsWith("{")&&e.endsWith("}")?e.slice(1,-1).trim():r}});function Xc(r){Ro=r}function _o(){return Ro}function ko(r,e){return Qc.run(r,e)}function Tt(){var r;return(r=Qc.getStore())!=null?r:Ro}function F(r){return Tt()>=r}var Jc,PA,Ro,Qc,st=T(()=>{"use strict";Jc=require("async_hooks"),PA=require("server-only"),Ro=0,Qc=new Jc.AsyncLocalStorage});function Kf(r,e){var t,a,n,i,o,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=(o=e.licenseCheck)!=null?o: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 Jt(r,e){let t=Qr.getStore();return t!=null&&t.initialized&&t.appId===r.appId?ko(_o(),e):Qr.run(zf(),()=>(Kf(Xr(),r),ko(_o(),e)))}function vo(r,e){return r?Qr.run(r,e):e()}var Zc,CA,Qr,zf,Xr,pe,L,ur,Za,j=T(()=>{"use strict";Zc=require("async_hooks"),CA=require("server-only");st();Qr=new Zc.AsyncLocalStorage,zf=()=>({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});Xr=()=>{let r=Qr.getStore();if(r)return r;throw new Error("ChaiBuilder method called outside of a request context")},pe=()=>Qr.getStore();L=()=>{let r=Xr();if(!r.initialized||!r.appId)throw new Error("Please initialize ChaiBuilder with an API key");return r},ur=()=>{let r=Xr();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=L});function Do(r,e){let t=pe();return!t||t.traceId?!1:(t.traceId=(0,ep.nanoid)(6),t.traceStart=performance.now(),t.traceLabel=r,t.traceDetail=e!=null?e:null,!0)}function Bo(){var r,e;return(e=(r=pe())==null?void 0:r.traceDetail)!=null?e:null}function we(){let r=pe();if(!(r!=null&&r.traceId))return"";let e=Math.round(performance.now()-r.traceStart);return`${" ".repeat(r.traceDepth)}[${r.traceId} +${e}ms]`}function No(r){let e=pe();e&&(e.traceDepth+=1);try{return r()}finally{e&&(e.traceDepth=Math.max(0,e.traceDepth-1))}}var ep,wA,Zr=T(()=>{"use strict";ep=require("nanoid"),wA=require("server-only");j()});function Ie(r,e){Wf[r](e)}function Lo(r,e=200){return r.length<=e?r:`${r.slice(0,e)}\u2026`}function en(r,e){if(!F(1))return;let t=we(),a=e?` \xB7 ${e}`:"";Ie("info",`${t} \u25B6 ${r}${a}`)}function rp(r,e){F(1)&&Ie("info",`${r} \xB7 ${e}ms`)}function Oo(r,e){if(!F(1))return;let t=we(),a=e?` \xB7 ${e}`:"";Ie("info",`${t} \u25B6 ${r}${a}`)}function Fo(r,e,t,a){if(!F(1))return;let n=we(),i=a>0?String(a):"failed";Ie("info",`${n} fetch ${t}ms \xB7 ${r} ${Lo(e,100)} \xB7 ${i}`)}function Uo(r,e,t){if(!F(1))return;let a=we();Ie("success",`${a} cache HIT \xB7 ${r} \xB7 ${e} \xB7 ${t}`)}function Go(r,e,t){if(!F(1))return;let a=we();Ie("warn",`${a} cache MISS \xB7 ${r} \xB7 ${e} \xB7 ${t}`)}function ap(r,e){if(!F(2))return;let t=we();Ie("info",`${t} api ${e}ms \xB7 ${r}`)}function np(r,e){if(!F(2))return;let t=we();Ie("info",`${t} action ${e}ms \xB7 ${r}`)}function ea(r,e){if(!F(1))return;let t=we();Ie("info",`${t} \u25C0 ${r} \xB7 ${e}ms`)}function Qt(r,e,t,a){if(!F(1))return;let n=we(),i=a?`${a} \xB7 `:"";Ie("info",`${n} ai ${e}ms \xB7 ${i}${r} \xB7 ${t}`)}function ta(r,e){if(!F(1))return;let t=we(),a=e?` \xB7 ${e}`:"";Ie("info",`${t} \u25B6 ai:${r}${a}`)}function Xt(r){if(!F(2))return;let e=we();Ie("debug",`${e} ai \xB7 ${Lo(r,200)}`)}function ip(r,e){if(!F(2))return;let t=we();Ie("debug",`${t} ai tool \xB7 ${r} \xB7 ${Lo(e,120)}`)}function ra(r,e,t=2){if(!F(t))return;let a=we(),n=e?` \xB7 ${e}`:"";Ie(t===1?"info":"debug",`${a} ai stream \xB7 ${r}${n}`)}var tp,RA,Wf,Zt=T(()=>{"use strict";tp=require("consola"),RA=require("server-only");st();Zr();Wf=tp.consola.withTag("ChaiDebug")});function aa(r,e=120){let t=r.replace(Yf,"[data-uri]");return t.length<=e?t:`${t.slice(0,e)}\u2026`}function Mo(r){return`messages=${r.length}`}var DA,Yf,op=T(()=>{"use strict";DA=require("server-only");st();Zt();Zr();Yf=/data:[^;]+;base64,[A-Za-z0-9+/=]+/g});var $o,A,v=T(()=>{"use strict";$o=require("zod");N();A=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 $o.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 $o.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 mr(){return Pt().credits.enabled}function tn(){return Pt().logging.logger}function sp(r,e="UNKNOWN"){let t=Pt();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 Ho(r,e="UNKNOWN"){let t=sp(r,e);return{model:t.model,providerOptions:t.providerOptions}}function qo(r,e="UNKNOWN"){let t=sp(r,e);return{model:t.model,providerOptions:t.providerOptions}}var _,re=T(()=>{"use strict";$e();_=(r,e)=>(console.error(e),new Error(r))});async function Jf(r){if(Vo.has(r))return Vo.get(r)||null;let{data:e,error:t}=await y(()=>h.select({user:s.apps.user,client:s.apps.client}).from(s.apps).where((0,Y.eq)(s.apps.id,r)).limit(1)),a=!t&&e&&e.length>0&&e[0].user?{user:e[0].user,client:e[0].client}:null;return Vo.set(r,a),a}async function lp(r){let{data:e,error:t}=await y(()=>h.select({planId:s.appUserPlans.planId,nextBilledAt:s.appUserPlans.nextBilledAt,clientId:s.appUserPlans.client,plansAndAddOns:s.clients.plansAndAddOns}).from(s.appUserPlans).innerJoin(s.clients,(0,Y.eq)(s.appUserPlans.client,s.clients.id)).where((0,Y.eq)(s.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 Qf(r,e,t){let a=[(0,Y.eq)(s.apps.user,r),(0,Y.eq)(s.aiLogs.creditSource,"monthly")];e&&a.push((0,Y.gte)(s.aiLogs.createdAt,e.toISOString())),t&&a.push((0,Y.lt)(s.aiLogs.createdAt,t.toISOString()));let{data:n,error:i}=await y(()=>h.select({total:Y.sql`COALESCE(SUM(CAST(${s.aiLogs.totalTokens} AS NUMERIC)), 0)`}).from(s.aiLogs).innerJoin(s.apps,(0,Y.eq)(s.aiLogs.app,s.apps.id)).where((0,Y.and)(...a)));return i||!n||n.length===0?0:parseFloat(n[0].total)||0}async function Xf(r){let{data:e,error:t}=await y(()=>h.select({id:s.aiCreditAddons.id,creditsTotal:s.aiCreditAddons.creditsTotal,creditsUsed:s.aiCreditAddons.creditsUsed}).from(s.aiCreditAddons).where((0,Y.and)((0,Y.eq)(s.aiCreditAddons.user,r),(0,Y.eq)(s.aiCreditAddons.status,"active"))).orderBy((0,Y.asc)(s.aiCreditAddons.createdAt)));if(t||!e||e.length===0)return{total:0,used:0,remaining:0,addons:[]};let a=0,n=0,i=[];for(let o of e){let l=parseFloat(o.creditsTotal)||0,c=parseFloat(o.creditsUsed)||0,d=l-c;a+=l,n+=c,d>0&&i.push({id:o.id,remaining:parseFloat(d.toFixed(2))})}return{total:a,used:n,remaining:parseFloat((a-n).toFixed(2)),addons:i}}async function jo(r){var C,x,k;let e=await Jf(r);if(!e)return null;let t=await lp(e.user),a=(t==null?void 0:t.plansConfig)||(e.client?await zo(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(S=>S.id===n||S.sandboxId===n))}),o=(k=(x=i==null?void 0:i.limits)==null?void 0:x.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([Qf(e.user,c,d),Xf(e.user)]),f=parseFloat((u/rn).toFixed(2)),b=Math.min(f,o),P=Math.max(0,o-f),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:o,remaining:parseFloat(P.toFixed(2))},addon:E,totalAvailable:parseFloat((P+E.remaining).toFixed(2)),canBuyCredits:(a.addOns||[]).length>0,billingPeriod:c&&d?{start:c,end:d}:void 0}}async function cp(r){if(!mr())return{available:!0,status:null};let e=await jo(r);return e?{available:e.totalAvailable>0,status:e}:{available:!1,status:null}}function pp(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 dp(r,e){let{error:t}=await y(()=>h.update(s.aiCreditAddons).set({creditsUsed:Y.sql`CAST(${s.aiCreditAddons.creditsUsed} AS NUMERIC) + ${(e/rn).toFixed(2)}`,status:Y.sql`CASE WHEN CAST(${s.aiCreditAddons.creditsUsed} AS NUMERIC) + ${(e/rn).toFixed(2)} >= CAST(${s.aiCreditAddons.creditsTotal} AS NUMERIC) THEN 'exhausted' ELSE 'active' END`}).where((0,Y.eq)(s.aiCreditAddons.id,r)));return t?{success:!1,error:"Failed to update addon credits"}:{success:!0}}async function gp(r){let e=await lp(r);return e?{planId:e.planId,nextBilledAt:e.nextBilledAt,clientId:e.clientId}:null}async function zo(r){let{data:e,error:t}=await y(()=>h.select({plansAndAddOns:s.clients.plansAndAddOns}).from(s.clients).where((0,Y.eq)(s.clients.id,r)).limit(1));return t||!e||e.length===0?null:e[0].plansAndAddOns}var Y,rn,Vo,na=T(()=>{"use strict";Y=require("drizzle-orm");R();re();rn=1e3,Vo=new Map});var Nt,an,ae,At=T(()=>{"use strict";Nt=require("ai");Yc();st();op();Zt();N();v();re();na();an=class an extends A{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(!F(2))return;let a=(n=t==null?void 0:t.totalTokens)!=null?n:e==null?void 0:e.totalTokens;a!==void 0&&Xt(`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(!mr())return{available:!0,status:null};let{available:e,status:t}=await cp(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,f;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=Ho(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(),o=this.getLoggablePrompt(e),l=(f=(g=e.model)==null?void 0:g.toString())!=null?f:"unknown",c=this.getActionLabel();F(1)&&ta(c,"generateText"),F(2)&&(Array.isArray(e.messages)&&Xt(Mo(e.messages)),o&&Xt(`prompt \xB7 ${aa(o)}`));try{let b=await(0,Nt.generateText)(e);return F(1)&&Qt(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:o,model:e.model.toString()}),b}catch(b){throw F(1)&&Qt(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:o,model:e.model.toString()}),b}}async generateImage(e){var d,u,g,f,b,P,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:qo(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=qo(this.model,(f=(g=this.context)==null?void 0:g.action)!=null?f:"UNKNOWN");a={...a,model:C.model}}let n=tn(),i=Date.now(),o=typeof a.prompt=="string"?a.prompt:typeof a.prompt=="object"&&((b=a.prompt)!=null&&b.text)?a.prompt.text:"",l=(E=(P=a.model)==null?void 0:P.toString())!=null?E:"unknown",c=this.getActionLabel();F(1)&&ta(c,"generateImage"),F(2)&&o&&Xt(`prompt \xB7 ${aa(o)}`);try{let C=await(0,Nt.generateImage)(a);return F(1)&&Qt(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:o,model:a.model.toString()}),C}catch(C){throw F(1)&&Qt(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:o,model:a.model.toString()}),C}}async streamText(e){var d,u,g,f;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=Ho(a,(u=(d=this.context)==null?void 0:d.action)!=null?u:"UNKNOWN");e={...e,model:b.model}}let n=tn(),i=Date.now(),o=this.getLoggablePrompt(e),l=(f=(g=e.model)==null?void 0:g.toString())!=null?f:"unknown",c=this.getActionLabel();return F(1)&&ta(c,"streamText"),F(2)&&(Array.isArray(e.messages)&&Xt(Mo(e.messages)),o&&Xt(`prompt \xB7 ${aa(o)}`)),(0,Nt.streamText)({...e,onFinish:b=>{F(1)&&Qt(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:o,model:l})},onError:b=>{F(1)&&Qt(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:o,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--
435
+ `)),t=!0):!t&&a.includes("--START--")&&(t=!0),n.enqueue(e.encode(a))},flush(a){t||a.enqueue(e.encode(`--START--
436
+ `)),a.enqueue(e.encode(`
437
+ --END--`))}})}createErrorStream(e){let t=new TextEncoder,a=this.sanitizeErrorMessageForStream(e.message||String(e));return new ReadableStream({start(n){n.enqueue(t.encode(`--START--
438
+ --MSG=${Wc(a)}--
439
+ --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,o="";return new ReadableStream({async start(l){var c,d;ra("open",a);try{for await(let u of e.fullStream)if(u.type==="text-delta"){let g=o+u.text;o=g.slice(-32);let f=g.includes("--START--"),b=g.includes("--END--");!n&&!f?(l.enqueue(t.encode(`--START--
440
+ `)),n=!0):!n&&f&&(n=!0),b&&(i=!0),l.enqueue(t.encode(u.text))}else u.type==="tool-call"&&an.CLIENT_ONLY_AI_TOOLS.has(u.toolName)?(ip(u.toolName,aa(JSON.stringify(u.input))),l.enqueue(t.encode(`9:${JSON.stringify({toolCallId:u.toolCallId,toolName:u.toolName,args:u.input})}
441
+ `))):u.type==="finish"?(ra("finish",(c=u.finishReason)!=null?c:"stop"),l.enqueue(t.encode(`d:${JSON.stringify({finishReason:(d=u.finishReason)!=null?d:"stop"})}
442
+ `))):u.type==="error"&&(ra("error",String(u.error),1),l.enqueue(t.encode(`3:${JSON.stringify(String(u.error))}
443
+ `)));n||l.enqueue(t.encode(`--START--
444
+ `)),i||l.enqueue(t.encode(`
445
+ --END--`)),ra("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,Nt.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"]);ae=an});var ne,Zf,nn,mp=T(()=>{"use strict";ne=require("zod");$a();pr();Ge();$e();Ja();Qa();Xa();At();Zf=ne.z.record(ne.z.string(),ne.z.object({name:ne.z.string(),value:ne.z.string(),description:ne.z.string().optional(),archived:ne.z.boolean().optional()})).optional(),nn=class extends ae{getValidationSchema(){return ne.z.object({messages:ne.z.array(ne.z.any()),model:ne.z.string().optional(),context:ne.z.any().optional(),designTokens:Zf,images:ne.z.array(ne.z.string()).optional(),attachments:ne.z.array(ne.z.any()).optional(),options:ne.z.any().optional()})}async execute(e){var B,S,$,z,ce,jt;this.context||ot(new Me("Context not set. Please try again.","INVALID_REQUEST",500)),(!e.messages||e.messages.length===0)&&ot(new Me("No messages provided. Please enter a prompt.","INVALID_REQUEST",400));let t=e.messages.filter(O=>O.role!=="system"),a=t[t.length-1];a||ot(new Me("No user message found in the request.","INVALID_REQUEST",400));let n=gr(null,e==null?void 0:e.options),i={...nt,...e.designTokens||{}},o=Object.entries(i).filter(([,O])=>O!=null&&!O.archived).map(([O,ht])=>`- ${O}: ${ht.value} (${ht.name})`).join(`
446
+ `);n=n.replace("{{DESIGN_TOKENS_LIST}}",o);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=jr(),u=Object.values(d).filter(O=>!l.has(O.type)&&Ma(O,c||"page")),g;u.length===0?g="No custom blocks registered.":g=u.map(O=>{var Nl,Ll,Ol;let ht=(Ll=(Nl=O.props)==null?void 0:Nl.schema)!=null&&Ll.properties?Object.entries(O.props.schema.properties).filter(([,be])=>!(be!=null&&be.styles)&&!(be!=null&&be.runtime)&&!(be!=null&&be.hidden)).map(([be,Ee])=>{var Fl,Ul,Gl;let Ch=Array.isArray(Ee==null?void 0:Ee.type)?Ee.type.join("|"):(Fl=Ee==null?void 0:Ee.type)!=null?Fl:"any",Eh=(Ee==null?void 0:Ee.default)!==void 0?` (default: ${JSON.stringify(Ee.default)})`:"",xh=(Ul=O.aiProps)!=null&&Ul.includes(be)?" [AI-settable]":"";return` - ${be} (${Ch})${Eh}${xh}: ${(Gl=Ee==null?void 0:Ee.title)!=null?Gl:be}`}).join(`
447
+ `):" (no declared props)",Ph=O.wrapper?" [wrapper \u2014 can contain child blocks]":"",Ah=O.type.replace(/([A-Z])/g,be=>`-${be.toLowerCase()}`).replace(/^-/,"");return`### ${O.type} \u2192 <chai-${Ah}>${Ph}
448
+ Description: ${(Ol=O.description)!=null?Ol:O.label}
449
+ Props:
450
+ ${ht}`}).join(`
451
+
452
+ `),n=n.replace("{{CUSTOM_BLOCK_CATALOG}}",g);let f=($=(S=e==null?void 0:e.options)==null?void 0:S.dataBindingPaths)!=null?$:{global:[],page:[]},b=f.global.map(O=>`- (global) {{${O}}}`),P=f.page.map(O=>`- (page) {{${O}}}`),E=[...b,...P],C=E.length>0?E.join(`
453
+ `):"No data binding paths available for this page.";n=n.replace("{{DATA_BINDING_PATHS}}",C);let x;if(!c)x="Standard page (no specific page type).";else{let O=Qe(c),ht=(z=O==null?void 0:O.description)!=null?z:O==null?void 0:O.helpText;x=ht?`Page type: ${c}
454
+ ${ht}`:`Page type: ${c}`}n=n.replace("{{PAGE_TYPE_CONTEXT}}",x),e.context&&(n+=`
455
+
456
+ ## Additional Information`,(ce=e.context)!=null&&ce.site&&(n+=`
457
+
458
+ ## Website Information
459
+ ${JSON.stringify(e.context.site)}`),(jt=e.context)!=null&&jt.page&&(n+=`
460
+
461
+ ## Page Information
462
+ ${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(O=>{k.push({type:"image",image:O})}),e.attachments&&e.attachments.length>0&&e.attachments.forEach(O=>{if(O.url&&O.mediaType){let ht=this.formatBase64(O.url);k.push({type:"file",data:ht,mediaType:O.mediaType,...O.filename&&{filename:O.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 er,on,hp=T(()=>{"use strict";er=require("zod");Qa();Xa();Ja();At();on=class extends ae{getValidationSchema(){return er.z.object({messages:er.z.array(er.z.any()),model:er.z.string().optional(),context:er.z.any().optional(),initiator:er.z.enum(["TRANSLATE_CONTENT","UPDATE_CONTENT"])})}async execute(e){this.context||ot(new Me("Context not set. Please try again.","INVALID_REQUEST",500));let t=e.messages.filter(i=>i.role!=="system");t[t.length-1]||ot(new Me("No user message found in the request.","INVALID_REQUEST",400));let n=gr(e.initiator);return this.streamChaiBuilderText({model:e.model,system:n,messages:e.messages,temperature:.7})}}});var ey,ty,ry,fp,yp=T(()=>{"use strict";ey=`
463
+ # ANIMATION RULES
464
+ - Add \`data-animation\` attribute to elements when appropriate to add entry animations on scroll.
465
+ - **Do not overuse animations.** Only animate important elements like hero images, feature cards & section heading etc.
466
+ - The format MUST exactly be: \`data-animation="ANIMATION|EASING|DURATION|DELAY|TIME"\`
467
+ - **ANIMATION**: fade-in, slide-up, slide-down, slide-left, slide-right, zoom-in, zoom-out, flip-x, flip-y, rotate-in
468
+ - **EASING**: linear, ease-in, ease-out, ease-in-out
469
+ - **DURATION**: in milliseconds (e.g., 500, 700, 1000)
470
+ - **DELAY**: in milliseconds (e.g., 0, 200, 300) so that the animation starts after a delay and not immediately
471
+ - **TIME**: once (plays once) or infinite (repeats every time it enters the viewport)
472
+ - Example: \`<div data-animation="slide-up|ease-in-out|500|300|once" class="...">\`
473
+ `,ty='\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',ry=`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.
474
+
475
+ # 1. HOW YOU WORK (TOOL WORKFLOW \u2014 ALWAYS OBEY)
476
+
477
+ You see a compact PAGE OUTLINE of the current page (below). Each line is one block:
478
+ \`{bid} | {type} | {name} | {short text}\`. Indentation shows nesting.
479
+
480
+ Available tools:
481
+ - **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.
482
+ - **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.
483
+ - **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).
484
+ - **remove_blocks** \u2014 delete blocks by bid.
485
+ - **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.
486
+ - **bind_prop** \u2014 set a data binding on a prop of an existing block.
487
+ - **get_partial_blocks** \u2014 list available partial blocks (global reusable sections like header/footer). Call before placing <chai-partial-block> elements.
488
+
489
+ Workflow rules:
490
+ 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.
491
+ 2. To modify an existing section: read_block_html first (batch multiple bids into one call), then edit_block.
492
+ 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.
493
+ 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.
494
+ 5. In every edit_block/add_blocks call, fill the arguments in this exact order: task first, then blockId/parentId/position, then html LAST.
495
+ 6. \`task\` is a short user-facing progress label (e.g. "Redesigning hero section"). Plain language, no technical terms.
496
+ 7. When the user's request is ambiguous, unrelated to the page, or a question \u2014 just answer in plain text without calling tools.
497
+ 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.
498
+ 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.
499
+ 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.
500
+
501
+ # 1.1 CHAT OUTPUT \u2014 KEEP IT MINIMAL (MANDATORY)
502
+
503
+ 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.
504
+ - 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.
505
+ - 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.
506
+ - Do NOT restate, quote, or narrate the HTML/markup you generate \u2014 it appears live on the canvas, not in chat.
507
+ - Do NOT explain your reasoning, list the steps you took, or enumerate the design choices unless the user explicitly asks.
508
+ - If the user asks a question, answer in one or two plain sentences.
509
+
510
+ # 2. EDIT SEMANTICS
511
+ - edit_block html MUST be a full valid replacement of the target element, keeping its role in the layout.
512
+ - 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.
513
+ - Never add a bid attribute in add_blocks html.
514
+ - Preserve all attributes you don't intentionally change (especially chai-type, data bindings, #styles: values).
515
+
516
+ # 3. HTML GENERATION RULES (MANDATORY)
517
+
518
+ You are an expert HTML/CSS developer specializing in Tailwind CSS and shadcn/ui patterns.
519
+ You produce clean, semantic, accessible, production-ready HTML.
520
+ Generate **pure HTML**, with no markdown, no comments, no extra text.
521
+
522
+ ### General Guidelines
523
+ 1. Use **only Tailwind CSS v3 utility classes**, no custom CSS.
524
+ 2. Use **shadcn/ui design system** semantic tokens for all colors.
525
+ 3. Use **semantic HTML** with proper accessibility.
526
+ 4. Always produce **responsive, mobile-first** layout.
527
+ 5. **Do NOT include** <!DOCTYPE>, <html>, <head>, or <body>.
528
+ 6. Keep UI varied \u2014 don't repeat the same layout patterns.
529
+ 7. Use \`<details><summary>\` for accordion, FAQ, and mobile menu interactions.
530
+ 8. Do NOT use Tailwind container queries.
531
+ 9. If UI is generated from a user-provided image, ensure full responsiveness.
532
+ 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.**
533
+ - Match structure as closely as possible
534
+ - Maintain the Tailwind + shadcn theme rules
535
+ - The HTML output should reflect the exact design of the provided image
536
+
537
+ ### \u{1F6A8} CRITICAL: Avoid HTML "Div Soup" for Decorative UI Elements
538
+ **NEVER generate complex HTML markup for decorative UI elements that should be images:**
539
+ - \u274C DO NOT create HTML mockups of: code snippets, terminal windows, browser frames, device mockups, window chrome, syntax-highlighted code blocks
540
+ - \u2705 INSTEAD: Use placeholder images for these decorative elements
541
+ - **Reasoning**: Complex nested div structures for visual decoration create "div soup" that bloats markup unnecessarily
542
+ - **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)
543
+ - **Examples**:
544
+ * 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">\`
545
+ * 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">\`
546
+ * For actual interactive content \u2192 Use semantic HTML
547
+
548
+ ### \u{1F6A8} Design Tokens (MANDATORY)
549
+ You MUST use design tokens whenever appropriate. Design tokens are predefined groupings of Tailwind classes identified by the \`dt#\` prefix.
550
+ 1. **Placement**: Always place design tokens at the START of the \`class\` attribute.
551
+ 2. **Overrides**: Any Tailwind classes following a design token act as overrides, similar to how \`tailwind-merge\` works.
552
+ 3. **Example**: \`<button class="dt#btn p-2">\` where \`p-2\` overrides the default padding in \`dt#btn\`.
553
+
554
+ **Available Design Tokens**:
555
+ {{DESIGN_TOKENS_LIST}}
556
+
557
+ # 3.1 DESIGN EXCELLENCE & CREATIVITY (CRITICAL)
558
+
559
+ Create distinctive, production-grade interfaces that avoid generic "AI slop" aesthetics. Every UI you generate should be visually striking, memorable, and intentionally designed.
560
+
561
+ ### Design Thinking Process
562
+ Before generating HTML, commit to a BOLD aesthetic direction:
563
+ - **Purpose**: Consider what problem this interface solves and who uses it
564
+ - **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
565
+
566
+ **CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
567
+
568
+ ### Design Excellence Guidelines
569
+
570
+ **Typography & Font Selection**:
571
+ - Choose fonts that are beautiful, unique, and interesting
572
+ - AVOID generic fonts: Arial, Inter, Roboto, system fonts
573
+ - Use distinctive font combinations that elevate the design
574
+ - Pair a distinctive display font with a refined body font
575
+ - Consider: font-serif, font-mono for variety, or use weight variations (font-light, font-bold) creatively
576
+
577
+ **Color & Visual Hierarchy**:
578
+ - Commit to a cohesive aesthetic with dominant colors and sharp accents
579
+ - Avoid timid, evenly-distributed palettes
580
+ - Use shadcn tokens creatively (not just bg-background everywhere)
581
+ - Consider bold color blocking, dramatic contrasts, or refined monochrome
582
+ - AVOID: purple gradients on white backgrounds, predictable color schemes
583
+
584
+ **Spatial Composition**:
585
+ - Create unexpected layouts with asymmetry, overlap, diagonal flow
586
+ - Use grid-breaking elements and generous negative space OR controlled density
587
+ - Avoid predictable grid patterns - be creative with positioning
588
+ - Consider: absolute positioning, creative flexbox/grid layouts, overlapping elements
589
+
590
+ **Backgrounds & Visual Details**:
591
+ - Create atmosphere and depth rather than defaulting to solid colors
592
+ - Consider: gradient meshes, subtle textures, geometric patterns
593
+ - Use layered transparencies, dramatic shadows, decorative borders
594
+ - Add visual interest with background patterns or accent elements
595
+
596
+ **NEVER Use Generic AI Aesthetics**:
597
+ - Overused font families (Inter, Roboto, Arial, system fonts)
598
+ - Cliched color schemes (purple gradients on white)
599
+ - Predictable layouts and component patterns
600
+ - Cookie-cutter designs lacking context-specific character
601
+ - NEVER converge on common choices (Space Grotesk, etc.) across generations
602
+
603
+ **Implementation Complexity**:
604
+ - Match complexity to the aesthetic vision
605
+ - Maximalist designs: elaborate code with extensive effects
606
+ - Minimalist designs: restraint, precision, careful spacing and typography
607
+ - Elegance comes from executing the vision well
608
+
609
+ **Variation Mandate**:
610
+ - Every design should be different
611
+ - Vary between light and dark themes
612
+ - Change fonts, layouts, color schemes between generations
613
+ - Interpret user requests creatively with unexpected choices
614
+
615
+
616
+ # 4. ATTRIBUTE & CUSTOM COMPONENT RULES
617
+
618
+ ### chai-name
619
+ - Add \`chai-name\` attribute to tags
620
+ - Use descriptive section names (e.g., "Hero Section", "Navigation").
621
+
622
+ ## Custom Web components(CRITICAL)
623
+ - Html can have custom web components. All web components starts with <chai- prefix.
624
+ - Use "about-this-component" attribute to understand what the component does.
625
+ - Check for can-move and can-delete attribute to check if the component can be moved or deleted.
626
+ - If an attribute value starts with #styles: treat it like class attribute with tailwind classes.
627
+ Use the attribute key to understand what the attribute does and apply classes. Maintain the #styles: at start followed by tailwind classes.
628
+ - Do not change the chai-type attribute. Do not remove any attributes.
629
+
630
+ ## Data Binding (CRITICAL)
631
+ - Block prop values may contain binding expressions using double-curly syntax: {{path.to.data}}
632
+ - 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.
633
+ - You MAY use binding expressions when setting props on custom blocks, but ONLY using paths listed in the "Available Data Binding Paths" section below.
634
+ - Repeater blocks use a special prop: repeater-items="{{collectionName}}" where collectionName is the array to iterate.
635
+ - Inside a Repeater, child block props can reference each item's fields via {{$index.fieldName}}.
636
+ - Binding syntax must use exactly two curly braces: {{path}} \u2014 not {path} or \${{path}}.
637
+ - (global) paths are site-wide and available on every page. (page) paths are only available on this specific page type.
638
+
639
+ **Available Data Binding Paths**:
640
+ {{DATA_BINDING_PATHS}}
641
+
642
+ ## Current Page Type
643
+ {{PAGE_TYPE_CONTEXT}}
644
+
645
+ ## Available Custom Blocks
646
+ 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.
647
+
648
+ {{CUSTOM_BLOCK_CATALOG}}
649
+
650
+ ## Special Blocks
651
+ These may appear as web components INSIDE the html argument of add_blocks/edit_block:
652
+
653
+ ### Repeater \u2014 <chai-repeater>
654
+ Used to render a list by iterating over an array data binding.
655
+ - Required prop: \`repeater-items="{{arrayPath}}"\` where \`arrayPath\` is an array-type binding path.
656
+ - Only bind to paths marked as arrays in "Available Data Binding Paths".
657
+ - Child blocks inside a Repeater reference the current item's fields using \`{{$index.fieldName}}\`.
658
+ - Example: \`<chai-repeater repeater-items="{{page.products}}"><h3>{{$index.name}}</h3></chai-repeater>\`
659
+ - Do NOT use a Repeater for static lists \u2014 only when iterating over bound data.
660
+
661
+ ### PartialBlock \u2014 <chai-partial-block>
662
+ Partial blocks are global reusable blocks (e.g. header, footer, navigation) shared across pages.
663
+ - Reference them by their ID: \`<chai-partial-block partial-id="THE_PARTIAL_ID"></chai-partial-block>\`
664
+ - Never modify a partial block's content inline \u2014 only reference it. Their content is edited on the partial's own page.
665
+ - When asked to build a full page layout, call the \`get_partial_blocks\` tool to discover available partial IDs before placing them.
666
+
667
+ ## Icons
668
+ - Icons use the **Lucide** icon set (https://lucide.dev/icons).
669
+ - Always include \`chai-type="Icon"\` on icon elements and preserve any existing attributes (e.g. \`bid\`).
670
+ - Express each icon as \`<chai-icon chai-type="Icon" icon-name="kebab-case-name" width="16" height="16">\`
671
+ 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">\`.
672
+ - Pick semantically appropriate icon names from Lucide; do not embed raw \`<svg>\` markup inside \`<chai-icon>\`.
673
+
674
+ ### SVG
675
+ - Always include width/height attributes.
676
+ - Ensure correct \`viewBox\`.
677
+
678
+
679
+ # 5. SHADCN/THEME COLOR RULES (STRICT)
680
+
681
+ Use ONLY these semantic tokens:
682
+ - bg-background + text-foreground
683
+ - bg-card + text-card-foreground
684
+ - bg-primary + text-primary-foreground
685
+ - bg-secondary + text-secondary-foreground
686
+ - bg-muted + text-muted-foreground
687
+ - bg-accent + text-accent-foreground
688
+ - bg-destructive + text-destructive-foreground
689
+ - border-border, border-input
690
+ - ring-ring
691
+
692
+ ### Contrast Rules
693
+ - Always maintain clear readable contrast.
694
+ - Never pair same-family bg/text tokens (e.g., bg-primary + text-primary).
695
+
696
+ ### Hover Rules
697
+ - Primary buttons: hover:bg-primary/90
698
+ - Cards: hover:bg-accent hover:text-accent-foreground
699
+ - Links: text-muted-foreground hover:text-foreground
700
+ - Nav links: text-foreground/80 hover:text-foreground
701
+
702
+
703
+ # 6. RESPONSIVENESS RULES
704
+
705
+ - Mobile-first approach.
706
+ - Breakpoints: sm, md, lg, xl.
707
+ - Smooth scaling between sizes.
708
+ - At md breakpoint:
709
+ * Reduce grid columns (lg:4 \u2192 md:2 \u2192 sm:1)
710
+ * Adjust padding, spacing, and layouts
711
+ * Ensure nav/mobile menus behave correctly
712
+ * Ensure cards remain aligned
713
+
714
+
715
+ # 7. SPECIFIC UI PATTERNS
716
+
717
+ ### Forms & Fields
718
+ - 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"\`).
719
+
720
+ ### Mobile Menu (<details><summary>)
721
+ - Use 'summary' containing an SVG hamburger icon.
722
+ - Mobile menu container sample:
723
+ absolute right-1 mt-2 min-w-64 bg-card border border-border rounded-lg shadow-lg z-50 p-4
724
+ - Menu item sample:
725
+ block py-2 px-4 hover:bg-accent rounded-md transition-colors
726
+ - Touch targets must be at least 44px tall.
727
+
728
+ ### Accordions / Nested Menus
729
+ - Always use <details> and <summary>.
730
+
731
+
732
+ # 8. COMMON RULES
733
+
734
+ {{ANIMATION_RULES}}
735
+ {{IMAGE_RULES}}
736
+
737
+ # 9. CURRENT PAGE OUTLINE
738
+
739
+ 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.
740
+
741
+ {{PAGE_OUTLINE}}
742
+ `.trim(),fp=(r={})=>{let e=ry;return e=e.replace("{{ANIMATION_RULES}}",r!=null&&r.animation?ey:""),e=e.replace("{{IMAGE_RULES}}",ty),e}});var ay,ny,iy,oy,sy,bp,Tp=T(()=>{"use strict";pr();$a();Ge();$e();ay=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"]),ny=r=>{let e={...nt,...r||{}};return Object.entries(e).filter(([,t])=>t!=null&&!t.archived).map(([t,a])=>`- ${t}: ${a.value} (${a.name})`).join(`
743
+ `)},iy=r=>{let e=jr(),t=Object.entries(e).filter(([a,n])=>{var o,l;let i=(o=n.type)!=null?o:a;return!i||ay.has(i)||!Ma(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,f;let i=(d=n.type)!=null?d:a,o=(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,P])=>{var k,D,B;let E=Array.isArray(P==null?void 0:P.type)?P.type.join("|"):(k=P==null?void 0:P.type)!=null?k:"any",C=(P==null?void 0:P.default)!==void 0?` (default: ${JSON.stringify(P.default)})`:"",x=(D=n.aiProps)!=null&&D.includes(b)?" [AI-settable]":"";return` - ${b} (${E})${C}${x}: ${(B=P==null?void 0:P.title)!=null?B:b}`}).join(`
744
+ `):" (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}
745
+ Description: ${(f=n.description)!=null?f:n.label}
746
+ Props:
747
+ ${o}`}).join(`
748
+
749
+ `)},oy=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(`
750
+ `):"No data binding paths available for this page."},sy=r=>{var a;if(!r)return"Standard page (no specific page type).";let e=Qe(r),t=(a=e==null?void 0:e.description)!=null?a:e==null?void 0:e.helpText;return t?`Page type: ${r}
751
+ ${t}`:`Page type: ${r}`},bp=(r,e)=>{var a,n,i,o,l;let t=r;return t=t.replace("{{DESIGN_TOKENS_LIST}}",ny(e.designTokens)),t=t.replace("{{CUSTOM_BLOCK_CATALOG}}",iy((a=e==null?void 0:e.options)==null?void 0:a.pageType)),t=t.replace("{{DATA_BINDING_PATHS}}",oy((n=e==null?void 0:e.options)==null?void 0:n.dataBindingPaths)),t=t.replace("{{PAGE_TYPE_CONTEXT}}",sy((i=e==null?void 0:e.options)==null?void 0:i.pageType)),e.context&&(t+=`
752
+
753
+ ## Additional Information`,(o=e.context)!=null&&o.site&&(t+=`
754
+
755
+ ## Website Information
756
+ ${JSON.stringify(e.context.site)}`),(l=e.context)!=null&&l.page&&(t+=`
757
+
758
+ ## Page Information
759
+ ${JSON.stringify(e.context.page)}`)),t}});var de,Lt,sn,H,ly,Pp,Ap=T(()=>{"use strict";de=require("ai"),Lt=require("drizzle-orm"),sn=require("himalaya"),H=require("zod");R();j();ly=(r,e)=>{let t=new Set(e),a={},n=(o,l)=>{var d,u,g,f;let c=[...(d=l.children)!=null?d:[]];for(;c.length;){let b=c.pop();if(!b||b.type!=="element")continue;let P=(g=(u=b.attributes)==null?void 0:u.find(E=>E.key==="bid"))==null?void 0:g.value;P&&t.has(P)&&(a[P]=`NOTE: bid "${P}" is inside block "${o}" which was already returned. Use the "${o}" HTML slice to edit it, or request only "${P}".`,t.delete(P)),(f=b.children)!=null&&f.length&&c.push(...b.children)}},i=o=>{var c,d,u;if(t.size===0||o.type!=="element")return;let l=(d=(c=o.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)([o]),t.delete(l),n(l,o);return}(u=o.children)==null||u.forEach(i)};(0,sn.parse)(r).forEach(i);for(let o of t)a[o]=`ERROR: no block found with bid "${o}". Check the page outline for valid bids.`;return a},Pp=({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)(H.z.object({blockIds:H.z.array(H.z.string()).min(1).describe("bids of the blocks to read")})),execute:async({blockIds:e})=>ly(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)(H.z.object({task:H.z.string().describe("Short user-facing progress label, e.g. 'Redesigning hero section'"),blockId:H.z.string().describe("bid of the block to replace"),html:H.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)(H.z.object({task:H.z.string().describe("Short user-facing progress label, e.g. 'Adding pricing section'"),parentId:H.z.string().nullish().describe("bid of the parent container; omit to add at page root"),position:H.z.number().nullish().describe("Child index position; -1 or omit to append at end"),html:H.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)(H.z.object({ids:H.z.array(H.z.string()).min(1).describe("Array of block IDs (bid attribute values) to remove"),task:H.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)(H.z.object({task:H.z.string().nullish().describe("Short user-facing progress label"),type:H.z.string().describe("Block type exactly as listed in the catalog, e.g. 'ProductCard'"),parentId:H.z.string().nullish().describe("bid of the parent block, or omit to add at page root"),position:H.z.number().nullish().describe("Child index position; -1 or omit to append at end"),props:H.z.record(H.z.string(),H.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)(H.z.object({task:H.z.string().nullish().describe("Short user-facing progress label"),blockId:H.z.string().describe("bid of the block to update"),propName:H.z.string().describe("camelCase prop name on the block"),bindingPath:H.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)(H.z.object({})),execute:async()=>{let{appId:e}=ur(),{data:t,error:a}=await y(()=>h.select({id:s.appPages.id,name:s.appPages.name,metadata:s.appPages.metadata,pageType:s.appPages.pageType}).from(s.appPages).where((0,Lt.and)((0,Lt.eq)(s.appPages.app,e),(0,Lt.eq)(s.appPages.slug,""),(0,Lt.eq)(s.appPages.lang,""),(0,Lt.isNull)(s.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 o=(l=i.metadata)!=null?l:{};n[i.id]={name:i.name,description:(c=o.description)!=null?c:"",type:(d=i.pageType)!=null?d:"partial"}}),n}})})});var cn,ge,cy,py,dy,ln,Cp=T(()=>{"use strict";cn=require("ai"),ge=require("zod");Ja();Qa();yp();At();Tp();Ap();cy=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(),py=12,dy=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 ae{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:cy,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||ot(new Me("Context not set. Please try again.","INVALID_REQUEST",500)),(!e.messages||e.messages.length===0)&&ot(new Me("No messages provided. Please enter a prompt.","INVALID_REQUEST",400));let t=fp({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=bp(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+=`
760
+
761
+ ## Currently Selected Block
762
+ The user currently has the block with bid "${n}" selected. Prioritize changes to this block unless the request explicitly requires broader changes.`);let i=dy(e.messages.slice(-py)),o=await(0,cn.convertToModelMessages)(i,{ignoreIncompleteToolCalls:!0});return this.streamChaiBuilderUIMessageResponse({model:e.model,system:t,messages:o,temperature:.7,tools:Pp({pageHtml:(u=e.pageHtml)!=null?u:""}),stopWhen:(0,cn.stepCountIs)(8)})}}});var ue,pn,Ep=T(()=>{"use strict";ue=require("zod");Xa();At();pn=class extends ae{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,P,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=gr(e.initiator),i=typeof a.content=="string"?a.content:"Generate a random image",o=n?`${n}
763
+
764
+ ${i}`:i,l=((b=e.image)==null?void 0:b.aspectRatio)||"16:9",c=((P=e.image)==null?void 0:P.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 x;try{let D=(await this.generateImage({model:e.model,prompt:(x=e.image)!=null&&x.lastImage?{text:o,images:[e.image.lastImage]}:o,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--
765
+ --MSG=${D}--
766
+ --END--`)),C.close()}}})}}}}});var hr,dn,xp=T(()=>{"use strict";hr=require("zod");N();At();dn=class extends ae{getValidationSchema(){return hr.z.object({type:hr.z.enum(["site","page","prompt"]),content:hr.z.string().min(1),siteContext:hr.z.string().optional(),model:hr.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:
767
+
768
+ **Business Name & Industry**: [Content]
769
+ **Target Audience**: [Content]
770
+ **Unique Value Proposition**: [Content]
771
+ **Key Products/Services**: [Content]
772
+
773
+ 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:
774
+
775
+ **Page Purpose**: [Content]
776
+ **Target Keywords**: [Content]
777
+ **Primary H1 Goal**: [Content]
778
+
779
+ 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?`
780
+
781
+ Site Context: ${e.siteContext}
782
+
783
+ `:""} Please enhance the following rough draft:
784
+
785
+ ${e.content}`;return{success:!0,enhancedContent:(await this.generateText({model:e.model||"google/gemini-3-flash",system:t,prompt:a})).text.trim()}}}});var wp,Ct,gn,Ip=T(()=>{"use strict";wp=require("ai"),Ct=require("zod");N();At();gn=class extends ae{getValidationSchema(){return Ct.z.object({url:Ct.z.string().url(),languages:Ct.z.array(Ct.z.string()).min(1),model:Ct.z.string().optional()})}buildSchema(e){let t={};for(let a of e)t[a]=Ct.z.string().max(250).describe(`Image description in ${a} (max 250 chars)`);return Ct.z.object({translations:Ct.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.
786
+
787
+ LANGUAGES: ${e.languages.join(", ")}
788
+
789
+ You MUST provide the description for each of these language codes.`,a=await this.generateText({model:e.model||"google/gemini-3-flash",experimental_output:wp.Output.object({schema:this.buildSchema(e.languages)}),system:`You are an expert accessibility (a11y) image description generator.
790
+
791
+ INSTRUCTIONS:
792
+ 1. Analyze the image and generate a very concise description (maximum 250 characters).
793
+ 2. Provide the description in all requested languages.
794
+ 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 o of e.languages)n[o]||(n[o]=n[e.languages[0]]||"");return{translations:n}}}});function Sp(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+=`
795
+ 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+=`
796
+ Page Context: ${t}`}}return e}var Rp=T(()=>{"use strict"});var kp,Xe,_p,un,vp=T(()=>{"use strict";kp=require("ai"),Xe=require("zod");N();At();Rp();_p={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 ae{getValidationSchema(){return Xe.z.object({context:Xe.z.any().optional(),dynamic:Xe.z.boolean(),pageContent:Xe.z.string(),field:Xe.z.enum(["title","description","ogTitle","ogDescription","searchTitle","searchDescription","jsonLD"]),lang:Xe.z.string().nonempty(),keyword:Xe.z.string().optional(),model:Xe.z.string().optional()})}async execute(e){var c;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let t=Sp(e.context),a=`${_p[e.field]}${t}
797
+ Page Content: ${e.pageContent}
798
+ Dynamic: ${e.dynamic}
799
+ Language: ${e.lang}`,n=await this.generateText({model:e.model||"google/gemini-3-flash",experimental_output:kp.Output.object({schema:Xe.z.object({field:Xe.z.string()})}),system:`You are a SEO expert. Follow the instructions carefully.
800
+ Return ONLY plain string values except for json ld. For JSONLD, remove \`\`\`json\`\`\` and \`\`\`\`\` and return only valid JSON.
801
+ Instructions: ${_p[e.field]}
802
+ ${e.keyword?`Optimize the generated content for "${e.keyword}" keyword(s)`:""}${t}
803
+ Page Content: ${e.pageContent}
804
+ Dynamic: ${e.dynamic}
805
+ Language: ${e.lang}`,prompt:a}),i=typeof((c=n.experimental_output)==null?void 0:c.field)=="string"?n.experimental_output.field:void 0,o=typeof n.text=="string"?n.text:void 0,l=i!=null?i:o;if(typeof l!="string")throw new m("Failed to parse generated SEO field","INVALID_AI_RESPONSE");return{field:l}}}});function gy(r,e){let t=r.length>0?r.join(", "):"ui-sans-serif, system-ui, sans-serif",a=Ko.map(i=>`--${i}`).join(", "),n=`You are a professional UI Designer and Theme Architect.
806
+ Your task is to generate a comprehensive design system theme based on the user's description.
807
+
808
+ AVAILABLE FONTS: ${t}
809
+ You MUST only use the exact family names from this list for --font-sans, --font-heading, and --font-body.`;return e&&(n+=`
810
+
811
+ DESIGN CONTEXT:
812
+ 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+=`
813
+
814
+ STRICT CONSTRAINTS:
815
+ 1. Output ONLY a valid CSS block containing BOTH :root (Light Mode) and .dark (Dark Mode) selectors.
816
+ 2. REQUIRED Color Variables (must appear in BOTH :root AND .dark):
817
+ ${a}.
818
+ 3. REQUIRED Typography Variables (in :root only): --font-sans, --font-heading, --font-body.
819
+ 4. REQUIRED Shape Variable (in :root only): --radius (MUST be in pixels, e.g. "8px").
820
+ 5. Do NOT include ANY explanations, markdown code blocks (\`\`\`css), comments, or conversational text.
821
+ 6. Do NOT wrap the output in backticks or code fences.
822
+ 7. Colors MUST be in hex format (e.g. #ffffff) or HSL format (e.g. hsl(210 40% 98%)).
823
+ 8. Light and dark mode colors must be harmonious and provide good contrast for readability.
824
+ 9. Your output must start with ":root {" and contain nothing before it.`,n}function uy(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 Et,Ko,mn,Dp=T(()=>{"use strict";Et=require("zod");N();At();Ko=["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 ae{getValidationSchema(){return Et.z.object({branding:Et.z.object({look:Et.z.string().optional(),tone:Et.z.string().optional()}).optional(),prompt:Et.z.string().min(1,"A theme description prompt is required"),availableFonts:Et.z.array(Et.z.string()),model:Et.z.string().optional()})}async execute(e){var i,o;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?`
825
+ Branding Hints: Look: ${e.branding.look||"N/A"}, Tone: ${e.branding.tone||"N/A"}`:"",a=gy(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=uy(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=((o=c.match(/\.dark\s*{([^}]+)}/))==null?void 0:o[1])||"",g=Ko.filter(b=>!d.includes(`--${b}`)),f=Ko.filter(b=>!u.includes(`--${b}`));if(g.length>0||f.length>0)throw console.error("AI generated incomplete theme CSS. Missing variables:",{root:g,dark:f}),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 Bp,hn,Np=T(()=>{"use strict";Bp=require("zod");na();v();hn=class extends A{getValidationSchema(){return Bp.z.any()}async execute(){var a;if(!((a=this.context)!=null&&a.userId))return{success:!1,addons:[],error:"User not authenticated"};let e=await gp(this.context.userId);if(!(e!=null&&e.clientId))return{success:!1,addons:[],error:"User plan not found"};let t=await zo(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 fr,Wo,fn,Lp=T(()=>{"use strict";fr=require("drizzle-orm"),Wo=require("zod");R();N();v();fn=class extends A{getValidationSchema(){return Wo.z.object({pageId:Wo.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 y(()=>h.query.apps.findFirst({where:(0,fr.eq)(s.apps.id,t),columns:{ai:!0}}));n&&console.error("Error fetching app AI context:",n);let i=null;if(e.pageId){let{data:o,error:l}=await y(()=>h.query.appPages.findFirst({where:(0,fr.and)((0,fr.eq)(s.appPages.id,e.pageId),(0,fr.eq)(s.appPages.app,t)),columns:{ai:!0}}));if(l)throw new m("Error fetching page AI context","PAGE_AI_CONTEXT_ERROR",500,l);if(!o)throw new m("Page not found for this app","PAGE_NOT_FOUND",404);i=o.ai}return{success:!0,aiData:{app:(a==null?void 0:a.ai)||{},page:i||{}}}}}});var Op,yn,Fp=T(()=>{"use strict";Op=require("zod");na();v();re();yn=class extends A{getValidationSchema(){return Op.z.any()}async execute(){var t;if(!((t=this.context)!=null&&t.appId))return{success:!1,credits:null,error:"App context not found"};if(!mr())return{success:!0,credits:null};let e=await jo(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 yr,ia,bn,Up=T(()=>{"use strict";yr=require("drizzle-orm"),ia=require("zod");R();N();v();bn=class extends A{getValidationSchema(){return ia.z.object({type:ia.z.enum(["app","page"]),aiData:ia.z.any(),pageId:ia.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 y(async()=>{await h.update(s.apps).set({ai:e.aiData}).where((0,yr.eq)(s.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 y(async()=>h.update(s.appPages).set({ai:e.aiData}).where((0,yr.and)((0,yr.eq)(s.appPages.id,e.pageId),(0,yr.eq)(s.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 tr={};zt(tr,{BuilderActionsRegistry:()=>my,ChaiActionsRegistry:()=>Tn,default:()=>hy,getChaiAction:()=>Pn});var Gp,Tn,Yo,my,Pn,hy,Ot=T(()=>{"use strict";Gp=require("lodash-es");$e();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,Gp.get)(this.actions,e)}getAllActions(){return this.actions}},Yo=Tn.getInstance(),my=Yo,Pn=r=>{let e=Yo.getAction(r);if(e)return e;let t=Jo(r);if(t)return t},hy=Yo});var G,Qo,Mp,Se,He,br=T(()=>{"use strict";G=require("drizzle-orm"),Qo=require("lodash-es"),Mp=require("nanoid");R();Se=class Se{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>=Se.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>=Se.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>=Se.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>=Se.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>=Se.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+Se.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 o=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",f=`${(0,Qo.kebabCase)(u)}.${g}`,b=t?`${this.appId}/${t}`:this.appId,{getChaiAction:P}=await Promise.resolve().then(()=>(Ot(),tr)),E=P("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:o.toString("base64"),fileName:f,contentType:l,folder:b});if(C.error)throw new Error(C.error);let{width:x,height:k}=this.getImageDimensions(o);return{url:C.data.url,thumbnailUrl:C.data.url,size:o.length,width:x,height:k,mimeType:l}}catch(o){return console.error("Upload image error:",o),{error:o instanceof Error?o.message:"Unknown error"}}}async uploadSvgFile(e,t,a){try{let n=this.getBufferFromBase64(e),i,o;try{let P=n.toString("utf-8"),E=P.match(/\bwidth=["'](\d+)/),C=P.match(/\bheight=["'](\d+)/);E&&(i=parseInt(E[1],10)),C&&(o=parseInt(C[1],10))}catch(P){}let l=a.split("."),c=l.length>1?l.slice(0,-1).join("."):a,d=`${(0,Qo.kebabCase)(c)}.svg`,u=t?`${this.appId}/${t}`:this.appId,{getChaiAction:g}=await Promise.resolve().then(()=>(Ot(),tr)),f=g("UPLOAD_TO_STORAGE");if(!f)throw new Error("UPLOAD_TO_STORAGE action not found");f.setContext({appId:this.appId,userId:this.userId});let b=await f.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:o,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 o,l,c;try{let d=a.toLowerCase().endsWith(".svg")||e.includes("data:image/svg+xml"),u=E=>{let C=E.split("."),x=(C.length>1?C.pop().toLowerCase():"webp")||"webp";return`${C.join(".").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,30)||"image"}-${(0,Mp.nanoid)(10)}.${x}`},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 f={name:a,app:this.appId,description:typeof n=="object"&&n!==null?JSON.stringify(n):n,url:g.url,thumbnailUrl:g.thumbnailUrl,size:(o=g.size)==null?void 0:o.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:P}=await y(async()=>{let[E]=await h.insert(s.appAssets).values(f).returning();return E});if(P)throw new Error(`Failed to store asset in database: ${P.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 y(()=>h.query.appAssets.findFirst({where:(0,G.and)((0,G.eq)(s.appAssets.id,e),(0,G.eq)(s.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,o=(0,G.and)((0,G.eq)(s.appAssets.app,this.appId),(0,G.isNull)(s.appAssets.deletedAt));e&&(o=(0,G.and)(o,(0,G.or)((0,G.ilike)(s.appAssets.name,`%${e}%`),(0,G.ilike)(G.sql`${s.appAssets.description}::text`,`%${e}%`))));let{data:l,error:c}=await y(()=>h.select({value:(0,G.count)()}).from(s.appAssets).where(o));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 y(()=>h.query.appAssets.findMany({where:o,orderBy:(0,G.desc)(s.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 y(()=>h.query.appAssets.findMany({where:(0,G.and)((0,G.inArray)(s.appAssets.id,e),(0,G.eq)(s.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 o of t)if(o.url)try{let c=new URL(o.url).pathname.split("/"),d=c.indexOf("dam-assets");if(d!==-1){let u=c.slice(d+1).join("/"),{getChaiAction:g}=await Promise.resolve().then(()=>(Ot(),tr)),f=g("DELETE_FROM_STORAGE");if(f&&(f.setContext({appId:this.appId,userId:this.userId}),await f.execute({key:u})),o.thumbnailUrl&&o.thumbnailUrl!==o.url){let P=new URL(o.thumbnailUrl).pathname.split("/"),E=P.indexOf("dam-assets");if(E!==-1){let C=P.slice(E+1).join("/");f&&await f.execute({key:C})}}}}catch(l){console.warn("Failed to delete from storage, continuing with database deletion:",l)}let{data:n,error:i}=await y(()=>h.delete(s.appAssets).where((0,G.and)((0,G.inArray)(s.appAssets.id,e),(0,G.eq)(s.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,o,l;try{let{data:c,error:d}=await y(()=>h.query.appAssets.findFirst({where:(0,G.and)((0,G.eq)(s.appAssets.id,e),(0,G.eq)(s.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 P=((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 P)return P;u.url=P.url,u.thumbnailUrl=P.thumbnailUrl,u.size=(i=P.size)==null?void 0:i.toString(),u.width=(o=P.width)==null?void 0:o.toString(),u.height=(l=P.height)==null?void 0:l.toString(),u.format=P.mimeType.split("/")[1]}let{error:g}=await y(()=>h.update(s.appAssets).set(u).where((0,G.eq)(s.appAssets.id,e)));if(g)throw new Error(`Failed to update asset: ${g.message}`);let{data:f}=await y(()=>h.query.appAssets.findFirst({where:(0,G.eq)(s.appAssets.id,e)}));if(!f)throw new Error("Updated asset not found");return{...f,url:this.appendUpdatedAtToUrl(f.url,f.updatedAt),thumbnailUrl:this.appendUpdatedAtToUrl(f.thumbnailUrl||"",f.updatedAt)}}catch(c){return{error:c instanceof Error?c.message:"Unknown error occurred"}}}};Se.MIN_PNG_LENGTH=24,Se.MIN_GIF_LENGTH=10,Se.MIN_WEBP_VP8L_LENGTH=25,Se.MIN_WEBP_VP8X_LENGTH=30,Se.MIN_WEBP_VP8_LENGTH=30,Se.MIN_JPEG_SOF_BYTES_FROM_MARKER=9;He=Se});var xt,fy,An,$p=T(()=>{"use strict";xt=require("zod");N();v();br();fy=xt.z.object({name:xt.z.string(),file:xt.z.string(),folderId:xt.z.string().optional().nullable(),description:xt.z.record(xt.z.string(),xt.z.string()).optional(),optimize:xt.z.boolean().optional().default(!0)}),An=class extends A{getValidationSchema(){return fy}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 He(t,a).upload(e);if(i.error)throw new m(i.error,"CREATE_FAILED");return i}}});var Cn,yy,En,Hp=T(()=>{"use strict";Cn=require("zod");N();v();br();yy=Cn.z.object({ids:Cn.z.array(Cn.z.string().uuid()).min(1,"At least one asset ID is required")}),En=class extends A{getValidationSchema(){return yy}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 He(t,a).deleteAsset(e.ids);if("error"in i)throw new m(i.error,"DELETE_FAILED");return i}}});async function Tr(r,e){var i;if(!F(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 o=await fetch(r,e);return Fo(a,t,Math.round(performance.now()-n),o.status),o}catch(o){throw Fo(a,t,Math.round(performance.now()-n),0),o}}var SE,Xo=T(()=>{"use strict";SE=require("server-only");Zt();st()});var rr,by,xn,qp=T(()=>{"use strict";rr=require("zod");v();Xo();by=rr.z.object({url:rr.z.string(),name:rr.z.string(),description:rr.z.record(rr.z.string(),rr.z.string()).optional()}),xn=class extends A{constructor(){super()}getValidationSchema(){return by}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 Tr(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 o=await(await a.blob()).arrayBuffer(),c=`data:image/webp;base64,${Buffer.from(o).toString("base64")}`,{getChaiAction:d}=await Promise.resolve().then(()=>(Ot(),tr)),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 Zo,Ty,wn,Vp=T(()=>{"use strict";Zo=require("zod");N();v();br();Ty=Zo.z.object({id:Zo.z.string().uuid()}),wn=class extends A{getValidationSchema(){return Ty}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 He(t,a).getAsset(e);if(i.error)throw new m(i.error,"FETCH_FAILED",404);return i}}});var oa,Py,In,jp=T(()=>{"use strict";oa=require("zod");N();v();br();Py=oa.z.object({search:oa.z.string().optional().default(""),page:oa.z.number().optional().default(1),limit:oa.z.number().optional().default(20)}),In=class extends A{getValidationSchema(){return Py}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 He(t,a).getAssets(e);if("error"in i)throw new m(i.error,"FETCH_FAILED");return i}}});var wt,Ay,Cy,Ey,xy,Sn,zp=T(()=>{"use strict";wt=require("zod");v();Xo();Ay="https://pixabay.com/api/",Cy="https://api.unsplash.com/search/photos",Ey="https://api.pexels.com/v1/search",xy=wt.z.object({query:wt.z.string(),page:wt.z.number().optional().default(1),limit:wt.z.number().optional().default(20),provider:wt.z.string().optional(),filters:wt.z.record(wt.z.string(),wt.z.string()).optional()}),Sn=class extends A{getValidationSchema(){return xy}async execute(e){try{let{query:t,page:a,limit:n,provider:i,filters:o}=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,f=i&&i!=="all"?n:Math.ceil(n/g);if(l&&(!i||i==="pixabay")){let x=`${Ay}?key=${l}&q=${encodeURIComponent(t)}&page=${a}&per_page=${f}${t?"":"&editors_choice=true"}`,k="photo";o!=null&&o.image_type&&o.image_type!=="all"&&o.image_type!=="default"&&(k=o.image_type),x+=`&image_type=${k}`,o!=null&&o.orientation&&o.orientation!=="all"&&o.orientation!=="default"&&(x+=`&orientation=${o.orientation}`),o!=null&&o.color&&o.color!=="all"&&o.color!=="default"&&(x+=`&colors=${o.color}`),o!=null&&o.order_by&&o.order_by!=="all"&&o.order_by!=="default"&&(x+=`&order=${o.order_by}`),u.push(Tr(x).then(async D=>{if(!D.ok)return{assets:[],total:0};let B=await D.json();return{assets:B.hits.map(S=>({id:`pixabay-${S.id}`,name:S.tags,url:S.largeImageURL,thumbnailUrl:S.webformatURL,type:"image",width:S.imageWidth,height:S.imageHeight||S.height,size:S.imageSize,provider:"pixabay",authorName:S.user,authorUrl:`https://pixabay.com/users/${S.user}-${S.user_id}/`,authorThumbnailUrl:S.userImageURL,providerUrl:"https://pixabay.com/",providerLogoUrl:null})),total:B.totalHits}}))}if(c&&(!i||i==="unsplash")){let x=`${Cy}?query=${encodeURIComponent(t)}&page=${a}&per_page=${f}&client_id=${c}`;t&&o&&(o.orientation&&o.orientation!=="all"&&o.orientation!=="default"&&(x+=`&orientation=${o.orientation}`),o.color&&o.color!=="all"&&o.color!=="default"&&(x+=`&color=${o.color}`),o.order_by&&o.order_by!=="all"&&o.order_by!=="default"&&(x+=`&order_by=${o.order_by}`)),u.push(Tr(x,{headers:{"Accept-Version":"v1"}}).then(async k=>{if(!k.ok)return{assets:[],total:0};let D=await k.json(),B=t?D.results:D,S=t?D.total:200;return{assets:B.map($=>{var z;return{id:`unsplash-${$.id}`,name:$.description||$.alt_description||"Unsplash Image",url:$.urls.regular,thumbnailUrl:$.urls.small,type:"image",width:$.width,height:$.height,size:0,provider:"unsplash",authorName:$.user.name,authorUrl:$.user.links.html,authorThumbnailUrl:(z=$.user.profile_image)==null?void 0:z.small,providerUrl:"https://unsplash.com/",providerLogoUrl:null}}),total:S}}))}if(d&&(!i||i==="pexels")){let k=!t?`https://api.pexels.com/v1/curated?page=${a}&per_page=${f}`:`${Ey}?query=${encodeURIComponent(t)}&page=${a}&per_page=${f}`;o!=null&&o.orientation&&o.orientation!=="all"&&o.orientation!=="default"&&(k+=`&orientation=${o.orientation}`),o!=null&&o.size&&o.size!=="all"&&o.size!=="default"&&(k+=`&size=${o.size}`),o!=null&&o.color&&o.color!=="all"&&o.color!=="default"&&(k+=`&color=${o.color}`),u.push(Tr(k,{headers:{Authorization:d}}).then(async D=>{if(!D.ok)return{assets:[],total:0};let B=await D.json();return{assets:(B.photos||[]).map(S=>({id:`pexels-${S.id}`,name:S.alt||"Pexels Image",url:S.src.large2x,thumbnailUrl:S.src.medium,type:"image",width:S.width,height:S.height,size:0,provider:"pexels",authorName:S.photographer,authorUrl:S.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),P=Math.max(...b.map(x=>x.assets.length)),E=[];for(let x=0;x<P;x++)for(let k of b)k.assets[x]&&E.push(k.assets[x]);let C=b.reduce((x,k)=>x+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 ar,wy,Rn,Kp=T(()=>{"use strict";ar=require("zod");N();v();br();wy=ar.z.object({id:ar.z.string().uuid(),file:ar.z.string().optional(),description:ar.z.record(ar.z.string(),ar.z.string()).optional()}),Rn=class extends A{getValidationSchema(){return wy}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 He(t,a).updateAsset(e);if("error"in i)throw new m(i.error,"UPDATE_FAILED");return i}}});var _n,Wp,es=T(()=>{"use strict";_n=[{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}],Wp="google/gemini-3-flash"});var Yp={};zt(Yp,{logAiRequest:()=>Sy});async function Sy({userId:r,startTime:e,model:t,appId:a,creditStatus:n,response:i,prompt:o,error:l}){var k,D,B;let c=Pt().logging.clientId,d=e>0?Math.floor(new Date().getTime()-e):0;if(l){let S=o.indexOf("USER REQUEST"),$=o.substring(S).trim(),z={model:t,totalDuration:String(d),error:l,totalTokens:"0",tokenUsage:null,cost:null,prompt:$,user:r,client:c,app:a,creditSource:"monthly",addonId:null},{error:ce}=await y(()=>h.insert(s.aiLogs).values(z));ce&&console.error("Error logging AI request:",ce);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,f=o.indexOf("USER REQUEST");o=o.substring(f).trim();let b=Math.round(((B=u==null?void 0:u.totalTokens)!=null?B:0)*Iy(t)),P="monthly",E=null;if(n&&b>0){let S=pp(n,b);if(P=S.creditSource,E=S.addonId,P==="addon"&&E){let $=await dp(E,b);$.success||console.error("Failed to deduct addon credits:",$.error)}}let C={model:t,totalDuration:String(d),error:l||null,totalTokens:String(b),tokenUsage:u,cost:g,prompt:o,user:r,client:c,app:a,creditSource:P,addonId:E},{error:x}=await y(()=>h.insert(s.aiLogs).values(C));x&&console.error("Error logging AI request:",x)}var Iy,Jp=T(()=>{"use strict";es();R();$e();na();Iy=r=>{var e;return((e=_n.find(t=>t.id===r))==null?void 0:e.multiplier)||1}});var Ry,kn,vn=T(()=>{"use strict";es();Ry=async r=>{let{logAiRequest:e}=await Promise.resolve().then(()=>(Jp(),Yp));return e(r)},kn={models:_n,defaultModelId:Wp,resolveModel:(r,e)=>({model:r}),credits:{enabled:!1},logging:{logger:Ry,clientId:null}}});var ts=T(()=>{"use strict"});var ax,rs=T(()=>{"use strict";ax=require("server-only")});var _y,ky,Qp,Xp,as,ns=T(()=>{"use strict";_y='<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>',ky='<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>',Qp={key:"page",name:"Static Page",icon:_y,hasSlug:!0},Xp={key:"global",name:"Global Block",helpText:"A global block can be reused in multiple pages.",icon:ky,partial:!0,hasSlug:!1},as=[Qp,Xp]});var Zp,Be,sa=T(()=>{"use strict";Zp=require("drizzle-orm");R();re();Be=class{constructor(e,t=!1){this.appId=e,this.enableLogging=t}async getPagesTree(){let{data:e,error:t}=await y(()=>h.select({id:s.appPages.id,name:s.appPages.name,slug:s.appPages.slug,pageType:s.appPages.pageType,primaryPage:s.appPages.primaryPage,parent:s.appPages.parent,lang:s.appPages.lang,dynamic:s.appPages.dynamic}).from(s.appPages).where((0,Zp.eq)(s.appPages.app,this.appId)));if(t)throw _("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(`
826
+ === PRIMARY LANGUAGE PAGES TREE ===`),console.log(JSON.stringify(i,null,2)));let o=this.buildLanguageTree(n,i);return this.enableLogging&&(console.log(`
827
+ === OTHER LANGUAGE PAGES TREE ===`),console.log(JSON.stringify(o,null,2))),{primaryTree:i,languageTree:o,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 o=t.get(n.parent);o?o.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(f=>f.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(f=>{let b=n(f,c);b&&g.children.push(b)}),g},i=[],o=new Set;return e.forEach(l=>{l.lang&&o.add(l.lang)}),o.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),o=i[i.length-1]||"";return`${n.slug.endsWith("/")?n.slug.slice(0,-1):n.slug}/${o}`}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 o of i)o.primaryPage===e&&a.push(o),o.children&&o.children.length>0&&n(o.children)};return n(t),a}collectNestedChildSlugs(e,t,a){let n=[],i=(o,l,c)=>{for(let d of o){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 ed(r){return Buffer.from(r,"utf8").toString("base64url")}function lt(r){return`slug-${ed(r)}`}function la(r){return r?"draft":"online"}function td(r,e,t){return[`page-by-slug-${r}-${la(e)}-${ed(t)}`]}function rd(r,e,t){return[`page-slug-${r}-${la(e)}-${t}`]}function ad(r,e,t){let a=[...t].sort().join(",");return[`page-slugs-batch-${r}-${la(e)}-${a}`]}function nd(r,e,t,a){return[`alternate-${r}-${la(e)}-${t}-${a}`]}function id(r,e,t){return[`breadcrumb-${r}-${la(e)}-${t}`]}function od(r){return[lt(r)]}function It(r,e){var a,n,i,o;let t=new Set([`page-${r}`,`breadcrumb-${r}`]);(a=e==null?void 0:e.slugs)!=null&&a.old&&t.add(lt(e.slugs.old)),(n=e==null?void 0:e.slugs)!=null&&n.new&&t.add(lt(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(o=e==null?void 0:e.slugUpdates)!=null?o:[])t.add(`page-${l.id}`),t.add(`breadcrumb-${l.id}`),l.oldSlug&&t.add(lt(l.oldSlug)),l.newSlug&&t.add(lt(l.newSlug));return[...t]}function sd(r){let e=new Set;for(let t of r)e.add(`page-${t.id}`),e.add(`breadcrumb-${t.id}`),t.slug&&e.add(lt(t.slug)),t.primaryPage&&e.add(`alternate-${t.primaryPage}`);return[...e]}function Pr(r){let e=new Set;for(let t of r)e.add(`page-${t}`),e.add(`breadcrumb-${t}`);return[...e]}var qe=T(()=>{"use strict"});var Ne,Dn,Ft,is=T(()=>{"use strict";Ne=require("drizzle-orm"),Dn=require("zod");N();v();R();re();sa();qe();Ft=class extends A{constructor(){super(...arguments);this.appId="";this.userId="";this.permanent=!1}getValidationSchema(){return Dn.z.object({id:Dn.z.string().min(1,"Page ID is required"),permanent:Dn.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 Be(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),o=this.pageTreeBuilder.findPageInPrimaryTree(t,n.primaryTree);if(!i&&!o)throw _("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:o}=await y(()=>h.delete(s.libraryTemplates).where((0,Ne.inArray)(s.libraryTemplates.pageId,a)));if(o)throw _("DELETE_FAILED",o)}if(this.permanent){let{error:o}=await y(()=>h.delete(s.appPagesRevisions).where((0,Ne.inArray)(s.appPagesRevisions.id,a)));if(o)throw _("DELETE_FAILED",o)}let{error:n}=await y(()=>this.permanent?h.delete(s.appPages).where((0,Ne.inArray)(s.appPages.id,a)):h.update(s.appPages).set({deletedAt:new Date().toISOString(),deletedBy:this.userId}).where((0,Ne.inArray)(s.appPages.id,a)));if(n)throw _("DELETE_FAILED",n);let{error:i}=await y(()=>h.delete(s.appPagesOnline).where((0,Ne.inArray)(s.appPagesOnline.id,a)));if(i)throw _("DELETE_FAILED",i)}collectRoutingTagsFromTree(t,a){let n=[],i=o=>{for(let l of o)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),sd(n)}async deleteLanguagePageWithTree(t,a,n){let i=a.primaryPage;if(!this.pageTreeBuilder.findPageInPrimaryTree(i,n.primaryTree))throw _("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 _("ERROR_DELETING_PAGE","Primary page not found");let i=this.pageTreeBuilder.collectNestedChildIds(n),o=this.pageTreeBuilder.findLanguagePagesForPrimary(t,a.languageTree),l=[];o.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,f)=>f.indexOf(u)===g),totalDeleted:d.length}}async getCurrentEditor(t){var i;let{data:a,error:n}=await y(()=>h.select({currentEditor:s.appPages.currentEditor}).from(s.appPages).where((0,Ne.and)((0,Ne.eq)(s.appPages.id,t),(0,Ne.eq)(s.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 Be(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 _("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),o=[t,...i],{error:l}=await y(()=>h.update(s.appPages).set({deletedAt:null,deletedBy:null}).where((0,Ne.inArray)(s.appPages.id,o)));if(l)throw _("RESTORE_FAILED",l)}async restorePrimaryPageWithTree(t,a){let n=this.pageTreeBuilder.findPageInPrimaryTree(t,a.primaryTree);if(!n)throw _("ERROR_RESTORING_PAGE","Primary page not found");let i=this.pageTreeBuilder.collectNestedChildIds(n),o=this.pageTreeBuilder.findLanguagePagesForPrimary(t,a.languageTree),l=[];o.forEach(u=>{l.push(u.id);let g=this.pageTreeBuilder.collectNestedChildIds(u);l.push(...g)});let c=[t,...i,...l],{error:d}=await y(()=>h.update(s.appPages).set({deletedAt:null,deletedBy:null}).where((0,Ne.inArray)(s.appPages.id,c)));if(d)throw _("RESTORE_FAILED",d)}}});function ld(r,e){return[`page-details-${r}-${e}`]}function cd(r){return[`page-${r}`,`page-details-${r}`]}function Bn(r){return[`page-${r}`]}var Nn=T(()=>{"use strict"});var Re,pd,Ln,dd=T(()=>{"use strict";Re=require("drizzle-orm"),pd=require("lodash-es");N();R();sa();Ln=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 o=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&&o(d.children))return!0}return!1};if(o(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(o(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 y(()=>h.select({slug:s.appPages.slug}).from(s.appPages).where((0,Re.and)((0,Re.eq)(s.appPages.id,e),(0,Re.eq)(s.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 y(()=>h.select({parent:s.appPages.parent}).from(s.appPages).where((0,Re.and)((0,Re.eq)(s.appPages.id,e),(0,Re.eq)(s.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 Be(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 o=i.slug,l=i.dynamic||!1;this.validateSlugAvailabilityInTree(a,e,l,n);let c=[],d=this.pageTreeBuilder.collectNestedChildSlugs(i,o,a);return c=[{id:e,oldSlug:o,newSlug:a},...d],c}async handleParentChangeWithTree(e,t){let a=t.parent;this.pageTreeBuilder||(this.pageTreeBuilder=new Be(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 o=i.slug,l=t.slug?t.slug:this.pageTreeBuilder.calculateSlugFromParent(a,o,n.primaryTree);this.validateSlugAvailabilityInTree(l,e,i.dynamic||!1,n),this.updateNodeSlugInTree(e,l,n.primaryTree);let c=this.pageTreeBuilder.collectNestedChildSlugs(i,o,l),d=[{id:e,oldSlug:o,newSlug:l},...c];for(let f of c)this.updateNodeSlugInTree(f.id,f.newSlug,n.primaryTree);let u=this.pageTreeBuilder.findLanguagePagesForPrimary(e,n.languageTree),g;a&&(g=this.pageTreeBuilder.findLanguagePagesForPrimary(a,n.languageTree));for(let f of u){let b=g==null?void 0:g.filter(x=>x.lang===f.lang)[0],P=(b==null?void 0:b.id)||null,E=this.pageTreeBuilder.calculateSlugFromParent(P,f.slug,n.languageTree);this.validateSlugAvailabilityInTree(E,f.id,f.dynamic||!1,n,!0),this.updateNodeSlugInTree(f.id,E,n.languageTree);let C=this.pageTreeBuilder.collectNestedChildSlugs(f,f.slug,E);for(let x of C)this.updateNodeSlugInTree(x.id,x.newSlug,n.languageTree);d.push({id:f.id,oldSlug:f.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,pd.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 y(()=>h.update(s.appPages).set(c).where((0,Re.and)((0,Re.eq)(s.appPages.id,l.id),(0,Re.eq)(s.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 o=e.map(async l=>{await y(()=>h.update(s.appPagesOnline).set({slug:l.newSlug}).where((0,Re.and)((0,Re.eq)(s.appPagesOnline.id,l.id),(0,Re.eq)(s.appPagesOnline.app,this.appId))))});await Promise.all(o)}setPageTreeBuilder(e){this.pageTreeBuilder=e}}});var V,nr,M,vy,Ar,os=T(()=>{"use strict";V=require("drizzle-orm"),nr=require("lodash-es"),M=require("zod");R();sa();Nn();qe();N();v();dd();vy=new Set(["slug","name","parent","pageType","dynamic","dynamicSlugCustom"]),Ar=class extends A{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 Ln(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 Be(this.appId),this.slugChangeHandler.setPageTreeBuilder(this.pageTreeBuilder),await this.handleParentChangeWithHandler(t.id,a)):n&&a.slug?(this.pageTreeBuilder=new Be(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,o,l){await this.updatePageInDatabase(t,{blocks:a,links:n.join("|"),partialBlocks:i.join("|"),designTokens:o},l)}validateContext(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET")}extractAllowedPageFields(t){return(0,nr.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 y(()=>h.query.appPages.findFirst({where:(0,V.and)((0,V.eq)(s.appPages.id,t),(0,V.eq)(s.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,nr.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 y(()=>h.select({currentEditor:s.appPagesOnline.currentEditor,createdAt:s.appPagesOnline.createdAt}).from(s.appPagesOnline).where((0,V.and)((0,V.eq)(s.appPagesOnline.app,this.appId),(0,V.eq)(s.appPagesOnline.id,t))).orderBy((0,V.desc)(s.appPagesOnline.createdAt)).limit(1)),{data:o}=await y(()=>h.select({uid:s.appPagesRevisions.uid,type:s.appPagesRevisions.type,currentEditor:s.appPagesRevisions.currentEditor,createdAt:s.appPagesRevisions.createdAt}).from(s.appPagesRevisions).where((0,V.and)((0,V.eq)(s.appPagesRevisions.id,t),(0,V.eq)(s.appPagesRevisions.app,this.appId))).orderBy((0,V.desc)(s.appPagesRevisions.createdAt)).limit(1)),l=i==null?void 0:i[0],c=o==null?void 0:o[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 y(()=>h.update(s.appPagesRevisions).set({seo:a.seo,blocks:a.blocks,tracking:a.tracking,createdAt:new Date().toISOString()}).where((0,V.eq)(s.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 y(()=>{var g;return h.insert(s.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:o,data:l}=await y(()=>h.update(s.appPages).set({...a,changes:i,lastSaved:new Date().toISOString()}).where((0,V.and)((0,V.eq)(s.appPages.id,t),(0,V.eq)(s.appPages.app,this.appId))).returning({name:s.appPages.name,slug:s.appPages.slug,blocks:s.appPages.blocks,pageType:s.appPages.pageType,lang:s.appPages.lang,seo:s.appPages.seo,tracking:s.appPages.tracking,currentEditor:s.appPages.currentEditor}));if(o)throw new m("Error updating page","ERROR_UPDATING_PAGE");if(i.includes("Page")){let{error:c}=await y(()=>h.update(s.appPages).set({changes:i}).where((0,V.and)((0,V.eq)(s.appPages.primaryPage,t),(0,V.eq)(s.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,nr.keys)(t).includes("blocks")}async isLanguagePage(t){var n;let{data:a}=await y(()=>h.select({primaryPage:s.appPages.primaryPage}).from(s.appPages).where((0,V.and)((0,V.eq)(s.appPages.id,t),(0,V.eq)(s.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 y(()=>h.select({id:s.appPages.id,slug:s.appPages.slug,lang:s.appPages.lang,pageType:s.appPages.pageType,name:s.appPages.name,online:s.appPages.online,parent:s.appPages.parent,primaryPage:s.appPages.primaryPage,seo:s.appPages.seo}).from(s.appPages).where((0,V.eq)(s.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,nr.keys)(a).some(l=>vy.has(l))?this.routingSlugUpdates.length>0?It(t,{slugUpdates:this.routingSlugUpdates}):It(t,{slugs:n!=null&&n.slug?{new:n.slug}:void 0,primaryPageId:n==null?void 0:n.primaryPage}):Bn(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,nr.keys)(a);if(!(n.includes("dynamic")||n.includes("dynamicSlugCustom")))return;let o={};n.includes("dynamic")&&(o.dynamic=a.dynamic),n.includes("dynamicSlugCustom")&&(o.dynamicSlugCustom=a.dynamicSlugCustom);let{error:l}=await y(()=>h.update(s.appPages).set(o).where((0,V.and)((0,V.eq)(s.appPages.primaryPage,t),(0,V.eq)(s.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 Te,gd,ud,md,hd,fd,ss,ls=T(()=>{"use strict";Te=require("drizzle-orm"),gd=require("nanoid");R();re();is();os();ud={label:"Page",icon:"file",moveToTrash:async(r,e)=>{var o;let{data:t}=await y(()=>h.select().from(s.appPages).where((0,Te.eq)(s.appPages.id,r)).limit(1)),a=t==null?void 0:t[0];if(!a)throw _("MOVE_TO_TRASH_FAILED","Page not found");let n=new Ft;n.setContext(e);let i=await n.execute({id:r,permanent:!1});if((i==null?void 0:i.code)==="PAGE_LOCKED")throw _("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:(o=i.tags)!=null?o:[]}},restore:async(r,e)=>{let t=new Ft;t.setContext(e),await t.restorePage(r.entityId)},deletePermanently:async(r,e)=>{let t=new Ft;t.setContext(e);let a=await t.execute({id:r.entityId,permanent:!0});if((a==null?void 0:a.code)==="PAGE_LOCKED")throw _("PAGE_LOCKED",`Page is currently being edited by ${a.editor||"another user"}`);return!0},hasRestoreConflict:async(r,e)=>{var i,o,l;let t=(i=r.metadata)==null?void 0:i.slug;if(!t)return!1;let a=!!((l=(o=r.metadata)==null?void 0:o.dynamic)!=null&&l),{data:n}=await y(()=>h.select({id:s.appPages.id}).from(s.appPages).where((0,Te.and)((0,Te.eq)(s.appPages.app,e.appId),(0,Te.eq)(s.appPages.slug,t),(0,Te.eq)(s.appPages.dynamic,a),(0,Te.isNull)(s.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,gd.nanoid)(5)}`,n=new Ar;n.setContext(e);try{await n.execute({id:r.entityId,slug:a})}catch(o){throw _("RESOLVE_CONFLICT_FAILED",o)}return{resolved:!0,newSlug:a}}},md={label:"Asset",icon:"image",moveToTrash:async(r,e)=>{let t=e.appId,a=e.userId||"",{data:n,error:i}=await y(()=>h.select().from(s.appAssets).where((0,Te.and)((0,Te.eq)(s.appAssets.id,r),(0,Te.eq)(s.appAssets.app,t))).limit(1));if(i||!n||n.length===0)throw _("ASSET_NOT_FOUND","Asset not found");let o=n[0],l=new Date().toISOString(),{error:c}=await y(()=>h.update(s.appAssets).set({deletedAt:l,deletedBy:a}).where((0,Te.eq)(s.appAssets.id,r)));if(c)throw _("TRASH_FAILED",c);return{entityType:"asset",entityId:r,name:o.name||"Unknown Asset",metadata:{name:o.name||"Unknown Asset",url:o.url,type:o.type},deletedAt:l,deletedBy:a,app:t}},restore:async(r,e)=>{let{error:t}=await y(()=>h.update(s.appAssets).set({deletedAt:null,deletedBy:null}).where((0,Te.eq)(s.appAssets.id,r.entityId)));if(t)throw _("RESTORE_FAILED",t)},deletePermanently:async(r,e)=>{let{error:t}=await y(()=>h.delete(s.appAssets).where((0,Te.eq)(s.appAssets.id,r.entityId)));if(t)throw _("DELETE_PERMANENTLY_FAILED",t);return!0},hasRestoreConflict:async(r,e)=>!1},hd={key:"page",...ud},fd={key:"asset",...md},ss=[hd,fd]});var cs,ps=T(()=>{"use strict";cs=async()=>({})});async function gs(r){return Promise.all(r.map(async e=>{var t,a,n,i,o;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:(o=e.hasSlug)!=null?o:!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,ds.isFunction)(e.defaultSeo)?{defaultSeo:e.defaultSeo()}:{},...(0,ds.isFunction)(e.defaultJSONLD)?{defaultJSONLD:e.defaultJSONLD()}:{}}}))}var ds,yd=T(()=>{"use strict";ds=require("lodash-es")});var Fx,me=T(()=>{"use strict";Fx=require("server-only");vn();Un();ts();rs();Un();rs();Mn();us();ns();ls();$e();vn();ps();ts();yd()});var Pd,ga,$n,Ad=T(()=>{"use strict";Pd=require("lodash-es"),ga=require("zod");Oa();v();me();Mn();$n=class extends A{getValidationSchema(){return ga.z.object({block:ga.z.any(),pageProps:ga.z.any().optional().default({}),lang:ga.z.string()})}async execute(e){var t;try{let{block:a,pageProps:n,lang:i}=e,o=a._type;if(o==="Repeater"&&((t=a==null?void 0:a.repeaterItems)!=null&&t.includes("{{#"))){let d=a.repeaterItems.replace("{{#","").replace("}}",""),u=ir(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:[]}fs(o);let l=xe(o);if(!(l!=null&&l.dataProvider)||!(0,Pd.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 Cd,Ed,Er,ys=T(()=>{"use strict";Cd=require("lodash-es"),Ed=require("zod");v();me();Er=class extends A{getValidationSchema(){return Ed.z.object({})}async execute(){try{return pa().map(t=>(0,Cd.omit)(t,"fetch"))}catch(e){return this.handleError(e)}}}});var Ut,xd,xr,bs=T(()=>{"use strict";Ut=require("drizzle-orm"),xd=require("zod");R();N();v();xr=class extends A{getValidationSchema(){return xd.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 y(()=>h.select({id:s.libraries.id,name:s.libraries.name,type:s.libraries.type,createdAt:s.libraries.createdAt}).from(s.libraries).where((0,Ut.eq)(s.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:o}=await y(()=>h.select({id:s.libraries.id,name:s.libraries.name,type:s.libraries.type,createdAt:s.libraries.createdAt}).from(s.libraries).where(n?(0,Ut.or)((0,Ut.eq)(s.libraries.client,n),(0,Ut.isNull)(s.libraries.client)):(0,Ut.isNull)(s.libraries.client)));if(o)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 Ts,ua,wd,Hn,Id=T(()=>{"use strict";Ts=require("drizzle-orm"),ua=require("lodash-es"),wd=require("zod");N();v();R();Hn=class extends A{getValidationSchema(){return wd.z.object({})}async execute(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{data:e,error:t}=await y(()=>h.select({id:s.libraries.id}).from(s.libraries).where((0,Ts.eq)(s.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 y(()=>h.select({group:s.libraryItems.group}).from(s.libraryItems).where((0,Ts.eq)(s.libraryItems.library,a.id)));if(i)throw new m("Failed to fetch library groups","GET_LIBRARY_GROUPS_FAILED",500,i);let o=(0,ua.map)(n,"group").filter(l=>l!=null);return(0,ua.map)((0,ua.uniq)(o),l=>({id:l,name:l}))}}});var Sd,Ps,qn,Rd=T(()=>{"use strict";Sd=require("drizzle-orm"),Ps=require("zod");N();v();R();qn=class extends A{getValidationSchema(){return Ps.z.object({id:Ps.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 y(()=>h.delete(s.libraryItems).where((0,Sd.eq)(s.libraryItems.id,t)));if(a)throw new m("Failed to delete library item","DELETE_LIBRARY_ITEM_FAILED",500,a);return{success:!0}}}});var As,Cs,Es,Vn,_d=T(()=>{"use strict";As=require("drizzle-orm"),Cs=require("lodash-es"),Es=require("zod");N();v();R();Vn=class extends A{getValidationSchema(){return Es.z.object({id:Es.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 y(()=>h.select({id:s.libraryItems.id,name:s.libraryItems.name,blocks:s.libraryItems.blocks,library:s.libraryItems.library,description:s.libraryItems.description,group:s.libraryItems.group,user:s.libraryItems.user,preview:s.libraryItems.preview,createdAt:s.libraryItems.createdAt,html:s.libraryItems.html,libraryApp:s.libraries.app,libraryName:s.libraries.name}).from(s.libraryItems).leftJoin(s.libraries,(0,As.eq)(s.libraryItems.library,s.libraries.id)).where((0,As.eq)(s.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 o=n[0],l=Array.isArray(o.blocks)?[...o.blocks]:o.blocks;return o.libraryApp===t?(0,Cs.set)(l,"0._libBlockId",o.id):(0,Cs.set)(l,"0._libBlockId",void 0),{id:o.id,name:o.name,blocks:l,description:o.description,group:o.group,user:o.user,preview:o.preview,createdAt:o.createdAt,html:o.html}}}});var kd,xs,jn,vd=T(()=>{"use strict";kd=require("drizzle-orm"),xs=require("zod");N();v();R();jn=class extends A{getValidationSchema(){return xs.z.object({id:xs.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 y(()=>h.select({id:s.libraryItems.id,name:s.libraryItems.name,library:s.libraryItems.library,group:s.libraryItems.group,description:s.libraryItems.description,preview:s.libraryItems.preview}).from(s.libraryItems).where((0,kd.eq)(s.libraryItems.library,t)));if(n)throw new m("Failed to fetch library items","GET_LIBRARY_ITEMS_FAILED",500,n);return a||[]}}});var ws,Dd,Bd,pt,zn,Nd=T(()=>{"use strict";ws=require("drizzle-orm"),Dd=require("lodash-es"),Bd=require("crypto"),pt=require("zod");v();R();N();zn=class extends A{getValidationSchema(){return pt.z.object({name:pt.z.string().min(1),group:pt.z.string().min(1),blocks:pt.z.array(pt.z.any()),description:pt.z.string().optional(),previewImage:pt.z.string().optional(),id:pt.z.string().optional(),previewImageUrl:pt.z.string().optional()})}async execute(e){var P;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context,{name:n,group:i,blocks:o,description:l,previewImage:c,previewImageUrl:d,id:u}=e,{data:g,error:f}=await y(()=>h.query.libraries.findFirst({where:(0,ws.eq)(s.libraries.app,t),columns:{id:!0}}));if(f)throw new m("Failed to fetch site library","GET_SITE_LIBRARY_FAILED",500,f);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(()=>(Ot(),tr)),C=E("UPLOAD_TO_STORAGE");C==null||C.setContext(this.context);let x=`library-item-${Date.now()}.webp`,k=`${t}/library-items`,D=await(C==null?void 0:C.execute({file:c,fileName:x,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=((P=D==null?void 0:D.data)==null?void 0:P.url)||d}if(u){let E={name:n,blocks:o,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:x}=await y(()=>h.update(s.libraryItems).set(E).where((0,ws.eq)(s.libraryItems.id,u)).returning());if(x||!C||C.length===0)throw new m("Failed to update library item","UPDATE_LIBRARY_ITEM_FAILED",500,x);return C[0]}else{let E=(0,Bd.randomUUID)(),C=[...o];(0,Dd.set)(C,"0._libBlockId",E);let x={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 y(()=>h.insert(s.libraryItems).values(x).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 ma,Is,Kn,Ld=T(()=>{"use strict";ma=require("drizzle-orm"),Is=require("zod");v();R();Kn=class extends A{getValidationSchema(){return Is.z.object({pageId:Is.z.string().min(1)})}async execute({pageId:e}){let{userId:t,appId:a}=this.context;return await h.update(s.appPages).set({currentEditor:t}).where((0,ma.and)((0,ma.eq)(s.appPages.id,e),(0,ma.eq)(s.appPages.app,a))),{ok:!0}}}});var oe,wr,X,Wn,Od=T(()=>{"use strict";oe=require("drizzle-orm"),wr=require("lodash-es"),X=require("zod");R();qe();N();v();Wn=class extends A{getValidationSchema(){return X.z.object({name:X.z.string().min(1),slug:X.z.string(),pageType:X.z.string(),parent:X.z.string().nullable().optional(),lang:X.z.string().optional(),primaryPage:X.z.string().nullable().optional(),dynamic:X.z.boolean().optional(),hasSlug:X.z.boolean().optional(),template:X.z.string().optional(),seo:X.z.record(X.z.string(),X.z.any()).optional(),jsonLD:X.z.record(X.z.string(),X.z.any()).optional(),dynamicSlugCustom:X.z.string().optional(),blocks:X.z.array(X.z.any()).optional(),description:X.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 f,b,P,E,C,x,k,D,B,S;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:t,userId:a}=this.context;if(((f=e.hasSlug)!=null?f: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 o=(P=e.dynamic)!=null?P:!1,l=(E=e.dynamicSlugCustom)!=null?E:"";if(e.primaryPage){let{data:$}=await y(()=>h.query.appPages.findFirst({where:(0,oe.and)((0,oe.eq)(s.appPages.id,e.primaryPage),(0,oe.eq)(s.appPages.app,t)),columns:{dynamic:!0,dynamicSlugCustom:!0}}));$&&(o=(C=$.dynamic)!=null?C:!1,l=(x=$.dynamicSlugCustom)!=null?x:"")}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:o,dynamicSlugCustom:l,blocks:i,seo:(S=e.seo)!=null?S:{title:e.name,jsonLD:"",noIndex:!1,ogImage:"",ogTitle:"",noFollow:"",description:"",searchTitle:"",cononicalUrl:"",ogDescription:"",searchDescription:""},jsonld:{},metadata:(0,wr.isEmpty)(e.description)?{}:{description:e.description},online:!1,currentEditor:null,changes:null,libRefId:null,lastSaved:null,createdBy:a},{data:d,error:u}=await y(()=>h.insert(s.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,wr.omit)(g.primaryPage?{...g,id:g.primaryPage}:g,["primaryPage"]),tags:It(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 y(()=>h.query.appPages.findFirst({where:(0,oe.and)((0,oe.eq)(s.appPages.slug,e),(0,oe.eq)(s.appPages.pageType,t),(0,oe.eq)(s.appPages.app,a),(0,oe.isNull)(s.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 y(()=>h.select({template:s.libraryTemplates,library:{id:s.libraries.id,app:s.libraries.app,name:s.libraries.name}}).from(s.libraryTemplates).leftJoin(s.libraries,(0,oe.eq)(s.libraryTemplates.library,s.libraries.id)).where((0,oe.and)((0,oe.eq)(s.libraryTemplates.id,e),(0,oe.isNull)(s.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,o=a.library,{data:l,error:c}=await y(()=>h.query.appPages.findFirst({where:(0,oe.eq)(s.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,wr.isEmpty)(g.globalBlock)?{...g,_type:"PartialBlock",partialBlockId:g.globalBlock}:g),!(o.app===t)){let g=o.name||"",f=d.filter(P=>P._type==="PartialBlock"&&!(0,wr.isEmpty)(P.partialBlockId)),b=await Promise.all(f.map(({partialBlockId:P})=>this.copyPartialBlockFromTemplate(P,g,t)));d=d.map(P=>{let E=b.find(C=>(C==null?void 0:C.libRefId)===P.partialBlockId);return E&&(P._name=`${g} - ${P._name}`,P.partialBlockId=E.id),P})}return d}async copyPartialBlockFromTemplate(e,t,a){var u;let{data:n,error:i}=await y(()=>h.query.appPages.findFirst({where:(0,oe.eq)(s.appPages.id,e)}));if(i||!n)return console.error("Failed to fetch partial block:",i),null;let o={...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 y(()=>h.insert(s.appPages).values(o).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 Ze,ha,Yn,Fd=T(()=>{"use strict";Ze=require("drizzle-orm"),ha=require("zod");N();v();R();qe();Yn=class extends A{getValidationSchema(){return ha.z.object({pageId:ha.z.string().nonempty(),name:ha.z.string().nonempty(),slug:ha.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 y(()=>h.query.appPages.findFirst({where:(0,Ze.and)((0,Ze.eq)(s.appPages.id,e.pageId),(0,Ze.eq)(s.appPages.app,t),(0,Ze.isNull)(s.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}},[o]=await h.insert(s.appPages).values(i).returning();if(!o)throw new m("Failed to create duplicate page","INSERT_FAILED");return{id:o.id,tags:It(o.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 y(()=>h.query.appPages.findFirst({where:(0,Ze.and)((0,Ze.eq)(s.appPages.slug,e),(0,Ze.eq)(s.appPages.app,t),(0,Ze.isNull)(s.appPages.deletedAt)),columns:{id:!0}}));if(n)throw new m(`${n.message}`,"SLUG_CHECK_FAILED");return!!a}}});var fa,Ir,Ss=T(()=>{"use strict";fa=require("zod");me();v();Ir=class extends A{getValidationSchema(){return fa.z.object({lang:fa.z.string(),pageType:fa.z.string().optional(),pageProps:fa.z.any().optional().default({})})}async execute(e){try{let{lang:t,pageType:a,pageProps:n={}}=e;if(!a)return{};let i=ct(a),o=i?Rt(i):void 0;return o?o.dataProvider?await o.dataProvider({lang:t,draft:!0,inBuilder:!0,pageProps:n}):{}:{}}catch(t){return this.handleError(t)}}}});var _e,Ud,Jn,Gd=T(()=>{"use strict";_e=require("drizzle-orm"),Ud=require("zod");R();N();v();Jn=class extends A{constructor(){super(...arguments);this.appId=""}getValidationSchema(){return Ud.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 y(()=>h.select({id:s.appPages.id,slug:s.appPages.slug,name:s.appPages.name,pageType:s.appPages.pageType,lang:s.appPages.lang,changes:s.appPages.changes,primaryPage:s.appPages.primaryPage,online:s.appPages.online,currentEditor:s.appPages.currentEditor}).from(s.appPages).where((0,_e.and)((0,_e.eq)(s.appPages.app,this.appId),(0,_e.isNotNull)(s.appPages.changes))));if(a)throw new m("Error getting changed pages","ERROR_GETTING_CHANGES");let{data:n,error:i}=await y(()=>h.select({id:s.appPages.id,slug:s.appPages.slug,name:s.appPages.name,pageType:s.appPages.pageType,lang:s.appPages.lang,changes:s.appPages.changes,primaryPage:s.appPages.primaryPage,online:s.appPages.online}).from(s.appPages).where((0,_e.and)((0,_e.eq)(s.appPages.app,this.appId),(0,_e.isNull)(s.appPages.currentEditor),(0,_e.eq)(s.appPages.online,!1))));if(i)throw new m("Error getting offline pages","ERROR_GETTING_OFFLINE_PAGES");let o=(n||[]).map(f=>({...f,changes:["Take Online"]})),c=[...(t||[]).filter(f=>!o.some(b=>b.id===f.id)).map(f=>({...f,changes:f.changes})),...o],{data:d,error:u}=await y(()=>h.select({changes:s.apps.changes}).from(s.apps).where((0,_e.and)((0,_e.eq)(s.apps.id,this.appId),(0,_e.isNotNull)(s.apps.changes))));if(!u&&d&&d.length>0){let f=(g=d[0].changes)!=null?g:[];f.includes("THEME")&&c.push({id:"THEME",slug:"",name:"Theme",pageType:"theme",lang:"",changes:["Updated"],primaryPage:null,online:!0}),f.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 Qn,_t,Xn,Md=T(()=>{"use strict";Qn=require("drizzle-orm"),_t=require("zod");N();v();R();Xn=class extends A{getValidationSchema(){return _t.z.object({versions:_t.z.object({version1:_t.z.object({type:_t.z.enum(["draft","revision","live"]),id:_t.z.string()}),version2:_t.z.object({type:_t.z.enum(["draft","revision","live"]),id:_t.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 y(()=>h.query.appPages.findFirst({where:(0,Qn.eq)(s.appPages.id,t),columns:{blocks:!0,seo:!0,tracking:!0}})));break;case"live":({data:a,error:n}=await y(()=>h.query.appPagesOnline.findFirst({where:(0,Qn.eq)(s.appPagesOnline.id,t),columns:{blocks:!0,seo:!0,tracking:!0}})));break;case"revision":({data:a,error:n}=await y(()=>h.query.appPagesRevisions.findFirst({where:(0,Qn.eq)(s.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 et,Rs,Sr,_s=T(()=>{"use strict";et=require("drizzle-orm"),Rs=require("zod");v();R();re();Sr=class extends A{getValidationSchema(){return Rs.z.object({id:Rs.z.string()})}async execute(e){var u,g,f,b,P,E;if(!this.context)throw _("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,{id:a}=e,n=s.appPages,{data:i,error:o}=await y(()=>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,et.and)((0,et.eq)(n.app,t),(0,et.eq)(n.id,a),(0,et.isNull)(n.deletedAt))).limit(1));if(o)throw _("PAGE_NOT_FOUND",o);if(!i||i.length===0)throw _("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:x}=await y(()=>h.select({blocks:n.blocks}).from(n).where((0,et.and)((0,et.eq)(n.app,t),(0,et.eq)(n.id,c),(0,et.isNull)(n.deletedAt))).limit(1));if(x)throw _("BLOCKS_NOT_FOUND",x);d=(b=(f=C==null?void 0:C[0])==null?void 0:f.blocks)!=null?b:[]}return{...l,blocks:d,id:a,languagePageId:l.id,tracking:(P=l.tracking)!=null?P:{},globalJsonLds:(E=l.globalJsonLds)!=null?E:[]}}}});var Rr,Zn,$d=T(()=>{"use strict";Rr=require("zod");v();me();Zn=class extends A{getValidationSchema(){return Rr.z.object({pageType:Rr.z.string(),lang:Rr.z.string(),query:Rr.z.string().optional(),slug:Rr.z.string().optional()})}async execute(e){try{let{pageType:t}=e,a=ct(t),n=a?Rt(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 dt,Hd,ks,_r,vs=T(()=>{"use strict";dt=require("drizzle-orm"),Hd=require("lodash-es"),ks=require("zod");v();R();re();_r=class extends A{getValidationSchema(){return ks.z.object({id:ks.z.string()})}async execute(e){if(!this.context)throw _("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,{id:a}=e,{data:n,error:i}=await y(()=>h.select({id:s.appPages.id,name:s.appPages.name,slug:s.appPages.slug,lang:s.appPages.lang,primaryPage:s.appPages.primaryPage,pageType:s.appPages.pageType,seo:s.appPages.seo,currentEditor:s.appPages.currentEditor,online:s.appPages.online,parent:s.appPages.parent,metadata:s.appPages.metadata,dynamic:s.appPages.dynamic,dynamicSlugCustom:s.appPages.dynamicSlugCustom,changes:s.appPages.changes,tracking:s.appPages.tracking,globalJsonLds:s.appPages.globalJsonLds}).from(s.appPages).where((0,dt.and)((0,dt.eq)(s.appPages.app,t),(0,dt.or)((0,dt.eq)(s.appPages.primaryPage,a),(0,dt.eq)(s.appPages.id,a)),(0,dt.isNull)(s.appPages.deletedAt))));if(i)throw _("LANGUAGE_PAGES_ERROR",i);return n.map(o=>(0,Hd.omit)(o,["app"]))}}});var he,Ds,ei,qd=T(()=>{"use strict";he=require("drizzle-orm"),Ds=require("zod");R();re();v();ei=class extends A{getValidationSchema(){return Ds.z.object({lang:Ds.z.string().optional()})}async execute(e){var l;if(!this.context)throw _("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,a=(l=e==null?void 0:e.lang)!=null?l:"",n=s.appPages,{data:i,error:o}=await y(()=>h.select({id:n.id,name:n.name,slug:n.slug}).from(n).where((0,he.and)((0,he.eq)(n.app,t),(0,he.isNull)(n.deletedAt),(0,he.isNull)(n.primaryPage),(0,he.eq)(n.dynamic,!1),(0,he.ne)(n.slug,""),(0,he.or)((0,he.eq)(n.lang,""),(0,he.eq)(n.lang,a)))).orderBy((0,he.asc)(n.name)));if(o)throw _("ERROR_GETTING_MENU_PAGES",o);return i!=null?i:[]}}});var Bs,kr,Ns=T(()=>{"use strict";Bs=require("zod");me();v();kr=class extends A{getValidationSchema(){return Bs.z.object({lang:Bs.z.string()})}async execute(e){try{let{lang:t}=e;return await da({lang:t,draft:!0,inBuilder:!0})}catch(t){return this.handleError(t)}}}});var vr,ti,Vd=T(()=>{"use strict";vr=require("zod");v();Ss();_s();vs();Ns();ti=class extends A{getValidationSchema(){return vr.z.object({id:vr.z.string(),lang:vr.z.string(),pageType:vr.z.string().optional(),pageProps:vr.z.any().optional().default({})})}async execute(e){let{id:t,lang:a,pageType:n,pageProps:i={}}=e,o=new Sr,l=new Ir,c=new _r,d=new kr;this.context&&(o.setContext(this.context),l.setContext(this.context),c.setContext(this.context),d.setContext(this.context));let[u,g,f,b]=await Promise.all([o.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:f,siteGlobalData:b}}}});var jd,Dr,Ls=T(()=>{"use strict";jd=require("zod");me();v();Dr=class extends A{getValidationSchema(){return jd.z.object({})}async execute(){try{return gs(Cr())}catch(e){return this.handleError(e)}}}});var tt,zd,Os,Br,Fs=T(()=>{"use strict";tt=require("drizzle-orm"),zd=require("lodash-es"),Os=require("zod");R();re();v();Br=class extends A{getValidationSchema(){return Os.z.object({lang:Os.z.string().optional()})}async execute(e){var g;if(!this.context)throw _("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:o}=await y(()=>h.select({id:s.appPages.id,name:s.appPages.name,slug:s.appPages.slug,pageType:s.appPages.pageType,currentEditor:s.appPages.currentEditor,parent:s.appPages.parent,online:s.appPages.online,lastSaved:s.appPages.lastSaved,createdAt:s.appPages.createdAt,dynamic:s.appPages.dynamic,dynamicSlugCustom:s.appPages.dynamicSlugCustom,primaryPage:s.appPages.primaryPage,changes:s.appPages.changes,lang:s.appPages.lang,designTokens:s.appPages.designTokens,links:s.appPages.links,partialBlocks:s.appPages.partialBlocks,metadata:s.appPages.metadata}).from(s.appPages).where((0,tt.and)((0,tt.eq)(s.appPages.app,t),(0,tt.eq)(s.appPages.lang,n),(0,tt.isNull)(s.appPages.deletedAt))));if(o)throw _("ERROR_GETTING_WEBSITE_PAGES",o);if(!i||i.length===0)return[];let l=i.filter(f=>!(0,zd.isEmpty)(f.slug)).map(f=>f.id),{data:c,error:d}=await y(()=>h.select({pageId:s.libraryTemplates.pageId}).from(s.libraryTemplates).where((0,tt.and)((0,tt.inArray)(s.libraryTemplates.pageId,l),(0,tt.isNull)(s.libraryTemplates.deletedAt))));if(d)throw _("ERROR_GETTING_TEMPLATE_INFO",d);let u=new Set((c||[]).map(f=>f.pageId));return i.map(f=>{var b,P;return{...f,pageType:(b=f.pageType)!=null?b:"page",isTemplate:u.has(f.id),changes:f.changes,lang:f.lang,designTokens:f.designTokens,links:f.links,partialBlocks:f.partialBlocks,metadata:(P=f.metadata)!=null?P:null}})}}});var Nr,Us,ri,Kd=T(()=>{"use strict";Nr=require("drizzle-orm"),Us=require("zod");v();R();ri=class extends A{getValidationSchema(){return Us.z.object({pageId:Us.z.string().min(1)})}async execute({pageId:e}){let{userId:t,appId:a}=this.context;return t?(await h.update(s.appPages).set({currentEditor:null}).where((0,Nr.and)((0,Nr.eq)(s.appPages.id,e),(0,Nr.eq)(s.appPages.app,a),(0,Nr.eq)(s.appPages.currentEditor,t))),{ok:!0}):{ok:!1}}}});var ai,ni,Wd=T(()=>{"use strict";ai=require("zod");me();v();ni=class extends A{getValidationSchema(){return ai.z.object({pageType:ai.z.string(),query:ai.z.string()})}async execute(e){try{let{pageType:t,query:a}=e,n=ct(t),i=n?Rt(n):void 0;if(!i)return{error:"Page type not found"};if(i.search){let o=await i.search(a);return o instanceof Error?{error:o.message}:o}return[]}catch(t){return this.handleError(t)}}}});var Pe,ii,oi,Yd=T(()=>{"use strict";Pe=require("drizzle-orm"),ii=require("zod");N();v();R();oi=class extends A{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),o=[(0,Pe.eq)(s.appPages.app,t),(0,Pe.eq)(s.appPages.pageType,a),(0,Pe.isNull)(s.appPages.deletedAt)],l;n?i?l=(0,Pe.and)(...o,(0,Pe.eq)(s.appPages.id,n)):l=(0,Pe.and)(...o,(0,Pe.or)((0,Pe.ilike)(s.appPages.slug,`%${n}%`),(0,Pe.ilike)(s.appPages.name,`%${n}%`))):l=(0,Pe.and)(...o);let{data:c,error:d}=await y(()=>h.select({id:s.appPages.id,slug:s.appPages.slug,name:s.appPages.name,lang:s.appPages.lang,primaryPage:s.appPages.primaryPage}).from(s.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 Ae,Gs,si,Jd=T(()=>{"use strict";Ae=require("drizzle-orm"),Gs=require("zod");N();v();R();qe();si=class extends A{constructor(){super(...arguments);this.appId=""}getValidationSchema(){return Gs.z.object({id:Gs.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 y(()=>h.update(s.appPages).set({online:!1}).where((0,Ae.and)((0,Ae.eq)(s.appPages.id,t),(0,Ae.eq)(s.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:Pr([l]),paths:[]}}if(a==="partial"){let l=await this.getPartialBlockUsage(t);return{tags:Pr(l),paths:[]}}let{data:i,error:o}=await y(()=>h.select({id:s.appPages.id,slug:s.appPages.slug,lang:s.appPages.lang,pageType:s.appPages.pageType,name:s.appPages.name,online:s.appPages.online,seo:s.appPages.seo}).from(s.appPages).where((0,Ae.eq)(s.appPages.id,t)));if(o||!i||i.length===0)throw new m("Error getting page after taking offline","ERROR_TAKING_PAGE_OFFLINE");return{tags:[...Pr([t]),lt(i[0].slug)],paths:[i[0].slug],page:i[0]}}async deleteOnlinePage(t){let{error:a}=await y(()=>h.delete(s.appPagesOnline).where((0,Ae.eq)(s.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 y(()=>h.delete(s.appPagesOnline).where((0,Ae.eq)(s.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 y(()=>h.select({primaryPage:s.appPages.primaryPage,pageType:s.appPages.pageType,slug:s.appPages.slug}).from(s.appPages).where((0,Ae.and)((0,Ae.eq)(s.appPages.id,t),(0,Ae.eq)(s.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 o;let{data:a,error:n}=await y(()=>h.select({id:s.appPages.id,primaryPage:s.appPages.primaryPage}).from(s.appPages).where((0,Ae.and)((0,Ae.eq)(s.appPages.id,t),(0,Ae.eq)(s.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(o=i.primaryPage)!=null?o:i.id}async getPartialBlockUsage(t){let{data:a,error:n}=await y(()=>h.select({id:s.appPages.id,partialBlocks:s.appPages.partialBlocks}).from(s.appPages).where((0,Ae.eq)(s.appPages.app,this.appId)));return n||!a?[]:a.filter(i=>(i.partialBlocks||"").split("|").includes(t)).map(i=>i.id)}}});var Gt,Lr,li,Qd=T(()=>{"use strict";Gt=require("drizzle-orm"),Lr=require("zod");R();Nn();N();v();li=class extends A{getValidationSchema(){return Lr.z.object({id:Lr.z.string().nonempty(),metadata:Lr.z.record(Lr.z.string(),Lr.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 y(()=>h.query.appPages.findFirst({where:(0,Gt.and)((0,Gt.eq)(s.appPages.id,e.id),(0,Gt.eq)(s.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 y(()=>h.update(s.appPages).set({metadata:e.metadata}).where((0,Gt.and)((0,Gt.eq)(s.appPages.id,e.id),(0,Gt.eq)(s.appPages.app,t))));if(i)throw console.error(i),new m("Failed to update page metadata","UPDATE_FAILED");return{success:!0,tags:Bn(e.id)}}}});var ya,Ms,ci,Xd=T(()=>{"use strict";ya=require("drizzle-orm"),Ms=require("zod");N();v();R();ci=class extends A{getValidationSchema(){return Ms.z.object({revisionId:Ms.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 y(()=>h.delete(s.appPagesRevisions).where((0,ya.and)((0,ya.eq)(s.appPagesRevisions.uid,e.revisionId),(0,ya.eq)(s.appPagesRevisions.app,t))));if(a)throw new m("Failed to delete page revision","DELETE_REVISION_ERROR");return{success:!0}}}});var Mt,Zd,$s,pi,eg=T(()=>{"use strict";Mt=require("drizzle-orm"),Zd=require("lodash-es"),$s=require("zod");N();v();R();pi=class extends A{getValidationSchema(){return $s.z.object({pageId:$s.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 y(()=>h.select({currentEditor:s.appPagesOnline.currentEditor,createdAt:s.appPagesOnline.createdAt}).from(s.appPagesOnline).where((0,Mt.and)((0,Mt.eq)(s.appPagesOnline.app,this.context.appId),(0,Mt.eq)(s.appPagesOnline.id,e)))),{data:n,error:i}=await y(()=>h.select({uid:s.appPagesRevisions.uid,currentEditor:s.appPagesRevisions.currentEditor,createdAt:s.appPagesRevisions.createdAt,type:s.appPagesRevisions.type}).from(s.appPagesRevisions).where((0,Mt.and)((0,Mt.eq)(s.appPagesRevisions.app,this.context.appId),(0,Mt.eq)(s.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 o=t==null?void 0:t[0],c=[...o?[{...o,type:"published",uid:"current"}]:[],...n!=null?n:[]];return(0,Zd.orderBy)(c,["createdAt"],["desc"])}}});var Ce,kt,di,gi,tg=T(()=>{"use strict";Ce=require("drizzle-orm"),kt=require("lodash-es"),di=require("zod");v();R();re();gi=class extends A{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 _("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let t,a;switch(e.type){case"draft":({data:t,error:a}=await y(()=>{var o;return h.query.appPages.findFirst({where:(0,Ce.and)((0,Ce.eq)(s.appPages.id,e.id),(0,Ce.eq)(s.appPages.lang,(o=e.lang)!=null?o:""))})}));break;case"live":({data:t,error:a}=await y(()=>{var o;return h.query.appPagesOnline.findFirst({where:(0,Ce.and)((0,Ce.eq)(s.appPagesOnline.id,e.id),(0,Ce.eq)(s.appPagesOnline.lang,(o=e.lang)!=null?o:""))})}));break;case"revision":({data:t,error:a}=await y(()=>{var o;return h.query.appPagesRevisions.findFirst({where:(0,Ce.and)((0,Ce.eq)(s.appPagesRevisions.uid,e.id),(0,Ce.eq)(s.appPagesRevisions.lang,(o=e.lang)!=null?o:""))})}));break}if(a||!t)throw _("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?s.appPages:s.appPagesOnline,i=e.filter(({_type:g})=>g==="GlobalBlock"||g==="PartialBlock");if(i.length===0)return e;let o=i.map(g=>(0,kt.get)(g,"partialBlockId",(0,kt.get)(g,"globalBlock",""))).filter(g=>g!=="");if(o.length===0)return e;let{data:l,error:c}=await y(()=>h.select({id:n.id,blocks:n.blocks}).from(n).where((0,Ce.and)((0,Ce.eq)(n.app,a),(0,Ce.inArray)(n.id,o))));if(c)throw _("PARTIAL_BLOCKS_FETCH_ERROR",c);let d=new Map;l&&l.forEach(g=>{var f;d.set(g.id,(f=g.blocks)!=null?f:[])});for(let g=0;g<i.length;g++){let f=i[g];if(!f)continue;let b=(0,kt.get)(f,"partialBlockId",(0,kt.get)(f,"globalBlock",""));if(b==="")continue;let P=(u=d.get(b))!=null?u:[];P.length>0&&(P=P.map(C=>((0,kt.isEmpty)(C._parent)&&(C._parent=f._parent),(0,kt.has)(f,"_show")&&(C._show=f._show),C)));let E=e.indexOf(f);E!==-1&&e.splice(E,1,...P)}return e}}});var Ve,rg,ba,ui,ag=T(()=>{"use strict";Ve=require("drizzle-orm"),rg=require("lodash-es"),ba=require("zod");N();v();R();ui=class extends A{getValidationSchema(){return ba.z.object({revisionId:ba.z.string().nonempty(),discardCurrent:ba.z.boolean(),pageId:ba.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:o}=await y(()=>h.query.appPagesOnline.findFirst({where:(0,Ve.and)((0,Ve.eq)(s.appPagesOnline.id,e.pageId),(0,Ve.eq)(s.appPagesOnline.app,t)),columns:{id:!0,blocks:!0}}));if(o)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:o}=await y(()=>h.query.appPagesRevisions.findFirst({where:(0,Ve.and)((0,Ve.eq)(s.appPagesRevisions.uid,e.revisionId),(0,Ve.eq)(s.appPagesRevisions.app,t)),columns:{id:!0,blocks:!0,type:!0}}));if(o)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:o}=await y(()=>h.query.appPages.findFirst({where:(0,Ve.and)((0,Ve.eq)(s.appPages.id,a),(0,Ve.eq)(s.appPages.app,t))}));if(o)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,rg.pick)(i,["name","slug","pageType","lang","app","currentEditor","createdBy"])};await h.insert(s.appPagesRevisions).values(c)}return await h.update(s.appPages).set({blocks:n}).where((0,Ve.eq)(s.appPages.id,a)),{success:!0,pageId:a}}}});var Ta,mi,ng=T(()=>{"use strict";Ta=require("zod");R();N();v();mi=class extends A{getValidationSchema(){return Ta.z.object({name:Ta.z.string().min(1),permissions:Ta.z.array(Ta.z.string())})}async execute(e){var i,o,l,c;let{data:t,error:a}=await y(()=>h.insert(s.roles).values({name:e.name,permissions:e.permissions,isSystem:!1}).returning({id:s.roles.id,name:s.roles.name,permissions:s.roles.permissions,isSystem:s.roles.isSystem,createdAt:s.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:(o=n.permissions)!=null?o:[],isSystem:(l=n.isSystem)!=null?l:!1,createdAt:(c=n.createdAt)!=null?c:""}}}});var Hs,qs,hi,ig=T(()=>{"use strict";Hs=require("drizzle-orm"),qs=require("zod");R();N();v();hi=class extends A{getValidationSchema(){return qs.z.object({name:qs.z.string().min(1)})}async execute(e){let{data:t,error:a}=await y(()=>h.select({isSystem:s.roles.isSystem}).from(s.roles).where((0,Hs.eq)(s.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 y(()=>h.delete(s.roles).where((0,Hs.eq)(s.roles.name,e.name)));if(i)throw new m("Error deleting role","ERROR_DELETING_ROLE",500,i);return{deleted:!0}}}});var og,Vs,fi,sg=T(()=>{"use strict";og=require("drizzle-orm"),Vs=require("zod");R();N();v();fi=class extends A{getValidationSchema(){return Vs.z.object({name:Vs.z.string().min(1)})}async execute(e){var i,o,l,c;let{data:t,error:a}=await y(()=>h.select({id:s.roles.id,name:s.roles.name,permissions:s.roles.permissions,isSystem:s.roles.isSystem,createdAt:s.roles.createdAt}).from(s.roles).where((0,og.eq)(s.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:(o=n.permissions)!=null?o:[],isSystem:(l=n.isSystem)!=null?l:!1,createdAt:(c=n.createdAt)!=null?c:""}:null}}});var lg,yi,cg=T(()=>{"use strict";lg=require("zod");R();N();v();yi=class extends A{getValidationSchema(){return lg.z.object({})}async execute(){let{data:e,error:t}=await y(()=>h.select({id:s.roles.id,name:s.roles.name,permissions:s.roles.permissions,isSystem:s.roles.isSystem,createdAt:s.roles.createdAt}).from(s.roles));if(t)throw new m("Error fetching roles","ERROR_FETCHING_ROLES",500,t);return(e!=null?e:[]).map(a=>{var n,i,o,l;return{id:a.id,name:(n=a.name)!=null?n:"",permissions:(i=a.permissions)!=null?i:[],isSystem:(o=a.isSystem)!=null?o:!1,createdAt:(l=a.createdAt)!=null?l:""}})}}});var pg,Pa,bi,dg=T(()=>{"use strict";pg=require("drizzle-orm"),Pa=require("zod");R();N();v();bi=class extends A{getValidationSchema(){return Pa.z.object({name:Pa.z.string().min(1),permissions:Pa.z.array(Pa.z.string())})}async execute(e){var i,o,l,c;let{data:t,error:a}=await y(()=>h.update(s.roles).set({permissions:e.permissions}).where((0,pg.eq)(s.roles.name,e.name)).returning({id:s.roles.id,name:s.roles.name,permissions:s.roles.permissions,isSystem:s.roles.isSystem,createdAt:s.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:(o=n.permissions)!=null?o:[],isSystem:(l=n.isSystem)!=null?l:!1,createdAt:(c=n.createdAt)!=null?c:""}}}});var gt,js,Ti,gg=T(()=>{"use strict";gt=require("drizzle-orm"),js=require("zod");R();N();v();Ti=class extends A{getValidationSchema(){return js.z.object({pageType:js.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 y(()=>h.query.libraries.findFirst({where:(0,gt.eq)(s.libraries.app,t),columns:{id:!0}}));if(i)throw new m("Failed to fetch site library","GET_SITE_LIBRARY_FAILED",500,i);let{data:o,error:l}=await y(()=>h.select({id:s.libraries.id}).from(s.libraries).where((0,gt.eq)(s.libraries.type,"shared")));if(l)throw new m("Failed to fetch shared libraries","GET_SHARED_LIBRARIES_FAILED",500,l);let c=[...n?[n.id]:[],...(o||[]).map(g=>g.id)];if(c.length===0)return[];let{data:d,error:u}=await y(()=>h.select({id:s.libraryTemplates.id,library:s.libraryTemplates.library,pageId:s.libraryTemplates.pageId,pageType:s.libraryTemplates.pageType,name:s.libraryTemplates.name,description:s.libraryTemplates.description,preview:s.libraryTemplates.preview,user:s.libraryTemplates.user,createdAt:s.libraryTemplates.createdAt}).from(s.libraryTemplates).where((0,gt.and)((0,gt.eq)(s.libraryTemplates.pageType,a),(0,gt.inArray)(s.libraryTemplates.library,c),(0,gt.isNull)(s.libraryTemplates.deletedAt))));if(u)throw new m("Failed to fetch templates","GET_TEMPLATES_FAILED",500,u);return d||[]}}});var ug,$t,Pi,mg=T(()=>{"use strict";ug=require("drizzle-orm"),$t=require("zod");N();v();R();Pi=class extends A{getValidationSchema(){return $t.z.object({id:$t.z.string().min(1),description:$t.z.string().optional(),name:$t.z.string().min(1),pageType:$t.z.string().min(1),previewImage:$t.z.string().optional(),previewImageUrl:$t.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:o,pageType:l,previewImage:c,previewImageUrl:d}=e,{data:u,error:g}=await y(()=>h.query.libraries.findFirst({where:(0,ug.eq)(s.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 f=d;if(c){let{getChaiAction:C}=await Promise.resolve().then(()=>(Ot(),tr)),x=C("UPLOAD_TO_STORAGE");x==null||x.setContext(this.context);let k=`template-${Date.now()}.webp`,D=`${t}/templates`,B=await(x==null?void 0:x.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);f=((E=B==null?void 0:B.data)==null?void 0:E.url)||d}let{data:b,error:P}=await y(()=>h.insert(s.libraryTemplates).values({library:u.id,user:a!=null?a:null,pageId:n,description:i!=null?i:null,name:o+" Template",pageType:l,preview:f!=null?f:null,createdBy:a!=null?a:null}).returning());if(P||!b||b.length===0)throw new m("Failed to mark page as template","UPDATE_FAILED",500,P);return b[0]}}});var hg,zs,Ai,fg=T(()=>{"use strict";hg=require("drizzle-orm"),zs=require("zod");N();v();R();Ai=class extends A{getValidationSchema(){return zs.z.object({id:zs.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 y(()=>{var n,i;return h.update(s.libraryTemplates).set({deletedAt:new Date().toISOString(),deletedBy:(i=(n=this.context)==null?void 0:n.userId)!=null?i:null}).where((0,hg.eq)(s.libraryTemplates.pageId,t))});if(a)throw new m("Failed to unmark page as template","DELETE_FAILED",500,a);return{success:!0}}}});var Or,Ks,Ci,yg=T(()=>{"use strict";Or=require("drizzle-orm"),Ks=require("zod");R();re();me();N();v();Ci=class extends A{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 y(()=>h.select().from(s.appTrash).where((0,Or.and)((0,Or.eq)(s.appTrash.id,e.id),(0,Or.eq)(s.appTrash.app,this.context.appId))).limit(1));if(n||!a||a.length===0)throw _("TRASH_RECORD_NOT_FOUND","Trash record not found");let i=a[0],o={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=St(o.entityType);if(!l)throw _("ENTITY_HANDLER_NOT_FOUND",`Handler for entity type '${o.entityType}' not found`);return await l.deletePermanently(o,this.context),await y(()=>h.delete(s.appTrash).where((0,Or.eq)(s.appTrash.id,o.id))),!0}catch(a){return this.handleError(a),!1}}}});function Uy(){let r=s.appTrash.metadata;return wo()==="sqlite"?ke.sql`json_extract(${r}, '$.name')`:ke.sql`${r}->>'name'`}var ke,vt,Fy,Ei,bg=T(()=>{"use strict";ke=require("drizzle-orm"),vt=require("zod");Wa();R();re();N();v();Fy=vt.z.string().uuid();Ei=class extends A{getValidationSchema(){return vt.z.object({page:vt.z.number().optional().default(1),limit:vt.z.number().optional().default(20),search:vt.z.string().optional(),entityType:vt.z.string().optional(),sortBy:vt.z.string().optional(),sortOrder:vt.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:o,sortOrder:l="desc"}=e,c=(t-1)*a,d=Fy.safeParse(this.context.appId);if(!d.success)return{items:[],total:0,page:t,pageSize:a};let u=[(0,ke.eq)(s.appTrash.app,d.data)];i&&u.push((0,ke.eq)(s.appTrash.entityType,i));let g=Uy();if(n&&n.trim()!==""){let P=n.trim();u.push(ke.sql`lower(${g}) like '%' || lower(${P}) || '%'`)}let f=(0,ke.and)(...u);try{let{data:P,error:E}=await y(()=>h.select({count:ke.sql`cast(count(${s.appTrash.id}) as integer)`}).from(s.appTrash).where(f));if(E)throw _("FETCH_TRASH_FAILED",E);let C=((b=P==null?void 0:P[0])==null?void 0:b.count)||0,{data:x,error:k}=await y(()=>h.select().from(s.appTrash).where(f).orderBy((()=>{let B=o==="name"?g:s.appTrash.deletedAt;return l==="asc"?(0,ke.asc)(B):(0,ke.desc)(B)})()).limit(a).offset(c));if(k)throw _("FETCH_TRASH_FAILED",k);return{items:(x||[]).map(B=>{var S,$,z;return{id:B.id,entityType:B.entityType,entityId:B.entityId||"",name:((S=B.metadata)==null?void 0:S.name)||"",metadata:B.metadata||{},deletedAt:B.deletedAt||(($=B.metadata)==null?void 0:$.deletedAt),deletedBy:B.deletedBy||((z=B.metadata)==null?void 0:z.deletedBy)||"",app:B.app||""}}),total:C,page:t,pageSize:a}}catch(P){this.handleError(P)}}}});var Fr,Ws,xi,Tg=T(()=>{"use strict";Fr=require("drizzle-orm"),Ws=require("zod");R();re();qe();me();N();v();xi=class extends A{getValidationSchema(){return Ws.z.object({id:Ws.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 y(()=>h.select().from(s.appTrash).where((0,Fr.and)((0,Fr.eq)(s.appTrash.id,e.id),(0,Fr.eq)(s.appTrash.app,this.context.appId))).limit(1));if(n||!a||a.length===0)throw _("TRASH_RECORD_NOT_FOUND","Trash record not found");let i=a[0],o={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=St(o.entityType);if(!l)throw _("ENTITY_HANDLER_NOT_FOUND",`Handler for entity type '${o.entityType}' not found`);let c=!1,d;if(l.hasRestoreConflict?await l.hasRestoreConflict(o,this.context):!1){if(!l.resolveRestoreConflict)throw _("RESTORE_CONFLICT","Restore conflict detected but no resolver available");let f=await l.resolveRestoreConflict(o,this.context);c=f.resolved,d=f.newSlug}await l.restore(o,this.context);let{error:g}=await y(()=>h.delete(s.appTrash).where((0,Fr.eq)(s.appTrash.id,o.id)));if(g)throw _("RESTORE_FAILED",g);return{success:!0,resolvedConflict:c,newSlug:d,...o.entityType==="page"?{tags:It(o.entityId,{slugs:d?{new:d}:void 0})}:{}}}catch(a){this.handleError(a)}}}});var Aa,wi,Pg=T(()=>{"use strict";Aa=require("zod");R();re();me();N();v();wi=class extends A{getValidationSchema(){return Aa.z.object({entityType:Aa.z.string().min(1,"Entity Type is required"),ids:Aa.z.array(Aa.z.string().min(1))})}async execute(e){var n;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let t=St(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 o=await t.moveToTrash(i,this.context),{data:l,error:c}=await y(()=>h.insert(s.appTrash).values(o).returning());if(c||!l||l.length===0)throw _("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:o.tags||[]})}catch(o){e.ids.length===1&&this.handleError(o),console.error(`Failed to trash entity ${i}:`,o)}return a}}});var Ys,Ag=T(()=>{"use strict";Ys={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 Cg(){let r=xg();return r?"source"in r&&r.source==="custom"?Gy():r:Ys}async function Gy(){let{data:r,error:e}=await y(()=>h.select({name:s.roles.name,permissions:s.roles.permissions}).from(s.roles));return e||!r?{}:r.length===0?Ys:r.reduce((t,a)=>{var n;return a.name&&(t[a.name]={permissions:(n=a.permissions)!=null?n:[]}),t},{})}var Eg=T(()=>{"use strict";R();$e();Ag()});function Si(r){let e=r.indexOf(":");return e===-1?r:r.slice(0,e)}function wg(r,e){return e?!r||r.length===0?!1:r.includes(Ii)||r.includes(e)?!0:r.includes(`${Si(e)}:*`):!0}function Js(r,e=Ri){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(o=>Si(o)===i).forEach(o=>t.add(o))}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(o=>Si(o)===i).forEach(o=>t.delete(o))}else t.delete(a);return[...t]}function Ig(r,e,t=Ri){let a=o=>{let l=new Set;for(let c of o)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(o=>i.has(o))}var Ri,Ii,_i=T(()=>{"use strict";Ya();Ya();Ri=Object.keys(w),Ii="*"});function My(r){return r?Array.isArray(r)?r.reduce((e,t)=>(e[t]=!0,e),{}):r:null}function $y(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 Sg({role:r,roleMap:e,userOverride:t,catalog:a=Ri}){var l,c;let n=(c=(l=e==null?void 0:e[r])==null?void 0:l.permissions)!=null?c:[],i=new Set($y(n,a)),o=My(t);if(o)for(let[d,u]of Object.entries(o))u===!0?Js({[d]:!0},a).forEach(g=>i.add(g)):u===!1&&Js({[d]:!0},a).forEach(g=>i.delete(g));return[...i]}var Rg=T(()=>{"use strict";_i()});async function _g(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 y(()=>h.select().from(s.appUsers).where((0,Ur.and)((0,Ur.eq)(s.appUsers.app,e),(0,Ur.eq)(s.appUsers.user,t),(0,Ur.eq)(s.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 Ur,kg=T(()=>{"use strict";Ur=require("drizzle-orm");N();R()});var vg,ki,Dg=T(()=>{"use strict";vg=require("zod");Eg();_i();Rg();N();v();kg();ki=class extends A{getValidationSchema(){return vg.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 _g(this.context),t=e.role||"user",a=await Cg(),n=Sg({role:t,roleMap:a,userOverride:e.permissions});return this.context.delegatedScopes&&(n=Ig(n,this.context.delegatedScopes)),{access:!0,role:t,permissions:n}}}});var Ca,Di,Bg,vi,Ng=T(()=>{"use strict";Ca=require("drizzle-orm"),Di=require("lodash-es"),Bg=require("zod");R();re();v();vi=class extends A{getValidationSchema(){return Bg.z.undefined()}async execute(){if(!this.context)throw _("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:e}=this.context,{data:t,error:a}=await y(()=>h.select({id:s.appPages.id,designTokens:s.appPages.designTokens,name:s.appPages.name,slug:s.appPages.slug,links:s.appPages.links,partialBlocks:s.appPages.partialBlocks}).from(s.appPages).where((0,Ca.and)((0,Ca.eq)(s.appPages.lang,""),(0,Ca.eq)(s.appPages.app,e))));if(a)throw _("FETCH_SITE_DATA_FAILED",a);let n={};return(0,Di.each)(t,i=>{var o,l;n[i.id]={name:i.name,isPartial:(0,Di.isEmpty)(i.slug),partialBlocks:i.partialBlocks?(o=i.partialBlocks)==null?void 0:o.split("|").filter(Boolean):[],links:i.links?i.links.split("|").filter(Boolean):[],designTokens:(l=i.designTokens)!=null?l:{}}}),n}}});var Lg,Og,Fg,Qs,Gr,Xs=T(()=>{"use strict";Lg=require("crypto"),Og=require("drizzle-orm"),Fg=require("lodash-es"),Qs=require("zod");v();R();re();Gr=class extends A{getValidationSchema(){return Qs.z.object({draft:Qs.z.boolean()})}async execute(e){var d;if(!this.context)throw _("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,{draft:a}=e,n=a?s.apps:s.appsOnline,{data:i,error:o}=await y(()=>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,Og.eq)(n.id,t)).limit(1));if(o)throw _("ERROR_PROJECT_CONFIG",o);if(!i||i.length===0)throw _("PROJECT_NOT_FOUND",new Error("Project not found"));let l=(0,Fg.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,Lg.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 Ug,Bi,Gg=T(()=>{"use strict";Ug=require("zod");v();ys();bs();Ls();Fs();Xs();Bi=class extends A{getValidationSchema(){return Ug.z.object({}).optional().default({})}async execute(){let e=new Gr,t=new Br,a=new Dr,n=new xr,i=new Er;this.context&&(e.setContext(this.context),t.setContext(this.context),a.setContext(this.context),n.setContext(this.context),i.setContext(this.context));let[o,l,c,d,u]=await Promise.all([e.execute({draft:!0}),t.execute({lang:""}),a.execute(),n.execute(),i.execute()]);return{websiteSettings:o,websitePages:l,pageTypes:c,libraries:d,collections:u}}}});var J,Le,Ea,Ni,Mg=T(()=>{"use strict";J=require("drizzle-orm"),Le=require("lodash-es"),Ea=require("zod");R();qe();N();v();Ni=class extends A{constructor(){super(...arguments);this.appId="";this.revisionsEnabled=!1}getValidationSchema(){return Ea.z.object({ids:Ea.z.array(Ea.z.string()).optional(),revisions:Ea.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 o=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,Le.uniq)((0,Le.flattenDeep)(o.map(d=>d.tags))),c=(0,Le.uniq)((0,Le.flattenDeep)(o.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 y(()=>h.delete(s.appsOnline).where((0,J.eq)(s.appsOnline.id,this.appId)));if(a)throw new m("Error deleting online theme","ERROR_PUBLISHING_THEME",500,a);let{error:n}=await y(()=>h.insert(s.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 y(()=>h.delete(s.appsOnline).where((0,J.eq)(s.appsOnline.id,this.appId)));if(a)throw new m("Error deleting online app","ERROR_PUBLISHING_DESIGN_TOKEN",500,a);let{error:n}=await y(()=>h.insert(s.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 y(()=>h.select({changes:s.apps.changes}).from(s.apps).where((0,J.eq)(s.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 y(()=>h.update(s.apps).set({changes:l.length>0?l:null}).where((0,J.eq)(s.apps.id,this.appId)));if(c)throw new m("Error updating changes",a,500,c)}async cloneApp(){let{data:t,error:a}=await y(()=>h.query.apps.findFirst({where:(0,J.eq)(s.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 y(()=>h.update(s.appPages).set({changes:null,online:!0}).where((0,J.and)((0,J.inArray)(s.appPages.id,a),(0,J.eq)(s.appPages.app,this.appId))));if(n)throw new m("Error clearing changes","ERROR_CLEARING_CHANGES",500,n)}async getLinkingPages(t){let{data:a}=await y(()=>h.query.appPagesOnline.findMany({where:(0,J.and)((0,J.eq)(s.appPagesOnline.app,this.appId),(0,J.like)(s.appPagesOnline.links,`%${t}%`)),columns:{id:!0,slug:!0}})),n=[],i=[];return(a!=null?a:[]).forEach(o=>{n.push(`page-${o.id}`),(0,Le.isEmpty)(o.slug)||i.push(o.slug)}),{tags:n,paths:i}}async getPartialBlockUsage(t){let{data:a}=await y(()=>h.query.appPagesOnline.findMany({where:(0,J.and)((0,J.eq)(s.appPagesOnline.app,this.appId),(0,J.like)(s.appPagesOnline.partialBlocks,`%${t}%`)),columns:{id:!0,slug:!0}})),n=[],i=[];return(a!=null?a:[]).forEach(o=>{n.push(`page-${o.id}`),(0,Le.isEmpty)(o.slug)||i.push(o.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}`],o=[];if((0,Le.isEmpty)(a.slug)){let c=await this.getPartialBlockUsage(n);i.push(...c.tags),o.push(...c.paths)}else{o.push(`${a.slug}`),i.push(lt(a.slug));let c=await this.getLinkingPages(n);i.push(...c.tags),o.push(...c.paths)}return{tags:(0,Le.uniq)(i),paths:(0,Le.uniq)(o)}}async createRevision(t){if(!this.revisionsEnabled)return!1;let{data:a,error:n}=await y(()=>h.query.appPagesOnline.findFirst({where:(0,J.eq)(s.appPagesOnline.id,t)}));if(n||!a||!(0,Le.isEmpty)(a.primaryPage))return!1;let{error:i}=await y(()=>h.insert(s.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 y(()=>h.delete(s.appPagesOnline).where((0,J.eq)(s.appPagesOnline.id,t.id)));if(a)throw new m("Error deleting online page","ERROR_PUBLISHING_PAGE",500,a);let{changes:n,createdAt:i,...o}=t,{data:l,error:c}=await y(()=>{var u;return h.insert(s.appPagesOnline).values({...o,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 y(()=>h.update(s.appPages).set({changes:null}).where((0,J.eq)(s.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 y(()=>h.query.appPages.findFirst({where:(0,J.and)((0,J.eq)(s.appPages.id,t),(0,J.eq)(s.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 Zs,$g,el,Li,Hg=T(()=>{"use strict";Zs=require("drizzle-orm"),$g=require("lodash-es"),el=require("zod");R();re();v();Li=class extends A{getValidationSchema(){return el.z.object({settings:el.z.any()})}async execute(e){var f;if(!this.context)throw _("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:t}=this.context,a=(0,$g.pick)(e.settings,["theme","designTokens"]),{data:n,error:i}=await y(()=>h.select({changes:s.apps.changes}).from(s.apps).where((0,Zs.eq)(s.apps.id,t)));if(i)throw _("ERROR_UPDATE_WEBSITE_FIELDS",i);let o=(f=n[0].changes)!=null?f:[],l={theme:"THEME",designTokens:"DESIGN_TOKENS"},c=Object.keys(a).map(b=>l[b]).filter(Boolean),d=[...new Set([...o,...c])],u={...a,changes:d},{error:g}=await y(()=>h.update(s.apps).set(u).where((0,Zs.eq)(s.apps.id,t)));if(g)throw _("ERROR_UPDATE_WEBSITE_FIELDS",g);return{success:!0}}}});function I(r,e){return r.requiredPermission=e,r}var On,us=T(()=>{"use strict";Ya();mp();hp();Cp();Ep();xp();Ip();vp();Dp();Np();Lp();Fp();Up();$p();Hp();qp();Vp();jp();zp();Kp();Ad();ys();bs();Id();Rd();_d();vd();Nd();Ld();Od();is();Fd();Ss();Gd();Md();_s();$d();vs();qd();Vd();Ls();Ns();Fs();Kd();Wd();Yd();Jd();os();Qd();Xd();eg();tg();ag();ng();ig();sg();cg();dg();gg();mg();fg();yg();bg();Tg();Pg();Dg();Ng();Gg();Xs();Mg();Hg();On={AI_EDIT_BLOCK:I(new nn,w["ai:use"]),AI_EDIT_PAGE:I(new ln,w["ai:use"]),AI_GENERATE_IMAGE:I(new pn,w["ai:generate_image"]),AI_EDIT_LANG_PAGE:I(new on,w["ai:use"]),AI_GENERATE_SEO_FIELD:I(new un,w["ai:use"]),AI_ENHANCE_CONTEXT:I(new dn,w["ai:use"]),AI_GENERATE_THEME:I(new mn,w["ai:generate_theme"]),AI_SAVE_CONTEXT:I(new bn,w["ai:use"]),AI_GET_CONTEXT:I(new fn,w["ai:read"]),AI_GET_CREDITS:I(new yn,w["ai:read"]),AI_GET_ADDONS:I(new hn,w["ai:read"]),AI_GENERATE_IMAGE_DESCRIPTION:I(new gn,w["ai:use"]),CHECK_USER_ACCESS:new ki,CREATE_PAGE:I(new Wn,w["pages:create"]),DELETE_PAGE:I(new Ft,w["pages:delete"]),DUPLICATE_PAGE:I(new Yn,w["pages:create"]),UPDATE_PAGE:I(new Ar,w["pages:update"]),UPDATE_PAGE_METADATA:I(new li,w["pages:update"]),PUBLISH_CHANGES:I(new Ni,w["pages:publish"]),TAKE_OFFLINE:I(new si,w["pages:unpublish"]),ACQUIRE_PAGE_LOCK:I(new Kn,w["pages:update"]),RELEASE_PAGE_LOCK:I(new ri,w["pages:update"]),GET_WEBSITE_PAGES:I(new Br,w["pages:read"]),GET_MENU_PAGES:I(new ei,w["pages:read"]),GET_DRAFT_PAGE:I(new Sr,w["pages:read"]),GET_LANGUAGE_PAGES:I(new _r,w["pages:read"]),GET_DYNAMIC_PAGES:I(new Zn,w["pages:read"]),GET_PAGE_ALL_DATA:I(new ti,w["pages:read"]),GET_BUILDER_PAGE_DATA:I(new Ir,w["pages:read"]),GET_CHANGES:I(new Jn,w["pages:read"]),GET_COMPARE_DATA:I(new Xn,w["pages:read"]),SEARCH_PAGES:I(new oi,w["pages:read"]),GET_PAGE_TYPES:I(new Dr,w["pages:read"]),SEARCH_PAGE_TYPE_ITEMS:I(new ni,w["pages:read"]),GET_PAGE_REVISIONS:I(new pi,w["revisions:read"]),GET_REVISION_PAGE:I(new gi,w["revisions:read"]),DELETE_PAGE_REVISION:I(new ci,w["revisions:delete"]),RESTORE_PAGE_REVISION:I(new ui,w["revisions:restore"]),GET_WEBSITE_DATA:I(new Bi,w["app:read"]),GET_WEBSITE_DRAFT_SETTINGS:I(new Gr,w["app:read"]),GET_SITE_GLOBAL_DATA:I(new kr,w["app:read"]),GET_SITE_WIDE_USAGE:I(new vi,w["app:read"]),GET_COLLECTIONS:I(new Er,w["app:read"]),UPDATE_WEBSITE_FIELDS:I(new Li,w["app:update"]),GET_LIBRARIES:I(new xr,w["library:read"]),GET_LIBRARY_GROUPS:I(new Hn,w["library:read"]),GET_LIBRARY_ITEM:I(new Vn,w["library:read"]),GET_LIBRARY_ITEMS:I(new jn,w["library:read"]),GET_TEMPLATES_BY_TYPE:I(new Ti,w["library:read"]),UPSERT_LIBRARY_ITEM:I(new zn,w["library:update"]),MARK_AS_TEMPLATE:I(new Pi,w["library:update"]),UNMARK_AS_TEMPLATE:I(new Ai,w["library:update"]),DELETE_LIBRARY_ITEM:I(new qn,w["library:delete"]),GET_ASSETS:I(new In,w["assets:read"]),GET_ASSET:I(new wn,w["assets:read"]),SEARCH_IMAGES:I(new Sn,w["assets:read"]),CREATE_ASSET:I(new An,w["assets:create"]),DOWNLOAD_SEARCH_IMAGE:I(new xn,w["assets:create"]),UPDATE_ASSET:I(new Rn,w["assets:update"]),DELETE_ASSET:I(new En,w["assets:delete"]),TRASH_ENTITY:I(new wi,w["pages:delete"]),GET_TRASHED_ITEMS:I(new Ei,w["trash:read"]),RESTORE_TRASHED_ITEM:I(new xi,w["trash:restore"]),DELETE_PERMANENTLY:I(new Ci,w["trash:delete_permanently"]),GET_ROLES:I(new yi,w["roles:read"]),GET_ROLE:I(new fi,w["roles:read"]),CREATE_ROLE:I(new mi,w["roles:create"]),UPDATE_ROLE:I(new bi,w["roles:update"]),DELETE_ROLE:I(new hi,w["roles:delete"]),GET_BLOCK_ASYNC_PROPS:new $n}});var Fk,Hy,Fn,Un=T(()=>{"use strict";Fk=require("server-only");xo();us();ns();ls();vn();ps();Hy={drizzle:null,schema:Yr},Fn={debugLevel:0,globalDataProvider:cs,pageTypes:as,collections:[],blockDataProviders:{},trash:ss,actions:On,builderActions:On,extraPermissions:[],roles:void 0,ai:kn,db:Hy}});function Gn(r){je=r}function ca(){return je}function Cr(){return je.pageTypes}function ct(r){return je.pageTypes.find(e=>e.key===r)}function Qe(r){let e=ct(r);return e?Rt(e):void 0}function ms(){return Cr().map(Rt)}function pa(){return je.collections}function ir(r){return je.collections.find(e=>e.id===r)}function St(r){return je.trash.find(e=>e.key===r)}function bd(){return je.globalDataProvider}async function da(r){var e;try{return(e=await bd()(r))!=null?e:{}}catch(t){return console.error(t),{}}}function hs(r){return je.blockDataProviders[r]}function xg(){return je.roles}function Pt(){return je.ai}function Jo(r){return je.actions[r]}function Rt(r){var e;return{...r,hasSlug:r.partial?!1:(e=r.hasSlug)!=null?e:!0}}var Vk,je,$e=T(()=>{"use strict";Vk=require("server-only");R();Un();je=Fn});function Td(r,e){ql(r,e)}function fs(r){var a;let e=xe(r);if(e!=null&&e.dataProvider&&(0,tl.isFunction)(e.dataProvider))return e.dataProvider;let t=hs(r);if(!(!t||!(0,tl.isFunction)(t)))return Td(r,t),(a=xe(r))==null?void 0:a.dataProvider}var tl,Wk,Mn=T(()=>{"use strict";tl=require("lodash-es"),Wk=require("server-only");Oa();$e()});var Ky,Wy,Ht,Ui=T(()=>{"use strict";Ky={persistentCache:(r=>r),invalidatePath:()=>{},invalidateTag:()=>{},runAfterResponse:r=>{Promise.resolve(r()).catch(console.error)},pageNotFound:()=>{throw new Error("Page not found")}},Wy=Ky,Ht=()=>Wy});function Xg(r){return Yy.has(r)}function xa(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 Zg(r){if(r instanceof m)return r;let e=xa(r);return new m(e.message,e.code,e.status)}var Yy,nl=T(()=>{"use strict";N();Yy=new Set(["AI_EDIT_BLOCK","AI_EDIT_LANG_PAGE","AI_GENERATE_IMAGE"])});function eu(r){return Jy.has(r)?"public":"authenticated"}var Jy,tu=T(()=>{"use strict";Jy=new Set([])});var ol={};zt(ol,{dispatchChaiAction:()=>Mr,tryChaiAction:()=>tb});function Qy(r){var e;return{role:r.role||"user",permissions:(e=r.permissions)!=null?e:null}}async function Xy(r,e,t,a){let n=Pn(il);if(!n)throw new m(`Action ${il} 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 Qy(i)}function Zy(r,e,t){var n;let a=r.requiredPermission;return a?typeof a=="function"?(n=a(e,t))!=null?n:null:a:null}function eb(r,e,t){var i,o;let a=Zy(r,e,t);if(!a)return;let n=(o=(i=t.userAccess)==null?void 0:i.permissions)!=null?o:null;if(!wg(n,a))throw new m(`Missing permission: ${a}`,"FORBIDDEN",403)}async function Mr(r,e){var t;try{let a=Pn(r);if(!a)throw new m(`Action ${r} not found`,"ACTION_NOT_FOUND",404);let n=eu(r),i;if(n==="authenticated"){let o=ur(),l=(t=o.delegatedScopes)!=null?t:null,c=r===il?void 0:await Xy(o.appId,o.userId,r,l);i={appId:o.appId,userId:o.userId,action:r,delegatedScopes:l,...c?{userAccess:c}:{}}}else i={appId:L().appId,action:r};return a.setContext(i),eb(a,e,i),await a.run(e)}catch(a){throw console.error(`[dispatchChaiAction] Error executing action "${r}":`,a),Zg(a)}}async function tb(r,e){try{return{ok:!0,data:await Mr(r,e)}}catch(t){return{ok:!1,error:xa(t)}}}var il,wa=T(()=>{"use strict";j();_i();N();tu();nl();Ot();il="CHECK_USER_ACCESS"});function iu(r,e){let t=e.map(lu).join(":");return t?`${r}:${t}`:r}function ou(r){return r.join(":")}function sl(r,e){if(e.length===0)return r;let t=e.map(db).filter(Boolean);return t.length>0?t.join(" \xB7 "):r}function su(r){return r.map(e=>e.startsWith("website-settings-")?`app=${Z(e.replace("website-settings-",""))}`:e.startsWith("pages-metadata-")?rb(e):e.startsWith("page-by-slug-")?ab(e):e.startsWith("page-slugs-batch-")?ib(e):e.startsWith("page-slug-")?nb(e):e.startsWith("alternate-")?ob(e):e.startsWith("breadcrumb-")?sb(e):e.startsWith("page-details-")?lb(e):e.startsWith("full-page-")?cb(e):e.startsWith("page-styles-")?pb(e):e.includes("-")&&e.length>20?Z(e):e).join(" \xB7 ")}function rb(r){let e=r.slice(15),t=e.endsWith("-draft")?"draft":e.endsWith("-online")?"online":"unknown",a=e.replace(/-(draft|online)$/,"");return`app=${Z(a)} \xB7 ${t}`}function Gi(r,e,t){let a=r.slice(e.length),n=a.endsWith("-draft")?"draft":a.endsWith("-online")?"online":"unknown",o=a.replace(/-(draft|online)(-.+)?$/,""),l=a.includes("-draft-")?a.split("-draft-")[1]:a.includes("-online-")?a.split("-online-")[1]:void 0;return l?`app=${Z(o)} \xB7 ${n} \xB7 ${t}=${l.slice(0,12)}`:`app=${Z(o)} \xB7 ${n}`}function ab(r){return Gi(r,"page-by-slug-","slug")}function nb(r){return Gi(r,"page-slug-","page")}function ib(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),o=i?i.split(",").filter(Boolean).length:0;return`app=${Z(n)} \xB7 online \xB7 ids=${o}`}if(a>0){let n=e.slice(0,a),i=e.slice(a+7),o=i?i.split(",").filter(Boolean).length:0;return`app=${Z(n)} \xB7 draft \xB7 ids=${o}`}return Z(e)}function ob(r){return Gi(r,"alternate-","alt")}function sb(r){return Gi(r,"breadcrumb-","crumb")}function lb(r){let e=r.slice(13);if(e.length<=36)return`app=${Z(e)}`;let t=e.slice(0,36),a=e.slice(37);return`app=${Z(t)} page=${Z(a)}`}function cb(r){let e=r.slice(10);if(e.length<=36)return`app=${Z(e)}`;let t=e.slice(0,36),a=e.slice(37);return`app=${Z(t)} page=${Z(a)}`}function pb(r){let e=r.slice(12);if(e.length<=36)return`app=${Z(e)}`;let t=e.slice(0,36),a=e.slice(37);return`app=${Z(t)} page=${Z(a)}`}function lu(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 db(r){if(typeof r=="string")return r.length>36&&r.includes("-")?Z(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=${Z(t.pageId)}`:null].filter(Boolean);if(a.length>0)return a.join(" ")}if(typeof t.id=="string")return[`page=${Z(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=lu(r);return e.length>60?`${e.slice(0,57)}\u2026`:e}function Z(r){return r.length<=8?r:r.slice(0,8)}var Iv,cu=T(()=>{"use strict";Iv=require("server-only")});function pu(r,e){return e!=null?e:r.name||"anonymous"}function fe(r,e){let t=pu(r,e),a=(0,ll.cache)((...n)=>(F(1)&&Go("request",t,sl(t,n)),r(...n)));return((...n)=>{var c;let i=iu(t,n),o=pe(),l=(c=o==null?void 0:o.cacheKeys.has(i))!=null?c:!1;return l&&F(1)&&Uo("request",t,sl(t,n)),o&&!l&&o.cacheKeys.set(i,!0),a(...n)})}function cl(r,e,t=[],a=!1,n){let i=pu(r,n),o=ou(e),l=su(e),c=async(...u)=>{let g=pe();return vo(g,async()=>{let f=pe();return f&&f.cacheKeys.set(`persistent:${o}`,!0),F(1)&&Go("persistent",i,l),r(...u)})},d=Ht().persistentCache(c,e,{revalidate:a,tags:t});return(0,ll.cache)(async(...u)=>{let g=`persistent-pending:${o}`,f=pe();f&&(f.cacheKeys.delete(`persistent:${o}`),f.cacheKeys.set(g,!0));let b=await vo(f,()=>d(...u));return F(1)&&(f!=null&&f.cacheKeys.has(g))&&!f.cacheKeys.has(`persistent:${o}`)&&Uo("persistent",i,l),f==null||f.cacheKeys.delete(g),b})}function ee(r,e,t,a=!1,n){if((L().draftMode?"memory":"persistent")==="memory")return fe(r,n);if(!e)throw new Error("keyParts required for persistent cache strategy");return cl(r,e,t,a,n)}var ll,se=T(()=>{"use strict";ll=require("react");Ui();cu();st();Zt();j()});var yu={};zt(yu,{getBlocksStyles:()=>dl});var mu,hu,fu,dl,gl=T(()=>{"use strict";mu=Q(require("@tailwindcss/container-queries"),1),hu=Q(require("@tailwindcss/forms"),1),fu=Q(require("@tailwindcss/typography"),1);Bt();Co();dl=async r=>{let e=JSON.stringify(r,null,2).replace(/#styles:([^"]*)/g,(t,a)=>a.replace(/#styles:,/g,"").replace(/#styles:/g,"").replace(/^,/g,""));return qa({markupStrings:[e],includeBaseStyles:!1,config:{darkMode:"class",theme:{extend:{...Wr(),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:[hu.default,fu.default,mu.default],corePlugins:{preflight:!1}}})}});async function hb(){return Tu.default.resolve("./public/chaistyles.css")}async function Pu(r){try{let e=await hb(),t=await bu.default.readFile(e,"utf-8"),a=ul.default.parse(t),n=ul.default.parse(r),i=new Set;return a.walkRules(o=>{i.add(o.selector)}),n.walkRules(o=>{var c;let l=((c=o.parent)==null?void 0:c.type)==="atrule"&&"name"in o.parent&&o.parent.name==="media";i.has(o.selector)&&!l&&o.remove()}),n.toString()}catch(e){return console.error("Error filtering styles:",e),r}}var bu,Tu,ul,Au=T(()=>{"use strict";bu=Q(require("fs/promises"),1),Tu=Q(require("path"),1),ul=Q(require("postcss"),1)});var xu={};zt(xu,{fetchPageStylesUncached:()=>Eu,getPageStyles:()=>ml});async function Eu(r){let e=r.length,t=performance.now();try{let n=(await dl(r)).replace(/\s+/g," ").trim();return await Pu(n)}finally{let a=Math.round(performance.now()-t);a>fb&&yb.warn(`Slow page styles compile: ${a}ms \xB7 blocks: ${e}`)}}var Cu,fb,yb,ml,hl=T(()=>{"use strict";Cu=require("consola");j();se();gl();Au();fb=30,yb=Cu.consola.withTag("ChaiPageStyles");ml=async(r,e)=>{let t=L();return await ee(Eu,[`page-styles-${t.appId}-${r}`],["page-styles",`page-${r}`],!1,"fetchPageStyles")(e)}});var CT={};zt(CT,{ChaiPageCSS:()=>rh,ChaiPageJSONLD:()=>ah,RenderChaiBlocks:()=>bh,getChaiThemeCssVariables:()=>Fa,getMergedPartialBlocks:()=>Zl,getStylesForBlocks:()=>Fc,getThemeFontsCSSImport:()=>Xl,getThemeFontsLinkMarkup:()=>Ql});module.exports=kh(CT);Ua();var at=require("lodash-es");ao();function Zl(r,e){let t=r.filter(a=>a._type==="GlobalBlock"||a._type==="PartialBlock");for(let a=0;a<t.length;a++){let n=t[a],i=(0,at.get)(n,"partialBlockId",(0,at.get)(n,"globalBlock",""));if(i==="")continue;let o=(0,at.cloneDeep)((0,at.get)(e,i,[]));n._parent&&(o==null?void 0:o.length)>0&&(o=o.map(c=>((0,at.isEmpty)(c._parent)&&(c._parent=n._parent),c)));let l=r.indexOf(n);r.splice(l,1,...o)}return r}var Nc=Q(require("@tailwindcss/container-queries"),1),Lc=Q(require("@tailwindcss/forms"),1),Oc=Q(require("@tailwindcss/typography"),1);Bt();Co();async function bf(r,e=[],t=!1){return qa({markupStrings:r,safelist:e,includeBaseStyles:t,config:{darkMode:"class",theme:{extend:{...Wr(),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:[Lc.default,Oc.default,Nc.default,no],corePlugins:{preflight:t}}})}var Tf=(r,e)=>{let t=JSON.stringify(r).replace(/#styles:([^"]*)/g,(a,n)=>`#styles:${n.replace(/^,/g," ")}`.replace(/#styles:/g,""));return bf([t],[],e)},Fc=async(r,e=!1)=>await Tf(r,e);var ka=require("lodash-es");pr();Ge();Ua();var DN=require("server-only");var Zk=require("server-only");Wa();Mn();$e();me();var qy=new WeakMap;function qg(r){return qy.get(r)}R();j();st();Zt();var iv=require("server-only");Zt();st();Zr();async function Vg(r,e,t){return F(1)?No(async()=>{en(r,t);let a=performance.now();try{return await e()}finally{ea(r,Math.round(performance.now()-a))}}):e()}async function jg(r,e,t="api"){if(!F(2))return e();let a=performance.now();try{return await e()}finally{let n=Math.round(performance.now()-a);t==="action"?np(r,n):ap(r,n)}}Zr();$e();var al=require("react"),gv=require("server-only");var pv=require("server-only"),Vy=globalThis;function Oi(){var r;return(r=Vy.__chaiContextResolver)!=null?r:null}function rl(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}}var jy=(0,al.cache)(()=>({context:null})),Fi=null;function Yg(){return process.env.VITEST==="true"?(Fi!=null||(Fi={context:null}),Fi):jy()}async function zg(r){var n;let e=Oi(),t=rl();if(!e)return Wg(t,r.request);let a=await e(r);return Wg({...t,...a,siteUrl:(n=a.siteUrl)!=null?n:t.siteUrl},r.request)}function Kg(r){var t;return r&&((t=r.split(",")[0])==null?void 0:t.trim())||null}function Wg(r,e){var a;if(!e)return r;let t=r.siteUrl;if(!t){let n=(a=Kg(e.headers.get("host")))!=null?a:zy(e.url);n&&(t=`https://${n}`)}return{...r,siteUrl:t,licenseCheck:Kg(e.headers.get("x-chai-license-check"))}}function zy(r){try{return new URL(r).host}catch(e){return null}}var Jg=(0,al.cache)(()=>{process.env.VITEST!=="true"&&(Yg().context=null)});async function Qg(r,e){let t=Yg();if(r!==void 0){if(!Oi())throw new Error("ChaiBuilder: route props require a context resolver. Register one with `setChaiContextResolver(...)`, or call `getChaiBuilder(config)` without route props.");let n=await zg({routeProps:r,request:e});return t.context=n,n}if(t.context)return t.context;let a=Oi()?await zg({}):rl();return t.context=a,a}var Vu=require("lodash-es");Ui();nl();wa();function ru(r){return`--START--
828
+ --MSG=${r.message}--
829
+ --END--`}function au(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 nu(r){var e;return(r==null?void 0:r._streamingResponse)&&(r==null?void 0:r._streamResult)&&!((e=r._streamResult)!=null&&e.textStream)}var Ru=require("consola"),Ia=require("drizzle-orm"),Hr=require("lodash-es"),Yv=require("server-only");pr();R();j();Bt();var ze=require("drizzle-orm"),rt=require("lodash-es"),gu=require("nanoid");R();j();se();var uu=4;function gb(r){let e=new Map;return r.forEach(t=>{e.set(t._id,(0,gu.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 du(r){return r.filter(({_type:e})=>e==="GlobalBlock"||e==="PartialBlock").map(e=>(0,rt.get)(e,"partialBlockId",(0,rt.get)(e,"globalBlock",""))).filter(e=>e!=="")}async function ub(r,e,t){let a=e?s.appPages:s.appPagesOnline,n=new Map,i=new Set,o=du(r).filter(l=>!i.has(l));for(let l=0;l<uu&&o.length>0;l++){let{data:c}=await y(()=>h.select({id:a.id,blocks:a.blocks}).from(a).where((0,ze.and)((0,ze.eq)(a.app,t),(0,ze.inArray)(a.id,o)))),d=[];c&&c.forEach(u=>{var b;let g=(b=u.blocks)!=null?b:[];n.set(u.id,g),i.add(u.id),du(g).forEach(P=>{!i.has(P)&&!d.includes(P)&&d.push(P)})}),o.forEach(u=>i.add(u)),o=d}return pl(r,n)}function pl(r,e,t=new Set,a=0){var i;if(a>=uu)return r;let n=[];for(let o of r)if(o._type==="GlobalBlock"||o._type==="PartialBlock"){let l=(0,rt.get)(o,"partialBlockId",(0,rt.get)(o,"globalBlock",""));if(l===""){n.push(o);continue}if(t.has(l)){n.push(o);continue}let c=(i=e.get(l))!=null?i:[];if(c.length===0){n.push(o);continue}c=gb(c),c=c.map(g=>((0,rt.isEmpty)(g._parent)&&(g._parent=o._parent),(0,rt.has)(o,"_show")&&(g._show=o._show),g));let d=new Set(t);d.add(l);let u=pl(c,e,d,a+1);n.push(...u)}else n.push(o);return n}var $r=async(r,e)=>{let t=L();return await ee(mb,[`full-page-${t.appId}-${r}`],["full-page",`page-${r}`],!1,"fetchFullPage")(t.appId,t.draftMode,r,e)};async function mb(r,e,t,a){var C,x,k,D,B,S,$;let n=e?s.appPages:s.appPagesOnline,i=(a==null?void 0:a.partialBlocks)!==void 0,o=null,l=t,c=(C=a==null?void 0:a.partialBlocks)!=null?C:"";if(!i){let{data:z,error:ce}=await y(()=>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,ze.and)((0,ze.eq)(n.app,r),(0,ze.eq)(n.id,t))).limit(1));if(ce||!z||z.length===0)throw new Error("PAGE_NOT_FOUND");if(o=z[0],!o)throw new Error("PAGE_NOT_FOUND");l=(x=o.primaryPage)!=null?x:o.id,c=(k=o.partialBlocks)!=null?k:""}let d=(0,rt.compact)((c||"").split("|")),u=[l,...d.filter(z=>z!==l)],{data:g,error:f}=await y(()=>h.select({id:n.id,blocks:n.blocks}).from(n).where((0,ze.and)((0,ze.eq)(n.app,r),(0,ze.inArray)(n.id,u))));if(f)throw new Error("FAILED_TO_FETCH_PAGE_BLOCKS");let b=new Map;g&&g.forEach(z=>{var ce;b.set(z.id,(ce=z.blocks)!=null?ce:[])});let P=(D=b.get(l))!=null?D:[],E=(S=(B=a==null?void 0:a.mergeGlobal)!=null?B:a==null?void 0:a.mergePartials)!=null?S:!0;if(E&&d.length>0){let z=new Map;d.forEach(ce=>{let jt=b.get(ce);jt&&z.set(ce,jt)}),P=pl(P,z)}else E&&(P=await ub(P,e,r));return o?{id:t,name:o.name,slug:o.slug,lang:o.lang,primaryPage:o.primaryPage,seo:($=o.seo)!=null?$:{},currentEditor:o.currentEditor,pageType:o.pageType,lastSaved:o.lastSaved,dynamic:o.dynamic,parent:o.parent,blocks:P}:{id:t,name:"",slug:"",lang:"",primaryPage:null,seo:{},currentEditor:null,pageType:null,lastSaved:null,dynamic:null,parent:null,blocks:P}}hl();var wu=require("drizzle-orm");R();j();se();async function bb(r,e){let t=e?h.query.apps:h.query.appsOnline,{data:a,error:n}=await y(()=>t.findFirst({where:(0,wu.eq)(s.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 ve=async()=>{let r=L();return await ee(bb,[`website-settings-${r.appId}`],["website-settings",`website-settings-${r.appId}`],!1,"fetchSiteSettings")(r.appId,r.draftMode)};var Iu=3,Tb=/^page-([a-zA-Z0-9_-]+)$/,Pb=new Set(["styles"]),fl=Ru.consola.withTag("ChaiPublishWarmup");function Ab(r){let e=new Set;for(let t of r){let a=t.match(Tb);if(!a)continue;let n=a[1];Pb.has(n)||e.add(n)}return Array.from(e)}function Cb(r,e){return`${r.replace(/\/$/,"")}${e.startsWith("/")?e:`/${e}`}`}async function Eb(r,e){let{data:t}=await y(()=>h.query.appPagesOnline.findFirst({where:(0,Ia.and)((0,Ia.eq)(s.appPagesOnline.app,r),(0,Ia.eq)(s.appPagesOnline.slug,e)),columns:{id:!0,primaryPage:!0,dynamic:!0,slug:!0}}));return t!=null?t:null}async function xb(r,e){let t=await fetch(Cb(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 wb(r){var i;let e=await $r(r,{mergePartials:!0});if((0,Hr.isEmpty)(e.slug))return!1;let t=await ve(),a={...nt,...(0,Hr.get)(t,"designTokens",{})},n=Wt((i=e.blocks)!=null?i:[],a);return await ml(r,n),!0}function Ib(r,e){r.add(e.id),e.primaryPage&&r.add(e.primaryPage)}async function Su(r,e,t){for(let a=0;a<r.length;a+=e)await Promise.all(r.slice(a,a+e).map(t))}async function _u(r){let{appId:e,tags:t,paths:a,siteUrl:n}=r,i=Ab(t),o=(0,Hr.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&&o.length===0)return c;let d=performance.now();return await Jt({appId:e,draft:!1},async()=>{n&&o.length>0?await Su(o,Iu,async u=>{try{let g=await Eb(e,u);if(!g||g.dynamic){c.routesSkipped+=1;return}await xb(n,u),Ib(l,g),c.routesWarmed+=1}catch(g){c.routesFailed+=1,fl.warn(`Failed to prefetch route ${u}: ${g instanceof Error?g.message:"Unknown error"}`)}}):o.length>0&&(c.routesSkipped+=o.length),i.length>0&&await Su(i,Iu,async u=>{if(l.has(u)){c.stylesSkipped+=1;return}try{await wb(u)?c.stylesWarmed+=1:c.stylesSkipped+=1}catch(g){c.stylesFailed+=1,fl.warn(`Failed to warm page styles for ${u}: ${g instanceof Error?g.message:"Unknown error"}`)}})}),c.totalMs=Math.round(performance.now()-d),fl.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}j();var DD=require("server-only");var ku="https://chaibuilder.com/pro-api/validate";var vu="MCowBQYDK2VwAyEAft33iIqz6lHFVh0pK9rVxmd8t2RKd+IUGkxEpnQ4yAo=";var Mi="0.1.0";var iD=require("server-only"),Sb=require("consola");st();var cD=require("server-only");j();Po();var Du=()=>process.env.NODE_ENV==="development";var Rb=new Set(["localhost","127.0.0.1","0.0.0.0","::1","[::1]"]);function Nu(){let r=process.env.CHAIBUILDER_LICENSE_DEBUG;return r==="1"||r==="true"}function _b(r){let e=r.trim();if(!e)return null;try{let t=new URL(e.includes("://")?e:`https://${e}`);return To(t.hostname).toLowerCase()}catch(t){return null}}function kb(r){return Rb.has(r)||r.endsWith(".localhost")}function $i(){var t,a,n;let r=(n=(a=(t=pe())==null?void 0:t.siteUrl)!=null?a:process.env.SITE_URL)!=null?n:null;if(!r)return null;let e=_b(r);return e?kb(e)&&!Nu()?null:e:null}function Lu(){return Nu()?$i()===null:Du()||process.env.VITEST==="true"||process.env.VERCEL_ENV==="preview"?!0:$i()===null}var SD=require("server-only");var CD=require("server-only"),Gu=require("crypto");var hD=require("server-only");function Ou(){var r;return(r=process.env.CHAIBUILDER_LICENSE_KEY)!=null?r:""}var Hi=require("crypto"),TD=require("server-only");var yl=null,Fu=null;function vb(){return Fu||(yl||(yl=(0,Hi.createPublicKey)({key:Buffer.from(vu,"base64"),format:"der",type:"spki"})),yl)}var Db=new Set(["trial","active","expired","version_blocked","limit_reached","invalid"]);function Bb(r){if(!r||typeof r!="object")return!1;let e=r;return typeof e.domain=="string"&&typeof e.status=="string"&&Db.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 Uu(r,e){try{let t=Buffer.from(r,"base64"),a=Buffer.from(e,"base64");if(t.length===0||a.length===0||!(0,Hi.verify)(null,t,vb(),a))return null;let i=JSON.parse(t.toString("utf8"));return Bb(i)?i:null}catch(t){return null}}async function Mu(r){let e=(0,Gu.randomUUID)(),t;try{t=await fetch(ku,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({domain:r,licenseKey:Ou(),version:Mi,nonce:e}),signal:AbortSignal.timeout(5e3)})}catch(o){return{ok:!1,error:o instanceof Error?o.message:"network error"}}if(!t.ok)return{ok:!1,error:`validate endpoint returned ${t.status}`};let a;try{a=await t.json()}catch(o){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=Uu(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 Ub=1440*60*1e3,Gb=200,bl=globalThis;function Tl(){return bl.__chaiLicenseState||(bl.__chaiLicenseState={verdicts:new Map,inFlight:new Map,lastAttempt:new Map}),bl.__chaiLicenseState}function Pl(r){var e;return(e=Tl().verdicts.get(r))!=null?e:null}function Mb(r,e){let{verdicts:t}=Tl();for(t.delete(r),t.set(r,e);t.size>Gb;){let a=t.keys().next().value;if(a===void 0)break;t.delete(a)}}async function $u(r){var i;let{inFlight:e,lastAttempt:t}=Tl(),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 o=await Mu(r);o.ok?(Mb(r,o.payload),o.payload.status,void 0):(o.error,void 0)})().catch(o=>{console.error("[chai-license] revalidation failed",o)}).finally(()=>{e.delete(r)});return e.set(r,n),n}function Hu(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)*Ub;return e<=t+a?"grace":"expired"}function Hb(r){if(!r)return null;let e=Number(r);return Number.isFinite(e)&&e>0?e:null}function qb(r,e){let t=Date.parse(r);return Number.isFinite(t)&&e>=t}async function qu(r){var g,f,b,P;if(Lu())return null;let e=$i();if(!e)return null;let t=Date.now(),a=Pl(e),n=Hb(r),i=n!==null?Math.min(n,t):null,o=a!==null&&qb(a.expiresAt,t),l=i===null||t-i>=18e6,c=a===null||o||l,d=a===null?"no-verdict":o?"ttl-expired":l?"throttle-elapsed":"fresh";c&&(await $u(e),a=Pl(e));let u=Hu(a,t);return(g=a==null?void 0:a.status)!=null,{state:u,status:(f=a==null?void 0:a.status)!=null?f:null,trialEndsAt:(b=a==null?void 0:a.trialEndsAt)!=null?b:null,updatesUntil:(P=a==null?void 0:a.updatesUntil)!=null?P:null,version:Mi,refreshed:c}}function ju(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,Vu.has)(r,"tags")){let{tags:e}=r;return e!=null?e:[]}return[]}function zu(r){if(!r||typeof r!="object"||!("paths"in r))return[];let{paths:e}=r;return e!=null?e:[]}async function Vb(r,e){var c;let{invalidatePath:t,invalidateTag:a}=Ht(),n=ju(r),i=zu(r);if(n.length===0&&!(i!=null&&i.length))return;let o=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:[],o("website-settings")),n.length&&l.push(...n.map(o)),i!=null&&i.length&&l.push(...i.map(d=>t(d))),l.length&&await Promise.all(l)}function Ku(r,e){return new Response(JSON.stringify(r),{status:e,headers:{"Content-Type":"application/json"}})}function Wu(r,e){return e?{...r,license:e}:r}function Al(r,e,t){let a=xa(e);if(Xg(r)){let i=ru({code:a.code,message:a.message,statusCode:a.status});return au(a.code,i)}return Ku(Wu({ok:!1,error:a},t),a.status)}function jb(r,e){return Ku(Wu({ok:!0,data:r},e),200)}async function Yu(r,e={}){var o,l;let{catchAllRoute:t=["/(public)/[[...slug]]"]}=e,{action:a,data:n}=r,i=qu((o=pe())==null?void 0:o.licenseCheck).catch(()=>null);try{let c=await Mr(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:Al(a,{code:"NO_STREAM",message:"No streaming response available. Please try again.",status:500},await i):nu(g)?Al(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 Vb(c,t);let d=ju(c),u=zu(c);if(a==="PUBLISH_CHANGES"&&(d.length>0||u.length>0)){let{appId:g,siteUrl:f}=ur();Ht().runAfterResponse(()=>_u({appId:g,siteUrl:f,tags:d,paths:u}))}return jb(c,await i)}catch(c){return Al(a,c,await i)}}j();var qi=r=>{let e=Za();e.lang=r},Ju=()=>Xr().siteUrl;Bt();var Qu=(r,e)=>{var E,C,x,k,D,B;let t=lr((C=(E=r.page)==null?void 0:E.seo)!=null?C:{},r.pageData),{alternatePages:a=[],fallbackLang:n,lang:i,slug:o,primaryPage:l}=r.page,c=(k=(x=Ju())==null?void 0:x.replace(/\/$/,""))!=null?k:"",d={};for(let S of a)S.lang&&(d[S.lang]=c?`${c}${S.slug}`:S.slug);n&&d[n]&&(d["x-default"]=d[n]);let u=l&&(B=(D=a.find(S=>S.id===l))==null?void 0:D.slug)!=null?B:o,g=(t==null?void 0:t.canonicalUrl)||(l?u:o),f=c?`${c}${g}`:g,b;if(t!=null&&t.metaOther)try{let S=typeof t.metaOther=="string"?JSON.parse(t.metaOther):t.metaOther;S&&typeof S=="object"&&Object.keys(S).length>0&&(b=S)}catch(S){}let P={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:f||void 0,locale:i||void 0},alternates:{canonical:f,...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(P,{...r,seo:t}):P};var Ke=require("drizzle-orm");R();j();se();async function zb(r,e,t,a){let n=t.draft?s.appPages:s.appPagesOnline,i=[(0,Ke.eq)(n.app,r),(0,Ke.eq)(n.pageType,e),(0,Ke.eq)(n.dynamic,!0),(0,Ke.isNotNull)(n.slug),(0,Ke.ne)(n.slug,"")];t.lang&&t.lang!==a?i.push((0,Ke.eq)(n.lang,t.lang)):i.push((0,Ke.eq)(n.lang,""));let{data:o,error:l}=await y(()=>h.select({slug:n.slug,lang:n.lang,pageId:n.id,primaryPageId:n.primaryPage,dynamicSlugCustom:n.dynamicSlugCustom}).from(n).where((0,Ke.and)(...i)));if(l)throw l;return(o!=null?o:[]).map(c=>({slug:c.slug,lang:c.lang||a,pageId:c.pageId,primaryPageId:c.primaryPageId,dynamicSlugCustom:c.dynamicSlugCustom}))}async function Xu(r,e={}){var n,i;let t=L(),a=(i=(n=e.draft)!=null?n:t.draftMode)!=null?i:!1;return await fe(zb,"fetchBaseSlugs")(t.appId,r,{...e,draft:a},t.fallbackLang)}var Zu=require("drizzle-orm");R();se();async function Kb(r){var i,o,l,c,d,u,g,f;let{data:e,error:t}=await y(()=>h.select().from(s.clients).where((0,Zu.eq)(s.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 x,k,D;let b=a==null?void 0:a.plansAndAddOns,P=(b==null?void 0:b.paymentEnv)||"sandbox",E=a,C=P==="sandbox"?((b==null?void 0:b.plans)||[]).map(B=>({...B,items:((B==null?void 0:B.items)||[]).map(S=>({...S,id:S==null?void 0:S.sandboxId}))})):b==null?void 0:b.plans;return{...b||{},plans:C,paymentEnv:P,sandboxToken:((D=(k=(x=E==null?void 0:E.envs)==null?void 0:x.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:((o=a==null?void 0:a.settings)==null?void 0:o.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:((f=a==null?void 0:a.settings)==null?void 0:f.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 em=async r=>await cl(Kb,[`client-settings-${r}`],["client-settings",`settings-${r}`])(r);var Vi=require("react");Ui();j();se();var qt=require("drizzle-orm");R();j();se();qe();async function Wb(r,e,t,a){let n=e?s.appPages:s.appPagesOnline,{data:i}=await y(()=>h.select({id:n.id,name:n.name,slug:n.slug,lang:n.lang,dynamic:n.dynamic,primaryPage:n.primaryPage}).from(n).where((0,qt.and)((0,qt.eq)(n.app,r),(0,qt.or)((0,qt.eq)(n.primaryPage,t),(0,qt.eq)(n.id,t))))),l=L().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 Cl(r,e){let t=L();return await ee(Wb,nd(t.appId,t.draftMode,r,e),[`alternate-${r}`,`page-${r}`],!1,"getAlternateLangPages")(t.appId,t.draftMode,r,e)}var tm=require("drizzle-orm");R();sa();j();se();qe();function Yb(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 Jb(r,e){let t=e?s.appPages:s.appPagesOnline,{data:a}=await y(()=>h.select(Yb(t)).from(t).where((0,tm.eq)(t.app,r)));return a!=null?a:[]}function Qb(r,e,t){let a=L(),n=new Be(t),i=e.filter(f=>!f.primaryPage),o=e.filter(f=>f.primaryPage),l=n.buildPrimaryTree(i),c=n.buildLanguageTree(o,l),d=r.primaryPage?c:l,u=(f,b,P=[])=>{var E;for(let C of f){if(C.id===b)return[...P,C];if(((E=C.children)==null?void 0:E.length)>0){let x=u(C.children,b,[...P,C]);if(x)return x}}return null},g=u(d,r.id);return g?g.map(f=>({id:f.id,name:f.name,slug:f.slug,lang:f.lang||r.lang||a.fallbackLang})):[{id:r.id,name:r.name,slug:r.slug,lang:r.lang||a.fallbackLang}]}async function Xb(r,e,t){let a=await Jb(r,e),n=a.find(i=>i.id===t);if(!n)throw new Error("PAGE_NOT_FOUND");return Qb(n,a,r)}async function rm(r){let e=L();return await ee(Xb,id(e.appId,e.draftMode,r),[`page-${r}`,`breadcrumb-${r}`],!1,"getBreadcrumb")(e.appId,e.draftMode,r)}var Fe=require("drizzle-orm");R();j();se();qe();me();var Oe=require("lodash-es");function El(r,e,t){let a=e.find(u=>u.slug===r&&!u.dynamic);if(a)return a;let n=r.slice(1),i=`/${(0,Oe.take)(n.split("/"),1).join("/")}`,o=`/${(0,Oe.take)(n.split("/"),2).join("/")}`,l=e.filter(u=>u.dynamic&&(u.slug.includes(i)||u.slug.includes(o)));if(l.length===0)throw new Error("PAGE_NOT_FOUND");let c=(0,Oe.reverse)((0,Oe.sortBy)(l,u=>u.slug.split("/").length)),d=(0,Oe.keys)(t);d.length>0&&c.sort((u,g)=>{let f=d.indexOf(u.pageType||""),b=d.indexOf(g.pageType||""),P=f===-1?Number.MAX_SAFE_INTEGER:f,E=b===-1?Number.MAX_SAFE_INTEGER:b;return P-E});for(let u of c){if((0,Oe.isEmpty)(u.slug))continue;let g=u.pageType||"",f=(0,Oe.get)(t,g,""),b=u.dynamicSlugCustom||"",P=u.slug+f+b,E=new RegExp(P),C=r.match(E);if(C&&C[0]===r)return u}throw new Error("PAGE_NOT_FOUND")}function am(){return ms().reduce((e,t)=>(t.dynamicSegments&&(e[t.key]=t.dynamicSegments),e),{})}async function Zb(r,e,t){var i;let a=e?s.appPages:s.appPagesOnline,{data:n}=await y(()=>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,Fe.and)((0,Fe.eq)(a.app,r),(0,Fe.eq)(a.slug,t),(0,Fe.or)((0,Fe.eq)(a.dynamic,!1),(0,Fe.isNull)(a.dynamic)))).limit(1));return(i=n==null?void 0:n[0])!=null?i:null}async function eT(r,e){let t=e?s.appPages:s.appPagesOnline,{data:a}=await y(()=>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,Fe.and)((0,Fe.eq)(t.app,r),(0,Fe.eq)(t.dynamic,!0))));return a!=null?a:[]}async function tT(r,e,t){let a=await Zb(r,e,t);if(a)return a;let n=await eT(r,e),i=am();return El(t,n,i)}async function nm(r){let e=L();return await ee(tT,td(e.appId,e.draftMode,r),od(r),!1,"resolvePageBySlug")(e.appId,e.draftMode,r)}var Sa=require("drizzle-orm");R();j();se();Nn();async function rT(r,e,t){var l,c;let a=e?s.appPages:s.appPagesOnline,{data:n,error:i}=await y(()=>h.select({seo:a.seo,currentEditor:a.currentEditor,lastSaved:a.lastSaved,tracking:a.tracking,metadata:a.metadata}).from(a).where((0,Sa.and)((0,Sa.eq)(a.app,r),(0,Sa.eq)(a.id,t))).limit(1));if(i||!(n!=null&&n[0]))throw new Error("PAGE_NOT_FOUND");let o=n[0];return{seo:(l=o.seo)!=null?l:{},currentEditor:o.currentEditor,lastSaved:o.lastSaved,tracking:o.tracking,metadata:(c=o.metadata)!=null?c:{}}}async function xl(r){let e=L();return await ee(rT,ld(e.appId,r),cd(r),!1,"fetchPageDetails")(e.appId,e.draftMode,r)}j();var wl=async r=>{L();let e=r.split("/").pop();if(!e)throw new Error("PAGE_NOT_FOUND");let t=await ve(),a=await $r(e),n=r.split("/").length>3?r.split("/")[2]:t==null?void 0:t.fallbackLang;return{...a,lang:n,breadcrumbPages:[],langPages:[]}};async function aT(r,e){var c,d,u;let t=(c=r.primaryPage)!=null?c:r.id,a=r.lang||e,[n,i,o]=await Promise.all([xl(r.id),ve(),Cl(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:o,tracking:n.tracking,metadata:(u=n.metadata)!=null?u:{}}}async function nT(r,e){var g,f,b;let t=(g=r.primaryPage)!=null?g:r.id,a=r.lang||e,[n,i,o,l,c]=await Promise.all([$r(t,{mergePartials:!0}),xl(r.id),ve(),rm(r.id),Cl(t,a)]),d=n.blocks,u=(o==null?void 0:o.fallbackLang)||e;return{id:r.id,name:r.name,slug:r.slug,lang:r.lang||u,primaryPage:r.primaryPage,seo:(f=i.seo)!=null?f:{},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 im=(0,Vi.cache)(async r=>(L(),nm(r))),om=(0,Vi.cache)(async r=>{if(r.startsWith("/_partial/"))return await wl(r);let e=L();try{let t=await im(r);return await fe(aT,"fetchPageMetadata")(t,e.fallbackLang)}catch(t){throw t instanceof Error&&t.message==="PAGE_NOT_FOUND"&&Ht().pageNotFound(),t}}),ji=(0,Vi.cache)(async r=>{if(r.startsWith("/_partial/"))return await wl(r);let e=L();try{let t=await im(r);return await fe(nT,"fetchPageData")(t,e.fallbackLang)}catch(t){throw t instanceof Error&&t.message==="PAGE_NOT_FOUND"&&Ht().pageNotFound(),t}});var Il=require("lodash-es");me();j();se();async function iT(r,e,t){return await da({lang:t,draft:e,inBuilder:!1})}var Ra=async r=>{let e=L(),t=e.appId;return await ee(iT,[`site-global-data-${t}-${r}`],["site-global-data",`site-global-data-${t}`,"global:site-settings"],!1,"fetchSiteGlobalData")(t,e.draftMode,r)};async function oT(r,e,t,a){let n=Qe(r);return n!=null&&n.dataProvider?await n.dataProvider({lang:e,draft:t,inBuilder:!1,pageProps:a}):{}}var _a=async r=>{var c,d;let e=L(),{pageType:t,pageProps:a,lang:n}=r,i=e.appId,o=(c=a.slug)!=null?c:"",l=(d=a.pageId)!=null?d:"";return await ee(oT,[`page-type-data-${i}-${t}-${n}-${o}-${l}`],["page-type-data",`page-type-data-${i}`,`page-type-data-${i}-${t}`],!1,"fetchDataByPageType")(t,n,e.draftMode,a)};async function sT(r,e,t,a,n,i){var l,c;let o=ir(r);if(!o)return{[`#${r}/${e}`]:[],[`#${r}/${e}/totalItems`]:-1};try{let d=await o.fetch({lang:t,draft:a,inBuilder:!1,pageProps:n,block:i});return{[`#${r}/${e}`]:(l=(0,Il.get)(d,"items",[]))!=null?l:[],[`#${r}/${e}/totalItems`]:(c=(0,Il.get)(d,"totalItems",-1))!=null?c:-1}}catch(d){return{[`#${r}/${e}`]:[],[`#${r}/${e}/totalItems`]:-1}}}var Sl=async r=>{let e=L(),{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 o=i.map(c=>{let d=c.repeaterItems.replace("{{#","").replace("}}","");return fe(sT,"fetchCollectionData")(d,c._id,n,e.draftMode,a,c)});return(await Promise.all(o)).reduce((c,d)=>({...c,...d}),{})},zi=async r=>{let{blocks:e,pageProps:t,pageType:a,lang:n}=r,[i,o,l]=await Promise.all([Ra(n),_a({pageType:a,pageProps:t,lang:n}),Sl({blocks:e,pageProps:t,lang:n})]);return{...o,global:i,...l}};var sm=require("react");var lm=(0,sm.cache)(async r=>{let[e,t]=await Promise.all([om(r),ve()]);qi(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([Ra(e.lang),_a({pageType:e.pageType,pageProps:a,lang:e.lang})]),o={...i,global:n};return{page:e,settings:t,pageData:o}});var dm=require("react");var Ki=require("lodash-es"),pm=require("react");me();j();se();var Dt=require("drizzle-orm");R();j();se();qe();async function lT(r,e,t){var o;let a=e?s.appPages:s.appPagesOnline,{data:n,error:i}=await y(()=>h.select({slug:a.slug}).from(a).where((0,Dt.and)((0,Dt.eq)(a.app,r),(0,Dt.eq)(a.id,t))).limit(1));if(i||!((o=n==null?void 0:n[0])!=null&&o.slug))throw new Error("PAGE_NOT_FOUND");return n[0].slug}async function cT(r,e,t){if(t.length===0)return{};let a=e?s.appPages:s.appPagesOnline,{data:n,error:i}=await y(()=>h.select({id:a.id,slug:a.slug}).from(a).where((0,Dt.and)((0,Dt.eq)(a.app,r),(0,Dt.inArray)(a.id,t))));if(i||!n)return{};let o={};for(let l of n)l.slug&&(o[l.id]=l.slug);return o}async function Rl(r){let e=L();try{return await ee(lT,rd(e.appId,e.draftMode,r),[`page-${r}`],!1,"resolvePageSlug")(e.appId,e.draftMode,r)}catch(t){return null}}async function cm(r){let e=L(),t=[...new Set(r.filter(Boolean))];if(t.length===0)return new Map;if(t.length===1){let n=await Rl(t[0]);return n?new Map([[t[0],n]]):new Map}let a=await ee(cT,ad(e.appId,e.draftMode,t),Pr(t),!1,"resolvePageSlugs")(e.appId,e.draftMode,t);return new Map(Object.entries(a))}function pT(r){let e=[],t=new Set;function a(n){if(n)if(typeof n=="string"&&(0,Ki.startsWith)(n,"pageType:")){let i=n.split(":");if(i.length===3&&i[1]&&i[2]){let o=n;t.has(o)||(t.add(o),e.push({pageTypeKey:i[1],id:i[2],href:o}))}}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 dT(r,e,t,a,n){let i=pT(n);if(i.length===0)return n;let o=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=Qe(d);if(!g){u.forEach(b=>o.set(b.href,"#"));return}if(g.resolveLink){await Promise.all(u.map(async b=>{try{let P=await g.resolveLink(b.id,e,t);o.set(b.href,P)}catch(P){o.set(b.href,"#")}}));return}let f=await cm(u.map(b=>b.id));u.forEach(b=>{var P;o.set(b.href,(P=f.get(b.id))!=null?P:"#")})}));function c(d){if(!d)return d;if(typeof d=="string"&&(0,Ki.startsWith)(d,"pageType:"))return o.get(d)||d;if(Array.isArray(d))return d.map(c);if(typeof d=="object"&&d!==null){let u={};for(let[g,f]of Object.entries(d))u[g]=c(f);if(typeof d.href=="string"&&(0,Ki.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 Wi=(0,pm.cache)(async(r,e)=>{let t=L(),a=e||t.lang||t.fallbackLang;return await fe(dT,"resolveLinksData")(t.appId,t.draftMode,a,r.id,r.blocks)});var gm=(0,dm.cache)(async(r,e)=>{let[t,a]=await Promise.all([ji(r),ve()]);qi(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,o=await Wi(t),l=await zi({blocks:o,pageProps:i,pageType:t.pageType,lang:t.lang});return{page:{...t,blocks:o},settings:a,pageData:l,pageProps:i}});var ut=require("drizzle-orm");R();j();se();async function gT(r,e,t,a){let n=e==="live"?s.appPagesOnline:s.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 o=[(0,ut.eq)(n.app,r),(0,ut.isNull)(n.deletedAt),(0,ut.ne)(n.slug,"")],{data:l,error:c}=await y(()=>h.select(i).from(n).where((0,ut.and)(...o)).orderBy((0,ut.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 um(r,e){let t=Za(),{fields:a=["id","slug","updatedAt","name","lang"]}=e||{};return fe(gT)(t.appId,r,a,t.fallbackLang)}var mm=require("drizzle-orm");R();j();se();async function uT(r){var a;let{data:e,error:t}=await y(()=>h.query.appDomains.findFirst({where:(0,mm.eq)(s.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 hm=async()=>{let r=L();if(!r.appId)throw new Error("APP_ID_NOT_FOUND");return await fe(uT)(r.appId)};var fm=require("lodash-es");me();j();se();async function mT(r,e){if(!(0,fm.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=Qe(a);if(!i)return"#";let o=L();if(i.resolveLink)return await i.resolveLink(n,o.draftMode,e);let l=await Rl(n);return l!=null?l:"#"}var ym=fe(mT,"resolveLink");wa();var U=async(r,e)=>Mr(r,e),bm=r=>U("GET_ASSET",r),Tm=(r={})=>U("GET_ASSETS",r),Pm=r=>U("SEARCH_IMAGES",r),Am=r=>U("UPDATE_ASSET",r),Cm=r=>U("CREATE_PAGE",r),Em=r=>U("DELETE_PAGE",r),xm=r=>U("DUPLICATE_PAGE",r),wm=r=>U("GET_WEBSITE_PAGES",r),Im=r=>U("TAKE_OFFLINE",r),Sm=r=>U("UPDATE_PAGE",r),Rm=r=>U("UPDATE_PAGE_METADATA",r),_m=()=>U("GET_LIBRARIES",{}),km=()=>U("GET_LIBRARY_GROUPS",{}),vm=r=>U("DELETE_LIBRARY_ITEM",r),Dm=r=>U("GET_LIBRARY_ITEM",r),Bm=r=>U("GET_LIBRARY_ITEMS",r),Nm=r=>U("UPSERT_LIBRARY_ITEM",r),Lm=r=>U("GET_TEMPLATES_BY_TYPE",r),Om=r=>U("MARK_AS_TEMPLATE",r),Fm=r=>U("UNMARK_AS_TEMPLATE",r),Um=r=>U("DELETE_PERMANENTLY",r),Gm=r=>U("GET_TRASHED_ITEMS",r),Mm=r=>U("PERMANENTLY_DELETE_BY_DAYS",r),$m=r=>U("RESTORE_TRASHED_ITEM",r),Hm=r=>U("TRASH_ENTITY",r),qm=()=>U("GET_ROLES",{}),Vm=r=>U("GET_ROLE",r),jm=r=>U("CREATE_ROLE",r),zm=r=>U("UPDATE_ROLE",r),Km=r=>U("DELETE_ROLE",r),Wm=r=>U("DELETE_PAGE_REVISION",r),Ym=r=>U("GET_PAGE_REVISIONS",r),Jm=r=>U("GET_REVISION_PAGE",r),Qm=r=>U("RESTORE_PAGE_REVISION",r);var Yi=null;function hT(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 kl(r,e,t,a="api"){return(...n)=>Jt(r,()=>{var o,l,c;let i=hT(t,n);if(Do(t,i)&&Tt()>=1?Oo(t,(o=i!=null?i:Bo())!=null?o:void 0):(l=pe())!=null&&l.traceId&&Tt()>=1&&en(t,(c=i!=null?i:Bo())!=null?c:void 0),Tt()>=2)return jg(t,()=>e(...n),a);if(Tt()>=1){let d=performance.now(),u=e(...n),g=()=>ea(t,Math.round(performance.now()-d));return u instanceof Promise?u.finally(g):(g(),u)}return e(...n)})}function _l(r,e,t){return(...a)=>{let n=t(...a);return kl(r,e,n,"action")(...a)}}async function Xm(r,e,t){let{config:a,routeProps:n,request:i}="config"in r?r:{config:r,routeProps:e,request:t};if(Yi||(Yi=yT(a)),i!==void 0&&n===void 0)throw new Error("ChaiBuilder: when passing a request, supply route props as the second argument ({ params, searchParams }).");Jg();let o=performance.now(),l=await Qg(n,i);return await Io(),await Yi.ensureSynced(),Tt()>=1&&rp("getChaiBuilder",Math.round(performance.now()-o)),fT(Yi,l)}function fT(r,e){let{config:t}=r,a=(g,f)=>kl(e,g,f),n=kl(e,async g=>await t.globalDataProvider(g),"getGlobalData"),i=async(g,f)=>{let{dispatchChaiAction:b}=await Promise.resolve().then(()=>(wa(),ol));return b(g,f)},o=async(g,f)=>{let{tryChaiAction:b}=await Promise.resolve().then(()=>(wa(),ol));return b(g,f)},l=_l(e,i,(g,f)=>`runAction:${g}`),c=_l(e,o,(g,f)=>`tryAction:${g}`),d=Ka(),u={db:d,schema:s};return{config:t,getConfig:g=>t[g],context:Object.freeze({...e}),db:d,schema:s,safeQuery:g=>y(()=>g(u)),runPageRequest:g=>Promise.resolve(Jt(e,g)),withRenderPhase:(g,f,b)=>Promise.resolve(Jt(e,()=>Vg(g,f,b))),runPageRender:(g,f)=>Promise.resolve(Jt(e,async()=>{let b=performance.now();Do("renderPage",`slug=${g}`)&&Oo("renderPage",`slug=${g}`);try{return await f()}finally{Tt()>=1&&ea("renderPage",Math.round(performance.now()-b))}})),getPage:a(ji,"getPage"),getPagePayload:a(gm,"getPagePayload"),getPageData:a(zi,"getPageData"),generateMetaData:a(Qu,"generateMetaData"),getPageMetadataPayload:a(lm,"getPageMetadataPayload"),getPages:a(um,"getPages"),getBaseSlugs:a(Xu,"getBaseSlugs"),getSiteGlobalData:a(Ra,"getSiteGlobalData"),getDataByPageType:a(_a,"getDataByPageType"),getDataByCollections:a(Sl,"getDataByCollections"),getGlobalData:n,getPageStyles:a(async(...g)=>{let{getPageStyles:f}=await Promise.resolve().then(()=>(hl(),xu));return f(...g)},"getPageStyles"),getBlocksStyles:a(async(...g)=>{let{getBlocksStyles:f}=await Promise.resolve().then(()=>(gl(),yu));return f(...g)},"getBlocksStyles"),resolveLink:a(ym,"resolveLink"),resolveLinksInBlocks:a(Wi,"resolveLinksInBlocks"),getSiteSettings:a(ve,"getSiteSettings"),getSiteDomains:a(hm,"getSiteDomains"),getClientSettings:a(em,"getClientSettings"),getPageType:ct,getPageTypes:Cr,getCollection:ir,getCollections:pa,getTrashEntity:St,getAIConfig:Pt,runAction:l,tryAction:c,handleHttpAction:_l(e,Yu,g=>{var f;return(f=g==null?void 0:g.action)!=null?f:"handleHttpAction"}),getAssets:a(Tm,"getAssets"),getAsset:a(bm,"getAsset"),updateAsset:a(Am,"updateAsset"),searchImages:a(Pm,"searchImages"),createPage:a(Cm,"createPage"),deletePage:a(Em,"deletePage"),duplicatePage:a(xm,"duplicatePage"),getWebsitePages:a(wm,"getWebsitePages"),updatePage:a(Sm,"updatePage"),updatePageMetadata:a(Rm,"updatePageMetadata"),takeOffline:a(Im,"takeOffline"),getLibraries:a(_m,"getLibraries"),getLibraryGroups:a(km,"getLibraryGroups"),getLibraryItem:a(Dm,"getLibraryItem"),getLibraryItems:a(Bm,"getLibraryItems"),upsertLibraryItem:a(Nm,"upsertLibraryItem"),deleteLibraryItem:a(vm,"deleteLibraryItem"),getTemplatesByType:a(Lm,"getTemplatesByType"),markAsTemplate:a(Om,"markAsTemplate"),unmarkAsTemplate:a(Fm,"unmarkAsTemplate"),getTrashedItems:a(Gm,"getTrashedItems"),restoreTrashedItem:a($m,"restoreTrashedItem"),deleteTrashedItemPermanently:a(Um,"deleteTrashedItemPermanently"),permanentlyDeleteByDays:a(Mm,"permanentlyDeleteByDays"),trashEntity:a(Hm,"trashEntity"),getPageRevisions:a(Ym,"getPageRevisions"),getRevisionPage:a(Jm,"getRevisionPage"),deletePageRevision:a(Wm,"deletePageRevision"),restorePage:a(Qm,"restorePage"),roles:{getAll:a(qm,"roles.getAll"),get:a(Vm,"roles.get"),create:a(jm,"roles.create"),update:a(zm,"roles.update"),delete:a(Km,"roles.delete")}}}function yT(r){za(r.db),Gn(r),Xc(r.debugLevel);let e=Object.freeze(r),t=null;return{config:e,ensureSynced:async()=>{t||(t=(async()=>{let a=qg(e);a&&await a(ca())})()),await t}}}$e();Bt();Bt();var th=require("react/jsx-runtime"),Zm=r=>{try{let e=JSON.parse(r);return Object.keys(e).length>0}catch(e){return!1}},eh=async({jsonLD:r,pageData:e={}})=>{if(!r||!Zm(r))return null;let t={};try{t=JSON.parse(r)}catch(n){return null}let a=lr(t,e);return Zm(a)?(0,th.jsx)("script",{type:"application/ld+json",children:a},"jsonld"):null};var mt=require("react/jsx-runtime"),rh=async r=>{let{page:e}=r,t=await Xm(ca()),a=t.withRenderPhase,n=await a("ChaiPageCSS.getSiteSettings",()=>t.getSiteSettings()),i=(0,ka.get)(n,"theme",{}),o={...nt,...(0,ka.get)(n,"designTokens",{})},l=await a("ChaiPageCSS.themeVariables",async()=>Fa({theme:i})),c=await a("ChaiPageCSS.applyDesignTokens",async()=>{var P;return Wt((P=e.blocks)!=null?P:[],o)}),d=e?await a("ChaiPageCSS.getPageStyles",()=>t.getPageStyles(e.id,c)):null,u=(0,ka.get)(i,"fontFamily.body","Arial"),g=(0,ka.get)(i,"fontFamily.heading","Arial"),{fontStyles:f,preloads:b}=await a("ChaiPageCSS.getFontStyles",()=>eo(g,u));return(0,mt.jsxs)(mt.Fragment,{children:[b.length>0&&b.map(P=>(0,mt.jsx)("link",{rel:"preload",href:P,as:"font",type:"font/woff2",crossOrigin:"anonymous"},P)),(0,mt.jsx)("style",{id:"theme-variables",dangerouslySetInnerHTML:{__html:l}}),d?(0,mt.jsx)("style",{id:"page-styles",dangerouslySetInnerHTML:{__html:d}}):null,f?(0,mt.jsx)("style",{id:"fonts-styles",dangerouslySetInnerHTML:{__html:f}}):null]})},ah=async r=>{var a;let{page:e,pageData:t={}}=r;return(0,mt.jsx)(eh,{jsonLD:(a=e==null?void 0:e.seo)==null?void 0:a.jsonLD,pageData:t})};var yh=require("lodash-es");Ge();Bt();var We=require("lodash-es");Ge();var ye=require("lodash-es");var qr=require("lodash-es"),bT=(r,e)=>{let t=null;for(let a of Object.keys(r))(0,qr.isString)(r[a])&&(0,qr.startsWith)(a,"content")&&(t||(t={...r}),t[a]=`${r[a].trim()}${e?" ":""}`);return t!=null?t:r},nh=r=>{let e=(0,qr.last)(r);return r.map(t=>bT(t,t!==e))};var le=require("lodash-es"),or=require("react");bo();Ge();go();var Vr=require("lodash-es");async function vl(r){let e={pageProps:r.pageProps,block:r.block,lang:r.lang,draft:r.draft,inBuilder:!1},t=await r.dataProvider(e);return(0,Vr.has)(t,"$metadata")&&(0,Vr.isFunction)(r.dataProviderMetadataCallback)&&r.dataProviderMetadataCallback(r.block,t.$metadata),r.children({...(0,Vr.omit)(t,"$metadata")})}co();var va=require("react/jsx-runtime"),TT=()=>(0,va.jsx)("div",{}),ih=r=>{var $;let{block:e,lang:t,fallbackLang:a,children:n,externalData:i,blocks:o,draft:l,pageProps:c,dataProviderMetadataCallback:d}=r,u=xe(e._type),g=(0,le.get)(u,"component",null),f=(0,le.get)(r.repeaterData,"index",-1),b=(0,le.get)(r.repeaterData,"dataKey",""),P=t===a?"":t!=null?t:"",E=Ga(pc(e,P,u),i!=null?i:{},{index:f,key:b}),C=gc(e,!1),x=oh(o,e._id,uc(e._type)),k=(0,le.has)(u,"dataProvider")&&(0,le.isFunction)(u.dataProvider),D={...E,...C,...x},B={blockProps:{},inBuilder:!1,lang:t||a||"en",draft:l!=null?l:!1,pageData:i!=null?i:{},...D},S=(0,le.get)(D,"_show",!0);if((0,le.isString)(S)&&S.startsWith("{{")&&(S=nc(S,i)!=="false"),(0,le.isNull)(g)||!S)return null;if(k){let z=(0,le.get)(u,"suspenseFallback",TT),ce=r.dataProviders?r.dataProviders[e._id]:void 0;return(0,va.jsx)(or.Suspense,{fallback:(0,or.createElement)(z),children:(0,va.jsx)(vl,{lang:t!=null?t:"",pageProps:c,block:D,dataProvider:ce?()=>ce:u.dataProvider,...d?{dataProviderMetadataCallback:d}:{},draft:l!=null?l:!1,children:jt=>{var O;return(0,or.createElement)(g,{...B,...jt},n({_id:e._id,_type:e._type,...(0,le.isArray)(E.repeaterItems)?{repeaterItems:yo(E.repeaterItems,e),$repeaterItemsKey:E.$repeaterItemsKey,repeaterTotalItems:(O=E.repeaterTotalItems)!=null?O:-1}:{}}))}})})}return(0,va.jsx)(or.Suspense,{children:(0,or.createElement)(g,{...B},n({_id:e._id,_type:e._type,...(0,le.isArray)(E.repeaterItems)?{repeaterItems:yo(E.repeaterItems,e),$repeaterItemsKey:E.$repeaterItemsKey,repeaterTotalItems:($=E.repeaterTotalItems)!=null?$:-1}:{}}))})};var Ji=require("react"),Qi=r=>{let{blocks:e,parent:t,repeaterData:a,type:n}=r,i=(0,ye.uniqBy)((0,ye.filter)(e,l=>(0,ye.has)(l,"_id")&&((0,ye.isEmpty)(t)?!l._parent:l._parent===t)),"_id"),o=l=>(0,ye.filter)(e,c=>c._parent===l).length>0;return(n==="Heading"||n==="Paragraph"||n==="Link"||n==="Span")&&(i=nh(i)),(0,ye.map)(i,(l,c)=>l?(0,Ji.createElement)(ih,{...r,key:l._id?`${l._id}-${c}`:`block-${c}`,block:l},({_id:d,_type:u,repeaterItems:g,$repeaterItemsKey:f})=>u==="Repeater"?(0,ye.isArray)(g)&&g.map((b,P)=>(0,Ji.createElement)(Qi,{...r,parent:l._id,key:`${(0,ye.get)(l,"_parent","root")}-${l._id}-${c}-${P}`,repeaterData:{index:P,dataKey:f}})):o(d)?(0,Ji.createElement)(Qi,{...r,parent:l._id,key:`${(0,ye.get)(l,"_parent","root")}-${l._id}-${c}`,repeaterData:a,type:l._type}):null):null)};var lh=require("react/jsx-runtime"),oh=(r,e,t)=>(0,We.isEmpty)(t)?{}:Object.entries(t).reduce((a,[n,i])=>{let o=[],l=(0,We.find)(r,{_id:e});for(;l;)o.push(l),l=(0,We.find)(r,{_id:l._parent});let c=(0,We.find)(o,{_type:i.block});return c&&(a[n]=(0,We.get)(c,(0,We.get)(i,"prop"),null)),a},{});function sh(r){var n,i;if((0,We.isEmpty)(r.lang)&&!(0,We.isEmpty)(r.fallbackLang))throw new Error("lang prop is required when fallbackLang is provided");if((0,We.isEmpty)(r.blocks))return null;let e=(n=r.lang)!=null?n:"en",t=(i=r.fallbackLang)!=null?i:e,a=La(r.blocks);return(0,lh.jsx)(Qi,{...r,blocks:a,lang:e,fallbackLang:t})}var Da=require("lodash-es"),ch=Q(require("next/link"),1),ph=Q(require("react"),1),Vt=require("react/jsx-runtime"),PT=r=>r.replace(/[^\d]/g,""),dh=r=>{let{blockProps:e,iconSize:t,icon:a,content:n,styles:i,children:o,iconPos:l,link:c,prefetchLink:d}=r,u=a,g=o||(0,Vt.jsxs)(Vt.Fragment,{children:[n&&(0,Vt.jsx)("span",{children:n}),u&&(0,Vt.jsx)("div",{style:{width:t+"px"},className:l+" "+(n?l==="order-first"?"mr-2":"ml-2":"")||"",dangerouslySetInnerHTML:{__html:u}})]}),f=ph.createElement("button",{...e,...i,type:"button","aria-label":n},g),b=(0,Da.get)(c,"href");if(!(0,Da.isEmpty)(b)){let P=(c==null?void 0:c.type)==="telephone"?`tel:${PT(b)}`:b;return(0,Vt.jsx)(ch.default,{"aria-label":n,href:P||"/",target:(0,Da.get)(c,"target","_self"),...d?{prefetch:!0}:{},children:f})}return f};var Xi=require("lodash-es"),gh=Q(require("next/image"),1),Dl=Q(require("react"),1),uh=r=>{var d;let{image:e,styles:t,alt:a,height:n,width:i,lazyLoading:o}=r,l=!i||!n||isNaN(parseInt(i))||isNaN(parseInt(n)),c=Dl.createElement(gh.default,{...t,src:(0,Xi.isArray)(e)?(d=(0,Xi.first)(e))==null?void 0:d.trimEnd():e==null?void 0:e.trimEnd(),alt:a||"",priority:!o,fill:l,height:l?void 0:parseInt(n),width:l?void 0:parseInt(i),style:l?{objectFit:"cover"}:void 0,unoptimized:!0});return l?Dl.createElement("div",{className:"relative flex w-full h-full"},c):c};var Bl=Q(require("next/link"),1),mh=Q(require("react"),1),fh=require("react/jsx-runtime"),AT=r=>r.replace(/[^\d]/g,""),hh=r=>{let{link:e,styles:t,children:a,content:n,prefetchLink:i}=r,o=(e==null?void 0:e.type)==="telephone"?`tel:${AT(e==null?void 0:e.href)}`:e==null?void 0:e.href;return a?(0,fh.jsx)(Bl.default,{href:o||"#/",target:e==null?void 0:e.target,"aria-label":n,...t,...i?{prefetch:!0}:{},children:a}):mh.createElement(Bl.default,{...t,href:o,target:(e==null?void 0:e.target)||"_self","aria-label":n,...i?{prefetch:!0}:{}},n)};var Th=require("react/jsx-runtime"),bh=async({pageData:r,settings:e,page:t,pageProps:a,linkComponent:n=hh,imageComponent:i=uh,buttonComponent:o=dh,designTokens:l={},withRenderPhase:c,dataProviders:d})=>{var P,E,C;let u=c!=null?c:(async(x,k)=>k());await u("RenderChaiBlocks.registerComponents",async()=>{zr("Link",await n),zr("Image",await i),zr("Button",await o)});let g=(P=e==null?void 0:e.designTokens)!=null?P:l,f=(C=(E=t.blocks)==null?void 0:E.length)!=null?C:0,b=await u("RenderChaiBlocks.applyDesignTokens",async()=>(0,yh.isEmpty)(g)?t.blocks:Wt(t.blocks,g),`blocks=${f}`);return u("RenderChaiBlocks.renderSDK",async()=>(0,Th.jsx)(sh,{externalData:r,blocks:b,fallbackLang:e==null?void 0:e.fallbackLang,lang:t.lang,pageProps:a,dataProviders:d}),`blocks=${f}`)};0&&(module.exports={ChaiPageCSS,ChaiPageJSONLD,RenderChaiBlocks,getChaiThemeCssVariables,getMergedPartialBlocks,getStylesForBlocks,getThemeFontsCSSImport,getThemeFontsLinkMarkup});