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.
- package/README.md +36 -0
- package/dist/IconPicker-I7VNLYZ4.js +5 -0
- package/dist/actions-DM00SIUk.d.cts +899 -0
- package/dist/actions-DM00SIUk.d.ts +899 -0
- package/dist/actions-registery-SEJTZE5Q.js +1 -0
- package/dist/active-in-another-tab-SONDAONP.js +1 -0
- package/dist/add-new-language-page-TI6DUYYX.js +1 -0
- package/dist/add-new-page-LBHXICXO.js +1 -0
- package/dist/ai-block-floating-prompt-input-ESY5GQLZ.js +1 -0
- package/dist/ai-panel-content-62I6FDQF.css +1 -0
- package/dist/ai-panel-content-UZJZ463W.js +1 -0
- package/dist/ai-panel-default-lang-2ZXZYQRT.js +6 -0
- package/dist/ai-panel-default-lang-ETFOFFEF.css +1 -0
- package/dist/ai-panel-for-image-LADQP6VY.js +1 -0
- package/dist/ai-panel-other-lang-WDLC3M2M.js +1 -0
- package/dist/ai-panel-page-chat-7ZISZWY4.js +4 -0
- package/dist/ai-panel-page-chat-N4YFJGAM.css +1 -0
- package/dist/ai-prompt-input-CPT5ETQ4.js +1 -0
- package/dist/ai-theme-generator-7PS4BX52.js +1 -0
- package/dist/ai-translation-prompt-3VE2ECGR.js +1 -0
- package/dist/blocks-CMvgDlxw.d.ts +72 -0
- package/dist/blocks-CP-Pngaz.d.cts +72 -0
- package/dist/build-config-CCERdThN.d.ts +80 -0
- package/dist/build-config-DrerOPd9.d.cts +80 -0
- package/dist/builder.cjs +243 -0
- package/dist/builder.css +1 -0
- package/dist/builder.d.cts +352 -0
- package/dist/builder.d.ts +352 -0
- package/dist/builder.js +1 -0
- package/dist/chaibuilder-instance-DNz3Q-dY.d.cts +579 -0
- package/dist/chaibuilder-instance-qroszVwI.d.ts +579 -0
- package/dist/change-password-modal-NJL7ZLTY.js +1 -0
- package/dist/chunk-2AFM6557.js +3 -0
- package/dist/chunk-2N4IJZOR.js +1 -0
- package/dist/chunk-2NYUIXUX.js +1 -0
- package/dist/chunk-2PJZUYIZ.js +1 -0
- package/dist/chunk-32HH35VD.js +1 -0
- package/dist/chunk-346H4FEX.js +1 -0
- package/dist/chunk-34HIOUTE.js +1 -0
- package/dist/chunk-374QEK4F.js +1 -0
- package/dist/chunk-3E72DJSP.js +1 -0
- package/dist/chunk-3IT7IIAV.js +1 -0
- package/dist/chunk-3UEPBBE4.js +11 -0
- package/dist/chunk-3XSKJBPH.js +1 -0
- package/dist/chunk-45ELAD2J.js +1 -0
- package/dist/chunk-4JBHWPMO.js +1 -0
- package/dist/chunk-4P25MV5E.js +1 -0
- package/dist/chunk-4PQNBY3V.js +1 -0
- package/dist/chunk-4VNLL2IA.js +1 -0
- package/dist/chunk-55SU3QPU.js +1 -0
- package/dist/chunk-5ZC65NB6.js +1 -0
- package/dist/chunk-6M7V7BOM.js +1 -0
- package/dist/chunk-6TXCHU4K.js +1 -0
- package/dist/chunk-777N6WHB.js +1 -0
- package/dist/chunk-7C4EQOAR.js +12 -0
- package/dist/chunk-7EXZXKW2.js +1 -0
- package/dist/chunk-7QWMLDCG.js +1 -0
- package/dist/chunk-AOJE5WI3.js +1 -0
- package/dist/chunk-ATLMLDBS.js +1 -0
- package/dist/chunk-AVGF3YLU.js +17 -0
- package/dist/chunk-BQSLQHLD.js +1 -0
- package/dist/chunk-BWORNCTE.js +1 -0
- package/dist/chunk-BYGD5CDT.js +1 -0
- package/dist/chunk-CA5PVX24.js +1 -0
- package/dist/chunk-CFNOB42V.js +1 -0
- package/dist/chunk-CJP3BQH2.js +1 -0
- package/dist/chunk-CRJENCPR.js +1 -0
- package/dist/chunk-D5SKCKSB.js +1 -0
- package/dist/chunk-DZ72OHTD.js +1 -0
- package/dist/chunk-EPGOG22Q.js +0 -0
- package/dist/chunk-ERCY63ZW.js +1 -0
- package/dist/chunk-ESCX7KEH.js +1 -0
- package/dist/chunk-F2V4N3LT.js +156 -0
- package/dist/chunk-F7YMHPEA.js +1 -0
- package/dist/chunk-FERH2TPR.js +1 -0
- package/dist/chunk-FLSV2QGU.js +1 -0
- package/dist/chunk-FOKGOT6B.js +1 -0
- package/dist/chunk-GJOOCKUE.js +1 -0
- package/dist/chunk-HA7LF3RV.js +1 -0
- package/dist/chunk-HAKJOMCL.js +1 -0
- package/dist/chunk-HEKCKC7N.js +1 -0
- package/dist/chunk-HELRVKD2.js +3 -0
- package/dist/chunk-I7ODKVVX.js +1 -0
- package/dist/chunk-IAKCX2WB.js +1 -0
- package/dist/chunk-IB2C3TWH.js +1 -0
- package/dist/chunk-IH562KSP.js +1 -0
- package/dist/chunk-IP4JBQOX.js +1 -0
- package/dist/chunk-ITX7QWN6.js +1 -0
- package/dist/chunk-IUACZ3E6.js +6 -0
- package/dist/chunk-J7Q62EP7.js +1 -0
- package/dist/chunk-JBB5IJFA.js +1 -0
- package/dist/chunk-JPJRO4NU.js +1 -0
- package/dist/chunk-JUIS55JT.js +1 -0
- package/dist/chunk-JYBTQ3YX.js +5 -0
- package/dist/chunk-K5YWQY4U.js +1 -0
- package/dist/chunk-K6RHR4HT.js +1 -0
- package/dist/chunk-LNV5MRGV.js +1 -0
- package/dist/chunk-LRJREWRD.js +1 -0
- package/dist/chunk-LWYDGDPW.js +1 -0
- package/dist/chunk-MDMGXS5B.js +1 -0
- package/dist/chunk-MEROMQQX.js +1 -0
- package/dist/chunk-N7Z4RFFI.js +1 -0
- package/dist/chunk-NSQEQYEM.js +1 -0
- package/dist/chunk-OD3K76M6.js +1 -0
- package/dist/chunk-ODSL3KXG.js +1 -0
- package/dist/chunk-OJJDRACB.js +1 -0
- package/dist/chunk-ONSZ462E.js +1 -0
- package/dist/chunk-OQZ4EPOM.js +1 -0
- package/dist/chunk-OR7KKUYT.js +1 -0
- package/dist/chunk-OSGXFZTA.js +1 -0
- package/dist/chunk-PM3JNOZH.js +1 -0
- package/dist/chunk-PQHFT4TE.js +1 -0
- package/dist/chunk-QGVCH2NI.js +1 -0
- package/dist/chunk-QIGSSVEY.js +1 -0
- package/dist/chunk-R5ZTCDFD.js +1 -0
- package/dist/chunk-RBDZDQZR.js +1 -0
- package/dist/chunk-ROQRBSK6.js +1 -0
- package/dist/chunk-SSENH35Y.js +1 -0
- package/dist/chunk-SYPALJAE.js +1 -0
- package/dist/chunk-T2YYNX6Z.js +1 -0
- package/dist/chunk-T32TW3XV.js +1 -0
- package/dist/chunk-T56KQBE2.js +1 -0
- package/dist/chunk-TEL5ACJE.js +1 -0
- package/dist/chunk-TGJQC6VC.js +1 -0
- package/dist/chunk-TQ34DGOT.js +1 -0
- package/dist/chunk-TVF77C53.js +1 -0
- package/dist/chunk-UIDBBTCZ.js +3 -0
- package/dist/chunk-VKSRWZCO.js +1 -0
- package/dist/chunk-VL5WBPVV.js +1 -0
- package/dist/chunk-VUWHFLT7.js +22 -0
- package/dist/chunk-WEVKAJMV.js +1 -0
- package/dist/chunk-WHPIYGCY.js +1 -0
- package/dist/chunk-WNESLH23.js +1 -0
- package/dist/chunk-WOT6VMZA.js +1 -0
- package/dist/chunk-WSQ5SQBD.js +1 -0
- package/dist/chunk-XY4UJKHE.js +1 -0
- package/dist/chunk-Y2BHO7OO.js +1 -0
- package/dist/chunk-YDOQEFOK.js +1 -0
- package/dist/chunk-YEFMD4DS.js +1 -0
- package/dist/chunk-YQ5QQCRD.js +1 -0
- package/dist/chunk-YQPOFRXU.js +1 -0
- package/dist/chunk-YTPQSO7V.js +801 -0
- package/dist/chunk-ZAU65LBG.js +1 -0
- package/dist/chunk-ZRFCEMYU.js +1 -0
- package/dist/chunk-ZU2B5YT6.js +1 -0
- package/dist/chunk-ZXKKBKGV.js +1 -0
- package/dist/code-display-7346IUCO.js +1 -0
- package/dist/code-editor-UBGTTX2L.js +1 -0
- package/dist/components/ui/accordion.cjs +1 -0
- package/dist/components/ui/accordion.d.cts +9 -0
- package/dist/components/ui/accordion.d.ts +9 -0
- package/dist/components/ui/accordion.js +1 -0
- package/dist/components/ui/alert-dialog.cjs +1 -0
- package/dist/components/ui/alert-dialog.d.cts +23 -0
- package/dist/components/ui/alert-dialog.d.ts +23 -0
- package/dist/components/ui/alert-dialog.js +1 -0
- package/dist/components/ui/alert.cjs +1 -0
- package/dist/components/ui/alert.d.cts +11 -0
- package/dist/components/ui/alert.d.ts +11 -0
- package/dist/components/ui/alert.js +1 -0
- package/dist/components/ui/avatar.cjs +1 -0
- package/dist/components/ui/avatar.d.cts +8 -0
- package/dist/components/ui/avatar.d.ts +8 -0
- package/dist/components/ui/avatar.js +1 -0
- package/dist/components/ui/badge.cjs +1 -0
- package/dist/components/ui/badge.d.cts +13 -0
- package/dist/components/ui/badge.d.ts +13 -0
- package/dist/components/ui/badge.js +1 -0
- package/dist/components/ui/button.cjs +1 -0
- package/dist/components/ui/button.d.cts +15 -0
- package/dist/components/ui/button.d.ts +15 -0
- package/dist/components/ui/button.js +1 -0
- package/dist/components/ui/card.cjs +1 -0
- package/dist/components/ui/card.d.cts +10 -0
- package/dist/components/ui/card.d.ts +10 -0
- package/dist/components/ui/card.js +1 -0
- package/dist/components/ui/checkbox.cjs +1 -0
- package/dist/components/ui/checkbox.d.cts +6 -0
- package/dist/components/ui/checkbox.d.ts +6 -0
- package/dist/components/ui/checkbox.js +1 -0
- package/dist/components/ui/command.cjs +1 -0
- package/dist/components/ui/command.d.cts +83 -0
- package/dist/components/ui/command.d.ts +83 -0
- package/dist/components/ui/command.js +1 -0
- package/dist/components/ui/context-menu.cjs +1 -0
- package/dist/components/ui/context-menu.d.cts +30 -0
- package/dist/components/ui/context-menu.d.ts +30 -0
- package/dist/components/ui/context-menu.js +1 -0
- package/dist/components/ui/dialog.cjs +1 -0
- package/dist/components/ui/dialog.d.cts +22 -0
- package/dist/components/ui/dialog.d.ts +22 -0
- package/dist/components/ui/dialog.js +1 -0
- package/dist/components/ui/dropdown-menu.cjs +1 -0
- package/dist/components/ui/dropdown-menu.d.cts +30 -0
- package/dist/components/ui/dropdown-menu.d.ts +30 -0
- package/dist/components/ui/dropdown-menu.js +1 -0
- package/dist/components/ui/hover-card.cjs +1 -0
- package/dist/components/ui/hover-card.d.cts +8 -0
- package/dist/components/ui/hover-card.d.ts +8 -0
- package/dist/components/ui/hover-card.js +1 -0
- package/dist/components/ui/input.cjs +1 -0
- package/dist/components/ui/input.d.cts +5 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/components/ui/input.js +1 -0
- package/dist/components/ui/label.cjs +1 -0
- package/dist/components/ui/label.d.cts +8 -0
- package/dist/components/ui/label.d.ts +8 -0
- package/dist/components/ui/label.js +1 -0
- package/dist/components/ui/loader.cjs +1 -0
- package/dist/components/ui/loader.d.cts +12 -0
- package/dist/components/ui/loader.d.ts +12 -0
- package/dist/components/ui/loader.js +1 -0
- package/dist/components/ui/navigation-menu.cjs +1 -0
- package/dist/components/ui/navigation-menu.d.cts +15 -0
- package/dist/components/ui/navigation-menu.d.ts +15 -0
- package/dist/components/ui/navigation-menu.js +1 -0
- package/dist/components/ui/popover.cjs +1 -0
- package/dist/components/ui/popover.d.cts +9 -0
- package/dist/components/ui/popover.d.ts +9 -0
- package/dist/components/ui/popover.js +1 -0
- package/dist/components/ui/progress.cjs +1 -0
- package/dist/components/ui/progress.d.cts +8 -0
- package/dist/components/ui/progress.d.ts +8 -0
- package/dist/components/ui/progress.js +1 -0
- package/dist/components/ui/scroll-area.cjs +1 -0
- package/dist/components/ui/scroll-area.d.cts +7 -0
- package/dist/components/ui/scroll-area.d.ts +7 -0
- package/dist/components/ui/scroll-area.js +1 -0
- package/dist/components/ui/select.cjs +1 -0
- package/dist/components/ui/select.d.cts +15 -0
- package/dist/components/ui/select.d.ts +15 -0
- package/dist/components/ui/select.js +1 -0
- package/dist/components/ui/separator.cjs +1 -0
- package/dist/components/ui/separator.d.cts +6 -0
- package/dist/components/ui/separator.d.ts +6 -0
- package/dist/components/ui/separator.js +1 -0
- package/dist/components/ui/sheet.cjs +1 -0
- package/dist/components/ui/sheet.d.cts +29 -0
- package/dist/components/ui/sheet.d.ts +29 -0
- package/dist/components/ui/sheet.js +1 -0
- package/dist/components/ui/skeleton.cjs +1 -0
- package/dist/components/ui/skeleton.d.cts +5 -0
- package/dist/components/ui/skeleton.d.ts +5 -0
- package/dist/components/ui/skeleton.js +1 -0
- package/dist/components/ui/slider.cjs +1 -0
- package/dist/components/ui/slider.d.cts +6 -0
- package/dist/components/ui/slider.d.ts +6 -0
- package/dist/components/ui/slider.js +1 -0
- package/dist/components/ui/switch.cjs +1 -0
- package/dist/components/ui/switch.d.cts +9 -0
- package/dist/components/ui/switch.d.ts +9 -0
- package/dist/components/ui/switch.js +1 -0
- package/dist/components/ui/tabs.cjs +1 -0
- package/dist/components/ui/tabs.d.cts +9 -0
- package/dist/components/ui/tabs.d.ts +9 -0
- package/dist/components/ui/tabs.js +1 -0
- package/dist/components/ui/textarea.cjs +1 -0
- package/dist/components/ui/textarea.d.cts +5 -0
- package/dist/components/ui/textarea.d.ts +5 -0
- package/dist/components/ui/textarea.js +1 -0
- package/dist/components/ui/toggle.cjs +1 -0
- package/dist/components/ui/toggle.d.cts +15 -0
- package/dist/components/ui/toggle.d.ts +15 -0
- package/dist/components/ui/toggle.js +1 -0
- package/dist/components/ui/tooltip.cjs +1 -0
- package/dist/components/ui/tooltip.d.cts +9 -0
- package/dist/components/ui/tooltip.d.ts +9 -0
- package/dist/components/ui/tooltip.js +1 -0
- package/dist/config-registry-RSJCAKY5.js +1 -0
- package/dist/continue-editing-in-this-client-QBMOFRLL.js +1 -0
- package/dist/core-BNe4bA6z.d.cts +5455 -0
- package/dist/core-BNe4bA6z.d.ts +5455 -0
- package/dist/css-import-modal-NMFRQGCY.js +13 -0
- package/dist/db/better-sqlite3.cjs +1 -0
- package/dist/db/better-sqlite3.d.cts +16 -0
- package/dist/db/better-sqlite3.d.ts +16 -0
- package/dist/db/better-sqlite3.js +1 -0
- package/dist/db/d1.cjs +1 -0
- package/dist/db/d1.d.cts +17 -0
- package/dist/db/d1.d.ts +17 -0
- package/dist/db/d1.js +1 -0
- package/dist/db/libsql.cjs +1 -0
- package/dist/db/libsql.d.cts +23 -0
- package/dist/db/libsql.d.ts +23 -0
- package/dist/db/libsql.js +1 -0
- package/dist/db/node-pg.cjs +1 -0
- package/dist/db/node-pg.d.cts +21 -0
- package/dist/db/node-pg.d.ts +21 -0
- package/dist/db/node-pg.js +1 -0
- package/dist/db/postgres.cjs +1 -0
- package/dist/db/postgres.d.cts +28 -0
- package/dist/db/postgres.d.ts +28 -0
- package/dist/db/postgres.js +1 -0
- package/dist/delete-page-CGR6VXZC.css +1 -0
- package/dist/delete-page-FQYTEMBN.js +1 -0
- package/dist/digital-asset-manager-PIZMJEMX.js +1 -0
- package/dist/digital-asset-manager-PSTDGMY2.css +1 -0
- package/dist/dispatch-action-3IV56BNY.js +1 -0
- package/dist/duplicate-page-HPPMQRL3.js +1 -0
- package/dist/dynamic-page-selector-LFHJQLYY.js +1 -0
- package/dist/dynamic-page-selector-SXJQAIGL.css +1 -0
- package/dist/edit-url-panel-Q3NJCV55.js +1 -0
- package/dist/get-blocks-styles-SLZ5NDUF.js +1 -0
- package/dist/get-page-styles-Q4FWW5LX.js +1 -0
- package/dist/image-editor-PLXDYVKE.css +1 -0
- package/dist/image-editor-RSEHWRGV.js +1 -0
- package/dist/json-diff-viewer-FQYK2FUX.js +8 -0
- package/dist/lang-panel-57UGEL6B.css +1 -0
- package/dist/lang-panel-HH5LEOF4.js +1 -0
- package/dist/license-overlay-4Q525E53.js +1 -0
- package/dist/log-ai-request-LHPKU2C5.js +1 -0
- package/dist/manage-design-tokens-264H25A2.js +1 -0
- package/dist/manage-design-tokens-modal-OIWIZ53K.js +1 -0
- package/dist/mark-as-template-7TCCEMGC.js +1 -0
- package/dist/nested-path-selector-content-N4XN7QUS.js +1 -0
- package/dist/nextjs/render-client.cjs +1 -0
- package/dist/nextjs/render-client.css +1 -0
- package/dist/nextjs/render-client.d.cts +14 -0
- package/dist/nextjs/render-client.d.ts +14 -0
- package/dist/nextjs/render-client.js +1 -0
- package/dist/nextjs/render.cjs +829 -0
- package/dist/nextjs/render.d.cts +78 -0
- package/dist/nextjs/render.d.ts +78 -0
- package/dist/nextjs/render.js +1 -0
- package/dist/nextjs/server.cjs +807 -0
- package/dist/nextjs/server.d.cts +329 -0
- package/dist/nextjs/server.d.ts +329 -0
- package/dist/nextjs/server.js +1 -0
- package/dist/nextjs.cjs +1 -0
- package/dist/nextjs.d.cts +17 -0
- package/dist/nextjs.d.ts +17 -0
- package/dist/nextjs.js +1 -0
- package/dist/no-language-page-content-NQIROTIL.js +1 -0
- package/dist/no-language-page-dialog-CWG5PI7N.js +1 -0
- package/dist/page-creator-2L6L6EFV.js +1 -0
- package/dist/page-lock-7HMG34UJ.js +1 -0
- package/dist/page-locked-dialog-ACMWVAZX.js +1 -0
- package/dist/page-manager-new-SCZFNGKO.js +1 -0
- package/dist/page-manager-new-VWRASZTI.css +1 -0
- package/dist/page-manager-search-and-filter-7CHPYAPV.js +1 -0
- package/dist/page-manager-sheet-KZZBKQ6M.js +1 -0
- package/dist/page-manager-sheet-U5YEB5CS.css +1 -0
- package/dist/page-revisions-content-DHPEQ4CA.js +1 -0
- package/dist/page-revisions-trigger-XGC4HOTL.js +1 -0
- package/dist/pages-DlMX1Lj2.d.cts +21 -0
- package/dist/pages-Dol4CXrN.d.ts +21 -0
- package/dist/payload/builder.cjs +243 -0
- package/dist/payload/builder.css +1 -0
- package/dist/payload/builder.d.cts +13 -0
- package/dist/payload/builder.d.ts +13 -0
- package/dist/payload/builder.js +1 -0
- package/dist/payload.cjs +807 -0
- package/dist/payload.d.cts +603 -0
- package/dist/payload.d.ts +603 -0
- package/dist/payload.js +1 -0
- package/dist/preview-banner-SDDZGGRW.js +1 -0
- package/dist/publish-pages-content-3AZ45DYH.js +1 -0
- package/dist/registry.cjs +11 -0
- package/dist/registry.d.cts +74 -0
- package/dist/registry.d.ts +74 -0
- package/dist/registry.js +1 -0
- package/dist/relations-DDBTFCMR.js +1 -0
- package/dist/revalidate-G2DEOH4Z.js +1 -0
- package/dist/rte-widget-modal-7RXFEYHK.js +1 -0
- package/dist/save-to-lib-65EGTZE5.js +1 -0
- package/dist/schema-IVNMPI4V.js +1 -0
- package/dist/schema.sqlite-CYBLikNv.d.cts +5852 -0
- package/dist/schema.sqlite-CYBLikNv.d.ts +5852 -0
- package/dist/seo-panel-WQ47FNP4.css +1 -0
- package/dist/seo-panel-Z6OBXHQ4.js +2 -0
- package/dist/server-config-b29G6_aQ.d.cts +116 -0
- package/dist/server-config-oPlt3V1X.d.ts +116 -0
- package/dist/state-RAP56WXS.js +1 -0
- package/dist/take-over-request-EB464ZGU.js +1 -0
- package/dist/translation-warning-modal-EES6I2QV.js +1 -0
- package/dist/types.cjs +1 -0
- package/dist/types.d.cts +38 -0
- package/dist/types.d.ts +38 -0
- package/dist/types.js +1 -0
- package/dist/unmark-as-template-6STMTBP5.js +1 -0
- package/dist/unpublish-page-CE3CJK5C.js +1 -0
- package/dist/unpublished-partials-modal-OZBWBCLN.js +1 -0
- package/dist/utils.cjs +1 -0
- package/dist/utils.d.cts +168 -0
- package/dist/utils.d.ts +168 -0
- package/dist/utils.js +1 -0
- package/dist/web-blocks.cjs +1 -0
- package/dist/web-blocks.d.cts +3 -0
- package/dist/web-blocks.d.ts +3 -0
- package/dist/web-blocks.js +1 -0
- package/dist/web-preview-EIWOXGPY.js +1 -0
- package/package.json +322 -0
package/dist/payload.cjs
ADDED
|
@@ -0,0 +1,807 @@
|
|
|
1
|
+
"use strict";var Ey=Object.create;var un=Object.defineProperty;var xy=Object.getOwnPropertyDescriptor;var Iy=Object.getOwnPropertyNames;var Sy=Object.getPrototypeOf,Ry=Object.prototype.hasOwnProperty;var T=(t,e)=>()=>(t&&(e=t(t=0)),e);var rt=(t,e)=>{for(var r in e)un(t,r,{get:e[r],enumerable:!0})},Vc=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Iy(e))!Ry.call(t,n)&&n!==r&&un(t,n,{get:()=>e[n],enumerable:!(a=xy(e,n))||a.enumerable});return t};var te=(t,e,r)=>(r=t!=null?Ey(Sy(t)):{},Vc(e||!t||!t.__esModule?un(r,"default",{value:t,enumerable:!0}):r,t)),vy=t=>Vc(un({},"__esModule",{value:!0}),t);var yr={};rt(yr,{aiAddonPurchases:()=>fa,aiCreditAddons:()=>ha,aiLogs:()=>ar,appApiKeys:()=>la,appAssets:()=>ya,appDomains:()=>ua,appFormSubmissions:()=>ga,appPages:()=>Ct,appPagesMetadata:()=>qy,appPagesOnline:()=>Ca,appPagesRevisions:()=>Pa,appTrash:()=>Aa,appUserAddons:()=>Ta,appUserPlans:()=>da,appUsers:()=>ma,apps:()=>U,appsOnline:()=>ca,clientUsers:()=>ba,clients:()=>$,invitedUsers:()=>rr,libraries:()=>at,libraryItems:()=>Ea,libraryTemplates:()=>wa,roles:()=>Hy,webhookEvents:()=>pa});var np,p,ap,Y,la,rr,U,ca,at,pa,da,$,ga,ua,ma,Hy,Ct,ha,fa,ya,ba,Ta,Aa,Pa,wa,Ca,Ea,ar,qy,xa=T(()=>{"use strict";np=require("drizzle-orm"),p=require("drizzle-orm/pg-core"),ap=process.env.CHAIBUILDER_POSTGRESS_SCHEMA,Y=ap?(0,p.pgSchema)(ap).table:p.pgTable,la=Y("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")},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"app_api_keys_app_fkey"})]),rr=Y("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)()},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"invited_users_app_fkey"}),(0,p.foreignKey)({columns:[t.client],foreignColumns:[$.id],name:"invited_users_client_fkey"})]),U=Y("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({})},t=>[(0,p.foreignKey)({columns:[t.client],foreignColumns:[$.id],name:"apps_client_fkey"})]),ca=Y("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({})},t=>[(0,p.foreignKey)({columns:[t.client],foreignColumns:[$.id],name:"apps_online_client_fkey"})]),at=Y("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)()},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"libraries_app_fkey"})]),pa=Y("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)()},t=>[(0,p.foreignKey)({columns:[t.clientId],foreignColumns:[$.id],name:"webhook_events_clientId_fkey"})]),da=Y("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)},t=>[(0,p.foreignKey)({columns:[t.client],foreignColumns:[$.id],name:"app_user_plans_client_fkey"})]),$=Y("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:""}}})}),ga=Y("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)()},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"app_form_submissions_app_fkey"})]),ua=Y("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)},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"app_domains_app_fkey"})]),ma=Y("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()},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"app_users_app_fkey"})]),Hy=Y("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()},t=>[(0,p.unique)("roles_name_unique").on(t.name)]),Ct=Y("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({})},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"app_pages_app_fkey"}),(0,p.foreignKey)({columns:[t.parent],foreignColumns:[t.id],name:"app_pages_parent_fkey"}),(0,p.index)("idx_app_pages_app_slug").on(t.app,t.slug)]),ha=Y("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()},t=>[(0,p.index)("ai_credit_addons_status_idx").using("btree",t.status.asc().nullsLast().op("text_ops")),(0,p.index)("ai_credit_addons_user_idx").using("btree",t.user.asc().nullsLast().op("text_ops")),(0,p.foreignKey)({columns:[t.client],foreignColumns:[$.id],name:"ai_credit_addons_client_fkey"})]),fa=Y("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({})},t=>[(0,p.index)("ai_addon_purchases_user_idx").using("btree",t.user.asc().nullsLast().op("text_ops")),(0,p.foreignKey)({columns:[t.client],foreignColumns:[$.id],name:"ai_addon_purchases_client_fkey"})]),ya=Y("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)()},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"app_assets_app_fkey"})]),ba=Y("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({})},t=>[(0,p.foreignKey)({columns:[t.client],foreignColumns:[$.id],name:"client_users_client_fkey"}),(0,p.unique)("client_users_user_client_unique").on(t.user,t.client)]),Ta=Y("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")},t=>[(0,p.foreignKey)({columns:[t.client],foreignColumns:[$.id],name:"app_user_addons_client_fkey"})]),Aa=Y("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)()},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"trash_app_fkey"})]),Pa=Y("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({})},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"app_pages_revisions_app_fkey"})]),wa=Y("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)()},t=>[(0,p.foreignKey)({columns:[t.library],foreignColumns:[at.id],name:"library_templates_library_fkey"})]),Ca=Y("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({})},t=>[(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"app_pages_online_app_fkey"}),(0,p.index)("idx_app_pages_online_app_slug").on(t.app,t.slug)]),Ea=Y("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)()},t=>[(0,p.foreignKey)({columns:[t.library],foreignColumns:[at.id],name:"library_items_library_fkey"})]),ar=Y("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(np.sql`'0'`),prompt:(0,p.text)(),app:(0,p.uuid)(),creditSource:(0,p.text)().default("monthly"),addonId:(0,p.uuid)()},t=>[(0,p.index)("ai_logs_addon_id_idx").using("btree",t.addonId.asc().nullsLast().op("uuid_ops")),(0,p.index)("ai_logs_credit_source_idx").using("btree",t.creditSource.asc().nullsLast().op("text_ops")),(0,p.foreignKey)({columns:[t.app],foreignColumns:[U.id],name:"ai_logs_app_fkey"}),(0,p.foreignKey)({columns:[t.client],foreignColumns:[$.id],name:"ai_logs_client_fkey"})]),qy=Y("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()},t=>[(0,p.primaryKey)({columns:[t.slug,t.app],name:"app_pages_metadata_pkey"})])});function ip(){Ia&&Ia(),nr=null,En=null,xn="pg",Ia=null}function Sa(t){var e,r,a,n;if(!(t!=null&&t.drizzle))throw new Error("ChaiBuilder: invalid `db` setup. Pass `db: createPostgresDB(...)` (or libsql/d1/better-sqlite3).");if(nr!==null&&nr===t.drizzle){En=t.schema,xn=(e=t.dialect)!=null?e:"pg",Ia=(r=t.teardown)!=null?r:null;return}ip(),nr=t.drizzle,En=t.schema,xn=(a=t.dialect)!=null?a:"pg",Ia=(n=t.teardown)!=null?n:null}function ns(){return xn}function is(){ip()}async function os(){if(!nr)throw new Error("ChaiBuilder database was not initialized. Pass `db` to `buildChaiBuilderConfig` (`db: createPostgresDB(...)`, `createLibsqlDB(...)`, etc.).")}function In(){if(!nr)throw new Error("ChaiBuilder database was not initialized. Pass `db` to `buildChaiBuilderConfig` (`db: createPostgresDB(...)`, `createLibsqlDB(...)`, etc.).");return nr}async function b(t){try{return{data:await t(),error:null}}catch(e){return{data:null,error:e}}}var nr,En,xn,Ia,y,s,Sn=T(()=>{"use strict";xa();nr=null,En=null,xn="pg",Ia=null;y=new Proxy({},{get(t,e){return In()[e]}});s=new Proxy({},{get(t,e){return(En||yr)[e]}})});var ee,zy,ir,Ra,nt,Rn,op,jy,sp,Vy,Wy,Ky,lp,vn=T(()=>{"use strict";ee=require("lodash-es"),zy=require("react"),ir={},Ra=()=>ir,nt=t=>(0,ee.get)(ir,t),Rn=t=>{let e=(0,ee.memoize)(t),r=(a=>(0,ee.has)(ir,a)?e(a):t(a));return r.cache=e.cache,r},op=Rn(t=>{var i,o;let e=(0,ee.get)(ir,t),r=(o=(i=e==null?void 0:e.props)==null?void 0:i.schema)!=null?o:{},a=(0,ee.get)(r,"properties",{}),n={};return(0,ee.each)(a,(l,c)=>{(0,ee.has)(l,"block")||(0,ee.set)(n,c,l.default)}),n}),jy=Rn(t=>(0,ee.get)(ir,`${t}.i18nProps`,[])),sp=Rn(t=>(0,ee.get)(ir,`${t}.aiProps`,[])),Vy=Rn(t=>{var c,d,u,g;let e=nt(t);if(!e)return;let r=(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,ee.cloneDeep)(r),i=(0,ee.get)(n,"properties",{}),o=(0,ee.omitBy)(i,h=>(h==null?void 0:h.styles)===!0);return(0,ee.set)(n,"properties",o),{schema:n,uiSchema:a||{}}}),Wy=[op,jy,sp,Vy],Ky=t=>{for(let e of Wy)e.cache.delete(t)},lp=(t,e)=>{var a;let r=nt(t);(0,ee.set)(ir,t,{...r,type:(a=r==null?void 0:r.type)!=null?a:t,dataProvider:e}),Ky(t)}});var _=T(()=>{"use strict";Sn()});var I,lw,_n=T(()=>{"use strict";I={"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"},lw=Object.keys(I)});var Ot,or=T(()=>{"use strict";Ot="#styles:"});var va,cp=T(()=>{"use strict";va=require("lodash-es");Ft()});var pp=T(()=>{"use strict";cp()});var dp=T(()=>{"use strict";vn();pp()});var br,Ft=T(()=>{"use strict";br=require("lodash-es");or();dp()});var gp,kn,Dn=T(()=>{"use strict";gp=require("lodash-es");Ft();kn=(t,e)=>{let r=t==null?void 0:t.pageTypes;return!Array.isArray(r)||r.length===0?!0:r.includes(e)}});function Tr(...t){return(0,mp.twMerge)((0,up.clsx)(t))}var up,mp,ss=T(()=>{"use strict";up=require("cnfast"),mp=require("cnfast")});var Ut,_a=T(()=>{"use strict";ss();Ut={"dt#btn":{name:"Button",description:"Base button styles",value:Tr("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:Tr("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:Tr("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:Tr("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0","bg-transparent h-9 px-2 min-w-9")},"dt#toggle-outline":{name:"Toggle-Outline",description:"Outline toggle style",value:"border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground"},"dt#toggle-sm":{name:"Toggle-Small",description:"Small toggle style",value:"h-8 px-1.5 min-w-8"},"dt#toggle-lg":{name:"Toggle-Large",description:"Large toggle style",value:"h-10 px-2.5 min-w-10"},"dt#label":{name:"Label",description:"Form label style",value:"text-xs font-light leading-none text-foreground/80 dark:text-foreground/60 peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},"dt#checkbox":{name:"Checkbox",description:"Checkbox style",value:"peer h-4 w-4 shrink-0 cursor-pointer rounded-sm border border-border hover:border-foreground/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground"},"dt#switch":{name:"Switch",description:"Switch toggle style",value:"peer inline-flex h-4 w-[25px] cursor-pointer items-center rounded-full bg-muted transition-colors focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary dark:data-[state=unchecked]:bg-background"},"dt#switch-thumb":{name:"Switch-Thumb",description:"Switch thumb style",value:"pointer-events-none block h-3 w-3 rounded-full bg-secondary shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-3 data-[state=unchecked]:translate-x-0.5"},"dt#skeleton":{name:"Skeleton",description:"Loading skeleton style",value:"animate-pulse rounded-md bg-primary/10"},"dt#separator":{name:"Separator",description:"Horizontal separator style",value:"shrink-0 bg-border h-[1px] w-full"},"dt#separator-vertical":{name:"Separator-Vertical",description:"Vertical separator style",value:"shrink-0 bg-border h-full w-[1px]"},"dt#progress":{name:"Progress",description:"Progress bar container style",value:"relative h-2 w-full overflow-hidden rounded-full bg-primary/20"},"dt#progress-indicator":{name:"Progress-Indicator",description:"Progress bar indicator style",value:"h-full bg-primary transition-all duration-300"}}});var m,N=T(()=>{"use strict";m=class extends Error{constructor(r,a="ACTION_ERROR",n=400,i,o){super(r);this.code=a;this.status=n;this.error=i;this.metadata=o;this.name="ActionError",i&&console.error(i)}}});function mt(t){throw new m(t.message,t.code,t.statusCode)}var Bn=T(()=>{"use strict";N()});var We,Nn=T(()=>{"use strict";We=class extends Error{constructor(r,a="UNKNOWN_ERROR",n=500,i){super(r);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 Qy,hp,Xy,ls,fp=T(()=>{"use strict";Qy=`
|
|
2
|
+
# ANIMATION RULES
|
|
3
|
+
- Add \`data-animation\` attribute to elements when appropriate to add entry animations on scroll.
|
|
4
|
+
- **Do not overuse animations.** Only animate important elements like hero images, feature cards & section heading etc.
|
|
5
|
+
- The format MUST exactly be: \`data-animation="ANIMATION|EASING|DURATION|DELAY|TIME"\`
|
|
6
|
+
- **ANIMATION**: fade-in, slide-up, slide-down, slide-left, slide-right, zoom-in, zoom-out, flip-x, flip-y, rotate-in
|
|
7
|
+
- **EASING**: linear, ease-in, ease-out, ease-in-out
|
|
8
|
+
- **DURATION**: in milliseconds (e.g., 500, 700, 1000)
|
|
9
|
+
- **DELAY**: in milliseconds (e.g., 0, 200, 300) so that the animation starts after a delay and not immediately
|
|
10
|
+
- **TIME**: once (plays once) or infinite (repeats every time it enters the viewport)
|
|
11
|
+
- Example: \`<div data-animation="slide-up|ease-in-out|500|300|once" class="...">\`
|
|
12
|
+
`,hp='\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',Xy=`\u{1F6A8} CRITICAL FORMAT REQUIREMENT: Your response MUST start with '--START--' immediately. NEVER include any text, thinking, or reasoning before '--START--'. \u{1F6A8}
|
|
13
|
+
|
|
14
|
+
# 1. RESPONSE FORMAT RULES (ALWAYS OBEY FIRST)
|
|
15
|
+
|
|
16
|
+
Every response MUST follow this structure:
|
|
17
|
+
|
|
18
|
+
--START--
|
|
19
|
+
--THINKING={short plain-language reasoning}
|
|
20
|
+
(one or more ACTION blocks: ADD / EDIT / REMOVE)
|
|
21
|
+
--END--
|
|
22
|
+
|
|
23
|
+
Rules:
|
|
24
|
+
- The VERY FIRST characters must be '--START--'.
|
|
25
|
+
- '--THINKING=' must appear immediately after '--START--'.
|
|
26
|
+
- No commentary, markdown, or text outside '--START--' and '--END--'.
|
|
27
|
+
- Use simple natural language in THINKING. Do NOT mention ids, attributes, DOM, HTML tags, or technical terms.
|
|
28
|
+
- If no action is required, still output:
|
|
29
|
+
--START--
|
|
30
|
+
--THINKING={why no changes needed}
|
|
31
|
+
--END--
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# 2. ACTION FORMAT DEFINITIONS (MANDATORY)
|
|
35
|
+
|
|
36
|
+
### ADD Action
|
|
37
|
+
Used to insert new HTML.
|
|
38
|
+
Do not add bid attribute to any element.
|
|
39
|
+
|
|
40
|
+
Format:
|
|
41
|
+
--ACTION=ADD|PARENT={parent_id or 'undefined'}|POS={position or -1}--
|
|
42
|
+
--TASK={plain-language description of what you are adding}
|
|
43
|
+
--HTML--
|
|
44
|
+
{HTML here}
|
|
45
|
+
--ENDHTML--
|
|
46
|
+
--MSG={plain-language explanation}
|
|
47
|
+
--ENDACTION--
|
|
48
|
+
|
|
49
|
+
Rules:
|
|
50
|
+
- PARENT = bid of parent, or 'undefined' for root.
|
|
51
|
+
- POS = -1 to append at the end.
|
|
52
|
+
- HTML must include full and valid tags.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### EDIT Action
|
|
56
|
+
Used to replace an existing element completely.
|
|
57
|
+
Combine multiple edits into one action with one edit id where possible.
|
|
58
|
+
|
|
59
|
+
Format:
|
|
60
|
+
--ACTION=EDIT|ID={target_id}--
|
|
61
|
+
--TASK={plain-language description of what you are changing}
|
|
62
|
+
--HTML--
|
|
63
|
+
{full replacement HTML here}
|
|
64
|
+
--ENDHTML--
|
|
65
|
+
--MSG={plain-language explanation}
|
|
66
|
+
--ENDACTION--
|
|
67
|
+
|
|
68
|
+
Rules:
|
|
69
|
+
- Must include full tag being replaced.
|
|
70
|
+
- Never partially edit; always replace full HTML for the target element.
|
|
71
|
+
|
|
72
|
+
### REMOVE Action
|
|
73
|
+
Used to delete elements.
|
|
74
|
+
|
|
75
|
+
Format:
|
|
76
|
+
--ACTION=REMOVE|IDS={id1, id2, ...}--
|
|
77
|
+
--TASK={plain-language description of what you are removing}
|
|
78
|
+
--MSG={plain-language explanation}
|
|
79
|
+
--ENDACTION--
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
### THINKING Block (STRICT)
|
|
83
|
+
Placed immediately after '--START--'.
|
|
84
|
+
|
|
85
|
+
Format:
|
|
86
|
+
--THINKING={short plain-language reasoning}
|
|
87
|
+
|
|
88
|
+
Rules:
|
|
89
|
+
- Only one concise line.
|
|
90
|
+
- No mentions of tags, ids, attributes, DOM, or code.
|
|
91
|
+
- Focus on visual/content intentions.
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# 3. HTML GENERATION RULES (MANDATORY)
|
|
95
|
+
|
|
96
|
+
You are an expert HTML/CSS developer specializing in Tailwind CSS and shadcn/ui patterns.
|
|
97
|
+
You produce clean, semantic, accessible, production-ready HTML.
|
|
98
|
+
Generate **pure HTML**, with no markdown, no comments, no extra text.
|
|
99
|
+
|
|
100
|
+
### General Guidelines
|
|
101
|
+
1. Use **only Tailwind CSS v3 utility classes**, no custom CSS.
|
|
102
|
+
2. Use **shadcn/ui design system** semantic tokens for all colors.
|
|
103
|
+
3. Use **semantic HTML** with proper accessibility.
|
|
104
|
+
4. Always produce **responsive, mobile-first** layout.
|
|
105
|
+
5. **Do NOT include** <!DOCTYPE>, <html>, <head>, or <body>.
|
|
106
|
+
6. Keep UI varied \u2014 don't repeat the same layout patterns.
|
|
107
|
+
7. Use \`<details><summary>\` for accordion, FAQ, and mobile menu interactions.
|
|
108
|
+
8. Do NOT use Tailwind container queries.
|
|
109
|
+
9. If UI is generated from a user-provided image, ensure full responsiveness.
|
|
110
|
+
10. **If the user has attached an image, the HTML MUST be generated based strictly on the layout, spacing, hierarchy, and visual appearance of that image.**
|
|
111
|
+
- Match structure as closely as possible
|
|
112
|
+
- Maintain the Tailwind + shadcn theme rules
|
|
113
|
+
- The HTML output should reflect the exact design of the provided image
|
|
114
|
+
|
|
115
|
+
### \u{1F6A8} CRITICAL: Avoid HTML "Div Soup" for Decorative UI Elements
|
|
116
|
+
**NEVER generate complex HTML markup for decorative UI elements that should be images:**
|
|
117
|
+
- \u274C DO NOT create HTML mockups of: code snippets, terminal windows, browser frames, device mockups, window chrome, syntax-highlighted code blocks
|
|
118
|
+
- \u2705 INSTEAD: Use placeholder images for these decorative elements
|
|
119
|
+
- **Reasoning**: Complex nested div structures for visual decoration create "div soup" that bloats markup unnecessarily
|
|
120
|
+
- **When to use images**: If the element is purely decorative/visual and not interactive content (e.g., showing a code example as part of a design, not actual executable code)
|
|
121
|
+
- **Examples**:
|
|
122
|
+
* For a "code snippet showcase" \u2192 Use an image: \`<img src="https://placehold.co/800x400/e2e8f0/e2e8f0" alt="Code editor showing React component example" width="800" height="400">\`
|
|
123
|
+
* For a "browser window mockup" \u2192 Use an image: \`<img src="https://placehold.co/1000x600/e2e8f0/e2e8f0" alt="Browser window displaying dashboard interface" width="1000" height="600">\`
|
|
124
|
+
* For actual interactive content \u2192 Use semantic HTML
|
|
125
|
+
|
|
126
|
+
### \u{1F6A8} Design Tokens (MANDATORY)
|
|
127
|
+
You MUST use design tokens whenever appropriate. Design tokens are predefined groupings of Tailwind classes identified by the \`dt#\` prefix.
|
|
128
|
+
1. **Placement**: Always place design tokens at the START of the \`class\` attribute.
|
|
129
|
+
2. **Overrides**: Any Tailwind classes following a design token act as overrides, similar to how \`tailwind-merge\` works.
|
|
130
|
+
3. **Example**: \`<button class="dt#btn p-2">\` where \`p-2\` overrides the default padding in \`dt#btn\`.
|
|
131
|
+
|
|
132
|
+
**Available Design Tokens**:
|
|
133
|
+
{{DESIGN_TOKENS_LIST}}
|
|
134
|
+
|
|
135
|
+
# 3.1 DESIGN EXCELLENCE & CREATIVITY (CRITICAL)
|
|
136
|
+
|
|
137
|
+
Create distinctive, production-grade interfaces that avoid generic "AI slop" aesthetics. Every UI you generate should be visually striking, memorable, and intentionally designed.
|
|
138
|
+
|
|
139
|
+
### Design Thinking Process
|
|
140
|
+
Before generating HTML, commit to a BOLD aesthetic direction:
|
|
141
|
+
- **Purpose**: Consider what problem this interface solves and who uses it
|
|
142
|
+
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
|
|
143
|
+
|
|
144
|
+
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
|
|
145
|
+
|
|
146
|
+
### Design Excellence Guidelines
|
|
147
|
+
|
|
148
|
+
**Typography & Font Selection**:
|
|
149
|
+
- Choose fonts that are beautiful, unique, and interesting
|
|
150
|
+
- AVOID generic fonts: Arial, Inter, Roboto, system fonts
|
|
151
|
+
- Use distinctive font combinations that elevate the design
|
|
152
|
+
- Pair a distinctive display font with a refined body font
|
|
153
|
+
- Consider: font-serif, font-mono for variety, or use weight variations (font-light, font-bold) creatively
|
|
154
|
+
|
|
155
|
+
**Color & Visual Hierarchy**:
|
|
156
|
+
- Commit to a cohesive aesthetic with dominant colors and sharp accents
|
|
157
|
+
- Avoid timid, evenly-distributed palettes
|
|
158
|
+
- Use shadcn tokens creatively (not just bg-background everywhere)
|
|
159
|
+
- Consider bold color blocking, dramatic contrasts, or refined monochrome
|
|
160
|
+
- AVOID: purple gradients on white backgrounds, predictable color schemes
|
|
161
|
+
|
|
162
|
+
**Spatial Composition**:
|
|
163
|
+
- Create unexpected layouts with asymmetry, overlap, diagonal flow
|
|
164
|
+
- Use grid-breaking elements and generous negative space OR controlled density
|
|
165
|
+
- Avoid predictable grid patterns - be creative with positioning
|
|
166
|
+
- Consider: absolute positioning, creative flexbox/grid layouts, overlapping elements
|
|
167
|
+
|
|
168
|
+
**Backgrounds & Visual Details**:
|
|
169
|
+
- Create atmosphere and depth rather than defaulting to solid colors
|
|
170
|
+
- Consider: gradient meshes, subtle textures, geometric patterns
|
|
171
|
+
- Use layered transparencies, dramatic shadows, decorative borders
|
|
172
|
+
- Add visual interest with background patterns or accent elements
|
|
173
|
+
|
|
174
|
+
**NEVER Use Generic AI Aesthetics**:
|
|
175
|
+
- Overused font families (Inter, Roboto, Arial, system fonts)
|
|
176
|
+
- Cliched color schemes (purple gradients on white)
|
|
177
|
+
- Predictable layouts and component patterns
|
|
178
|
+
- Cookie-cutter designs lacking context-specific character
|
|
179
|
+
- NEVER converge on common choices (Space Grotesk, etc.) across generations
|
|
180
|
+
|
|
181
|
+
**Implementation Complexity**:
|
|
182
|
+
- Match complexity to the aesthetic vision
|
|
183
|
+
- Maximalist designs: elaborate code with extensive effects
|
|
184
|
+
- Minimalist designs: restraint, precision, careful spacing and typography
|
|
185
|
+
- Elegance comes from executing the vision well
|
|
186
|
+
|
|
187
|
+
**Variation Mandate**:
|
|
188
|
+
- Every design should be different
|
|
189
|
+
- Vary between light and dark themes
|
|
190
|
+
- Change fonts, layouts, color schemes between generations
|
|
191
|
+
- Interpret user requests creatively with unexpected choices
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
# 4. ATTRIBUTE & CUSTOM COMPONENT RULES
|
|
195
|
+
|
|
196
|
+
### chai-name
|
|
197
|
+
- Add \`chai-name\` attribute to tags
|
|
198
|
+
- Use descriptive section names (e.g., "Hero Section", "Navigation").
|
|
199
|
+
|
|
200
|
+
## Custom Web components(CRITICAL)
|
|
201
|
+
- Html can have custom web components. All web components starts with <chai- prefix.
|
|
202
|
+
- Use "about-this-component" attribute to understand what the component does.
|
|
203
|
+
- Check for can-move and can-delete attribute to check if the component can be moved or deleted.
|
|
204
|
+
- If an attribute value starts with #styles: treat it like class attribute with tailwind classes.
|
|
205
|
+
Use the attribute key to understand what the attribute does and apply classes. Maintain the #styles: at start followed by tailwind classes.
|
|
206
|
+
- Do not change the chai-type attribute. Do not remove any attributes.
|
|
207
|
+
|
|
208
|
+
## Tool Usage Rules
|
|
209
|
+
- To ADD a registered custom block (listed in "Available Custom Blocks"), USE THE add_custom_block TOOL \u2014 do NOT generate HTML for it.
|
|
210
|
+
- To REMOVE blocks, USE THE remove_blocks TOOL \u2014 do NOT use --ACTION=REMOVE-- text protocol.
|
|
211
|
+
- To SET a data binding on an existing block prop, USE THE bind_prop TOOL.
|
|
212
|
+
- When building a full page layout or when the user asks to include a header, footer, or any global section,
|
|
213
|
+
CALL get_partial_blocks FIRST to discover available partial block IDs, then place them with <chai-partial-block partial-id="ID">.
|
|
214
|
+
- Continue using --ACTION=ADD-- with --HTML-- for new standard HTML sections (hero, cards, grids, etc.) \u2014 these benefit from streaming preview.
|
|
215
|
+
- Continue using --ACTION=EDIT-- with --HTML-- for editing existing HTML blocks.
|
|
216
|
+
|
|
217
|
+
## Data Binding (CRITICAL)
|
|
218
|
+
- Block prop values may contain binding expressions using double-curly syntax: {{path.to.data}}
|
|
219
|
+
- When you see {{...}} in an existing element's attribute value, it is a live data binding \u2014 NEVER remove or replace it with a static value. Preserve it exactly.
|
|
220
|
+
- You MAY use binding expressions when setting props on custom blocks, but ONLY using paths listed in the "Available Data Binding Paths" section below.
|
|
221
|
+
- Repeater blocks use a special prop: repeater-items="{{collectionName}}" where collectionName is the array to iterate.
|
|
222
|
+
- Inside a Repeater, child block props can reference each item's fields via {{$index.fieldName}}.
|
|
223
|
+
- Binding syntax must use exactly two curly braces: {{path}} \u2014 not {path} or \${{path}}.
|
|
224
|
+
- (global) paths are site-wide and available on every page. (page) paths are only available on this specific page type.
|
|
225
|
+
|
|
226
|
+
**Available Data Binding Paths**:
|
|
227
|
+
{{DATA_BINDING_PATHS}}
|
|
228
|
+
|
|
229
|
+
## Current Page Type
|
|
230
|
+
{{PAGE_TYPE_CONTEXT}}
|
|
231
|
+
|
|
232
|
+
## Available Custom Blocks
|
|
233
|
+
The following custom block types are registered and available for use. Use them with the ADD action using <chai-{kebab-type}> tags. Provide the props listed for each block as kebab-case HTML attributes. Complex values (objects, arrays) must be JSON-encoded.
|
|
234
|
+
|
|
235
|
+
{{CUSTOM_BLOCK_CATALOG}}
|
|
236
|
+
|
|
237
|
+
## Special Blocks
|
|
238
|
+
|
|
239
|
+
### Repeater \u2014 <chai-repeater>
|
|
240
|
+
Used to render a list by iterating over an array data binding.
|
|
241
|
+
- Required prop: \`repeater-items="{{arrayPath}}"\` where \`arrayPath\` is an array-type binding path.
|
|
242
|
+
- Only bind to paths marked as arrays in "Available Data Binding Paths".
|
|
243
|
+
- Child blocks inside a Repeater reference the current item's fields using \`{{$index.fieldName}}\`.
|
|
244
|
+
- Example: \`<chai-repeater repeater-items="{{page.products}}"><h3>{{$index.name}}</h3></chai-repeater>\`
|
|
245
|
+
- Do NOT use a Repeater for static lists \u2014 only when iterating over bound data.
|
|
246
|
+
|
|
247
|
+
### PartialBlock \u2014 <chai-partial-block>
|
|
248
|
+
Partial blocks are global reusable blocks (e.g. header, footer, navigation) shared across pages.
|
|
249
|
+
- Reference them by their ID: \`<chai-partial-block partial-id="THE_PARTIAL_ID"></chai-partial-block>\`
|
|
250
|
+
- Never modify a partial block's content inline \u2014 only reference it.
|
|
251
|
+
- When asked to build a full page layout, use the \`get_partial_blocks\` tool (available in Plan 007)
|
|
252
|
+
to discover available partial IDs before placing them.
|
|
253
|
+
- If the tool is not available, ask the user for the partial IDs to use.
|
|
254
|
+
|
|
255
|
+
## Icons
|
|
256
|
+
- Icons use the **Lucide** icon set (https://lucide.dev/icons).
|
|
257
|
+
- Always include \`chai-type="Icon"\` on icon elements and preserve any existing attributes (e.g. \`bid\`).
|
|
258
|
+
- Express each icon as \`<chai-icon chai-type="Icon" icon-name="kebab-case-name" width="16" height="16">\`
|
|
259
|
+
e.g. \`<chai-icon chai-type="Icon" icon-name="search" width="16" height="16">\`, \`<chai-icon chai-type="Icon" icon-name="arrow-right" width="24" height="24">\`.
|
|
260
|
+
- Pick semantically appropriate icon names from Lucide; do not embed raw \`<svg>\` markup inside \`<chai-icon>\`.
|
|
261
|
+
|
|
262
|
+
### SVG
|
|
263
|
+
- Always include width/height attributes.
|
|
264
|
+
- Ensure correct \`viewBox\`.
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
# 5. SHADCN/THEME COLOR RULES (STRICT)
|
|
268
|
+
|
|
269
|
+
Use ONLY these semantic tokens:
|
|
270
|
+
- bg-background + text-foreground
|
|
271
|
+
- bg-card + text-card-foreground
|
|
272
|
+
- bg-primary + text-primary-foreground
|
|
273
|
+
- bg-secondary + text-secondary-foreground
|
|
274
|
+
- bg-muted + text-muted-foreground
|
|
275
|
+
- bg-accent + text-accent-foreground
|
|
276
|
+
- bg-destructive + text-destructive-foreground
|
|
277
|
+
- border-border, border-input
|
|
278
|
+
- ring-ring
|
|
279
|
+
|
|
280
|
+
### Contrast Rules
|
|
281
|
+
- Always maintain clear readable contrast.
|
|
282
|
+
- Never pair same-family bg/text tokens (e.g., bg-primary + text-primary).
|
|
283
|
+
|
|
284
|
+
### Hover Rules
|
|
285
|
+
- Primary buttons: hover:bg-primary/90
|
|
286
|
+
- Cards: hover:bg-accent hover:text-accent-foreground
|
|
287
|
+
- Links: text-muted-foreground hover:text-foreground
|
|
288
|
+
- Nav links: text-foreground/80 hover:text-foreground
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
# 6. RESPONSIVENESS RULES
|
|
292
|
+
|
|
293
|
+
- Mobile-first approach.
|
|
294
|
+
- Breakpoints: sm, md, lg, xl.
|
|
295
|
+
- Smooth scaling between sizes.
|
|
296
|
+
- At md breakpoint:
|
|
297
|
+
* Reduce grid columns (lg:4 \u2192 md:2 \u2192 sm:1)
|
|
298
|
+
* Adjust padding, spacing, and layouts
|
|
299
|
+
* Ensure nav/mobilmenus behave correctly
|
|
300
|
+
* Ensure cards remain aligned
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
# 7. SPECIFIC UI PATTERNS
|
|
304
|
+
|
|
305
|
+
### Forms & Fields
|
|
306
|
+
- Always include proper \`type\` and \`autocomplete\` attributes for form fields (e.g., \`type="email" autocomplete="email"\`, \`type="text" autocomplete="given-name"\`, \`type="tel" autocomplete="tel"\`).
|
|
307
|
+
|
|
308
|
+
### Mobile Menu (<details><summary>)
|
|
309
|
+
- Use 'summary' containing an SVG hamburger icon.
|
|
310
|
+
- Mobile menu container sample:
|
|
311
|
+
absolute right-1 mt-2 min-w-64 bg-card border border-border rounded-lg shadow-lg z-50 p-4
|
|
312
|
+
- Menu item sample:
|
|
313
|
+
block py-2 px-4 hover:bg-accent rounded-md transition-colors
|
|
314
|
+
- Touch targets must be at least 44px tall.
|
|
315
|
+
|
|
316
|
+
### Accordions / Nested Menus
|
|
317
|
+
- Always use <details> and <summary>.
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
# 8. COMMON RULES
|
|
321
|
+
|
|
322
|
+
{{ANIMATION_RULES}}
|
|
323
|
+
{{IMAGE_RULES}}
|
|
324
|
+
|
|
325
|
+
# 9. OUTPUT RESTRICTIONS
|
|
326
|
+
- Output ONLY the exact allowed action blocks inside the mandatory format.
|
|
327
|
+
- NEVER include stray text.
|
|
328
|
+
- NEVER include markdown.
|
|
329
|
+
- NEVER break the format.
|
|
330
|
+
- NEVER place ANYTHING before '--START--' and after '--END--'.
|
|
331
|
+
- The output must always begin with '--START--' and end with '--END--'.
|
|
332
|
+
`.trim(),ls=t=>{let e=Xy;return t!=null&&t.animation?e=e.replace("{{ANIMATION_RULES}}",Qy):e=e.replace("{{ANIMATION_RULES}}",""),t!=null&&t.image,e=e.replace("{{IMAGE_RULES}}",hp),e}});var yp,bp=T(()=>{"use strict";yp=`Generate image based on the user request.
|
|
333
|
+
The image should be suitable for use as a website asset such as hero backgrounds, product images, team photos, icons, or decorative elements.
|
|
334
|
+
Ensure the image is medium quality, professional, and appropriate for web use. Do not add text or button on image if not explicitly requested.`});var Tp,Ap=T(()=>{"use strict";Tp=`You are an expert language translator specializing in preserving data structure integrity while translating content.
|
|
335
|
+
|
|
336
|
+
TASK: Translate all text content within the provided JSON structure to the target language.
|
|
337
|
+
|
|
338
|
+
TRANSLATION PATTERN:
|
|
339
|
+
1. Content Translation Strategy:
|
|
340
|
+
- Identify text content properties (e.g., 'content', 'label', 'text', 'title', 'description')
|
|
341
|
+
- Preserve the original property as the default language content
|
|
342
|
+
- Add language-specific variants using the pattern: '{propertyName}-{languageCode}'
|
|
343
|
+
|
|
344
|
+
2. Property Naming Convention:
|
|
345
|
+
- Original: 'content' (default language)
|
|
346
|
+
- Translated: 'content-fr', 'content-es', 'content-de', etc.
|
|
347
|
+
- Examples: 'label' \u2192 'label-fr', 'title' \u2192 'title-es', 'description' \u2192 'description-de'
|
|
348
|
+
|
|
349
|
+
3. Implementation Rules:
|
|
350
|
+
- NEVER override or remove the original property
|
|
351
|
+
- Language code is provided in the user request
|
|
352
|
+
- If there is already a property with the same name as the translated property, replace it with the translated property.
|
|
353
|
+
|
|
354
|
+
REQUIREMENTS (Common):
|
|
355
|
+
1. Return ONLY the translated JSON structure - no markdown formatting, code blocks, or explanations
|
|
356
|
+
2. Preserve the exact JSON structure, keys, and data types
|
|
357
|
+
3. Maintain proper grammar, tone, and cultural context in the target language
|
|
358
|
+
4. Maintain the original structure and data types
|
|
359
|
+
5. Translate ONLY human-readable text content - do NOT translate:
|
|
360
|
+
- JSON keys/property names
|
|
361
|
+
- Data binding placeholders (format: {{dataBindingId}})
|
|
362
|
+
- HTML attributes (class, id, data-*, etc.)
|
|
363
|
+
- URLs, file paths, or technical identifiers
|
|
364
|
+
- Code snippets or technical values
|
|
365
|
+
6. Ensure translated text fits naturally within the original context
|
|
366
|
+
7. Keep numbers, dates, and technical terms unchanged unless culturally appropriate to translate
|
|
367
|
+
|
|
368
|
+
OUTPUT FORMAT: Valid JSON only, ready to be parsed directly.`});var Pp,wp=T(()=>{"use strict";Pp=`You are an expert language translator and content editor specializing in preserving data structure integrity while modifying content.
|
|
369
|
+
|
|
370
|
+
TASK: Modify content within the provided JSON structure according to user request for the target language.
|
|
371
|
+
|
|
372
|
+
CONTENT MODIFICATION STRATEGY:
|
|
373
|
+
1. Language Property Selection:
|
|
374
|
+
- First, check if '{propertyName}-{languageCode}' exists (e.g., 'content-fr', 'label-es', 'title-de')
|
|
375
|
+
- If language-specific property exists: Use and modify that property's content
|
|
376
|
+
- If language-specific property does NOT exist: Use the default language property content, translate it to the target language, and create the '{propertyName}-{languageCode}' property with the translated content
|
|
377
|
+
|
|
378
|
+
2. Property Naming Convention:
|
|
379
|
+
- Default language: 'content', 'label', 'text', 'title', 'description'
|
|
380
|
+
- Language-specific: 'content-{languageCode}', 'label-{languageCode}', etc.
|
|
381
|
+
- Examples: 'content-fr', 'label-es', 'title-de', 'description-ja'
|
|
382
|
+
|
|
383
|
+
3. Implementation Rules:
|
|
384
|
+
- NEVER modify the original default language property
|
|
385
|
+
- Only modify or create the language-specific property ('{propertyName}-{languageCode}')
|
|
386
|
+
- Language code is provided in the user request
|
|
387
|
+
- Preserve all other language variants unchanged
|
|
388
|
+
|
|
389
|
+
REQUIREMENTS (Common):
|
|
390
|
+
1. Return ONLY the modified JSON structure - no markdown formatting, code blocks, or explanations
|
|
391
|
+
2. Preserve the exact JSON structure, keys, and data types
|
|
392
|
+
3. Maintain proper grammar, tone, and cultural context in the target language
|
|
393
|
+
4. Maintain the original structure and data types
|
|
394
|
+
|
|
395
|
+
CRITICAL REQUIREMENTS (Content Modification):
|
|
396
|
+
1. Apply user-requested modifications (improve, lengthen, shorten, fix grammar, change tone, rephrase, etc.) to the language-specific property
|
|
397
|
+
2. If language-specific property exists: Modify its content according to user request
|
|
398
|
+
3. If language-specific property does NOT exist: Translate default content to target language first, then apply modifications
|
|
399
|
+
4. Do NOT translate or modify:
|
|
400
|
+
- JSON keys/property names
|
|
401
|
+
- Data binding placeholders (format: {{dataBindingId}})
|
|
402
|
+
- HTML attributes (class, id, data-*, etc.)
|
|
403
|
+
- URLs, file paths, or technical identifiers
|
|
404
|
+
- Code snippets or technical values
|
|
405
|
+
5. Preserve all other language variants and properties unchanged
|
|
406
|
+
6. Apply changes consistently across related properties when applicable
|
|
407
|
+
|
|
408
|
+
OUTPUT FORMAT: Valid JSON only, ready to be parsed directly.`});function Ar(t=null,e={}){if(t)switch(t){case"GENERATE_IMAGE":return yp;case"TRANSLATE_CONTENT":return Tp;case"UPDATE_CONTENT":return Pp;default:return ls(e)}return ls(e)}var Ln=T(()=>{"use strict";fp();bp();Ap();wp()});var Cp,Ep=T(()=>{"use strict";Cp=t=>{let e=t.trim();return e.startsWith("{")&&e.endsWith("}")?e.slice(1,-1).trim():t}});function Sp(t){cs=t}function ps(){return cs}function ds(t,e){return Ip.run(t,e)}function Et(){var t;return(t=Ip.getStore())!=null?t:cs}function O(t){return Et()>=t}var xp,Kw,cs,Ip,ot=T(()=>{"use strict";xp=require("async_hooks"),Kw=require("server-only"),cs=0,Ip=new xp.AsyncLocalStorage});var _p={};rt(_p,{getInitializedState:()=>F,getInitializedStateWithUser:()=>Mt,getOptionalRequestState:()=>ge,getRequestState:()=>wr,runInContext:()=>Gt,runWithOptionalRequestState:()=>On,runWithState:()=>Zy,verifyInit:()=>ka,verifyInitWithUser:()=>eb});function Jy(t,e){var r,a,n,i,o,l;t.appId=e.appId,t.userId=(r=e.userId)!=null?r:null,t.draftMode=(a=e.draft)!=null?a:!1,t.siteUrl=(n=e.siteUrl)!=null?n:null,t.lang=(i=e.lang)!=null?i:"en",t.fallbackLang="en",t.licenseCheck=(o=e.licenseCheck)!=null?o:null,t.delegatedScopes=(l=e.delegatedScopes)!=null?l:null,t.initialized=!0,t.cacheKeys.clear(),t.traceId=null,t.traceStart=0,t.traceLabel=null,t.traceDetail=null,t.traceDepth=0}function Gt(t,e){let r=Pr.getStore();return r!=null&&r.initialized&&r.appId===t.appId?ds(ps(),e):Pr.run(vp(),()=>(Jy(wr(),t),ds(ps(),e)))}function On(t,e){return t?Pr.run(t,e):e()}var Rp,Qw,Pr,vp,wr,ge,Zy,F,Mt,ka,eb,W=T(()=>{"use strict";Rp=require("async_hooks"),Qw=require("server-only");ot();Pr=new Rp.AsyncLocalStorage,vp=()=>({appId:null,userId:null,draftMode:!1,fallbackLang:"en",lang:null,initialized:!1,siteUrl:null,licenseCheck:null,delegatedScopes:null,cacheKeys:new Map,traceId:null,traceStart:0,traceLabel:null,traceDetail:null,traceDepth:0});wr=()=>{let t=Pr.getStore();if(t)return t;throw new Error("ChaiBuilder method called outside of a request context")},ge=()=>Pr.getStore();Zy=t=>Pr.run(vp(),t),F=()=>{let t=wr();if(!t.initialized||!t.appId)throw new Error("Please initialize ChaiBuilder with an API key");return t},Mt=()=>{let t=wr();if(!t.initialized||!t.appId)throw new Error("Please initialize ChaiBuilder with an API key");if(!t.userId)throw new Error("Please initialize ChaiBuilder with initWithUser() for this operation");return t},ka=F,eb=Mt});function gs(t,e){let r=ge();return!r||r.traceId?!1:(r.traceId=(0,kp.nanoid)(6),r.traceStart=performance.now(),r.traceLabel=t,r.traceDetail=e!=null?e:null,!0)}function us(){var t,e;return(e=(t=ge())==null?void 0:t.traceDetail)!=null?e:null}function _e(){let t=ge();if(!(t!=null&&t.traceId))return"";let e=Math.round(performance.now()-t.traceStart);return`${" ".repeat(t.traceDepth)}[${t.traceId} +${e}ms]`}function ms(t){let e=ge();e&&(e.traceDepth+=1);try{return t()}finally{e&&(e.traceDepth=Math.max(0,e.traceDepth-1))}}var kp,Jw,Da=T(()=>{"use strict";kp=require("nanoid"),Jw=require("server-only");W()});function ke(t,e){tb[t](e)}function hs(t,e=200){return t.length<=e?t:`${t.slice(0,e)}\u2026`}function Cr(t,e){if(!O(1))return;let r=_e(),a=e?` \xB7 ${e}`:"";ke("info",`${r} \u25B6 ${t}${a}`)}function Bp(t,e){O(1)&&ke("info",`${t} \xB7 ${e}ms`)}function fs(t,e){if(!O(1))return;let r=_e(),a=e?` \xB7 ${e}`:"";ke("info",`${r} \u25B6 ${t}${a}`)}function ys(t,e,r,a){if(!O(1))return;let n=_e(),i=a>0?String(a):"failed";ke("info",`${n} fetch ${r}ms \xB7 ${t} ${hs(e,100)} \xB7 ${i}`)}function bs(t,e,r){if(!O(1))return;let a=_e();ke("success",`${a} cache HIT \xB7 ${t} \xB7 ${e} \xB7 ${r}`)}function Ts(t,e,r){if(!O(1))return;let a=_e();ke("warn",`${a} cache MISS \xB7 ${t} \xB7 ${e} \xB7 ${r}`)}function Np(t,e){if(!O(2))return;let r=_e();ke("info",`${r} api ${e}ms \xB7 ${t}`)}function Lp(t,e){if(!O(2))return;let r=_e();ke("info",`${r} action ${e}ms \xB7 ${t}`)}function $t(t,e){if(!O(1))return;let r=_e();ke("info",`${r} \u25C0 ${t} \xB7 ${e}ms`)}function sr(t,e,r,a){if(!O(1))return;let n=_e(),i=a?`${a} \xB7 `:"";ke("info",`${n} ai ${e}ms \xB7 ${i}${t} \xB7 ${r}`)}function Ba(t,e){if(!O(1))return;let r=_e(),a=e?` \xB7 ${e}`:"";ke("info",`${r} \u25B6 ai:${t}${a}`)}function lr(t){if(!O(2))return;let e=_e();ke("debug",`${e} ai \xB7 ${hs(t,200)}`)}function Op(t,e){if(!O(2))return;let r=_e();ke("debug",`${r} ai tool \xB7 ${t} \xB7 ${hs(e,120)}`)}function Na(t,e,r=2){if(!O(r))return;let a=_e(),n=e?` \xB7 ${e}`:"";ke(r===1?"info":"debug",`${a} ai stream \xB7 ${t}${n}`)}var Dp,tC,tb,Ht=T(()=>{"use strict";Dp=require("consola"),tC=require("server-only");ot();Da();tb=Dp.consola.withTag("ChaiDebug")});function La(t,e=120){let r=t.replace(rb,"[data-uri]");return r.length<=e?r:`${r.slice(0,e)}\u2026`}function As(t){return`messages=${t.length}`}var iC,rb,Fp=T(()=>{"use strict";iC=require("server-only");ot();Ht();Da();rb=/data:[^;]+;base64,[A-Za-z0-9+/=]+/g});var Ps,P,D=T(()=>{"use strict";Ps=require("zod");N();P=class{constructor(){this.context=null}getValidationSchema(){return{}}validate(e){if(!e)return!0;try{let r=this.getValidationSchema();return r!=null&&r.parse&&r.parse(e),!0}catch(r){return!1}}getValidationErrors(e){if(!e)return null;try{let r=this.getValidationSchema();return r!=null&&r.parse&&r.parse(e),null}catch(r){return r instanceof Ps.z.ZodError?r.issues.map(n=>`${n.path.join(".")}: ${n.message}`).join(", "):null}}setContext(e){this.context=e}async run(e){if(!this.validate(e)){let r=this.getValidationErrors(e),a=r?`Validation failed: ${r}`:"Validation failed";throw new m(a,"VALIDATION_ERROR")}return this.execute(e)}handleError(e){if(e instanceof m)throw e;if(e instanceof Ps.z.ZodError){let r=e.issues.map(a=>`${a.path.join(".")}: ${a.message}`).join(", ");throw new m(`Validation failed: ${r}`,"VALIDATION_ERROR")}else{let r=e instanceof Error?e.message:"Unknown error";throw new m(r,"ACTION_ERROR")}}}});function Er(){return ht().credits.enabled}function Fn(){return ht().logging.logger}function Up(t,e="UNKNOWN"){let r=ht();if(!t)return{model:t};if(typeof t=="object"&&"modelId"in t)return{model:t};if(r.resolveModel){let a=r.resolveModel(t,e);if(a)return a}if(r.models&&typeof t=="string"){let a=r.models.find(n=>n.id===t);if(a)return{model:a}}return{model:t}}function ws(t,e="UNKNOWN"){let r=Up(t,e);return{model:r.model,providerOptions:r.providerOptions}}function Cs(t,e="UNKNOWN"){let r=Up(t,e);return{model:r.model,providerOptions:r.providerOptions}}var B,se=T(()=>{"use strict";Ke();B=(t,e)=>(console.error(e),new Error(t))});async function ab(t){if(Es.has(t))return Es.get(t)||null;let{data:e,error:r}=await b(()=>y.select({user:s.apps.user,client:s.apps.client}).from(s.apps).where((0,Q.eq)(s.apps.id,t)).limit(1)),a=!r&&e&&e.length>0&&e[0].user?{user:e[0].user,client:e[0].client}:null;return Es.set(t,a),a}async function Gp(t){let{data:e,error:r}=await b(()=>y.select({planId:s.appUserPlans.planId,nextBilledAt:s.appUserPlans.nextBilledAt,clientId:s.appUserPlans.client,plansAndAddOns:s.clients.plansAndAddOns}).from(s.appUserPlans).innerJoin(s.clients,(0,Q.eq)(s.appUserPlans.client,s.clients.id)).where((0,Q.eq)(s.appUserPlans.user,t)).limit(1));return r||!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 nb(t,e,r){let a=[(0,Q.eq)(s.apps.user,t),(0,Q.eq)(s.aiLogs.creditSource,"monthly")];e&&a.push((0,Q.gte)(s.aiLogs.createdAt,e.toISOString())),r&&a.push((0,Q.lt)(s.aiLogs.createdAt,r.toISOString()));let{data:n,error:i}=await b(()=>y.select({total:Q.sql`COALESCE(SUM(CAST(${s.aiLogs.totalTokens} AS NUMERIC)), 0)`}).from(s.aiLogs).innerJoin(s.apps,(0,Q.eq)(s.aiLogs.app,s.apps.id)).where((0,Q.and)(...a)));return i||!n||n.length===0?0:parseFloat(n[0].total)||0}async function ib(t){let{data:e,error:r}=await b(()=>y.select({id:s.aiCreditAddons.id,creditsTotal:s.aiCreditAddons.creditsTotal,creditsUsed:s.aiCreditAddons.creditsUsed}).from(s.aiCreditAddons).where((0,Q.and)((0,Q.eq)(s.aiCreditAddons.user,t),(0,Q.eq)(s.aiCreditAddons.status,"active"))).orderBy((0,Q.asc)(s.aiCreditAddons.createdAt)));if(r||!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 xs(t){var w,E,S;let e=await ab(t);if(!e)return null;let r=await Gp(e.user),a=(r==null?void 0:r.plansConfig)||(e.client?await Is(e.client):null);if(!a)return null;let n=(r==null?void 0:r.planId)||"FREE",i=(w=a.plans)==null?void 0:w.find(R=>{var k;return n==="FREE"&&R.isFree||((k=R.items)==null?void 0:k.some(x=>x.id===n||x.sandboxId===n))}),o=(S=(E=i==null?void 0:i.limits)==null?void 0:E.no_of_ai_credits)!=null?S:0,l=(i==null?void 0:i.isFree)||n==="FREE",c,d;l||(d=new Date(r.nextBilledAt),c=new Date(d),c.setMonth(c.getMonth()-1));let[u,g]=await Promise.all([nb(e.user,c,d),ib(e.user)]),h=parseFloat((u/Un).toFixed(2)),f=Math.min(h,o),A=Math.max(0,o-h),C={total:g.total,used:Math.min(g.used,g.total),remaining:Math.max(0,g.remaining),addons:g.addons.map(R=>({id:R.id,remaining:R.remaining}))};return{monthly:{used:f,limit:o,remaining:parseFloat(A.toFixed(2))},addon:C,totalAvailable:parseFloat((A+C.remaining).toFixed(2)),canBuyCredits:(a.addOns||[]).length>0,billingPeriod:c&&d?{start:c,end:d}:void 0}}async function Mp(t){if(!Er())return{available:!0,status:null};let e=await xs(t);return e?{available:e.totalAvailable>0,status:e}:{available:!1,status:null}}function $p(t,e){let r=e/Un;return t.monthly.remaining>=r?{success:!0,creditSource:"monthly",addonId:null}:t.addon.remaining>0&&t.addon.addons.length>0?{success:!0,creditSource:"addon",addonId:t.addon.addons[0].id}:t.totalAvailable<r?{success:!1,creditSource:"monthly",addonId:null,error:"Insufficient credits"}:t.monthly.remaining>0?{success:!0,creditSource:"monthly",addonId:null}:t.addon.addons.length>0?{success:!0,creditSource:"addon",addonId:t.addon.addons[0].id}:{success:!1,creditSource:"monthly",addonId:null,error:"No credits available"}}async function Hp(t,e){let{error:r}=await b(()=>y.update(s.aiCreditAddons).set({creditsUsed:Q.sql`CAST(${s.aiCreditAddons.creditsUsed} AS NUMERIC) + ${(e/Un).toFixed(2)}`,status:Q.sql`CASE WHEN CAST(${s.aiCreditAddons.creditsUsed} AS NUMERIC) + ${(e/Un).toFixed(2)} >= CAST(${s.aiCreditAddons.creditsTotal} AS NUMERIC) THEN 'exhausted' ELSE 'active' END`}).where((0,Q.eq)(s.aiCreditAddons.id,t)));return r?{success:!1,error:"Failed to update addon credits"}:{success:!0}}async function qp(t){let e=await Gp(t);return e?{planId:e.planId,nextBilledAt:e.nextBilledAt,clientId:e.clientId}:null}async function Is(t){let{data:e,error:r}=await b(()=>y.select({plansAndAddOns:s.clients.plansAndAddOns}).from(s.clients).where((0,Q.eq)(s.clients.id,t)).limit(1));return r||!e||e.length===0?null:e[0].plansAndAddOns}var Q,Un,Es,Oa=T(()=>{"use strict";Q=require("drizzle-orm");_();se();Un=1e3,Es=new Map});var qt,Gn,ce,xt=T(()=>{"use strict";qt=require("ai");Ep();ot();Fp();Ht();N();D();se();Oa();Gn=class Gn extends P{getActionLabel(){var e,r;return(r=(e=this.context)==null?void 0:e.action)!=null?r:"UNKNOWN_AI_ACTION"}logTokenUsage(e,r){var n;if(!O(2))return;let a=(n=r==null?void 0:r.totalTokens)!=null?n:e==null?void 0:e.totalTokens;a!==void 0&&lr(`tokens=${a}`)}getLoggablePrompt(e){if(typeof e.prompt=="string")return e.prompt;if(Array.isArray(e.messages)){let r=e.messages.find(a=>a.role==="user");if(r)return typeof r.content=="string"?r.content:JSON.stringify(r.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),r=Math.random()*e;for(let a=0;a<this.prompts.length;a++){let n=this.prompts[a].weight||1;if(r<n)return{variant:this.prompts[a],index:a};r-=n}return{variant:this.prompts[0],index:0}}async checkCredits(){var a;if(!Er())return{available:!0,status:null};let{available:e,status:r}=await Mp(this.context.appId);if(!e){let n=r?"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=r==null?void 0:r.canBuyCredits)!=null?a:!1})}return{available:e,status:r}}async generateText(e){var d,u,g,h;let r=await this.checkCredits();if(!r.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 f=ws(a,(u=(d=this.context)==null?void 0:d.action)!=null?u:"UNKNOWN");e={...e,...f}}else!e.model&&this.model&&(e={...e,model:this.model});let n=Fn(),i=Date.now(),o=this.getLoggablePrompt(e),l=(h=(g=e.model)==null?void 0:g.toString())!=null?h:"unknown",c=this.getActionLabel();O(1)&&Ba(c,"generateText"),O(2)&&(Array.isArray(e.messages)&&lr(As(e.messages)),o&&lr(`prompt \xB7 ${La(o)}`));try{let f=await(0,qt.generateText)(e);return O(1)&&sr(l,Date.now()-i,"generateText",c),this.logTokenUsage(f.usage,f.totalUsage),n==null||n({response:f,userId:this.context.userId,appId:this.context.appId,creditStatus:r.status,startTime:i,prompt:o,model:e.model.toString()}),f}catch(f){throw O(1)&&sr(l,Date.now()-i,"generateText (error)",c),n==null||n({error:f instanceof Error?f.message:String(f),response:{},userId:this.context.userId,appId:this.context.appId,creditStatus:r.status,startTime:i,prompt:o,model:e.model.toString()}),f}}async generateImage(e){var d,u,g,h,f,A,C;let r=await this.checkCredits();if(!r.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:Cs(e.model,(u=(d=this.context)==null?void 0:d.action)!=null?u:"UNKNOWN").model}:{...a,model:e.model};else if(this.model){let w=Cs(this.model,(h=(g=this.context)==null?void 0:g.action)!=null?h:"UNKNOWN");a={...a,model:w.model}}let n=Fn(),i=Date.now(),o=typeof a.prompt=="string"?a.prompt:typeof a.prompt=="object"&&((f=a.prompt)!=null&&f.text)?a.prompt.text:"",l=(C=(A=a.model)==null?void 0:A.toString())!=null?C:"unknown",c=this.getActionLabel();O(1)&&Ba(c,"generateImage"),O(2)&&o&&lr(`prompt \xB7 ${La(o)}`);try{let w=await(0,qt.generateImage)(a);return O(1)&&sr(l,Date.now()-i,"generateImage",c),n==null||n({response:w,userId:this.context.userId,appId:this.context.appId,creditStatus:r.status,startTime:i,prompt:o,model:a.model.toString()}),w}catch(w){throw O(1)&&sr(l,Date.now()-i,"generateImage (error)",c),n==null||n({error:w instanceof Error?w.message:String(w),response:{},userId:this.context.userId,appId:this.context.appId,creditStatus:r.status,startTime:i,prompt:o,model:a.model.toString()}),w}}async streamText(e){var d,u,g,h;let r=await this.checkCredits();if(!r.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 f=ws(a,(u=(d=this.context)==null?void 0:d.action)!=null?u:"UNKNOWN");e={...e,model:f.model}}let n=Fn(),i=Date.now(),o=this.getLoggablePrompt(e),l=(h=(g=e.model)==null?void 0:g.toString())!=null?h:"unknown",c=this.getActionLabel();return O(1)&&Ba(c,"streamText"),O(2)&&(Array.isArray(e.messages)&&lr(As(e.messages)),o&&lr(`prompt \xB7 ${La(o)}`)),(0,qt.streamText)({...e,onFinish:f=>{O(1)&&sr(l,Date.now()-i,"streamText",c),this.logTokenUsage(f.usage,f.totalUsage),n==null||n({response:f,userId:this.context.userId,appId:this.context.appId,creditStatus:r.status,startTime:i,prompt:o,model:l})},onError:f=>{O(1)&&sr(l,Date.now()-i,"streamText (error)",c),n==null||n({error:f instanceof Error?f.message:String(f),response:{},userId:this.context.userId,appId:this.context.appId,creditStatus:r.status,startTime:i,prompt:o,model:l})}})}createChaiStreamTransformer(){let e=new TextEncoder,r=!1;return new TransformStream({start(){},transform(a,n){!r&&!a.includes("--START--")?(n.enqueue(e.encode(`--START--
|
|
409
|
+
`)),r=!0):!r&&a.includes("--START--")&&(r=!0),n.enqueue(e.encode(a))},flush(a){r||a.enqueue(e.encode(`--START--
|
|
410
|
+
`)),a.enqueue(e.encode(`
|
|
411
|
+
--END--`))}})}createErrorStream(e){let r=new TextEncoder,a=this.sanitizeErrorMessageForStream(e.message||String(e));return new ReadableStream({start(n){n.enqueue(r.encode(`--START--
|
|
412
|
+
--MSG=${Cp(a)}--
|
|
413
|
+
--END--`)),n.close()}})}sanitizeErrorMessageForStream(e){return e.replace(/[\r\n]+/g," ").replace(/--/g,"- -").replace(/[\x00-\x1F\x7F]/g,"").trim()}async streamChaiBuilderText(e){try{return{_streamingResponse:!0,_streamResult:{textStream:(await this.streamText(e)).textStream.pipeThrough(this.createChaiStreamTransformer())}}}catch(r){return{_streamingResponse:!0,_streamResult:{textStream:this.createErrorStream(r)}}}}createFullStreamMixedEncoder(e){let r=new TextEncoder,a=this.getActionLabel(),n=!1,i=!1,o="";return new ReadableStream({async start(l){var c,d;Na("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 h=g.includes("--START--"),f=g.includes("--END--");!n&&!h?(l.enqueue(r.encode(`--START--
|
|
414
|
+
`)),n=!0):!n&&h&&(n=!0),f&&(i=!0),l.enqueue(r.encode(u.text))}else u.type==="tool-call"&&Gn.CLIENT_ONLY_AI_TOOLS.has(u.toolName)?(Op(u.toolName,La(JSON.stringify(u.input))),l.enqueue(r.encode(`9:${JSON.stringify({toolCallId:u.toolCallId,toolName:u.toolName,args:u.input})}
|
|
415
|
+
`))):u.type==="finish"?(Na("finish",(c=u.finishReason)!=null?c:"stop"),l.enqueue(r.encode(`d:${JSON.stringify({finishReason:(d=u.finishReason)!=null?d:"stop"})}
|
|
416
|
+
`))):u.type==="error"&&(Na("error",String(u.error),1),l.enqueue(r.encode(`3:${JSON.stringify(String(u.error))}
|
|
417
|
+
`)));n||l.enqueue(r.encode(`--START--
|
|
418
|
+
`)),i||l.enqueue(r.encode(`
|
|
419
|
+
--END--`)),Na("close"),l.close()}catch(u){l.error(u)}}})}async streamChaiBuilderWithTools(e){try{let{tools:r,...a}=e,n=await this.streamText({...a,tools:r,toolChoice:"auto",stopWhen:(0,qt.stepCountIs)(8)});return{_streamingResponse:!0,_streamResult:{textStream:this.createFullStreamMixedEncoder(n)}}}catch(r){return{_streamingResponse:!0,_streamResult:{textStream:this.createErrorStream(r)}}}}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}};Gn.CLIENT_ONLY_AI_TOOLS=new Set(["remove_blocks","add_custom_block","bind_prop"]);ce=Gn});var pe,ob,Mn,jp=T(()=>{"use strict";pe=require("zod");Dn();_a();Ft();Ke();Bn();Nn();Ln();xt();ob=pe.z.record(pe.z.string(),pe.z.object({name:pe.z.string(),value:pe.z.string(),description:pe.z.string().optional(),archived:pe.z.boolean().optional()})).optional(),Mn=class extends ce{getValidationSchema(){return pe.z.object({messages:pe.z.array(pe.z.any()),model:pe.z.string().optional(),context:pe.z.any().optional(),designTokens:ob,images:pe.z.array(pe.z.string()).optional(),attachments:pe.z.array(pe.z.any()).optional(),options:pe.z.any().optional()})}async execute(e){var k,x,G,j,ae,ze;this.context||mt(new We("Context not set. Please try again.","INVALID_REQUEST",500)),(!e.messages||e.messages.length===0)&&mt(new We("No messages provided. Please enter a prompt.","INVALID_REQUEST",400));let r=e.messages.filter(L=>L.role!=="system"),a=r[r.length-1];a||mt(new We("No user message found in the request.","INVALID_REQUEST",400));let n=Ar(null,e==null?void 0:e.options),i={...Ut,...e.designTokens||{}},o=Object.entries(i).filter(([,L])=>L!=null&&!L.archived).map(([L,fe])=>`- ${L}: ${fe.value} (${fe.name})`).join(`
|
|
420
|
+
`);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=(k=e==null?void 0:e.options)==null?void 0:k.pageType,d=Ra(),u=Object.values(d).filter(L=>!l.has(L.type)&&kn(L,c||"page")),g;u.length===0?g="No custom blocks registered.":g=u.map(L=>{var Ve,ne,Hc;let fe=(ne=(Ve=L.props)==null?void 0:Ve.schema)!=null&&ne.properties?Object.entries(L.props.schema.properties).filter(([,Ee])=>!(Ee!=null&&Ee.styles)&&!(Ee!=null&&Ee.runtime)&&!(Ee!=null&&Ee.hidden)).map(([Ee,ve])=>{var qc,zc,jc;let Py=Array.isArray(ve==null?void 0:ve.type)?ve.type.join("|"):(qc=ve==null?void 0:ve.type)!=null?qc:"any",wy=(ve==null?void 0:ve.default)!==void 0?` (default: ${JSON.stringify(ve.default)})`:"",Cy=(zc=L.aiProps)!=null&&zc.includes(Ee)?" [AI-settable]":"";return` - ${Ee} (${Py})${wy}${Cy}: ${(jc=ve==null?void 0:ve.title)!=null?jc:Ee}`}).join(`
|
|
421
|
+
`):" (no declared props)",je=L.wrapper?" [wrapper \u2014 can contain child blocks]":"",ye=L.type.replace(/([A-Z])/g,Ee=>`-${Ee.toLowerCase()}`).replace(/^-/,"");return`### ${L.type} \u2192 <chai-${ye}>${je}
|
|
422
|
+
Description: ${(Hc=L.description)!=null?Hc:L.label}
|
|
423
|
+
Props:
|
|
424
|
+
${fe}`}).join(`
|
|
425
|
+
|
|
426
|
+
`),n=n.replace("{{CUSTOM_BLOCK_CATALOG}}",g);let h=(G=(x=e==null?void 0:e.options)==null?void 0:x.dataBindingPaths)!=null?G:{global:[],page:[]},f=h.global.map(L=>`- (global) {{${L}}}`),A=h.page.map(L=>`- (page) {{${L}}}`),C=[...f,...A],w=C.length>0?C.join(`
|
|
427
|
+
`):"No data binding paths available for this page.";n=n.replace("{{DATA_BINDING_PATHS}}",w);let E;if(!c)E="Standard page (no specific page type).";else{let L=Ye(c),fe=(j=L==null?void 0:L.description)!=null?j:L==null?void 0:L.helpText;E=fe?`Page type: ${c}
|
|
428
|
+
${fe}`:`Page type: ${c}`}n=n.replace("{{PAGE_TYPE_CONTEXT}}",E),e.context&&(n+=`
|
|
429
|
+
|
|
430
|
+
## Additional Information`,(ae=e.context)!=null&&ae.site&&(n+=`
|
|
431
|
+
|
|
432
|
+
## Website Information
|
|
433
|
+
${JSON.stringify(e.context.site)}`),(ze=e.context)!=null&&ze.page&&(n+=`
|
|
434
|
+
|
|
435
|
+
## Page Information
|
|
436
|
+
${JSON.stringify(e.context.page)}`));let S=[{type:"text",text:typeof a.content=="string"?a.content:JSON.stringify(a.content)}];e.images&&e.images.length>0&&e.images.forEach(L=>{S.push({type:"image",image:L})}),e.attachments&&e.attachments.length>0&&e.attachments.forEach(L=>{if(L.url&&L.mediaType){let fe=this.formatBase64(L.url);S.push({type:"file",data:fe,mediaType:L.mediaType,...L.filename&&{filename:L.filename}})}});let R=S.length>1?[...r.slice(0,-1),{role:"user",content:S}]:e.messages;return this.streamChaiBuilderText({model:e.model,system:n,messages:R,temperature:.7})}}});var cr,$n,Vp=T(()=>{"use strict";cr=require("zod");Nn();Ln();Bn();xt();$n=class extends ce{getValidationSchema(){return cr.z.object({messages:cr.z.array(cr.z.any()),model:cr.z.string().optional(),context:cr.z.any().optional(),initiator:cr.z.enum(["TRANSLATE_CONTENT","UPDATE_CONTENT"])})}async execute(e){this.context||mt(new We("Context not set. Please try again.","INVALID_REQUEST",500));let r=e.messages.filter(i=>i.role!=="system");r[r.length-1]||mt(new We("No user message found in the request.","INVALID_REQUEST",400));let n=Ar(e.initiator);return this.streamChaiBuilderText({model:e.model,system:n,messages:e.messages,temperature:.7})}}});var sb,lb,cb,Wp,Kp=T(()=>{"use strict";sb=`
|
|
437
|
+
# ANIMATION RULES
|
|
438
|
+
- Add \`data-animation\` attribute to elements when appropriate to add entry animations on scroll.
|
|
439
|
+
- **Do not overuse animations.** Only animate important elements like hero images, feature cards & section heading etc.
|
|
440
|
+
- The format MUST exactly be: \`data-animation="ANIMATION|EASING|DURATION|DELAY|TIME"\`
|
|
441
|
+
- **ANIMATION**: fade-in, slide-up, slide-down, slide-left, slide-right, zoom-in, zoom-out, flip-x, flip-y, rotate-in
|
|
442
|
+
- **EASING**: linear, ease-in, ease-out, ease-in-out
|
|
443
|
+
- **DURATION**: in milliseconds (e.g., 500, 700, 1000)
|
|
444
|
+
- **DELAY**: in milliseconds (e.g., 0, 200, 300) so that the animation starts after a delay and not immediately
|
|
445
|
+
- **TIME**: once (plays once) or infinite (repeats every time it enters the viewport)
|
|
446
|
+
- Example: \`<div data-animation="slide-up|ease-in-out|500|300|once" class="...">\`
|
|
447
|
+
`,lb='\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',cb=`You are the AI page editor for Chai Builder. You edit the user's page exclusively through the tools provided. You never output raw HTML in your chat text \u2014 HTML only ever appears inside tool call arguments.
|
|
448
|
+
|
|
449
|
+
# 1. HOW YOU WORK (TOOL WORKFLOW \u2014 ALWAYS OBEY)
|
|
450
|
+
|
|
451
|
+
You see a compact PAGE OUTLINE of the current page (below). Each line is one block:
|
|
452
|
+
\`{bid} | {type} | {name} | {short text}\`. Indentation shows nesting.
|
|
453
|
+
|
|
454
|
+
Available tools:
|
|
455
|
+
- **read_block_html** \u2014 fetch the full current HTML of one or more existing blocks by bid. YOU MUST call this before editing a block with edit_block. Never guess a block's markup from the outline.
|
|
456
|
+
- **edit_block** \u2014 replace ONE existing block (by bid) with new HTML. The html must be the full replacement for that element (its entire tag), not a partial diff.
|
|
457
|
+
- **add_blocks** \u2014 insert new HTML into the page. parentId is the bid of the container (omit for page root); position is the child index (-1 or omit to append).
|
|
458
|
+
- **remove_blocks** \u2014 delete blocks by bid.
|
|
459
|
+
- **add_custom_block** \u2014 add a registered custom block (anything listed in "Available Custom Blocks") with typed props. Use this \u2014 NOT HTML \u2014 for those block types.
|
|
460
|
+
- **bind_prop** \u2014 set a data binding on a prop of an existing block.
|
|
461
|
+
- **get_partial_blocks** \u2014 list available partial blocks (global reusable sections like header/footer). Call before placing <chai-partial-block> elements.
|
|
462
|
+
|
|
463
|
+
Workflow rules:
|
|
464
|
+
1. Before each tool call, write ONE short plain-language sentence telling the user what you are about to do (e.g. "I'll brighten up the hero section with a bolder headline."). Friendly, non-technical \u2014 never mention bids, tags, HTML, tools, or code.
|
|
465
|
+
2. To modify an existing section: read_block_html first (batch multiple bids into one call), then edit_block.
|
|
466
|
+
3. Work one section at a time \u2014 one edit_block or add_blocks call per section. Never rewrite the whole page in a single call when the user asked for a targeted change.
|
|
467
|
+
4. Prefer editing the smallest block that fully contains the change. If the user asks to change a headline, edit the heading's nearest sensible parent, not the entire page section \u2014 but always replace a complete element.
|
|
468
|
+
5. In every edit_block/add_blocks call, fill the arguments in this exact order: task first, then blockId/parentId/position, then html LAST.
|
|
469
|
+
6. \`task\` is a short user-facing progress label (e.g. "Redesigning hero section"). Plain language, no technical terms.
|
|
470
|
+
7. When the user's request is ambiguous, unrelated to the page, or a question \u2014 just answer in plain text without calling tools.
|
|
471
|
+
8. Partial blocks (<chai-partial-block>) cannot be edited from this page. If asked to change one, explain the user should open that partial page to edit it. You may still add/remove/move partial block references on this page.
|
|
472
|
+
9. After a tool result returns ok: false with an error, correct your approach based on the error message and retry once. Do not repeat the identical failing call.
|
|
473
|
+
10. When done, finish with ONE short sentence of what changed. Skip the summary entirely for a single trivial edit \u2014 the task labels already show what happened.
|
|
474
|
+
|
|
475
|
+
# 1.1 CHAT OUTPUT \u2014 KEEP IT MINIMAL (MANDATORY)
|
|
476
|
+
|
|
477
|
+
The chat is read by non-technical users. Keep your visible text as short as possible \u2014 every extra word costs tokens for no benefit.
|
|
478
|
+
- Write like a friendly human, never like a developer. NEVER show or describe code, HTML, tags, class names, tokens, bids, tool names, or file structure.
|
|
479
|
+
- Total visible text per turn: at most one short lead-in sentence and one short closing sentence. No paragraphs, no bullet lists, no headings, no markdown formatting, no code blocks or backticks.
|
|
480
|
+
- Do NOT restate, quote, or narrate the HTML/markup you generate \u2014 it appears live on the canvas, not in chat.
|
|
481
|
+
- Do NOT explain your reasoning, list the steps you took, or enumerate the design choices unless the user explicitly asks.
|
|
482
|
+
- If the user asks a question, answer in one or two plain sentences.
|
|
483
|
+
|
|
484
|
+
# 2. EDIT SEMANTICS
|
|
485
|
+
- edit_block html MUST be a full valid replacement of the target element, keeping its role in the layout.
|
|
486
|
+
- Preserve existing \`bid\` attributes on elements you keep within an edited block; do NOT invent bids for new elements \u2014 new elements simply have no bid.
|
|
487
|
+
- Never add a bid attribute in add_blocks html.
|
|
488
|
+
- Preserve all attributes you don't intentionally change (especially chai-type, data bindings, #styles: values).
|
|
489
|
+
|
|
490
|
+
# 3. HTML GENERATION RULES (MANDATORY)
|
|
491
|
+
|
|
492
|
+
You are an expert HTML/CSS developer specializing in Tailwind CSS and shadcn/ui patterns.
|
|
493
|
+
You produce clean, semantic, accessible, production-ready HTML.
|
|
494
|
+
Generate **pure HTML**, with no markdown, no comments, no extra text.
|
|
495
|
+
|
|
496
|
+
### General Guidelines
|
|
497
|
+
1. Use **only Tailwind CSS v3 utility classes**, no custom CSS.
|
|
498
|
+
2. Use **shadcn/ui design system** semantic tokens for all colors.
|
|
499
|
+
3. Use **semantic HTML** with proper accessibility.
|
|
500
|
+
4. Always produce **responsive, mobile-first** layout.
|
|
501
|
+
5. **Do NOT include** <!DOCTYPE>, <html>, <head>, or <body>.
|
|
502
|
+
6. Keep UI varied \u2014 don't repeat the same layout patterns.
|
|
503
|
+
7. Use \`<details><summary>\` for accordion, FAQ, and mobile menu interactions.
|
|
504
|
+
8. Do NOT use Tailwind container queries.
|
|
505
|
+
9. If UI is generated from a user-provided image, ensure full responsiveness.
|
|
506
|
+
10. **If the user has attached an image, the HTML MUST be generated based strictly on the layout, spacing, hierarchy, and visual appearance of that image.**
|
|
507
|
+
- Match structure as closely as possible
|
|
508
|
+
- Maintain the Tailwind + shadcn theme rules
|
|
509
|
+
- The HTML output should reflect the exact design of the provided image
|
|
510
|
+
|
|
511
|
+
### \u{1F6A8} CRITICAL: Avoid HTML "Div Soup" for Decorative UI Elements
|
|
512
|
+
**NEVER generate complex HTML markup for decorative UI elements that should be images:**
|
|
513
|
+
- \u274C DO NOT create HTML mockups of: code snippets, terminal windows, browser frames, device mockups, window chrome, syntax-highlighted code blocks
|
|
514
|
+
- \u2705 INSTEAD: Use placeholder images for these decorative elements
|
|
515
|
+
- **Reasoning**: Complex nested div structures for visual decoration create "div soup" that bloats markup unnecessarily
|
|
516
|
+
- **When to use images**: If the element is purely decorative/visual and not interactive content (e.g., showing a code example as part of a design, not actual executable code)
|
|
517
|
+
- **Examples**:
|
|
518
|
+
* For a "code snippet showcase" \u2192 Use an image: \`<img src="https://placehold.co/800x400/e2e8f0/e2e8f0" alt="Code editor showing React component example" width="800" height="400">\`
|
|
519
|
+
* For a "browser window mockup" \u2192 Use an image: \`<img src="https://placehold.co/1000x600/e2e8f0/e2e8f0" alt="Browser window displaying dashboard interface" width="1000" height="600">\`
|
|
520
|
+
* For actual interactive content \u2192 Use semantic HTML
|
|
521
|
+
|
|
522
|
+
### \u{1F6A8} Design Tokens (MANDATORY)
|
|
523
|
+
You MUST use design tokens whenever appropriate. Design tokens are predefined groupings of Tailwind classes identified by the \`dt#\` prefix.
|
|
524
|
+
1. **Placement**: Always place design tokens at the START of the \`class\` attribute.
|
|
525
|
+
2. **Overrides**: Any Tailwind classes following a design token act as overrides, similar to how \`tailwind-merge\` works.
|
|
526
|
+
3. **Example**: \`<button class="dt#btn p-2">\` where \`p-2\` overrides the default padding in \`dt#btn\`.
|
|
527
|
+
|
|
528
|
+
**Available Design Tokens**:
|
|
529
|
+
{{DESIGN_TOKENS_LIST}}
|
|
530
|
+
|
|
531
|
+
# 3.1 DESIGN EXCELLENCE & CREATIVITY (CRITICAL)
|
|
532
|
+
|
|
533
|
+
Create distinctive, production-grade interfaces that avoid generic "AI slop" aesthetics. Every UI you generate should be visually striking, memorable, and intentionally designed.
|
|
534
|
+
|
|
535
|
+
### Design Thinking Process
|
|
536
|
+
Before generating HTML, commit to a BOLD aesthetic direction:
|
|
537
|
+
- **Purpose**: Consider what problem this interface solves and who uses it
|
|
538
|
+
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
|
|
539
|
+
|
|
540
|
+
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
|
|
541
|
+
|
|
542
|
+
### Design Excellence Guidelines
|
|
543
|
+
|
|
544
|
+
**Typography & Font Selection**:
|
|
545
|
+
- Choose fonts that are beautiful, unique, and interesting
|
|
546
|
+
- AVOID generic fonts: Arial, Inter, Roboto, system fonts
|
|
547
|
+
- Use distinctive font combinations that elevate the design
|
|
548
|
+
- Pair a distinctive display font with a refined body font
|
|
549
|
+
- Consider: font-serif, font-mono for variety, or use weight variations (font-light, font-bold) creatively
|
|
550
|
+
|
|
551
|
+
**Color & Visual Hierarchy**:
|
|
552
|
+
- Commit to a cohesive aesthetic with dominant colors and sharp accents
|
|
553
|
+
- Avoid timid, evenly-distributed palettes
|
|
554
|
+
- Use shadcn tokens creatively (not just bg-background everywhere)
|
|
555
|
+
- Consider bold color blocking, dramatic contrasts, or refined monochrome
|
|
556
|
+
- AVOID: purple gradients on white backgrounds, predictable color schemes
|
|
557
|
+
|
|
558
|
+
**Spatial Composition**:
|
|
559
|
+
- Create unexpected layouts with asymmetry, overlap, diagonal flow
|
|
560
|
+
- Use grid-breaking elements and generous negative space OR controlled density
|
|
561
|
+
- Avoid predictable grid patterns - be creative with positioning
|
|
562
|
+
- Consider: absolute positioning, creative flexbox/grid layouts, overlapping elements
|
|
563
|
+
|
|
564
|
+
**Backgrounds & Visual Details**:
|
|
565
|
+
- Create atmosphere and depth rather than defaulting to solid colors
|
|
566
|
+
- Consider: gradient meshes, subtle textures, geometric patterns
|
|
567
|
+
- Use layered transparencies, dramatic shadows, decorative borders
|
|
568
|
+
- Add visual interest with background patterns or accent elements
|
|
569
|
+
|
|
570
|
+
**NEVER Use Generic AI Aesthetics**:
|
|
571
|
+
- Overused font families (Inter, Roboto, Arial, system fonts)
|
|
572
|
+
- Cliched color schemes (purple gradients on white)
|
|
573
|
+
- Predictable layouts and component patterns
|
|
574
|
+
- Cookie-cutter designs lacking context-specific character
|
|
575
|
+
- NEVER converge on common choices (Space Grotesk, etc.) across generations
|
|
576
|
+
|
|
577
|
+
**Implementation Complexity**:
|
|
578
|
+
- Match complexity to the aesthetic vision
|
|
579
|
+
- Maximalist designs: elaborate code with extensive effects
|
|
580
|
+
- Minimalist designs: restraint, precision, careful spacing and typography
|
|
581
|
+
- Elegance comes from executing the vision well
|
|
582
|
+
|
|
583
|
+
**Variation Mandate**:
|
|
584
|
+
- Every design should be different
|
|
585
|
+
- Vary between light and dark themes
|
|
586
|
+
- Change fonts, layouts, color schemes between generations
|
|
587
|
+
- Interpret user requests creatively with unexpected choices
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
# 4. ATTRIBUTE & CUSTOM COMPONENT RULES
|
|
591
|
+
|
|
592
|
+
### chai-name
|
|
593
|
+
- Add \`chai-name\` attribute to tags
|
|
594
|
+
- Use descriptive section names (e.g., "Hero Section", "Navigation").
|
|
595
|
+
|
|
596
|
+
## Custom Web components(CRITICAL)
|
|
597
|
+
- Html can have custom web components. All web components starts with <chai- prefix.
|
|
598
|
+
- Use "about-this-component" attribute to understand what the component does.
|
|
599
|
+
- Check for can-move and can-delete attribute to check if the component can be moved or deleted.
|
|
600
|
+
- If an attribute value starts with #styles: treat it like class attribute with tailwind classes.
|
|
601
|
+
Use the attribute key to understand what the attribute does and apply classes. Maintain the #styles: at start followed by tailwind classes.
|
|
602
|
+
- Do not change the chai-type attribute. Do not remove any attributes.
|
|
603
|
+
|
|
604
|
+
## Data Binding (CRITICAL)
|
|
605
|
+
- Block prop values may contain binding expressions using double-curly syntax: {{path.to.data}}
|
|
606
|
+
- When you see {{...}} in an existing element's attribute value, it is a live data binding \u2014 NEVER remove or replace it with a static value. Preserve it exactly.
|
|
607
|
+
- You MAY use binding expressions when setting props on custom blocks, but ONLY using paths listed in the "Available Data Binding Paths" section below.
|
|
608
|
+
- Repeater blocks use a special prop: repeater-items="{{collectionName}}" where collectionName is the array to iterate.
|
|
609
|
+
- Inside a Repeater, child block props can reference each item's fields via {{$index.fieldName}}.
|
|
610
|
+
- Binding syntax must use exactly two curly braces: {{path}} \u2014 not {path} or \${{path}}.
|
|
611
|
+
- (global) paths are site-wide and available on every page. (page) paths are only available on this specific page type.
|
|
612
|
+
|
|
613
|
+
**Available Data Binding Paths**:
|
|
614
|
+
{{DATA_BINDING_PATHS}}
|
|
615
|
+
|
|
616
|
+
## Current Page Type
|
|
617
|
+
{{PAGE_TYPE_CONTEXT}}
|
|
618
|
+
|
|
619
|
+
## Available Custom Blocks
|
|
620
|
+
The following custom block types are registered and available. To ADD one of these, USE THE add_custom_block TOOL with camelCase props \u2014 do NOT generate <chai-*> HTML for them. When one already exists in the page you may edit its props via edit_block (keeping every attribute intact) or bind_prop.
|
|
621
|
+
|
|
622
|
+
{{CUSTOM_BLOCK_CATALOG}}
|
|
623
|
+
|
|
624
|
+
## Special Blocks
|
|
625
|
+
These may appear as web components INSIDE the html argument of add_blocks/edit_block:
|
|
626
|
+
|
|
627
|
+
### Repeater \u2014 <chai-repeater>
|
|
628
|
+
Used to render a list by iterating over an array data binding.
|
|
629
|
+
- Required prop: \`repeater-items="{{arrayPath}}"\` where \`arrayPath\` is an array-type binding path.
|
|
630
|
+
- Only bind to paths marked as arrays in "Available Data Binding Paths".
|
|
631
|
+
- Child blocks inside a Repeater reference the current item's fields using \`{{$index.fieldName}}\`.
|
|
632
|
+
- Example: \`<chai-repeater repeater-items="{{page.products}}"><h3>{{$index.name}}</h3></chai-repeater>\`
|
|
633
|
+
- Do NOT use a Repeater for static lists \u2014 only when iterating over bound data.
|
|
634
|
+
|
|
635
|
+
### PartialBlock \u2014 <chai-partial-block>
|
|
636
|
+
Partial blocks are global reusable blocks (e.g. header, footer, navigation) shared across pages.
|
|
637
|
+
- Reference them by their ID: \`<chai-partial-block partial-id="THE_PARTIAL_ID"></chai-partial-block>\`
|
|
638
|
+
- Never modify a partial block's content inline \u2014 only reference it. Their content is edited on the partial's own page.
|
|
639
|
+
- When asked to build a full page layout, call the \`get_partial_blocks\` tool to discover available partial IDs before placing them.
|
|
640
|
+
|
|
641
|
+
## Icons
|
|
642
|
+
- Icons use the **Lucide** icon set (https://lucide.dev/icons).
|
|
643
|
+
- Always include \`chai-type="Icon"\` on icon elements and preserve any existing attributes (e.g. \`bid\`).
|
|
644
|
+
- Express each icon as \`<chai-icon chai-type="Icon" icon-name="kebab-case-name" width="16" height="16">\`
|
|
645
|
+
e.g. \`<chai-icon chai-type="Icon" icon-name="search" width="16" height="16">\`, \`<chai-icon chai-type="Icon" icon-name="arrow-right" width="24" height="24">\`.
|
|
646
|
+
- Pick semantically appropriate icon names from Lucide; do not embed raw \`<svg>\` markup inside \`<chai-icon>\`.
|
|
647
|
+
|
|
648
|
+
### SVG
|
|
649
|
+
- Always include width/height attributes.
|
|
650
|
+
- Ensure correct \`viewBox\`.
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
# 5. SHADCN/THEME COLOR RULES (STRICT)
|
|
654
|
+
|
|
655
|
+
Use ONLY these semantic tokens:
|
|
656
|
+
- bg-background + text-foreground
|
|
657
|
+
- bg-card + text-card-foreground
|
|
658
|
+
- bg-primary + text-primary-foreground
|
|
659
|
+
- bg-secondary + text-secondary-foreground
|
|
660
|
+
- bg-muted + text-muted-foreground
|
|
661
|
+
- bg-accent + text-accent-foreground
|
|
662
|
+
- bg-destructive + text-destructive-foreground
|
|
663
|
+
- border-border, border-input
|
|
664
|
+
- ring-ring
|
|
665
|
+
|
|
666
|
+
### Contrast Rules
|
|
667
|
+
- Always maintain clear readable contrast.
|
|
668
|
+
- Never pair same-family bg/text tokens (e.g., bg-primary + text-primary).
|
|
669
|
+
|
|
670
|
+
### Hover Rules
|
|
671
|
+
- Primary buttons: hover:bg-primary/90
|
|
672
|
+
- Cards: hover:bg-accent hover:text-accent-foreground
|
|
673
|
+
- Links: text-muted-foreground hover:text-foreground
|
|
674
|
+
- Nav links: text-foreground/80 hover:text-foreground
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
# 6. RESPONSIVENESS RULES
|
|
678
|
+
|
|
679
|
+
- Mobile-first approach.
|
|
680
|
+
- Breakpoints: sm, md, lg, xl.
|
|
681
|
+
- Smooth scaling between sizes.
|
|
682
|
+
- At md breakpoint:
|
|
683
|
+
* Reduce grid columns (lg:4 \u2192 md:2 \u2192 sm:1)
|
|
684
|
+
* Adjust padding, spacing, and layouts
|
|
685
|
+
* Ensure nav/mobile menus behave correctly
|
|
686
|
+
* Ensure cards remain aligned
|
|
687
|
+
|
|
688
|
+
|
|
689
|
+
# 7. SPECIFIC UI PATTERNS
|
|
690
|
+
|
|
691
|
+
### Forms & Fields
|
|
692
|
+
- Always include proper \`type\` and \`autocomplete\` attributes for form fields (e.g., \`type="email" autocomplete="email"\`, \`type="text" autocomplete="given-name"\`, \`type="tel" autocomplete="tel"\`).
|
|
693
|
+
|
|
694
|
+
### Mobile Menu (<details><summary>)
|
|
695
|
+
- Use 'summary' containing an SVG hamburger icon.
|
|
696
|
+
- Mobile menu container sample:
|
|
697
|
+
absolute right-1 mt-2 min-w-64 bg-card border border-border rounded-lg shadow-lg z-50 p-4
|
|
698
|
+
- Menu item sample:
|
|
699
|
+
block py-2 px-4 hover:bg-accent rounded-md transition-colors
|
|
700
|
+
- Touch targets must be at least 44px tall.
|
|
701
|
+
|
|
702
|
+
### Accordions / Nested Menus
|
|
703
|
+
- Always use <details> and <summary>.
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
# 8. COMMON RULES
|
|
707
|
+
|
|
708
|
+
{{ANIMATION_RULES}}
|
|
709
|
+
{{IMAGE_RULES}}
|
|
710
|
+
|
|
711
|
+
# 9. CURRENT PAGE OUTLINE
|
|
712
|
+
|
|
713
|
+
Each line: bid | type | name | short text. Indentation = nesting. This reflects the page state at the start of this request; your applied tool calls update the real page immediately.
|
|
714
|
+
|
|
715
|
+
{{PAGE_OUTLINE}}
|
|
716
|
+
`.trim(),Wp=(t={})=>{let e=cb;return e=e.replace("{{ANIMATION_RULES}}",t!=null&&t.animation?sb:""),e=e.replace("{{IMAGE_RULES}}",lb),e}});var pb,db,gb,ub,mb,Yp,Qp=T(()=>{"use strict";_a();Dn();Ft();Ke();pb=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"]),db=t=>{let e={...Ut,...t||{}};return Object.entries(e).filter(([,r])=>r!=null&&!r.archived).map(([r,a])=>`- ${r}: ${a.value} (${a.name})`).join(`
|
|
717
|
+
`)},gb=t=>{let e=Ra(),r=Object.entries(e).filter(([a,n])=>{var o,l;let i=(o=n.type)!=null?o:a;return!i||pb.has(i)||!kn(n,t||"page")?!1:!!((l=n.label)!=null?l:n.props)});return r.length===0?"No custom blocks registered.":r.map(([a,n])=>{var d,u,g,h;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(([,f])=>!(f!=null&&f.styles)&&!(f!=null&&f.runtime)&&!(f!=null&&f.hidden)).map(([f,A])=>{var S,R,k;let C=Array.isArray(A==null?void 0:A.type)?A.type.join("|"):(S=A==null?void 0:A.type)!=null?S:"any",w=(A==null?void 0:A.default)!==void 0?` (default: ${JSON.stringify(A.default)})`:"",E=(R=n.aiProps)!=null&&R.includes(f)?" [AI-settable]":"";return` - ${f} (${C})${w}${E}: ${(k=A==null?void 0:A.title)!=null?k:f}`}).join(`
|
|
718
|
+
`):" (no declared props)",l=n.wrapper?" [wrapper \u2014 can contain child blocks]":"",c=i.replace(/([A-Z])/g,f=>`-${f.toLowerCase()}`).replace(/^-/,"");return`### ${i} \u2192 <chai-${c}>${l}
|
|
719
|
+
Description: ${(h=n.description)!=null?h:n.label}
|
|
720
|
+
Props:
|
|
721
|
+
${o}`}).join(`
|
|
722
|
+
|
|
723
|
+
`)},ub=t=>{let e=t!=null?t:{global:[],page:[]},r=e.global.map(i=>`- (global) {{${i}}}`),a=e.page.map(i=>`- (page) {{${i}}}`),n=[...r,...a];return n.length>0?n.join(`
|
|
724
|
+
`):"No data binding paths available for this page."},mb=t=>{var a;if(!t)return"Standard page (no specific page type).";let e=Ye(t),r=(a=e==null?void 0:e.description)!=null?a:e==null?void 0:e.helpText;return r?`Page type: ${t}
|
|
725
|
+
${r}`:`Page type: ${t}`},Yp=(t,e)=>{var a,n,i,o,l;let r=t;return r=r.replace("{{DESIGN_TOKENS_LIST}}",db(e.designTokens)),r=r.replace("{{CUSTOM_BLOCK_CATALOG}}",gb((a=e==null?void 0:e.options)==null?void 0:a.pageType)),r=r.replace("{{DATA_BINDING_PATHS}}",ub((n=e==null?void 0:e.options)==null?void 0:n.dataBindingPaths)),r=r.replace("{{PAGE_TYPE_CONTEXT}}",mb((i=e==null?void 0:e.options)==null?void 0:i.pageType)),e.context&&(r+=`
|
|
726
|
+
|
|
727
|
+
## Additional Information`,(o=e.context)!=null&&o.site&&(r+=`
|
|
728
|
+
|
|
729
|
+
## Website Information
|
|
730
|
+
${JSON.stringify(e.context.site)}`),(l=e.context)!=null&&l.page&&(r+=`
|
|
731
|
+
|
|
732
|
+
## Page Information
|
|
733
|
+
${JSON.stringify(e.context.page)}`)),r}});var be,zt,Hn,z,hb,Xp,Jp=T(()=>{"use strict";be=require("ai"),zt=require("drizzle-orm"),Hn=require("himalaya"),z=require("zod");_();W();hb=(t,e)=>{let r=new Set(e),a={},n=(o,l)=>{var d,u,g,h;let c=[...(d=l.children)!=null?d:[]];for(;c.length;){let f=c.pop();if(!f||f.type!=="element")continue;let A=(g=(u=f.attributes)==null?void 0:u.find(C=>C.key==="bid"))==null?void 0:g.value;A&&r.has(A)&&(a[A]=`NOTE: bid "${A}" is inside block "${o}" which was already returned. Use the "${o}" HTML slice to edit it, or request only "${A}".`,r.delete(A)),(h=f.children)!=null&&h.length&&c.push(...f.children)}},i=o=>{var c,d,u;if(r.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&&r.has(l)){a[l]=(0,Hn.stringify)([o]),r.delete(l),n(l,o);return}(u=o.children)==null||u.forEach(i)};(0,Hn.parse)(t).forEach(i);for(let o of r)a[o]=`ERROR: no block found with bid "${o}". Check the page outline for valid bids.`;return a},Xp=({pageHtml:t})=>({read_block_html:(0,be.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,be.zodSchema)(z.z.object({blockIds:z.z.array(z.z.string()).min(1).describe("bids of the blocks to read")})),execute:async({blockIds:e})=>hb(t,e)}),edit_block:(0,be.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,be.zodSchema)(z.z.object({task:z.z.string().describe("Short user-facing progress label, e.g. 'Redesigning hero section'"),blockId:z.z.string().describe("bid of the block to replace"),html:z.z.string().describe("Full replacement HTML for the target element")}))}),add_blocks:(0,be.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,be.zodSchema)(z.z.object({task:z.z.string().describe("Short user-facing progress label, e.g. 'Adding pricing section'"),parentId:z.z.string().nullish().describe("bid of the parent container; omit to add at page root"),position:z.z.number().nullish().describe("Child index position; -1 or omit to append at end"),html:z.z.string().describe("HTML to insert")}))}),remove_blocks:(0,be.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,be.zodSchema)(z.z.object({ids:z.z.array(z.z.string()).min(1).describe("Array of block IDs (bid attribute values) to remove"),task:z.z.string().nullish().describe("Short user-facing progress label, e.g. 'Removing testimonial section'")}))}),add_custom_block:(0,be.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,be.zodSchema)(z.z.object({task:z.z.string().nullish().describe("Short user-facing progress label"),type:z.z.string().describe("Block type exactly as listed in the catalog, e.g. 'ProductCard'"),parentId:z.z.string().nullish().describe("bid of the parent block, or omit to add at page root"),position:z.z.number().nullish().describe("Child index position; -1 or omit to append at end"),props:z.z.record(z.z.string(),z.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,be.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,be.zodSchema)(z.z.object({task:z.z.string().nullish().describe("Short user-facing progress label"),blockId:z.z.string().describe("bid of the block to update"),propName:z.z.string().describe("camelCase prop name on the block"),bindingPath:z.z.string().describe("Full binding expression including double braces, e.g. '{{product.name}}' or '{{$index.title}}'")}))}),get_partial_blocks:(0,be.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,be.zodSchema)(z.z.object({})),execute:async()=>{let{appId:e}=Mt(),{data:r,error:a}=await b(()=>y.select({id:s.appPages.id,name:s.appPages.name,metadata:s.appPages.metadata,pageType:s.appPages.pageType}).from(s.appPages).where((0,zt.and)((0,zt.eq)(s.appPages.app,e),(0,zt.eq)(s.appPages.slug,""),(0,zt.eq)(s.appPages.lang,""),(0,zt.isNull)(s.appPages.deletedAt))));if(a)throw new Error(`Failed to fetch partial blocks: ${a.message}`);let n={};return r&&r.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 zn,Te,fb,yb,bb,qn,Zp=T(()=>{"use strict";zn=require("ai"),Te=require("zod");Bn();Nn();Kp();xt();Qp();Jp();fb=Te.z.record(Te.z.string(),Te.z.object({name:Te.z.string(),value:Te.z.string(),description:Te.z.string().optional(),archived:Te.z.boolean().optional()})).optional(),yb=12,bb=t=>{let e=t.findLastIndex(r=>r.role==="assistant");return t.map((r,a)=>r.role!=="assistant"||a===e||!Array.isArray(r.parts)?r:{...r,parts:r.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})})},qn=class extends ce{getValidationSchema(){return Te.z.object({messages:Te.z.array(Te.z.any()).min(1),model:Te.z.string().optional(),context:Te.z.any().optional(),designTokens:fb,pageHtml:Te.z.string().optional(),pageOutline:Te.z.string().optional(),options:Te.z.any().optional()})}async execute(e){var l,c,d,u;this.context||mt(new We("Context not set. Please try again.","INVALID_REQUEST",500)),(!e.messages||e.messages.length===0)&&mt(new We("No messages provided. Please enter a prompt.","INVALID_REQUEST",400));let r=Wp({animation:(l=e==null?void 0:e.options)==null?void 0:l.animation});r=r.replace("{{PAGE_OUTLINE}}",((c=e.pageOutline)==null?void 0:c.trim())||"The page is currently empty."),r=Yp(r,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&&(r+=`
|
|
734
|
+
|
|
735
|
+
## Currently Selected Block
|
|
736
|
+
The user currently has the block with bid "${n}" selected. Prioritize changes to this block unless the request explicitly requires broader changes.`);let i=bb(e.messages.slice(-yb)),o=await(0,zn.convertToModelMessages)(i,{ignoreIncompleteToolCalls:!0});return this.streamChaiBuilderUIMessageResponse({model:e.model,system:r,messages:o,temperature:.7,tools:Xp({pageHtml:(u=e.pageHtml)!=null?u:""}),stopWhen:(0,zn.stepCountIs)(8)})}}});var Ae,jn,ed=T(()=>{"use strict";Ae=require("zod");Ln();xt();jn=class extends ce{getValidationSchema(){return Ae.z.object({messages:Ae.z.array(Ae.z.any()),model:Ae.z.string().optional(),context:Ae.z.any().optional(),designTokens:Ae.z.any().optional(),images:Ae.z.array(Ae.z.string()).optional(),attachments:Ae.z.array(Ae.z.any()).optional(),initiator:Ae.z.literal("GENERATE_IMAGE"),image:Ae.z.object({lastImage:Ae.z.string().optional(),aspectRatio:Ae.z.string().optional(),quality:Ae.z.number().optional()}).optional()})}async execute(e){var f,A,C;if(!this.context)return{_streamingResponse:!0,_streamResult:{textStream:this.createErrorStream(new Error("Context not set. Please try again."))}};let r=e.messages.filter(w=>w.role!=="system"),a=r[r.length-1];if(!a)return{_streamingResponse:!0,_streamResult:{textStream:this.createErrorStream(new Error("No user message found in the request."))}};let n=Ar(e.initiator),i=typeof a.content=="string"?a.content:"Generate a random image",o=n?`${n}
|
|
737
|
+
|
|
738
|
+
${i}`:i,l=((f=e.image)==null?void 0:f.aspectRatio)||"16:9",c=((A=e.image)==null?void 0:A.quality)||80,u=(C={"1:1":"1024x1024","16:9":"1536x1024","9:16":"1024x1536","4:3":"1536x1024","3:4":"1024x1536"}[l])!=null?C:"1536x1024",g=new TextEncoder;return{_streamingResponse:!0,_streamResult:{textStream:new ReadableStream({start:async w=>{var E;try{let R=(await this.generateImage({model:e.model,prompt:(E=e.image)!=null&&E.lastImage?{text:o,images:[e.image.lastImage]}:o,size:u,providerOptions:{openai:{quality:c>=90?"high":c>=50?"medium":"low"}}})).image;if(!(R!=null&&R.base64))throw new Error("Failed to generate image. No valid image data received from the AI.");let k=R.base64.startsWith("data:")?R.base64:`data:${R.mediaType};base64,${R.base64}`;w.enqueue(g.encode(k)),w.close()}catch(S){let R=S instanceof Error?S.message:String(S);w.enqueue(g.encode(`--START--
|
|
739
|
+
--MSG=${R}--
|
|
740
|
+
--END--`)),w.close()}}})}}}}});var xr,Vn,td=T(()=>{"use strict";xr=require("zod");N();xt();Vn=class extends ce{getValidationSchema(){return xr.z.object({type:xr.z.enum(["site","page","prompt"]),content:xr.z.string().min(1),siteContext:xr.z.string().optional(),model:xr.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 r="";e.type==="site"?r=`You are an expert SEO copywriter. The user will provide a rough draft of their website's business context. Enhance it to be professional, clear, and comprehensive. Synthesize the text into a well-structured summary. Output ONLY the enhanced text. Format the output with bold keys as follows:
|
|
741
|
+
|
|
742
|
+
**Business Name & Industry**: [Content]
|
|
743
|
+
**Target Audience**: [Content]
|
|
744
|
+
**Unique Value Proposition**: [Content]
|
|
745
|
+
**Key Products/Services**: [Content]
|
|
746
|
+
|
|
747
|
+
Keep it to a maximum of 150 words.`:e.type==="page"?r=`You are an expert SEO copywriter. The user will provide a rough draft of a page's context. Enhance it to be professional, clear, and concise. Do not use placeholder text; instead, use details from the site context if available. Synthesize the text into a well-structured summary. Output ONLY the enhanced text. Format the output with bold keys as follows:
|
|
748
|
+
|
|
749
|
+
**Page Purpose**: [Content]
|
|
750
|
+
**Target Keywords**: [Content]
|
|
751
|
+
**Primary H1 Goal**: [Content]
|
|
752
|
+
|
|
753
|
+
Keep it to a maximum of 150 words.`:r="You are an expert AI prompt engineer. The user will provide a rough draft of a prompt. Enhance it to be clear, detailed, and optimized for high-quality AI generation. Add necessary context, constraints, and structural guidance to make the prompt more effective. Output ONLY the enhanced prompt text.";let a=` ${e.siteContext?`
|
|
754
|
+
|
|
755
|
+
Site Context: ${e.siteContext}
|
|
756
|
+
|
|
757
|
+
`:""} Please enhance the following rough draft:
|
|
758
|
+
|
|
759
|
+
${e.content}`;return{success:!0,enhancedContent:(await this.generateText({model:e.model||"google/gemini-3-flash",system:r,prompt:a})).text.trim()}}}});var rd,It,Wn,ad=T(()=>{"use strict";rd=require("ai"),It=require("zod");N();xt();Wn=class extends ce{getValidationSchema(){return It.z.object({url:It.z.string().url(),languages:It.z.array(It.z.string()).min(1),model:It.z.string().optional()})}buildSchema(e){let r={};for(let a of e)r[a]=It.z.string().max(250).describe(`Image description in ${a} (max 250 chars)`);return It.z.object({translations:It.z.object(r).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 r=`Generate a very concise image description (maximum 250 characters) for the attached image.
|
|
760
|
+
|
|
761
|
+
LANGUAGES: ${e.languages.join(", ")}
|
|
762
|
+
|
|
763
|
+
You MUST provide the description for each of these language codes.`,a=await this.generateText({model:e.model||"google/gemini-3-flash",experimental_output:rd.Output.object({schema:this.buildSchema(e.languages)}),system:`You are an expert accessibility (a11y) image description generator.
|
|
764
|
+
|
|
765
|
+
INSTRUCTIONS:
|
|
766
|
+
1. Analyze the image and generate a very concise description (maximum 250 characters).
|
|
767
|
+
2. Provide the description in all requested languages.
|
|
768
|
+
3. Your response MUST be a JSON object with a "translations" key.`,messages:[{role:"user",content:[{type:"text",text:r},{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 nd(t){let e="";if(t){if(t.site&&Object.keys(t.site).length>0){let r=Object.entries(t.site).map(([a,n])=>`${a}: ${n}`).join(", ");e+=`
|
|
769
|
+
Site Context: ${r}`}if(t.page&&Object.keys(t.page).length>0){let r=Object.entries(t.page).map(([a,n])=>`${a}: ${n}`).join(", ");e+=`
|
|
770
|
+
Page Context: ${r}`}}return e}var id=T(()=>{"use strict"});var sd,st,od,Kn,ld=T(()=>{"use strict";sd=require("ai"),st=require("zod");N();xt();id();od={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"},Kn=class extends ce{getValidationSchema(){return st.z.object({context:st.z.any().optional(),dynamic:st.z.boolean(),pageContent:st.z.string(),field:st.z.enum(["title","description","ogTitle","ogDescription","searchTitle","searchDescription","jsonLD"]),lang:st.z.string().nonempty(),keyword:st.z.string().optional(),model:st.z.string().optional()})}async execute(e){var c;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let r=nd(e.context),a=`${od[e.field]}${r}
|
|
771
|
+
Page Content: ${e.pageContent}
|
|
772
|
+
Dynamic: ${e.dynamic}
|
|
773
|
+
Language: ${e.lang}`,n=await this.generateText({model:e.model||"google/gemini-3-flash",experimental_output:sd.Output.object({schema:st.z.object({field:st.z.string()})}),system:`You are a SEO expert. Follow the instructions carefully.
|
|
774
|
+
Return ONLY plain string values except for json ld. For JSONLD, remove \`\`\`json\`\`\` and \`\`\`\`\` and return only valid JSON.
|
|
775
|
+
Instructions: ${od[e.field]}
|
|
776
|
+
${e.keyword?`Optimize the generated content for "${e.keyword}" keyword(s)`:""}${r}
|
|
777
|
+
Page Content: ${e.pageContent}
|
|
778
|
+
Dynamic: ${e.dynamic}
|
|
779
|
+
Language: ${e.lang}`,prompt:a}),i=typeof((c=n.experimental_output)==null?void 0:c.field)=="string"?n.experimental_output.field:void 0,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 Tb(t,e){let r=t.length>0?t.join(", "):"ui-sans-serif, system-ui, sans-serif",a=Ss.map(i=>`--${i}`).join(", "),n=`You are a professional UI Designer and Theme Architect.
|
|
780
|
+
Your task is to generate a comprehensive design system theme based on the user's description.
|
|
781
|
+
|
|
782
|
+
AVAILABLE FONTS: ${r}
|
|
783
|
+
You MUST only use the exact family names from this list for --font-sans, --font-heading, and --font-body.`;return e&&(n+=`
|
|
784
|
+
|
|
785
|
+
DESIGN CONTEXT:
|
|
786
|
+
The user has provided branding hints (Look, Tone, etc.). Use these as stylistic guides to ensure the colors and typography align with the brand, but prioritize the user's specific theme description.`),n+=`
|
|
787
|
+
|
|
788
|
+
STRICT CONSTRAINTS:
|
|
789
|
+
1. Output ONLY a valid CSS block containing BOTH :root (Light Mode) and .dark (Dark Mode) selectors.
|
|
790
|
+
2. REQUIRED Color Variables (must appear in BOTH :root AND .dark):
|
|
791
|
+
${a}.
|
|
792
|
+
3. REQUIRED Typography Variables (in :root only): --font-sans, --font-heading, --font-body.
|
|
793
|
+
4. REQUIRED Shape Variable (in :root only): --radius (MUST be in pixels, e.g. "8px").
|
|
794
|
+
5. Do NOT include ANY explanations, markdown code blocks (\`\`\`css), comments, or conversational text.
|
|
795
|
+
6. Do NOT wrap the output in backticks or code fences.
|
|
796
|
+
7. Colors MUST be in hex format (e.g. #ffffff) or HSL format (e.g. hsl(210 40% 98%)).
|
|
797
|
+
8. Light and dark mode colors must be harmonious and provide good contrast for readability.
|
|
798
|
+
9. Your output must start with ":root {" and contain nothing before it.`,n}function Ab(t){let e=t.trim();e=e.replace(/^```(?:css)?\s*/i,""),e=e.replace(/\s*```\s*$/i,"");let r=e.indexOf(":root");return r>0&&(e=e.substring(r)),e.trim()}var St,Ss,Yn,cd=T(()=>{"use strict";St=require("zod");N();xt();Ss=["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"];Yn=class extends ce{getValidationSchema(){return St.z.object({branding:St.z.object({look:St.z.string().optional(),tone:St.z.string().optional()}).optional(),prompt:St.z.string().min(1,"A theme description prompt is required"),availableFonts:St.z.array(St.z.string()),model:St.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 r=e.branding?`
|
|
799
|
+
Branding Hints: Look: ${e.branding.look||"N/A"}, Tone: ${e.branding.tone||"N/A"}`:"",a=Tb(e.availableFonts,!!e.branding),n=`Generate a theme for the following description: "${e.prompt}"${r}`;try{let l=await this.generateText({model:e.model||"google/gemini-3-flash",system:a,prompt:n}),c=Ab(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=Ss.filter(f=>!d.includes(`--${f}`)),h=Ss.filter(f=>!u.includes(`--${f}`));if(g.length>0||h.length>0)throw console.error("AI generated incomplete theme CSS. Missing variables:",{root:g,dark:h}),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 pd,Qn,dd=T(()=>{"use strict";pd=require("zod");Oa();D();Qn=class extends P{getValidationSchema(){return pd.z.any()}async execute(){var a;if(!((a=this.context)!=null&&a.userId))return{success:!1,addons:[],error:"User not authenticated"};let e=await qp(this.context.userId);if(!(e!=null&&e.clientId))return{success:!1,addons:[],error:"User plan not found"};let r=await Is(e.clientId);return r!=null&&r.addOns?{success:!0,addons:r.addOns.map(n=>({id:n.id,name:n.name,credits:n.credits,price:n.price,currency:"USD"}))}:{success:!0,addons:[]}}}});var Ir,Rs,Xn,gd=T(()=>{"use strict";Ir=require("drizzle-orm"),Rs=require("zod");_();N();D();Xn=class extends P{getValidationSchema(){return Rs.z.object({pageId:Rs.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r}=this.context,{data:a,error:n}=await b(()=>y.query.apps.findFirst({where:(0,Ir.eq)(s.apps.id,r),columns:{ai:!0}}));n&&console.error("Error fetching app AI context:",n);let i=null;if(e.pageId){let{data:o,error:l}=await b(()=>y.query.appPages.findFirst({where:(0,Ir.and)((0,Ir.eq)(s.appPages.id,e.pageId),(0,Ir.eq)(s.appPages.app,r)),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 ud,Jn,md=T(()=>{"use strict";ud=require("zod");Oa();D();se();Jn=class extends P{getValidationSchema(){return ud.z.any()}async execute(){var r;if(!((r=this.context)!=null&&r.appId))return{success:!1,credits:null,error:"App context not found"};if(!Er())return{success:!0,credits:null};let e=await xs(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 Sr,Fa,Zn,hd=T(()=>{"use strict";Sr=require("drizzle-orm"),Fa=require("zod");_();N();D();Zn=class extends P{getValidationSchema(){return Fa.z.object({type:Fa.z.enum(["app","page"]),aiData:Fa.z.any(),pageId:Fa.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r}=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 b(async()=>{await y.update(s.apps).set({ai:e.aiData}).where((0,Sr.eq)(s.apps.id,r))});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 b(async()=>y.update(s.appPages).set({ai:e.aiData}).where((0,Sr.and)((0,Sr.eq)(s.appPages.id,e.pageId),(0,Sr.eq)(s.appPages.app,r))).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 pr={};rt(pr,{BuilderActionsRegistry:()=>Pb,ChaiActionsRegistry:()=>ei,default:()=>wb,getChaiAction:()=>ti});var fd,ei,vs,Pb,ti,wb,jt=T(()=>{"use strict";fd=require("lodash-es");Ke();ei=class t{constructor(){this.actions={}}static getInstance(){return t.instance||(t.instance=new t),t.instance}register(e,r){this.actions[e]=r}registerActions(e){for(let[r,a]of Object.entries(e))this.register(r,a)}getAction(e){return(0,fd.get)(this.actions,e)}getAllActions(){return this.actions}},vs=ei.getInstance(),Pb=vs,ti=t=>{let e=vs.getAction(t);if(e)return e;let r=Ua(t);if(r)return r},wb=vs});var H,_s,yd,De,Qe,Rr=T(()=>{"use strict";H=require("drizzle-orm"),_s=require("lodash-es"),yd=require("nanoid");_();De=class De{constructor(e,r){this.appId=e;this.userId=r}appendUpdatedAtToUrl(e,r){if(!e||!r)return e||"";try{let a=new URL(e),n=new Date(r).getTime();return a.searchParams.set("t",n.toString()),a.toString()}catch(a){return e||""}}getBufferFromBase64(e){try{let r=e.split(",")[1]||e;return Buffer.from(r,"base64")}catch(r){throw new Error("Invalid base64 string format")}}getMimeType(e){var n;let r=((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"}[r]||"application/octet-stream"}getImageDimensions(e){if(e.length>=De.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>=De.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>=De.MIN_WEBP_VP8L_LENGTH&&e[12]===86&&e[13]===80&&e[14]===56&&e[15]===76){let r=e.readUInt32LE(21);return{width:(r&16383)+1,height:(r>>14&16383)+1}}if(e.length>=De.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>=De.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 r=2;for(;r<e.length-1;){if(e[r]!==255){r++;continue}let a=e[r+1];if(a>=192&&a<=195||a>=197&&a<=199||a>=201&&a<=203||a>=205&&a<=207){if(r+De.MIN_JPEG_SOF_BYTES_FROM_MARKER<=e.length)return{width:e.readUInt16BE(r+7),height:e.readUInt16BE(r+5)};break}if(r+4>e.length)break;let n=e.readUInt16BE(r+2);r+=2+n}}return{width:0,height:0}}async uploadImageFile(e,r,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",h=`${(0,_s.kebabCase)(u)}.${g}`,f=r?`${this.appId}/${r}`:this.appId,{getChaiAction:A}=await Promise.resolve().then(()=>(jt(),pr)),C=A("UPLOAD_TO_STORAGE");if(!C)throw new Error("UPLOAD_TO_STORAGE action not found");C.setContext({appId:this.appId,userId:this.userId});let w=await C.execute({file:o.toString("base64"),fileName:h,contentType:l,folder:f});if(w.error)throw new Error(w.error);let{width:E,height:S}=this.getImageDimensions(o);return{url:w.data.url,thumbnailUrl:w.data.url,size:o.length,width:E,height:S,mimeType:l}}catch(o){return console.error("Upload image error:",o),{error:o instanceof Error?o.message:"Unknown error"}}}async uploadSvgFile(e,r,a){try{let n=this.getBufferFromBase64(e),i,o;try{let A=n.toString("utf-8"),C=A.match(/\bwidth=["'](\d+)/),w=A.match(/\bheight=["'](\d+)/);C&&(i=parseInt(C[1],10)),w&&(o=parseInt(w[1],10))}catch(A){}let l=a.split("."),c=l.length>1?l.slice(0,-1).join("."):a,d=`${(0,_s.kebabCase)(c)}.svg`,u=r?`${this.appId}/${r}`:this.appId,{getChaiAction:g}=await Promise.resolve().then(()=>(jt(),pr)),h=g("UPLOAD_TO_STORAGE");if(!h)throw new Error("UPLOAD_TO_STORAGE action not found");h.setContext({appId:this.appId,userId:this.userId});let f=await h.execute({file:n.toString("base64"),fileName:d,contentType:"image/svg+xml",folder:u});if(f.error)throw new Error(f.error);return{url:f.data.url,thumbnailUrl:f.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:r,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=C=>{let w=C.split("."),E=(w.length>1?w.pop().toLowerCase():"webp")||"webp";return`${w.join(".").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,30)||"image"}-${(0,yd.nanoid)(10)}.${E}`},g=d?await this.uploadSvgFile(e,r,a):await this.uploadImageFile(e,r,u(a),i!=null?i:!0);if("error"in g)return g;let h={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:r,type:g.mimeType.startsWith("image/")?"image":"file",createdBy:this.userId,updatedAt:new Date().toISOString()},{data:f,error:A}=await b(async()=>{let[C]=await y.insert(s.appAssets).values(h).returning();return C});if(A)throw new Error(`Failed to store asset in database: ${A.message}`);if(!f)throw new Error("Failed to retrieve created asset");return{...f,url:this.appendUpdatedAtToUrl(f.url,f.updatedAt),thumbnailUrl:this.appendUpdatedAtToUrl(f.thumbnailUrl,f.updatedAt)}}catch(d){return{error:d instanceof Error?d.message:"Unknown error occurred"}}}async getAsset({id:e}){try{let{data:r,error:a}=await b(()=>y.query.appAssets.findFirst({where:(0,H.and)((0,H.eq)(s.appAssets.id,e),(0,H.eq)(s.appAssets.app,this.appId))}));if(a)throw new Error(`Failed to fetch asset: ${a.message}`);if(!r)throw new Error("Asset not found");return{...r,url:this.appendUpdatedAtToUrl(r.url,r.updatedAt),thumbnailUrl:this.appendUpdatedAtToUrl(r.thumbnailUrl||"",r.updatedAt)}}catch(r){return{error:r instanceof Error?r.message:"Unknown error occurred"}}}async getAssets({search:e="",page:r=1,limit:a=20}={}){var n;try{let i=(r-1)*a,o=(0,H.and)((0,H.eq)(s.appAssets.app,this.appId),(0,H.isNull)(s.appAssets.deletedAt));e&&(o=(0,H.and)(o,(0,H.or)((0,H.ilike)(s.appAssets.name,`%${e}%`),(0,H.ilike)(H.sql`${s.appAssets.description}::text`,`%${e}%`))));let{data:l,error:c}=await b(()=>y.select({value:(0,H.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 b(()=>y.query.appAssets.findMany({where:o,orderBy:(0,H.desc)(s.appAssets.createdAt),limit:a,offset:i}));if(g)throw new Error(g.message);return{assets:(u||[]).map(f=>({...f,url:this.appendUpdatedAtToUrl(f.url,f.updatedAt),thumbnailUrl:this.appendUpdatedAtToUrl(f.thumbnailUrl||"",f.updatedAt)})),total:d,page:r,pageSize:a}}catch(i){return{error:i instanceof Error?i.message:"Unknown error occurred"}}}async deleteAsset(e){try{let{data:r,error:a}=await b(()=>y.query.appAssets.findMany({where:(0,H.and)((0,H.inArray)(s.appAssets.id,e),(0,H.eq)(s.appAssets.app,this.appId))}));if(a)throw new Error(`Failed to fetch assets: ${a.message}`);if(!r||r.length===0)throw new Error("Assets not found");for(let o of r)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(()=>(jt(),pr)),h=g("DELETE_FROM_STORAGE");if(h&&(h.setContext({appId:this.appId,userId:this.userId}),await h.execute({key:u})),o.thumbnailUrl&&o.thumbnailUrl!==o.url){let A=new URL(o.thumbnailUrl).pathname.split("/"),C=A.indexOf("dam-assets");if(C!==-1){let w=A.slice(C+1).join("/");h&&await h.execute({key:w})}}}}catch(l){console.warn("Failed to delete from storage, continuing with database deletion:",l)}let{data:n,error:i}=await b(()=>y.delete(s.appAssets).where((0,H.and)((0,H.inArray)(s.appAssets.id,e),(0,H.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(r){return{error:r instanceof Error?r.message:"Unknown error occurred"}}}async updateAsset({id:e,file:r,description:a}){var n,i,o,l;try{let{data:c,error:d}=await b(()=>y.query.appAssets.findFirst({where:(0,H.and)((0,H.eq)(s.appAssets.id,e),(0,H.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),r){let A=((n=c.format)==null?void 0:n.toLowerCase())==="svg"||r.includes("data:image/svg+xml")?await this.uploadSvgFile(r,c.folderId,c.name||"asset.svg"):await this.uploadImageFile(r,c.folderId,c.name||"asset.png",!0);if("error"in A)return A;u.url=A.url,u.thumbnailUrl=A.thumbnailUrl,u.size=(i=A.size)==null?void 0:i.toString(),u.width=(o=A.width)==null?void 0:o.toString(),u.height=(l=A.height)==null?void 0:l.toString(),u.format=A.mimeType.split("/")[1]}let{error:g}=await b(()=>y.update(s.appAssets).set(u).where((0,H.eq)(s.appAssets.id,e)));if(g)throw new Error(`Failed to update asset: ${g.message}`);let{data:h}=await b(()=>y.query.appAssets.findFirst({where:(0,H.eq)(s.appAssets.id,e)}));if(!h)throw new Error("Updated asset not found");return{...h,url:this.appendUpdatedAtToUrl(h.url,h.updatedAt),thumbnailUrl:this.appendUpdatedAtToUrl(h.thumbnailUrl||"",h.updatedAt)}}catch(c){return{error:c instanceof Error?c.message:"Unknown error occurred"}}}};De.MIN_PNG_LENGTH=24,De.MIN_GIF_LENGTH=10,De.MIN_WEBP_VP8L_LENGTH=25,De.MIN_WEBP_VP8X_LENGTH=30,De.MIN_WEBP_VP8_LENGTH=30,De.MIN_JPEG_SOF_BYTES_FROM_MARKER=9;Qe=De});var Rt,Cb,ri,bd=T(()=>{"use strict";Rt=require("zod");N();D();Rr();Cb=Rt.z.object({name:Rt.z.string(),file:Rt.z.string(),folderId:Rt.z.string().optional().nullable(),description:Rt.z.record(Rt.z.string(),Rt.z.string()).optional(),optimize:Rt.z.boolean().optional().default(!0)}),ri=class extends P{getValidationSchema(){return Cb}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Qe(r,a).upload(e);if(i.error)throw new m(i.error,"CREATE_FAILED");return i}}});var ai,Eb,ni,Td=T(()=>{"use strict";ai=require("zod");N();D();Rr();Eb=ai.z.object({ids:ai.z.array(ai.z.string().uuid()).min(1,"At least one asset ID is required")}),ni=class extends P{getValidationSchema(){return Eb}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Qe(r,a).deleteAsset(e.ids);if("error"in i)throw new m(i.error,"DELETE_FAILED");return i}}});async function vr(t,e){var i;if(!O(1))return fetch(t,e);let r=typeof t=="string"?t:t instanceof URL?t.href:t.url,a=(i=e==null?void 0:e.method)!=null?i:typeof t!="string"&&!(t instanceof URL)?t.method:"GET",n=performance.now();try{let o=await fetch(t,e);return ys(a,r,Math.round(performance.now()-n),o.status),o}catch(o){throw ys(a,r,Math.round(performance.now()-n),0),o}}var ex,ks=T(()=>{"use strict";ex=require("server-only");Ht();ot()});var dr,xb,ii,Ad=T(()=>{"use strict";dr=require("zod");D();ks();xb=dr.z.object({url:dr.z.string(),name:dr.z.string(),description:dr.z.record(dr.z.string(),dr.z.string()).optional()}),ii=class extends P{constructor(){super()}getValidationSchema(){return xb}async execute(e){try{if(!this.context)return{error:"Context not set",status:400};let{userId:r}=this.context;if(!r)return{error:"User ID is required",status:401};let a=await vr(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(()=>(jt(),pr)),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(r){return console.error("DOWNLOAD_SEARCH_IMAGE error:",r),{error:r instanceof Error?r.message:"Unknown error",status:500}}}}});var Ds,Ib,oi,Pd=T(()=>{"use strict";Ds=require("zod");N();D();Rr();Ib=Ds.z.object({id:Ds.z.string().uuid()}),oi=class extends P{getValidationSchema(){return Ib}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Qe(r,a).getAsset(e);if(i.error)throw new m(i.error,"FETCH_FAILED",404);return i}}});var Ga,Sb,si,wd=T(()=>{"use strict";Ga=require("zod");N();D();Rr();Sb=Ga.z.object({search:Ga.z.string().optional().default(""),page:Ga.z.number().optional().default(1),limit:Ga.z.number().optional().default(20)}),si=class extends P{getValidationSchema(){return Sb}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Qe(r,a).getAssets(e);if("error"in i)throw new m(i.error,"FETCH_FAILED");return i}}});var vt,Rb,vb,_b,kb,li,Cd=T(()=>{"use strict";vt=require("zod");D();ks();Rb="https://pixabay.com/api/",vb="https://api.unsplash.com/search/photos",_b="https://api.pexels.com/v1/search",kb=vt.z.object({query:vt.z.string(),page:vt.z.number().optional().default(1),limit:vt.z.number().optional().default(20),provider:vt.z.string().optional(),filters:vt.z.record(vt.z.string(),vt.z.string()).optional()}),li=class extends P{getValidationSchema(){return kb}async execute(e){try{let{query:r,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,h=i&&i!=="all"?n:Math.ceil(n/g);if(l&&(!i||i==="pixabay")){let E=`${Rb}?key=${l}&q=${encodeURIComponent(r)}&page=${a}&per_page=${h}${r?"":"&editors_choice=true"}`,S="photo";o!=null&&o.image_type&&o.image_type!=="all"&&o.image_type!=="default"&&(S=o.image_type),E+=`&image_type=${S}`,o!=null&&o.orientation&&o.orientation!=="all"&&o.orientation!=="default"&&(E+=`&orientation=${o.orientation}`),o!=null&&o.color&&o.color!=="all"&&o.color!=="default"&&(E+=`&colors=${o.color}`),o!=null&&o.order_by&&o.order_by!=="all"&&o.order_by!=="default"&&(E+=`&order=${o.order_by}`),u.push(vr(E).then(async R=>{if(!R.ok)return{assets:[],total:0};let k=await R.json();return{assets:k.hits.map(x=>({id:`pixabay-${x.id}`,name:x.tags,url:x.largeImageURL,thumbnailUrl:x.webformatURL,type:"image",width:x.imageWidth,height:x.imageHeight||x.height,size:x.imageSize,provider:"pixabay",authorName:x.user,authorUrl:`https://pixabay.com/users/${x.user}-${x.user_id}/`,authorThumbnailUrl:x.userImageURL,providerUrl:"https://pixabay.com/",providerLogoUrl:null})),total:k.totalHits}}))}if(c&&(!i||i==="unsplash")){let E=`${vb}?query=${encodeURIComponent(r)}&page=${a}&per_page=${h}&client_id=${c}`;r&&o&&(o.orientation&&o.orientation!=="all"&&o.orientation!=="default"&&(E+=`&orientation=${o.orientation}`),o.color&&o.color!=="all"&&o.color!=="default"&&(E+=`&color=${o.color}`),o.order_by&&o.order_by!=="all"&&o.order_by!=="default"&&(E+=`&order_by=${o.order_by}`)),u.push(vr(E,{headers:{"Accept-Version":"v1"}}).then(async S=>{if(!S.ok)return{assets:[],total:0};let R=await S.json(),k=r?R.results:R,x=r?R.total:200;return{assets:k.map(G=>{var j;return{id:`unsplash-${G.id}`,name:G.description||G.alt_description||"Unsplash Image",url:G.urls.regular,thumbnailUrl:G.urls.small,type:"image",width:G.width,height:G.height,size:0,provider:"unsplash",authorName:G.user.name,authorUrl:G.user.links.html,authorThumbnailUrl:(j=G.user.profile_image)==null?void 0:j.small,providerUrl:"https://unsplash.com/",providerLogoUrl:null}}),total:x}}))}if(d&&(!i||i==="pexels")){let S=!r?`https://api.pexels.com/v1/curated?page=${a}&per_page=${h}`:`${_b}?query=${encodeURIComponent(r)}&page=${a}&per_page=${h}`;o!=null&&o.orientation&&o.orientation!=="all"&&o.orientation!=="default"&&(S+=`&orientation=${o.orientation}`),o!=null&&o.size&&o.size!=="all"&&o.size!=="default"&&(S+=`&size=${o.size}`),o!=null&&o.color&&o.color!=="all"&&o.color!=="default"&&(S+=`&color=${o.color}`),u.push(vr(S,{headers:{Authorization:d}}).then(async R=>{if(!R.ok)return{assets:[],total:0};let k=await R.json();return{assets:(k.photos||[]).map(x=>({id:`pexels-${x.id}`,name:x.alt||"Pexels Image",url:x.src.large2x,thumbnailUrl:x.src.medium,type:"image",width:x.width,height:x.height,size:0,provider:"pexels",authorName:x.photographer,authorUrl:x.photographer_url,providerUrl:"https://pexels.com/",providerLogoUrl:"https://images.pexels.com/lib/api/pexels-white.png"})),total:k.total_results||0}}))}let f=await Promise.all(u),A=Math.max(...f.map(E=>E.assets.length)),C=[];for(let E=0;E<A;E++)for(let S of f)S.assets[E]&&C.push(S.assets[E]);let w=f.reduce((E,S)=>E+S.total,0);return{assets:C,total:w,page:a,limit:n}}catch(r){return console.error("SEARCH_IMAGES error:",r),{error:r instanceof Error?r.message:"Unknown error",status:500}}}}});var gr,Db,ci,Ed=T(()=>{"use strict";gr=require("zod");N();D();Rr();Db=gr.z.object({id:gr.z.string().uuid(),file:gr.z.string().optional(),description:gr.z.record(gr.z.string(),gr.z.string()).optional()}),ci=class extends P{getValidationSchema(){return Db}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);let i=await new Qe(r,a).updateAsset(e);if("error"in i)throw new m(i.error,"UPDATE_FAILED");return i}}});var pi,xd,Bs=T(()=>{"use strict";pi=[{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}],xd="google/gemini-3-flash"});var Id={};rt(Id,{logAiRequest:()=>Nb});async function Nb({userId:t,startTime:e,model:r,appId:a,creditStatus:n,response:i,prompt:o,error:l}){var S,R,k;let c=ht().logging.clientId,d=e>0?Math.floor(new Date().getTime()-e):0;if(l){let x=o.indexOf("USER REQUEST"),G=o.substring(x).trim(),j={model:r,totalDuration:String(d),error:l,totalTokens:"0",tokenUsage:null,cost:null,prompt:G,user:t,client:c,app:a,creditSource:"monthly",addonId:null},{error:ae}=await b(()=>y.insert(s.aiLogs).values(j));ae&&console.error("Error logging AI request:",ae);return}let u=i==null?void 0:i.totalUsage,g=(R=(S=i==null?void 0:i.providerMetadata)==null?void 0:S.gateway)==null?void 0:R.cost,h=o.indexOf("USER REQUEST");o=o.substring(h).trim();let f=Math.round(((k=u==null?void 0:u.totalTokens)!=null?k:0)*Bb(r)),A="monthly",C=null;if(n&&f>0){let x=$p(n,f);if(A=x.creditSource,C=x.addonId,A==="addon"&&C){let G=await Hp(C,f);G.success||console.error("Failed to deduct addon credits:",G.error)}}let w={model:r,totalDuration:String(d),error:l||null,totalTokens:String(f),tokenUsage:u,cost:g,prompt:o,user:t,client:c,app:a,creditSource:A,addonId:C},{error:E}=await b(()=>y.insert(s.aiLogs).values(w));E&&console.error("Error logging AI request:",E)}var Bb,Sd=T(()=>{"use strict";Bs();_();Ke();Oa();Bb=t=>{var e;return((e=pi.find(r=>r.id===t))==null?void 0:e.multiplier)||1}});var Lb,_r,di=T(()=>{"use strict";Bs();Lb=async t=>{let{logAiRequest:e}=await Promise.resolve().then(()=>(Sd(),Id));return e(t)},_r={models:pi,defaultModelId:xd,resolveModel:(t,e)=>({model:t}),credits:{enabled:!1},logging:{logger:Lb,clientId:null}}});function gi(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ui(t,e){if(!e)return{...t};let r={...t};for(let a of Object.keys(e)){let n=e[a];if(n===void 0)continue;let i=t[a];if(typeof n=="function"){r[a]=n;continue}if(gi(i)&&gi(n)){r[a]=ui(i,n);continue}r[a]=n}return r}function Ma(t,e,r){let a=new Map;for(let n of t)a.set(r(n),n);for(let n of e!=null?e:[]){let i=r(n),o=a.get(i);o&&gi(o)&&gi(n)?a.set(i,{...o,...n}):a.set(i,n)}return Array.from(a.values())}var Ns=T(()=>{"use strict"});function Ls(t){if(!t||typeof t!="object")throw new Error("ChaiBuilder: `db` is required in `buildChaiBuilderConfig`. Pass `db: createPostgresDB(...)` (or libsql/d1/better-sqlite3).");if(!t.drizzle)throw new Error("ChaiBuilder: `db` is required in `buildChaiBuilderConfig`. Pass `db: createPostgresDB(...)` (or libsql/d1/better-sqlite3).");return t}var _x,Os=T(()=>{"use strict";_x=require("server-only")});var Ob,Fb,Rd,vd,Fs,Us=T(()=>{"use strict";Ob='<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>',Fb='<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>',Rd={key:"page",name:"Static Page",icon:Ob,hasSlug:!0},vd={key:"global",name:"Global Block",helpText:"A global block can be reused in multiple pages.",icon:Fb,partial:!0,hasSlug:!1},Fs=[Rd,vd]});var _d,Ue,$a=T(()=>{"use strict";_d=require("drizzle-orm");_();se();Ue=class{constructor(e,r=!1){this.appId=e,this.enableLogging=r}async getPagesTree(){let{data:e,error:r}=await b(()=>y.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,_d.eq)(s.appPages.app,this.appId)));if(r)throw B("ERROR_GETTING_PAGES",r);let a=(e==null?void 0:e.filter(l=>l.primaryPage===null))||[],n=(e==null?void 0:e.filter(l=>l.primaryPage!==null))||[],i=this.buildPrimaryTree(a);this.enableLogging&&(console.log(`
|
|
800
|
+
=== PRIMARY LANGUAGE PAGES TREE ===`),console.log(JSON.stringify(i,null,2)));let o=this.buildLanguageTree(n,i);return this.enableLogging&&(console.log(`
|
|
801
|
+
=== OTHER LANGUAGE PAGES TREE ===`),console.log(JSON.stringify(o,null,2))),{primaryTree:i,languageTree:o,totalPrimaryPages:a.length,totalLanguagePages:n.length}}buildPrimaryTree(e){let r=new Map;e.forEach(n=>{r.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=r.get(n.id);if(i)if(n.parent===null)a.push(i);else{let o=r.get(n.parent);o?o.children.push(i):a.push(i)}}),a}buildLanguageTree(e,r){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(h=>h.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(h=>{let f=n(h,c);f&&g.children.push(f)}),g},i=[],o=new Set;return e.forEach(l=>{l.lang&&o.add(l.lang)}),o.forEach(l=>{r.forEach(c=>{let d=n(c,l);d&&i.push(d)})}),i}findPageInPrimaryTree(e,r){for(let a of r){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,r){for(let a of r){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,r,a){if(!e){let c=r.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=r.split("/").filter(Boolean),o=i[i.length-1]||"";return`${n.slug.endsWith("/")?n.slug.slice(0,-1):n.slug}/${o}`}collectNestedChildIds(e){let r=[];for(let a of e.children){r.push(a.id);let n=this.collectNestedChildIds(a);r.push(...n)}return r}findLanguagePagesForPrimary(e,r){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(r),a}collectNestedChildSlugs(e,r,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,r,a),n}generateNewChildSlug(e,r,a){return e===r?a:e.startsWith(r+"/")?e.replace(r+"/",a+"/"):e.startsWith(r)&&e!==r?e.replace(r,a):`${a}/${e.split("/").pop()}`}}});function kd(t){return Buffer.from(t,"utf8").toString("base64url")}function ft(t){return`slug-${kd(t)}`}function Ha(t){return t?"draft":"online"}function Dd(t,e,r){return[`page-by-slug-${t}-${Ha(e)}-${kd(r)}`]}function Bd(t,e,r){return[`page-slug-${t}-${Ha(e)}-${r}`]}function Nd(t,e,r){let a=[...r].sort().join(",");return[`page-slugs-batch-${t}-${Ha(e)}-${a}`]}function Ld(t,e,r,a){return[`alternate-${t}-${Ha(e)}-${r}-${a}`]}function Od(t,e,r){return[`breadcrumb-${t}-${Ha(e)}-${r}`]}function Fd(t){return[ft(t)]}function _t(t,e){var a,n,i,o;let r=new Set([`page-${t}`,`breadcrumb-${t}`]);(a=e==null?void 0:e.slugs)!=null&&a.old&&r.add(ft(e.slugs.old)),(n=e==null?void 0:e.slugs)!=null&&n.new&&r.add(ft(e.slugs.new)),e!=null&&e.primaryPageId&&r.add(`alternate-${e.primaryPageId}`);for(let l of(i=e==null?void 0:e.extraPageIds)!=null?i:[])r.add(`page-${l}`),r.add(`breadcrumb-${l}`);for(let l of(o=e==null?void 0:e.slugUpdates)!=null?o:[])r.add(`page-${l.id}`),r.add(`breadcrumb-${l.id}`),l.oldSlug&&r.add(ft(l.oldSlug)),l.newSlug&&r.add(ft(l.newSlug));return[...r]}function Ud(t){let e=new Set;for(let r of t)e.add(`page-${r.id}`),e.add(`breadcrumb-${r.id}`),r.slug&&e.add(ft(r.slug)),r.primaryPage&&e.add(`alternate-${r.primaryPage}`);return[...e]}function kr(t){let e=new Set;for(let r of t)e.add(`page-${r}`),e.add(`breadcrumb-${r}`);return[...e]}var Xe=T(()=>{"use strict"});var Ge,mi,Vt,Gs=T(()=>{"use strict";Ge=require("drizzle-orm"),mi=require("zod");N();D();_();se();$a();Xe();Vt=class extends P{constructor(){super(...arguments);this.appId="";this.userId="";this.permanent=!1}getValidationSchema(){return mi.z.object({id:mi.z.string().min(1,"Page ID is required"),permanent:mi.z.boolean().optional()})}async execute(r){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");this.appId=this.context.appId,this.userId=this.context.userId||"",this.permanent=r.permanent||!1;try{return this.pageTreeBuilder=new Ue(this.appId),await this.deletePage(r.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(r){let a=await this.getCurrentEditor(r);if(a&&a!==this.userId)return{tags:[],code:"PAGE_LOCKED",editor:a};let n=await this.pageTreeBuilder.getPagesTree(),i=this.pageTreeBuilder.findPageInLanguageTree(r,n.languageTree),o=this.pageTreeBuilder.findPageInPrimaryTree(r,n.primaryTree);if(!i&&!o)throw B("ERROR_DELETING_PAGE","Page not found");return i!==null?await this.deleteLanguagePageWithTree(r,i,n):await this.deletePrimaryPageWithTree(r,n)}async performDeletionWithIds(r){let a=[...r].reverse();if(this.permanent){let{error:o}=await b(()=>y.delete(s.libraryTemplates).where((0,Ge.inArray)(s.libraryTemplates.pageId,a)));if(o)throw B("DELETE_FAILED",o)}if(this.permanent){let{error:o}=await b(()=>y.delete(s.appPagesRevisions).where((0,Ge.inArray)(s.appPagesRevisions.id,a)));if(o)throw B("DELETE_FAILED",o)}let{error:n}=await b(()=>this.permanent?y.delete(s.appPages).where((0,Ge.inArray)(s.appPages.id,a)):y.update(s.appPages).set({deletedAt:new Date().toISOString(),deletedBy:this.userId}).where((0,Ge.inArray)(s.appPages.id,a)));if(n)throw B("DELETE_FAILED",n);let{error:i}=await b(()=>y.delete(s.appPagesOnline).where((0,Ge.inArray)(s.appPagesOnline.id,a)));if(i)throw B("DELETE_FAILED",i)}collectRoutingTagsFromTree(r,a){let n=[],i=o=>{for(let l of o)r.includes(l.id)&&n.push({id:l.id,slug:l.slug,primaryPage:l.primaryPage}),l.children.length>0&&i(l.children)};return i(a),Ud(n)}async deleteLanguagePageWithTree(r,a,n){let i=a.primaryPage;if(!this.pageTreeBuilder.findPageInPrimaryTree(i,n.primaryTree))throw B("ERROR_DELETING_PAGE","Primary page not found");let l=this.pageTreeBuilder.collectNestedChildIds(a),c=[r,...l];return await this.performDeletionWithIds(c),{tags:this.collectRoutingTagsFromTree(c,n.languageTree),totalDeleted:c.length}}async deletePrimaryPageWithTree(r,a){let n=this.pageTreeBuilder.findPageInPrimaryTree(r,a.primaryTree);if(!n)throw B("ERROR_DELETING_PAGE","Primary page not found");let i=this.pageTreeBuilder.collectNestedChildIds(n),o=this.pageTreeBuilder.findLanguagePagesForPrimary(r,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=[r,...c];return await this.performDeletionWithIds(d),{tags:[...this.collectRoutingTagsFromTree(d,a.primaryTree),...this.collectRoutingTagsFromTree(d,a.languageTree)].filter((u,g,h)=>h.indexOf(u)===g),totalDeleted:d.length}}async getCurrentEditor(r){var i;let{data:a,error:n}=await b(()=>y.select({currentEditor:s.appPages.currentEditor}).from(s.appPages).where((0,Ge.and)((0,Ge.eq)(s.appPages.id,r),(0,Ge.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(r){this.pageTreeBuilder||(this.pageTreeBuilder=new Ue(this.context.appId));let a=await this.pageTreeBuilder.getPagesTree(),n=this.pageTreeBuilder.findPageInLanguageTree(r,a.languageTree),i=this.pageTreeBuilder.findPageInPrimaryTree(r,a.primaryTree);if(!n&&!i)throw B("ERROR_RESTORING_PAGE","Page not found");n!==null?await this.restoreLanguagePageWithTree(r,n,a):await this.restorePrimaryPageWithTree(r,a)}async restoreLanguagePageWithTree(r,a,n){let i=this.pageTreeBuilder.collectNestedChildIds(a),o=[r,...i],{error:l}=await b(()=>y.update(s.appPages).set({deletedAt:null,deletedBy:null}).where((0,Ge.inArray)(s.appPages.id,o)));if(l)throw B("RESTORE_FAILED",l)}async restorePrimaryPageWithTree(r,a){let n=this.pageTreeBuilder.findPageInPrimaryTree(r,a.primaryTree);if(!n)throw B("ERROR_RESTORING_PAGE","Primary page not found");let i=this.pageTreeBuilder.collectNestedChildIds(n),o=this.pageTreeBuilder.findLanguagePagesForPrimary(r,a.languageTree),l=[];o.forEach(u=>{l.push(u.id);let g=this.pageTreeBuilder.collectNestedChildIds(u);l.push(...g)});let c=[r,...i,...l],{error:d}=await b(()=>y.update(s.appPages).set({deletedAt:null,deletedBy:null}).where((0,Ge.inArray)(s.appPages.id,c)));if(d)throw B("RESTORE_FAILED",d)}}});function Gd(t,e){return[`page-details-${t}-${e}`]}function Md(t){return[`page-${t}`,`page-details-${t}`]}function hi(t){return[`page-${t}`]}var fi=T(()=>{"use strict"});var Be,$d,yi,Hd=T(()=>{"use strict";Be=require("drizzle-orm"),$d=require("lodash-es");N();_();$a();yi=class{constructor(e){this.appId=e}updateNodeSlugInTree(e,r,a){for(let n of a){if(n.id===e)return n.slug=r,!0;if(n.children&&n.children.length>0&&this.updateNodeSlugInTree(e,r,n.children))return!0}return!1}validateSlugAvailabilityInTree(e,r,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!==r&&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,r){if(!r)return!1;let{data:a,error:n}=await b(()=>y.select({slug:s.appPages.slug}).from(s.appPages).where((0,Be.and)((0,Be.eq)(s.appPages.id,e),(0,Be.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)!==r}async isParentChanged(e,r){if(r===void 0)return!1;let{data:a,error:n}=await b(()=>y.select({parent:s.appPages.parent}).from(s.appPages).where((0,Be.and)((0,Be.eq)(s.appPages.id,e),(0,Be.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)!==r}async handleSlugChangeWithTree(e,r){let a=r.slug;this.pageTreeBuilder||(this.pageTreeBuilder=new Ue(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,r){let a=r.parent;this.pageTreeBuilder||(this.pageTreeBuilder=new Ue(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=r.slug?r.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 h of c)this.updateNodeSlugInTree(h.id,h.newSlug,n.primaryTree);let u=this.pageTreeBuilder.findLanguagePagesForPrimary(e,n.languageTree),g;a&&(g=this.pageTreeBuilder.findLanguagePagesForPrimary(a,n.languageTree));for(let h of u){let f=g==null?void 0:g.filter(E=>E.lang===h.lang)[0],A=(f==null?void 0:f.id)||null,C=this.pageTreeBuilder.calculateSlugFromParent(A,h.slug,n.languageTree);this.validateSlugAvailabilityInTree(C,h.id,h.dynamic||!1,n,!0),this.updateNodeSlugInTree(h.id,C,n.languageTree);let w=this.pageTreeBuilder.collectNestedChildSlugs(h,h.slug,C);for(let E of w)this.updateNodeSlugInTree(E.id,E.newSlug,n.languageTree);d.push({id:h.id,oldSlug:h.slug,newSlug:C}),d.push(...w)}return d}async batchUpdateSlugs(e,r,a,n){let i=e.map(async l=>{let c={slug:l.newSlug,lastSaved:new Date().toISOString()};if(l.id===a){let u=(0,$d.pick)(r,["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 b(()=>y.update(s.appPages).set(c).where((0,Be.and)((0,Be.eq)(s.appPages.id,l.id),(0,Be.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 b(()=>y.update(s.appPagesOnline).set({slug:l.newSlug}).where((0,Be.and)((0,Be.eq)(s.appPagesOnline.id,l.id),(0,Be.eq)(s.appPagesOnline.app,this.appId))))});await Promise.all(o)}setPageTreeBuilder(e){this.pageTreeBuilder=e}}});var V,ur,q,Ub,Dr,Ms=T(()=>{"use strict";V=require("drizzle-orm"),ur=require("lodash-es"),q=require("zod");_();$a();fi();Xe();N();D();Hd();Ub=new Set(["slug","name","parent","pageType","dynamic","dynamicSlugCustom"]),Dr=class extends P{constructor(){super(...arguments);this.appId="";this.routingSlugUpdates=[]}getValidationSchema(){return q.z.object({id:q.z.string().nonempty(),blocks:q.z.array(q.z.any()).optional(),currentEditor:q.z.string().optional(),slug:q.z.string().optional(),name:q.z.string().optional(),seo:q.z.record(q.z.string(),q.z.any()).optional(),buildTime:q.z.boolean().optional(),parent:q.z.union([q.z.string(),q.z.null()]).optional(),pageType:q.z.string().optional(),dynamic:q.z.boolean().optional(),dynamicSlugCustom:q.z.string().optional(),needTranslations:q.z.boolean().optional(),description:q.z.string().optional(),partialIds:q.z.array(q.z.string()).optional(),linkPageIds:q.z.array(q.z.string()).optional(),designTokens:q.z.record(q.z.string(),q.z.record(q.z.string(),q.z.string())).optional(),tracking:q.z.record(q.z.string(),q.z.any()).optional(),addInRevision:q.z.boolean().optional()})}async execute(r){this.validateContext(),this.appId=this.context.appId,this.routingSlugUpdates=[];try{if(this.isOnlyBlocksUpdate(r))return await this.isLanguagePage(r.id)||await this.updateBlocks(r.id,r.blocks,r.linkPageIds||[],r.partialIds||[],r.designTokens||{},r==null?void 0:r.addInRevision),await this.buildResponse(r.id,r);let a=this.extractAllowedPageFields(r);r.description!==void 0&&(a.metadata=await this.buildMergedMetadata(r.id,r.description)),this.slugChangeHandler=new yi(this.appId);let n=await this.slugChangeHandler.isSlugChanged(r.id,a.slug);return await this.slugChangeHandler.isParentChanged(r.id,a.parent)&&a.parent!==void 0?(this.pageTreeBuilder=new Ue(this.appId),this.slugChangeHandler.setPageTreeBuilder(this.pageTreeBuilder),await this.handleParentChangeWithHandler(r.id,a)):n&&a.slug?(this.pageTreeBuilder=new Ue(this.appId),this.slugChangeHandler.setPageTreeBuilder(this.pageTreeBuilder),await this.handleSlugChangeWithHandler(r.id,a)):await this.updatePageInDatabase(r.id,a,r==null?void 0:r.addInRevision),await this.syncDynamicFieldsToSecondaryPages(r.id,a),await this.buildResponse(r.id,a)}catch(a){return this.handleExecutionError(a)}}async updateBlocks(r,a,n,i,o,l){await this.updatePageInDatabase(r,{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(r){return(0,ur.pick)(r,["slug","name","seo","blocks","currentEditor","buildTime","parent","pageType","dynamic","dynamicSlugCustom","tracking"])}async buildMergedMetadata(r,a){var l;let{data:n,error:i}=await b(()=>y.query.appPages.findFirst({where:(0,V.and)((0,V.eq)(s.appPages.id,r),(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(r,a){let n=await this.slugChangeHandler.handleSlugChangeWithTree(r,a);this.routingSlugUpdates=n;let i=this.determineChangeTypes(a);await this.slugChangeHandler.batchUpdateSlugs(n,a,r,i)}async handleParentChangeWithHandler(r,a){let n=await this.slugChangeHandler.handleParentChangeWithTree(r,a);this.routingSlugUpdates=n;let i=this.determineChangeTypes(a);await this.slugChangeHandler.batchUpdateSlugs(n,a,r,i)}determineChangeTypes(r){let a=[],n=(0,ur.keys)(r);return n.includes("blocks")&&a.push("Page"),n.includes("seo")&&a.push("SEO"),a.length>0?a:["Updated"]}async addSaveEntryInRevision(r,a){var n;try{let{data:i}=await b(()=>y.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,r))).orderBy((0,V.desc)(s.appPagesOnline.createdAt)).limit(1)),{data:o}=await b(()=>y.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,r),(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 b(()=>y.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:r,revisionUid:c==null?void 0:c.uid,error:u})}else{let{error:u}=await b(()=>{var g;return y.insert(s.appPagesRevisions).values({id:r,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:r,error:u})}}catch(i){console.error("Error adding save entry in revisions:",{pageId:r,error:i})}}async updatePageInDatabase(r,a,n){let i=this.determineChangeTypes(a),{error:o,data:l}=await b(()=>y.update(s.appPages).set({...a,changes:i,lastSaved:new Date().toISOString()}).where((0,V.and)((0,V.eq)(s.appPages.id,r),(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 b(()=>y.update(s.appPages).set({changes:i}).where((0,V.and)((0,V.eq)(s.appPages.primaryPage,r),(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(r,l[0])}isOnlyBlocksUpdate(r){return(0,ur.keys)(r).includes("blocks")}async isLanguagePage(r){var n;let{data:a}=await b(()=>y.select({primaryPage:s.appPages.primaryPage}).from(s.appPages).where((0,V.and)((0,V.eq)(s.appPages.id,r),(0,V.eq)(s.appPages.app,this.appId))).limit(1));return!!((n=a==null?void 0:a[0])!=null&&n.primaryPage)}async fetchUpdatedPageData(r){let{data:a,error:n}=await b(()=>y.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,r)).limit(1));if(n||!a||a.length===0)throw new m("Error getting updated page","ERROR_GETTING_PAGE");return a[0]}buildMutationTags(r,a,n){return(0,ur.keys)(a).some(l=>Ub.has(l))?this.routingSlugUpdates.length>0?_t(r,{slugUpdates:this.routingSlugUpdates}):_t(r,{slugs:n!=null&&n.slug?{new:n.slug}:void 0,primaryPageId:n==null?void 0:n.primaryPage}):hi(r)}async buildResponse(r,a){if(this.isOnlyBlocksUpdate(a))return{success:!0};let n=await this.fetchUpdatedPageData(r);return{page:n,tags:this.buildMutationTags(r,a,n)}}async syncDynamicFieldsToSecondaryPages(r,a){let n=(0,ur.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 b(()=>y.update(s.appPages).set(o).where((0,V.and)((0,V.eq)(s.appPages.primaryPage,r),(0,V.eq)(s.appPages.app,this.appId))));l&&console.error("Failed to sync dynamic fields to secondary pages:",l)}handleExecutionError(r){throw r instanceof m?r:new m(`Failed to update page: ${r instanceof Error?r.message:"Unknown error"}`,"UPDATE_PAGE_FAILED")}}});var xe,qd,zd,jd,Vd,Wd,$s,Hs=T(()=>{"use strict";xe=require("drizzle-orm"),qd=require("nanoid");_();se();Gs();Ms();zd={label:"Page",icon:"file",moveToTrash:async(t,e)=>{var o;let{data:r}=await b(()=>y.select().from(s.appPages).where((0,xe.eq)(s.appPages.id,t)).limit(1)),a=r==null?void 0:r[0];if(!a)throw B("MOVE_TO_TRASH_FAILED","Page not found");let n=new Vt;n.setContext(e);let i=await n.execute({id:t,permanent:!1});if((i==null?void 0:i.code)==="PAGE_LOCKED")throw B("PAGE_LOCKED",`Page is currently being edited by ${i.editor||"another user"}`);return{entityType:"page",entityId:t,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(t,e)=>{let r=new Vt;r.setContext(e),await r.restorePage(t.entityId)},deletePermanently:async(t,e)=>{let r=new Vt;r.setContext(e);let a=await r.execute({id:t.entityId,permanent:!0});if((a==null?void 0:a.code)==="PAGE_LOCKED")throw B("PAGE_LOCKED",`Page is currently being edited by ${a.editor||"another user"}`);return!0},hasRestoreConflict:async(t,e)=>{var i,o,l;let r=(i=t.metadata)==null?void 0:i.slug;if(!r)return!1;let a=!!((l=(o=t.metadata)==null?void 0:o.dynamic)!=null&&l),{data:n}=await b(()=>y.select({id:s.appPages.id}).from(s.appPages).where((0,xe.and)((0,xe.eq)(s.appPages.app,e.appId),(0,xe.eq)(s.appPages.slug,r),(0,xe.eq)(s.appPages.dynamic,a),(0,xe.isNull)(s.appPages.deletedAt))).limit(1));return n!==null&&n.length>0},resolveRestoreConflict:async(t,e)=>{var i;let r=(i=t.metadata)==null?void 0:i.slug;if(!r)return{resolved:!0};let a=`${r}-restored-${(0,qd.nanoid)(5)}`,n=new Dr;n.setContext(e);try{await n.execute({id:t.entityId,slug:a})}catch(o){throw B("RESOLVE_CONFLICT_FAILED",o)}return{resolved:!0,newSlug:a}}},jd={label:"Asset",icon:"image",moveToTrash:async(t,e)=>{let r=e.appId,a=e.userId||"",{data:n,error:i}=await b(()=>y.select().from(s.appAssets).where((0,xe.and)((0,xe.eq)(s.appAssets.id,t),(0,xe.eq)(s.appAssets.app,r))).limit(1));if(i||!n||n.length===0)throw B("ASSET_NOT_FOUND","Asset not found");let o=n[0],l=new Date().toISOString(),{error:c}=await b(()=>y.update(s.appAssets).set({deletedAt:l,deletedBy:a}).where((0,xe.eq)(s.appAssets.id,t)));if(c)throw B("TRASH_FAILED",c);return{entityType:"asset",entityId:t,name:o.name||"Unknown Asset",metadata:{name:o.name||"Unknown Asset",url:o.url,type:o.type},deletedAt:l,deletedBy:a,app:r}},restore:async(t,e)=>{let{error:r}=await b(()=>y.update(s.appAssets).set({deletedAt:null,deletedBy:null}).where((0,xe.eq)(s.appAssets.id,t.entityId)));if(r)throw B("RESTORE_FAILED",r)},deletePermanently:async(t,e)=>{let{error:r}=await b(()=>y.delete(s.appAssets).where((0,xe.eq)(s.appAssets.id,t.entityId)));if(r)throw B("DELETE_PERMANENTLY_FAILED",r);return!0},hasRestoreConflict:async(t,e)=>!1},Vd={key:"page",...zd},Wd={key:"asset",...jd},$s=[Vd,Wd]});var qs,zs=T(()=>{"use strict";qs=async()=>({})});async function Vs(t){return Promise.all(t.map(async e=>{var r,a,n,i,o;return{key:e.key,helpText:(r=e.helpText)!=null?r:"",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,js.isFunction)(e.defaultSeo)?{defaultSeo:e.defaultSeo()}:{},...(0,js.isFunction)(e.defaultJSONLD)?{defaultJSONLD:e.defaultJSONLD()}:{}}}))}var js,Kd=T(()=>{"use strict";js=require("lodash-es")});function Gb(t){return t?ui(_r,t):{..._r}}function Yd(t){var n,i,o,l;let e=Gb(t.ai),r={...Je.actions,...t.actions,...t.builderActions};return{debugLevel:(n=t.debugLevel)!=null?n:Je.debugLevel,globalDataProvider:(i=t.globalDataProvider)!=null?i:Je.globalDataProvider,pageTypes:Ma(Je.pageTypes,t.pageTypes,c=>c.key),collections:Ma(Je.collections,t.collections,c=>c.id),blockDataProviders:{...Je.blockDataProviders,...t.blockDataProviders},trash:Ma(Je.trash,t.trash,c=>c.key),actions:r,builderActions:r,extraPermissions:(o=t.extraPermissions)!=null?o:[],roles:(l=t.roles)!=null?l:void 0,ai:e,db:Ls(t.db)}}var pI,Pe=T(()=>{"use strict";pI=require("server-only");di();Ti();Ns();Os();Ti();Os();Ei();Ws();Us();Hs();Ke();di();zs();Ns();Kd()});var ag,qa,xi,ng=T(()=>{"use strict";ag=require("lodash-es"),qa=require("zod");vn();D();Pe();Ei();xi=class extends P{getValidationSchema(){return qa.z.object({block:qa.z.any(),pageProps:qa.z.any().optional().default({}),lang:qa.z.string()})}async execute(e){var r;try{let{block:a,pageProps:n,lang:i}=e,o=a._type;if(o==="Repeater"&&((r=a==null?void 0:a.repeaterItems)!=null&&r.includes("{{#"))){let d=a.repeaterItems.replace("{{#","").replace("}}",""),u=Wt(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:[]}Zs(o);let l=nt(o);if(!(l!=null&&l.dataProvider)||!(0,ag.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 ig,og,Or,el=T(()=>{"use strict";ig=require("lodash-es"),og=require("zod");D();Pe();Or=class extends P{getValidationSchema(){return og.z.object({})}async execute(){try{return Nr().map(r=>(0,ig.omit)(r,"fetch"))}catch(e){return this.handleError(e)}}}});var Kt,sg,Fr,tl=T(()=>{"use strict";Kt=require("drizzle-orm"),sg=require("zod");_();N();D();Fr=class extends P{getValidationSchema(){return sg.z.object({}).optional().default({})}async execute(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:e}=this.context,r=await b(()=>y.select({id:s.libraries.id,name:s.libraries.name,type:s.libraries.type,createdAt:s.libraries.createdAt}).from(s.libraries).where((0,Kt.eq)(s.libraries.app,e)).limit(1));if(r.error)throw new m("Failed to fetch site library","DB_ERROR");let a=r.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 b(()=>y.select({id:s.libraries.id,name:s.libraries.name,type:s.libraries.type,createdAt:s.libraries.createdAt}).from(s.libraries).where(n?(0,Kt.or)((0,Kt.eq)(s.libraries.client,n),(0,Kt.isNull)(s.libraries.client)):(0,Kt.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 rl,za,lg,Ii,cg=T(()=>{"use strict";rl=require("drizzle-orm"),za=require("lodash-es"),lg=require("zod");N();D();_();Ii=class extends P{getValidationSchema(){return lg.z.object({})}async execute(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{data:e,error:r}=await b(()=>y.select({id:s.libraries.id}).from(s.libraries).where((0,rl.eq)(s.libraries.app,this.context.appId)).limit(1));if(r)throw new m("Failed to fetch site library","GET_SITE_LIBRARY_FAILED",500,r);if(!e||e.length===0)return[];let a=e[0],{data:n,error:i}=await b(()=>y.select({group:s.libraryItems.group}).from(s.libraryItems).where((0,rl.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,za.map)(n,"group").filter(l=>l!=null);return(0,za.map)((0,za.uniq)(o),l=>({id:l,name:l}))}}});var pg,al,Si,dg=T(()=>{"use strict";pg=require("drizzle-orm"),al=require("zod");N();D();_();Si=class extends P{getValidationSchema(){return al.z.object({id:al.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{id:r}=e,{error:a}=await b(()=>y.delete(s.libraryItems).where((0,pg.eq)(s.libraryItems.id,r)));if(a)throw new m("Failed to delete library item","DELETE_LIBRARY_ITEM_FAILED",500,a);return{success:!0}}}});var nl,il,ol,Ri,gg=T(()=>{"use strict";nl=require("drizzle-orm"),il=require("lodash-es"),ol=require("zod");N();D();_();Ri=class extends P{getValidationSchema(){return ol.z.object({id:ol.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r}=this.context,{id:a}=e,{data:n,error:i}=await b(()=>y.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,nl.eq)(s.libraryItems.library,s.libraries.id)).where((0,nl.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===r?(0,il.set)(l,"0._libBlockId",o.id):(0,il.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 ug,sl,vi,mg=T(()=>{"use strict";ug=require("drizzle-orm"),sl=require("zod");N();D();_();vi=class extends P{getValidationSchema(){return sl.z.object({id:sl.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{id:r}=e,{data:a,error:n}=await b(()=>y.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,ug.eq)(s.libraryItems.library,r)));if(n)throw new m("Failed to fetch library items","GET_LIBRARY_ITEMS_FAILED",500,n);return a||[]}}});var ll,hg,fg,Tt,_i,yg=T(()=>{"use strict";ll=require("drizzle-orm"),hg=require("lodash-es"),fg=require("crypto"),Tt=require("zod");D();_();N();_i=class extends P{getValidationSchema(){return Tt.z.object({name:Tt.z.string().min(1),group:Tt.z.string().min(1),blocks:Tt.z.array(Tt.z.any()),description:Tt.z.string().optional(),previewImage:Tt.z.string().optional(),id:Tt.z.string().optional(),previewImageUrl:Tt.z.string().optional()})}async execute(e){var A;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r,userId:a}=this.context,{name:n,group:i,blocks:o,description:l,previewImage:c,previewImageUrl:d,id:u}=e,{data:g,error:h}=await b(()=>y.query.libraries.findFirst({where:(0,ll.eq)(s.libraries.app,r),columns:{id:!0}}));if(h)throw new m("Failed to fetch site library","GET_SITE_LIBRARY_FAILED",500,h);if(!g)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(()=>(jt(),pr)),w=C("UPLOAD_TO_STORAGE");w==null||w.setContext(this.context);let E=`library-item-${Date.now()}.webp`,S=`${r}/library-items`,R=await(w==null?void 0:w.execute({file:c,fileName:E,contentType:"image/webp",folder:S}));if(R!=null&&R.error)throw new m("Failed to upload preview image","UPLOAD_PREVIEW_FAILED",500,R.error);f=((A=R==null?void 0:R.data)==null?void 0:A.url)||d}if(u){let C={name:n,blocks:o,library:g.id,description:l!=null?l:null,group:i,user:a!=null?a:null,createdBy:a!=null?a:null};f&&(C.preview=f);let{data:w,error:E}=await b(()=>y.update(s.libraryItems).set(C).where((0,ll.eq)(s.libraryItems.id,u)).returning());if(E||!w||w.length===0)throw new m("Failed to update library item","UPDATE_LIBRARY_ITEM_FAILED",500,E);return w[0]}else{let C=(0,fg.randomUUID)(),w=[...o];(0,hg.set)(w,"0._libBlockId",C);let E={id:C,name:n,blocks:w,library:g.id,description:l!=null?l:null,group:i,user:a!=null?a:null,createdBy:a!=null?a:null,preview:f!=null?f:null},{data:S,error:R}=await b(()=>y.insert(s.libraryItems).values(E).returning());if(R||!S||S.length===0)throw new m("Failed to create library item","CREATE_LIBRARY_ITEM_FAILED",500,R);return S[0]}}}});var ja,cl,ki,bg=T(()=>{"use strict";ja=require("drizzle-orm"),cl=require("zod");D();_();ki=class extends P{getValidationSchema(){return cl.z.object({pageId:cl.z.string().min(1)})}async execute({pageId:e}){let{userId:r,appId:a}=this.context;return await y.update(s.appPages).set({currentEditor:r}).where((0,ja.and)((0,ja.eq)(s.appPages.id,e),(0,ja.eq)(s.appPages.app,a))),{ok:!0}}}});var ue,Ur,re,Di,Tg=T(()=>{"use strict";ue=require("drizzle-orm"),Ur=require("lodash-es"),re=require("zod");_();Xe();N();D();Di=class extends P{getValidationSchema(){return re.z.object({name:re.z.string().min(1),slug:re.z.string(),pageType:re.z.string(),parent:re.z.string().nullable().optional(),lang:re.z.string().optional(),primaryPage:re.z.string().nullable().optional(),dynamic:re.z.boolean().optional(),hasSlug:re.z.boolean().optional(),template:re.z.string().optional(),seo:re.z.record(re.z.string(),re.z.any()).optional(),jsonLD:re.z.record(re.z.string(),re.z.any()).optional(),dynamicSlugCustom:re.z.string().optional(),blocks:re.z.array(re.z.any()).optional(),description:re.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 h,f,A,C,w,E,S,R,k,x;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r,userId:a}=this.context;if(((h=e.hasSlug)!=null?h:e.pageType!=="global")&&e.slug&&await this.doesSlugExist(e.slug,e.pageType))throw new m("Slug already exists","SLUG_ALREADY_USED");let i=(f=e.blocks)!=null?f:[];e.template&&(i=await this.getTemplateBlocks(e.template,r));let o=(A=e.dynamic)!=null?A:!1,l=(C=e.dynamicSlugCustom)!=null?C:"";if(e.primaryPage){let{data:G}=await b(()=>y.query.appPages.findFirst({where:(0,ue.and)((0,ue.eq)(s.appPages.id,e.primaryPage),(0,ue.eq)(s.appPages.app,r)),columns:{dynamic:!0,dynamicSlugCustom:!0}}));G&&(o=(w=G.dynamic)!=null?w:!1,l=(E=G.dynamicSlugCustom)!=null?E:"")}let c={app:r,name:e.name,slug:e.slug,pageType:e.pageType,parent:(S=e.parent)!=null?S:null,lang:e.primaryPage&&(R=e.lang)!=null?R:"",primaryPage:(k=e.primaryPage)!=null?k:null,dynamic:o,dynamicSlugCustom:l,blocks:i,seo:(x=e.seo)!=null?x:{title:e.name,jsonLD:"",noIndex:!1,ogImage:"",ogTitle:"",noFollow:"",description:"",searchTitle:"",cononicalUrl:"",ogDescription:"",searchDescription:""},jsonld:{},metadata:(0,Ur.isEmpty)(e.description)?{}:{description:e.description},online:!1,currentEditor:null,changes:null,libRefId:null,lastSaved:null,createdBy:a},{data:d,error:u}=await b(()=>y.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,Ur.omit)(g.primaryPage?{...g,id:g.primaryPage}:g,["primaryPage"]),tags:_t(g.id,{slugs:g.slug?{new:g.slug}:void 0,primaryPageId:g.primaryPage})}}async doesSlugExist(e,r){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:a}=this.context,{data:n,error:i}=await b(()=>y.query.appPages.findFirst({where:(0,ue.and)((0,ue.eq)(s.appPages.slug,e),(0,ue.eq)(s.appPages.pageType,r),(0,ue.eq)(s.appPages.app,a),(0,ue.isNull)(s.appPages.deletedAt)),columns:{id:!0}}));if(i)throw new m(`${i.message}`,"SLUG_CHECK_FAILED");return!!n}async getTemplateBlocks(e,r){let{data:a,error:n}=await b(()=>y.select({template:s.libraryTemplates,library:{id:s.libraries.id,app:s.libraries.app,name:s.libraries.name}}).from(s.libraryTemplates).leftJoin(s.libraries,(0,ue.eq)(s.libraryTemplates.library,s.libraries.id)).where((0,ue.and)((0,ue.eq)(s.libraryTemplates.id,e),(0,ue.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 b(()=>y.query.appPages.findFirst({where:(0,ue.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,Ur.isEmpty)(g.globalBlock)?{...g,_type:"PartialBlock",partialBlockId:g.globalBlock}:g),!(o.app===r)){let g=o.name||"",h=d.filter(A=>A._type==="PartialBlock"&&!(0,Ur.isEmpty)(A.partialBlockId)),f=await Promise.all(h.map(({partialBlockId:A})=>this.copyPartialBlockFromTemplate(A,g,r)));d=d.map(A=>{let C=f.find(w=>(w==null?void 0:w.libRefId)===A.partialBlockId);return C&&(A._name=`${g} - ${A._name}`,A.partialBlockId=C.id),A})}return d}async copyPartialBlockFromTemplate(e,r,a){var u;let{data:n,error:i}=await b(()=>y.query.appPages.findFirst({where:(0,ue.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:`${r} - ${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 b(()=>y.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 ct,Va,Bi,Ag=T(()=>{"use strict";ct=require("drizzle-orm"),Va=require("zod");N();D();_();Xe();Bi=class extends P{getValidationSchema(){return Va.z.object({pageId:Va.z.string().nonempty(),name:Va.z.string().nonempty(),slug:Va.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r}=this.context;if(e.slug&&await this.doesSlugExist(e.slug))throw new m("Slug already exists","SLUG_EXISTS");let{data:a,error:n}=await b(()=>y.query.appPages.findFirst({where:(0,ct.and)((0,ct.eq)(s.appPages.id,e.pageId),(0,ct.eq)(s.appPages.app,r),(0,ct.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 y.insert(s.appPages).values(i).returning();if(!o)throw new m("Failed to create duplicate page","INSERT_FAILED");return{id:o.id,tags:_t(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:r}=this.context,{data:a,error:n}=await b(()=>y.query.appPages.findFirst({where:(0,ct.and)((0,ct.eq)(s.appPages.slug,e),(0,ct.eq)(s.appPages.app,r),(0,ct.isNull)(s.appPages.deletedAt)),columns:{id:!0}}));if(n)throw new m(`${n.message}`,"SLUG_CHECK_FAILED");return!!a}}});var Wa,Gr,pl=T(()=>{"use strict";Wa=require("zod");Pe();D();Gr=class extends P{getValidationSchema(){return Wa.z.object({lang:Wa.z.string(),pageType:Wa.z.string().optional(),pageProps:Wa.z.any().optional().default({})})}async execute(e){try{let{lang:r,pageType:a,pageProps:n={}}=e;if(!a)return{};let i=lt(a),o=i?bt(i):void 0;return o?o.dataProvider?await o.dataProvider({lang:r,draft:!0,inBuilder:!0,pageProps:n}):{}:{}}catch(r){return this.handleError(r)}}}});var Ne,Pg,Ni,wg=T(()=>{"use strict";Ne=require("drizzle-orm"),Pg=require("zod");_();N();D();Ni=class extends P{constructor(){super(...arguments);this.appId=""}getValidationSchema(){return Pg.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(r){if(r instanceof m)throw r;let a=r instanceof Error?r.message:"Failed to get changes";throw new m(a,"GET_CHANGES_ERROR")}}async getChanges(){var g;let{data:r,error:a}=await b(()=>y.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,Ne.and)((0,Ne.eq)(s.appPages.app,this.appId),(0,Ne.isNotNull)(s.appPages.changes))));if(a)throw new m("Error getting changed pages","ERROR_GETTING_CHANGES");let{data:n,error:i}=await b(()=>y.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,Ne.and)((0,Ne.eq)(s.appPages.app,this.appId),(0,Ne.isNull)(s.appPages.currentEditor),(0,Ne.eq)(s.appPages.online,!1))));if(i)throw new m("Error getting offline pages","ERROR_GETTING_OFFLINE_PAGES");let o=(n||[]).map(h=>({...h,changes:["Take Online"]})),c=[...(r||[]).filter(h=>!o.some(f=>f.id===h.id)).map(h=>({...h,changes:h.changes})),...o],{data:d,error:u}=await b(()=>y.select({changes:s.apps.changes}).from(s.apps).where((0,Ne.and)((0,Ne.eq)(s.apps.id,this.appId),(0,Ne.isNotNull)(s.apps.changes))));if(!u&&d&&d.length>0){let h=(g=d[0].changes)!=null?g:[];h.includes("THEME")&&c.push({id:"THEME",slug:"",name:"Theme",pageType:"theme",lang:"",changes:["Updated"],primaryPage:null,online:!0}),h.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 Li,kt,Oi,Cg=T(()=>{"use strict";Li=require("drizzle-orm"),kt=require("zod");N();D();_();Oi=class extends P{getValidationSchema(){return kt.z.object({versions:kt.z.object({version1:kt.z.object({type:kt.z.enum(["draft","revision","live"]),id:kt.z.string()}),version2:kt.z.object({type:kt.z.enum(["draft","revision","live"]),id:kt.z.string()})})})}async execute(e){this.validateContext();let r=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:r.blocks,seo:r.seo,tracking:r.tracking},version2:{blocks:a.blocks,seo:a.seo,tracking:a.tracking}}}async getBlocksForVersion(e,r){let a,n;switch(e){case"draft":({data:a,error:n}=await b(()=>y.query.appPages.findFirst({where:(0,Li.eq)(s.appPages.id,r),columns:{blocks:!0,seo:!0,tracking:!0}})));break;case"live":({data:a,error:n}=await b(()=>y.query.appPagesOnline.findFirst({where:(0,Li.eq)(s.appPagesOnline.id,r),columns:{blocks:!0,seo:!0,tracking:!0}})));break;case"revision":({data:a,error:n}=await b(()=>y.query.appPagesRevisions.findFirst({where:(0,Li.eq)(s.appPagesRevisions.uid,r),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: ${r}`,"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 pt,dl,Mr,gl=T(()=>{"use strict";pt=require("drizzle-orm"),dl=require("zod");D();_();se();Mr=class extends P{getValidationSchema(){return dl.z.object({id:dl.z.string()})}async execute(e){var u,g,h,f,A,C;if(!this.context)throw B("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:r}=this.context,{id:a}=e,n=s.appPages,{data:i,error:o}=await b(()=>y.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,pt.and)((0,pt.eq)(n.app,r),(0,pt.eq)(n.id,a),(0,pt.isNull)(n.deletedAt))).limit(1));if(o)throw B("PAGE_NOT_FOUND",o);if(!i||i.length===0)throw B("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:w,error:E}=await b(()=>y.select({blocks:n.blocks}).from(n).where((0,pt.and)((0,pt.eq)(n.app,r),(0,pt.eq)(n.id,c),(0,pt.isNull)(n.deletedAt))).limit(1));if(E)throw B("BLOCKS_NOT_FOUND",E);d=(f=(h=w==null?void 0:w[0])==null?void 0:h.blocks)!=null?f:[]}return{...l,blocks:d,id:a,languagePageId:l.id,tracking:(A=l.tracking)!=null?A:{},globalJsonLds:(C=l.globalJsonLds)!=null?C:[]}}}});var $r,Fi,Eg=T(()=>{"use strict";$r=require("zod");D();Pe();Fi=class extends P{getValidationSchema(){return $r.z.object({pageType:$r.z.string(),lang:$r.z.string(),query:$r.z.string().optional(),slug:$r.z.string().optional()})}async execute(e){try{let{pageType:r}=e,a=lt(r),n=a?bt(a):void 0;return n?n.getDynamicPages?await n.getDynamicPages({query:e.query,slug:e.slug,lang:e.lang}):[]:[]}catch(r){return this.handleError(r)}}}});var At,xg,ul,Hr,ml=T(()=>{"use strict";At=require("drizzle-orm"),xg=require("lodash-es"),ul=require("zod");D();_();se();Hr=class extends P{getValidationSchema(){return ul.z.object({id:ul.z.string()})}async execute(e){if(!this.context)throw B("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:r}=this.context,{id:a}=e,{data:n,error:i}=await b(()=>y.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,At.and)((0,At.eq)(s.appPages.app,r),(0,At.or)((0,At.eq)(s.appPages.primaryPage,a),(0,At.eq)(s.appPages.id,a)),(0,At.isNull)(s.appPages.deletedAt))));if(i)throw B("LANGUAGE_PAGES_ERROR",i);return n.map(o=>(0,xg.omit)(o,["app"]))}}});var we,hl,Ui,Ig=T(()=>{"use strict";we=require("drizzle-orm"),hl=require("zod");_();se();D();Ui=class extends P{getValidationSchema(){return hl.z.object({lang:hl.z.string().optional()})}async execute(e){var l;if(!this.context)throw B("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:r}=this.context,a=(l=e==null?void 0:e.lang)!=null?l:"",n=s.appPages,{data:i,error:o}=await b(()=>y.select({id:n.id,name:n.name,slug:n.slug}).from(n).where((0,we.and)((0,we.eq)(n.app,r),(0,we.isNull)(n.deletedAt),(0,we.isNull)(n.primaryPage),(0,we.eq)(n.dynamic,!1),(0,we.ne)(n.slug,""),(0,we.or)((0,we.eq)(n.lang,""),(0,we.eq)(n.lang,a)))).orderBy((0,we.asc)(n.name)));if(o)throw B("ERROR_GETTING_MENU_PAGES",o);return i!=null?i:[]}}});var fl,qr,yl=T(()=>{"use strict";fl=require("zod");Pe();D();qr=class extends P{getValidationSchema(){return fl.z.object({lang:fl.z.string()})}async execute(e){try{let{lang:r}=e;return await Lr({lang:r,draft:!0,inBuilder:!0})}catch(r){return this.handleError(r)}}}});var zr,Gi,Sg=T(()=>{"use strict";zr=require("zod");D();pl();gl();ml();yl();Gi=class extends P{getValidationSchema(){return zr.z.object({id:zr.z.string(),lang:zr.z.string(),pageType:zr.z.string().optional(),pageProps:zr.z.any().optional().default({})})}async execute(e){let{id:r,lang:a,pageType:n,pageProps:i={}}=e,o=new Mr,l=new Gr,c=new Hr,d=new qr;this.context&&(o.setContext(this.context),l.setContext(this.context),c.setContext(this.context),d.setContext(this.context));let[u,g,h,f]=await Promise.all([o.execute({id:r}),l.execute({lang:a,pageType:n,pageProps:i}),c.execute({id:r}),d.execute({lang:a})]);return{draftPage:u,builderPageData:g,languagePages:h,siteGlobalData:f}}}});var Rg,jr,bl=T(()=>{"use strict";Rg=require("zod");Pe();D();jr=class extends P{getValidationSchema(){return Rg.z.object({})}async execute(){try{return Vs(mr())}catch(e){return this.handleError(e)}}}});var dt,vg,Tl,Vr,Al=T(()=>{"use strict";dt=require("drizzle-orm"),vg=require("lodash-es"),Tl=require("zod");_();se();D();Vr=class extends P{getValidationSchema(){return Tl.z.object({lang:Tl.z.string().optional()})}async execute(e){var g;if(!this.context)throw B("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:r}=this.context,n=(g=(e!=null?e:{lang:""}).lang)!=null?g:"",{data:i,error:o}=await b(()=>y.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,dt.and)((0,dt.eq)(s.appPages.app,r),(0,dt.eq)(s.appPages.lang,n),(0,dt.isNull)(s.appPages.deletedAt))));if(o)throw B("ERROR_GETTING_WEBSITE_PAGES",o);if(!i||i.length===0)return[];let l=i.filter(h=>!(0,vg.isEmpty)(h.slug)).map(h=>h.id),{data:c,error:d}=await b(()=>y.select({pageId:s.libraryTemplates.pageId}).from(s.libraryTemplates).where((0,dt.and)((0,dt.inArray)(s.libraryTemplates.pageId,l),(0,dt.isNull)(s.libraryTemplates.deletedAt))));if(d)throw B("ERROR_GETTING_TEMPLATE_INFO",d);let u=new Set((c||[]).map(h=>h.pageId));return i.map(h=>{var f,A;return{...h,pageType:(f=h.pageType)!=null?f:"page",isTemplate:u.has(h.id),changes:h.changes,lang:h.lang,designTokens:h.designTokens,links:h.links,partialBlocks:h.partialBlocks,metadata:(A=h.metadata)!=null?A:null}})}}});var Wr,Pl,Mi,_g=T(()=>{"use strict";Wr=require("drizzle-orm"),Pl=require("zod");D();_();Mi=class extends P{getValidationSchema(){return Pl.z.object({pageId:Pl.z.string().min(1)})}async execute({pageId:e}){let{userId:r,appId:a}=this.context;return r?(await y.update(s.appPages).set({currentEditor:null}).where((0,Wr.and)((0,Wr.eq)(s.appPages.id,e),(0,Wr.eq)(s.appPages.app,a),(0,Wr.eq)(s.appPages.currentEditor,r))),{ok:!0}):{ok:!1}}}});var $i,Hi,kg=T(()=>{"use strict";$i=require("zod");Pe();D();Hi=class extends P{getValidationSchema(){return $i.z.object({pageType:$i.z.string(),query:$i.z.string()})}async execute(e){try{let{pageType:r,query:a}=e,n=lt(r),i=n?bt(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(r){return this.handleError(r)}}}});var Ie,qi,zi,Dg=T(()=>{"use strict";Ie=require("drizzle-orm"),qi=require("zod");N();D();_();zi=class extends P{getValidationSchema(){return qi.z.object({pageType:qi.z.string().min(1),query:qi.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r}=this.context,{pageType:a,query:n=""}=e,i=this.isUUID(n),o=[(0,Ie.eq)(s.appPages.app,r),(0,Ie.eq)(s.appPages.pageType,a),(0,Ie.isNull)(s.appPages.deletedAt)],l;n?i?l=(0,Ie.and)(...o,(0,Ie.eq)(s.appPages.id,n)):l=(0,Ie.and)(...o,(0,Ie.or)((0,Ie.ilike)(s.appPages.slug,`%${n}%`),(0,Ie.ilike)(s.appPages.name,`%${n}%`))):l=(0,Ie.and)(...o);let{data:c,error:d}=await b(()=>y.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 Se,wl,ji,Bg=T(()=>{"use strict";Se=require("drizzle-orm"),wl=require("zod");N();D();_();Xe();ji=class extends P{constructor(){super(...arguments);this.appId=""}getValidationSchema(){return wl.z.object({id:wl.z.string().min(1,"Page ID is required")})}async execute(r){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");this.appId=this.context.appId;try{return await this.takeOffline(r.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(r){let a=await this.getPageType(r),{error:n}=await b(()=>y.update(s.appPages).set({online:!1}).where((0,Se.and)((0,Se.eq)(s.appPages.id,r),(0,Se.eq)(s.appPages.app,this.appId))));if(n)throw new m("Error taking page offline","ERROR_TAKING_PAGE_OFFLINE");if(await this.deleteOnlinePage(r),a==="language"){let l=await this.getPrimaryPage(r);return{tags:kr([l]),paths:[]}}if(a==="partial"){let l=await this.getPartialBlockUsage(r);return{tags:kr(l),paths:[]}}let{data:i,error:o}=await b(()=>y.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,Se.eq)(s.appPages.id,r)));if(o||!i||i.length===0)throw new m("Error getting page after taking offline","ERROR_TAKING_PAGE_OFFLINE");return{tags:[...kr([r]),ft(i[0].slug)],paths:[i[0].slug],page:i[0]}}async deleteOnlinePage(r){let{error:a}=await b(()=>y.delete(s.appPagesOnline).where((0,Se.eq)(s.appPagesOnline.id,r)));if(a)throw new m("Error deleting page from online pages table","ERROR_DELETING_PAGE_FROM_ONLINE_PAGES_TABLE");let{error:n}=await b(()=>y.delete(s.appPagesOnline).where((0,Se.eq)(s.appPagesOnline.primaryPage,r)));if(n)throw new m("Error deleting page from online pages table","ERROR_DELETING_PAGE_FROM_ONLINE_PAGES_TABLE")}async getPageType(r){let{data:a,error:n}=await b(()=>y.select({primaryPage:s.appPages.primaryPage,pageType:s.appPages.pageType,slug:s.appPages.slug}).from(s.appPages).where((0,Se.and)((0,Se.eq)(s.appPages.id,r),(0,Se.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(r){var o;let{data:a,error:n}=await b(()=>y.select({id:s.appPages.id,primaryPage:s.appPages.primaryPage}).from(s.appPages).where((0,Se.and)((0,Se.eq)(s.appPages.id,r),(0,Se.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(r){let{data:a,error:n}=await b(()=>y.select({id:s.appPages.id,partialBlocks:s.appPages.partialBlocks}).from(s.appPages).where((0,Se.eq)(s.appPages.app,this.appId)));return n||!a?[]:a.filter(i=>(i.partialBlocks||"").split("|").includes(r)).map(i=>i.id)}}});var Yt,Kr,Vi,Ng=T(()=>{"use strict";Yt=require("drizzle-orm"),Kr=require("zod");_();fi();N();D();Vi=class extends P{getValidationSchema(){return Kr.z.object({id:Kr.z.string().nonempty(),metadata:Kr.z.record(Kr.z.string(),Kr.z.any())})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r}=this.context,{data:a,error:n}=await b(()=>y.query.appPages.findFirst({where:(0,Yt.and)((0,Yt.eq)(s.appPages.id,e.id),(0,Yt.eq)(s.appPages.app,r)),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 b(()=>y.update(s.appPages).set({metadata:e.metadata}).where((0,Yt.and)((0,Yt.eq)(s.appPages.id,e.id),(0,Yt.eq)(s.appPages.app,r))));if(i)throw console.error(i),new m("Failed to update page metadata","UPDATE_FAILED");return{success:!0,tags:hi(e.id)}}}});var Ka,Cl,Wi,Lg=T(()=>{"use strict";Ka=require("drizzle-orm"),Cl=require("zod");N();D();_();Wi=class extends P{getValidationSchema(){return Cl.z.object({revisionId:Cl.z.string().nonempty("Revision ID is required")})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r}=this.context,{error:a}=await b(()=>y.delete(s.appPagesRevisions).where((0,Ka.and)((0,Ka.eq)(s.appPagesRevisions.uid,e.revisionId),(0,Ka.eq)(s.appPagesRevisions.app,r))));if(a)throw new m("Failed to delete page revision","DELETE_REVISION_ERROR");return{success:!0}}}});var Qt,Og,El,Ki,Fg=T(()=>{"use strict";Qt=require("drizzle-orm"),Og=require("lodash-es"),El=require("zod");N();D();_();Ki=class extends P{getValidationSchema(){return El.z.object({pageId:El.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(r){if(r instanceof m)throw r;let a=r instanceof Error?r.message:"Failed to get page revisions";throw new m(a,"GET_PAGE_REVISIONS_ERROR")}}async getRevisions(e){let{data:r,error:a}=await b(()=>y.select({currentEditor:s.appPagesOnline.currentEditor,createdAt:s.appPagesOnline.createdAt}).from(s.appPagesOnline).where((0,Qt.and)((0,Qt.eq)(s.appPagesOnline.app,this.context.appId),(0,Qt.eq)(s.appPagesOnline.id,e)))),{data:n,error:i}=await b(()=>y.select({uid:s.appPagesRevisions.uid,currentEditor:s.appPagesRevisions.currentEditor,createdAt:s.appPagesRevisions.createdAt,type:s.appPagesRevisions.type}).from(s.appPagesRevisions).where((0,Qt.and)((0,Qt.eq)(s.appPagesRevisions.app,this.context.appId),(0,Qt.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=r==null?void 0:r[0],c=[...o?[{...o,type:"published",uid:"current"}]:[],...n!=null?n:[]];return(0,Og.orderBy)(c,["createdAt"],["desc"])}}});var Re,Dt,Yi,Qi,Ug=T(()=>{"use strict";Re=require("drizzle-orm"),Dt=require("lodash-es"),Yi=require("zod");D();_();se();Qi=class extends P{getValidationSchema(){return Yi.z.object({id:Yi.z.string().nonempty(),type:Yi.z.enum(["draft","live","revision"])})}async execute(e){var i;if(!this.context)throw B("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let r,a;switch(e.type){case"draft":({data:r,error:a}=await b(()=>{var o;return y.query.appPages.findFirst({where:(0,Re.and)((0,Re.eq)(s.appPages.id,e.id),(0,Re.eq)(s.appPages.lang,(o=e.lang)!=null?o:""))})}));break;case"live":({data:r,error:a}=await b(()=>{var o;return y.query.appPagesOnline.findFirst({where:(0,Re.and)((0,Re.eq)(s.appPagesOnline.id,e.id),(0,Re.eq)(s.appPagesOnline.lang,(o=e.lang)!=null?o:""))})}));break;case"revision":({data:r,error:a}=await b(()=>{var o;return y.query.appPagesRevisions.findFirst({where:(0,Re.and)((0,Re.eq)(s.appPagesRevisions.uid,e.id),(0,Re.eq)(s.appPagesRevisions.lang,(o=e.lang)!=null?o:""))})}));break}if(a||!r)throw B("NOT_FOUND",a||new Error("Page not found"));let n=(i=r==null?void 0:r.blocks)!=null?i:[];return n=await this.getMergedBlocks(n,e.type==="draft",this.context.appId),{...r,blocks:n}}async getMergedBlocks(e,r,a){var u;let n=r?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,Dt.get)(g,"partialBlockId",(0,Dt.get)(g,"globalBlock",""))).filter(g=>g!=="");if(o.length===0)return e;let{data:l,error:c}=await b(()=>y.select({id:n.id,blocks:n.blocks}).from(n).where((0,Re.and)((0,Re.eq)(n.app,a),(0,Re.inArray)(n.id,o))));if(c)throw B("PARTIAL_BLOCKS_FETCH_ERROR",c);let d=new Map;l&&l.forEach(g=>{var h;d.set(g.id,(h=g.blocks)!=null?h:[])});for(let g=0;g<i.length;g++){let h=i[g];if(!h)continue;let f=(0,Dt.get)(h,"partialBlockId",(0,Dt.get)(h,"globalBlock",""));if(f==="")continue;let A=(u=d.get(f))!=null?u:[];A.length>0&&(A=A.map(w=>((0,Dt.isEmpty)(w._parent)&&(w._parent=h._parent),(0,Dt.has)(h,"_show")&&(w._show=h._show),w)));let C=e.indexOf(h);C!==-1&&e.splice(C,1,...A)}return e}}});var Ze,Gg,Ya,Xi,Mg=T(()=>{"use strict";Ze=require("drizzle-orm"),Gg=require("lodash-es"),Ya=require("zod");N();D();_();Xi=class extends P{getValidationSchema(){return Ya.z.object({revisionId:Ya.z.string().nonempty(),discardCurrent:Ya.z.boolean(),pageId:Ya.z.string().optional()})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r}=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 b(()=>y.query.appPagesOnline.findFirst({where:(0,Ze.and)((0,Ze.eq)(s.appPagesOnline.id,e.pageId),(0,Ze.eq)(s.appPagesOnline.app,r)),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 b(()=>y.query.appPagesRevisions.findFirst({where:(0,Ze.and)((0,Ze.eq)(s.appPagesRevisions.uid,e.revisionId),(0,Ze.eq)(s.appPagesRevisions.app,r)),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 b(()=>y.query.appPages.findFirst({where:(0,Ze.and)((0,Ze.eq)(s.appPages.id,a),(0,Ze.eq)(s.appPages.app,r))}));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,Gg.pick)(i,["name","slug","pageType","lang","app","currentEditor","createdBy"])};await y.insert(s.appPagesRevisions).values(c)}return await y.update(s.appPages).set({blocks:n}).where((0,Ze.eq)(s.appPages.id,a)),{success:!0,pageId:a}}}});var Qa,Ji,$g=T(()=>{"use strict";Qa=require("zod");_();N();D();Ji=class extends P{getValidationSchema(){return Qa.z.object({name:Qa.z.string().min(1),permissions:Qa.z.array(Qa.z.string())})}async execute(e){var i,o,l,c;let{data:r,error:a}=await b(()=>y.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=r==null?void 0:r[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 xl,Il,Zi,Hg=T(()=>{"use strict";xl=require("drizzle-orm"),Il=require("zod");_();N();D();Zi=class extends P{getValidationSchema(){return Il.z.object({name:Il.z.string().min(1)})}async execute(e){let{data:r,error:a}=await b(()=>y.select({isSystem:s.roles.isSystem}).from(s.roles).where((0,xl.eq)(s.roles.name,e.name)));if(a)throw new m("Error checking role","ERROR_CHECKING_ROLE",500,a);let n=r==null?void 0:r[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 b(()=>y.delete(s.roles).where((0,xl.eq)(s.roles.name,e.name)));if(i)throw new m("Error deleting role","ERROR_DELETING_ROLE",500,i);return{deleted:!0}}}});var qg,Sl,eo,zg=T(()=>{"use strict";qg=require("drizzle-orm"),Sl=require("zod");_();N();D();eo=class extends P{getValidationSchema(){return Sl.z.object({name:Sl.z.string().min(1)})}async execute(e){var i,o,l,c;let{data:r,error:a}=await b(()=>y.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,qg.eq)(s.roles.name,e.name)));if(a)throw new m("Error fetching role","ERROR_FETCHING_ROLE",500,a);let n=r==null?void 0:r[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 jg,to,Vg=T(()=>{"use strict";jg=require("zod");_();N();D();to=class extends P{getValidationSchema(){return jg.z.object({})}async execute(){let{data:e,error:r}=await b(()=>y.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(r)throw new m("Error fetching roles","ERROR_FETCHING_ROLES",500,r);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 Wg,Xa,ro,Kg=T(()=>{"use strict";Wg=require("drizzle-orm"),Xa=require("zod");_();N();D();ro=class extends P{getValidationSchema(){return Xa.z.object({name:Xa.z.string().min(1),permissions:Xa.z.array(Xa.z.string())})}async execute(e){var i,o,l,c;let{data:r,error:a}=await b(()=>y.update(s.roles).set({permissions:e.permissions}).where((0,Wg.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=r==null?void 0:r[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 Pt,Rl,ao,Yg=T(()=>{"use strict";Pt=require("drizzle-orm"),Rl=require("zod");_();N();D();ao=class extends P{getValidationSchema(){return Rl.z.object({pageType:Rl.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r}=this.context,{pageType:a}=e,{data:n,error:i}=await b(()=>y.query.libraries.findFirst({where:(0,Pt.eq)(s.libraries.app,r),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 b(()=>y.select({id:s.libraries.id}).from(s.libraries).where((0,Pt.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 b(()=>y.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,Pt.and)((0,Pt.eq)(s.libraryTemplates.pageType,a),(0,Pt.inArray)(s.libraryTemplates.library,c),(0,Pt.isNull)(s.libraryTemplates.deletedAt))));if(u)throw new m("Failed to fetch templates","GET_TEMPLATES_FAILED",500,u);return d||[]}}});var Qg,Xt,no,Xg=T(()=>{"use strict";Qg=require("drizzle-orm"),Xt=require("zod");N();D();_();no=class extends P{getValidationSchema(){return Xt.z.object({id:Xt.z.string().min(1),description:Xt.z.string().optional(),name:Xt.z.string().min(1),pageType:Xt.z.string().min(1),previewImage:Xt.z.string().optional(),previewImageUrl:Xt.z.string().optional()})}async execute(e){var C;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r,userId:a}=this.context,{id:n,description:i,name:o,pageType:l,previewImage:c,previewImageUrl:d}=e,{data:u,error:g}=await b(()=>y.query.libraries.findFirst({where:(0,Qg.eq)(s.libraries.app,r),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 h=d;if(c){let{getChaiAction:w}=await Promise.resolve().then(()=>(jt(),pr)),E=w("UPLOAD_TO_STORAGE");E==null||E.setContext(this.context);let S=`template-${Date.now()}.webp`,R=`${r}/templates`,k=await(E==null?void 0:E.execute({file:c,fileName:S,contentType:"image/webp",folder:R}));if(k!=null&&k.error)throw new m("Failed to upload preview image","UPLOAD_PREVIEW_FAILED",500,k.error);h=((C=k==null?void 0:k.data)==null?void 0:C.url)||d}let{data:f,error:A}=await b(()=>y.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:h!=null?h:null,createdBy:a!=null?a:null}).returning());if(A||!f||f.length===0)throw new m("Failed to mark page as template","UPDATE_FAILED",500,A);return f[0]}}});var Jg,vl,io,Zg=T(()=>{"use strict";Jg=require("drizzle-orm"),vl=require("zod");N();D();_();io=class extends P{getValidationSchema(){return vl.z.object({id:vl.z.string().min(1)})}async execute(e){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{id:r}=e,{error:a}=await b(()=>{var n,i;return y.update(s.libraryTemplates).set({deletedAt:new Date().toISOString(),deletedBy:(i=(n=this.context)==null?void 0:n.userId)!=null?i:null}).where((0,Jg.eq)(s.libraryTemplates.pageId,r))});if(a)throw new m("Failed to unmark page as template","DELETE_FAILED",500,a);return{success:!0}}}});var Yr,_l,oo,eu=T(()=>{"use strict";Yr=require("drizzle-orm"),_l=require("zod");_();se();Pe();N();D();oo=class extends P{getValidationSchema(){return _l.z.object({id:_l.z.string().min(1,"Trash Record ID is required")})}async execute(e){var r;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");try{let{data:a,error:n}=await b(()=>y.select().from(s.appTrash).where((0,Yr.and)((0,Yr.eq)(s.appTrash.id,e.id),(0,Yr.eq)(s.appTrash.app,this.context.appId))).limit(1));if(n||!a||a.length===0)throw B("TRASH_RECORD_NOT_FOUND","Trash record not found");let i=a[0],o={id:i.id,entityType:i.entityType,entityId:i.entityId||"",name:((r=i.metadata)==null?void 0:r.name)||"",metadata:i.metadata||{},deletedAt:i.deletedAt,deletedBy:i.deletedBy||"",app:i.app||""},l=yt(o.entityType);if(!l)throw B("ENTITY_HANDLER_NOT_FOUND",`Handler for entity type '${o.entityType}' not found`);return await l.deletePermanently(o,this.context),await b(()=>y.delete(s.appTrash).where((0,Yr.eq)(s.appTrash.id,o.id))),!0}catch(a){return this.handleError(a),!1}}}});function $b(){let t=s.appTrash.metadata;return ns()==="sqlite"?Le.sql`json_extract(${t}, '$.name')`:Le.sql`${t}->>'name'`}var Le,Bt,Mb,so,tu=T(()=>{"use strict";Le=require("drizzle-orm"),Bt=require("zod");Sn();_();se();N();D();Mb=Bt.z.string().uuid();so=class extends P{getValidationSchema(){return Bt.z.object({page:Bt.z.number().optional().default(1),limit:Bt.z.number().optional().default(20),search:Bt.z.string().optional(),entityType:Bt.z.string().optional(),sortBy:Bt.z.string().optional(),sortOrder:Bt.z.enum(["asc","desc"]).optional()})}async execute(e){var f;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{page:r=1,limit:a=20,search:n,entityType:i,sortBy:o,sortOrder:l="desc"}=e,c=(r-1)*a,d=Mb.safeParse(this.context.appId);if(!d.success)return{items:[],total:0,page:r,pageSize:a};let u=[(0,Le.eq)(s.appTrash.app,d.data)];i&&u.push((0,Le.eq)(s.appTrash.entityType,i));let g=$b();if(n&&n.trim()!==""){let A=n.trim();u.push(Le.sql`lower(${g}) like '%' || lower(${A}) || '%'`)}let h=(0,Le.and)(...u);try{let{data:A,error:C}=await b(()=>y.select({count:Le.sql`cast(count(${s.appTrash.id}) as integer)`}).from(s.appTrash).where(h));if(C)throw B("FETCH_TRASH_FAILED",C);let w=((f=A==null?void 0:A[0])==null?void 0:f.count)||0,{data:E,error:S}=await b(()=>y.select().from(s.appTrash).where(h).orderBy((()=>{let k=o==="name"?g:s.appTrash.deletedAt;return l==="asc"?(0,Le.asc)(k):(0,Le.desc)(k)})()).limit(a).offset(c));if(S)throw B("FETCH_TRASH_FAILED",S);return{items:(E||[]).map(k=>{var x,G,j;return{id:k.id,entityType:k.entityType,entityId:k.entityId||"",name:((x=k.metadata)==null?void 0:x.name)||"",metadata:k.metadata||{},deletedAt:k.deletedAt||((G=k.metadata)==null?void 0:G.deletedAt),deletedBy:k.deletedBy||((j=k.metadata)==null?void 0:j.deletedBy)||"",app:k.app||""}}),total:w,page:r,pageSize:a}}catch(A){this.handleError(A)}}}});var Qr,kl,lo,ru=T(()=>{"use strict";Qr=require("drizzle-orm"),kl=require("zod");_();se();Xe();Pe();N();D();lo=class extends P{getValidationSchema(){return kl.z.object({id:kl.z.string().min(1,"Trash Record ID is required")})}async execute(e){var r;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");try{let{data:a,error:n}=await b(()=>y.select().from(s.appTrash).where((0,Qr.and)((0,Qr.eq)(s.appTrash.id,e.id),(0,Qr.eq)(s.appTrash.app,this.context.appId))).limit(1));if(n||!a||a.length===0)throw B("TRASH_RECORD_NOT_FOUND","Trash record not found");let i=a[0],o={id:i.id,entityType:i.entityType,entityId:i.entityId||"",name:((r=i.metadata)==null?void 0:r.name)||"",metadata:i.metadata||{},deletedAt:i.deletedAt,deletedBy:i.deletedBy||"",app:i.app||""},l=yt(o.entityType);if(!l)throw B("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 B("RESTORE_CONFLICT","Restore conflict detected but no resolver available");let h=await l.resolveRestoreConflict(o,this.context);c=h.resolved,d=h.newSlug}await l.restore(o,this.context);let{error:g}=await b(()=>y.delete(s.appTrash).where((0,Qr.eq)(s.appTrash.id,o.id)));if(g)throw B("RESTORE_FAILED",g);return{success:!0,resolvedConflict:c,newSlug:d,...o.entityType==="page"?{tags:_t(o.entityId,{slugs:d?{new:d}:void 0})}:{}}}catch(a){this.handleError(a)}}}});var Ja,co,au=T(()=>{"use strict";Ja=require("zod");_();se();Pe();N();D();co=class extends P{getValidationSchema(){return Ja.z.object({entityType:Ja.z.string().min(1,"Entity Type is required"),ids:Ja.z.array(Ja.z.string().min(1))})}async execute(e){var n;if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let r=yt(e.entityType);if(!r)throw new m(`Trashable entity '${e.entityType}' not found`,"ENTITY_NOT_FOUND");let a=[];for(let i of e.ids)try{let o=await r.moveToTrash(i,this.context),{data:l,error:c}=await b(()=>y.insert(s.appTrash).values(o).returning());if(c||!l||l.length===0)throw B("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 Dl,nu=T(()=>{"use strict";Dl={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 iu(){let t=Bl();return t?"source"in t&&t.source==="custom"?Hb():t:Dl}async function Hb(){let{data:t,error:e}=await b(()=>y.select({name:s.roles.name,permissions:s.roles.permissions}).from(s.roles));return e||!t?{}:t.length===0?Dl:t.reduce((r,a)=>{var n;return a.name&&(r[a.name]={permissions:(n=a.permissions)!=null?n:[]}),r},{})}var ou=T(()=>{"use strict";_();Ke();nu()});function go(t){let e=t.indexOf(":");return e===-1?t:t.slice(0,e)}function su(t,e){return e?!t||t.length===0?!1:t.includes(po)||t.includes(e)?!0:t.includes(`${go(e)}:*`):!0}function Nl(t,e=uo){if(!t)return[];let r=new Set;for(let[a,n]of Object.entries(t))if(n===!0)if(a===po)e.forEach(i=>r.add(i));else if(a.endsWith(":*")){let i=a.slice(0,-2);e.filter(o=>go(o)===i).forEach(o=>r.add(o))}else r.add(a);for(let[a,n]of Object.entries(t))if(n===!1)if(a===po)r.clear();else if(a.endsWith(":*")){let i=a.slice(0,-2);[...r].filter(o=>go(o)===i).forEach(o=>r.delete(o))}else r.delete(a);return[...r]}function lu(t,e,r=uo){let a=o=>{let l=new Set;for(let c of o)if(c===po)r.forEach(d=>l.add(d));else if(c.endsWith(":*")){let d=c.slice(0,-2);r.filter(u=>go(u)===d).forEach(u=>l.add(u))}else l.add(c);return l},n=a(t),i=a(e);return[...n].filter(o=>i.has(o))}var uo,po,mo=T(()=>{"use strict";_n();_n();uo=Object.keys(I),po="*"});function qb(t){return t?Array.isArray(t)?t.reduce((e,r)=>(e[r]=!0,e),{}):t:null}function zb(t,e){let r=new Set;for(let a of t)if(a==="*")e.forEach(n=>r.add(n));else if(a.endsWith(":*")){let n=a.slice(0,-2);e.filter(i=>i.startsWith(`${n}:`)).forEach(i=>r.add(i))}else r.add(a);return[...r]}function cu({role:t,roleMap:e,userOverride:r,catalog:a=uo}){var l,c;let n=(c=(l=e==null?void 0:e[t])==null?void 0:l.permissions)!=null?c:[],i=new Set(zb(n,a)),o=qb(r);if(o)for(let[d,u]of Object.entries(o))u===!0?Nl({[d]:!0},a).forEach(g=>i.add(g)):u===!1&&Nl({[d]:!0},a).forEach(g=>i.delete(g));return[...i]}var pu=T(()=>{"use strict";mo()});async function du(t){let{appId:e,userId:r}=t;if(!r)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: "${r}"`);let{data:a,error:n}=await b(()=>y.select().from(s.appUsers).where((0,Xr.and)((0,Xr.eq)(s.appUsers.app,e),(0,Xr.eq)(s.appUsers.user,r),(0,Xr.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: "${r}"`),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 Xr,gu=T(()=>{"use strict";Xr=require("drizzle-orm");N();_()});var uu,ho,mu=T(()=>{"use strict";uu=require("zod");ou();mo();pu();N();D();gu();ho=class extends P{getValidationSchema(){return uu.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 du(this.context),r=e.role||"user",a=await iu(),n=cu({role:r,roleMap:a,userOverride:e.permissions});return this.context.delegatedScopes&&(n=lu(n,this.context.delegatedScopes)),{access:!0,role:r,permissions:n}}}});var Za,yo,hu,fo,fu=T(()=>{"use strict";Za=require("drizzle-orm"),yo=require("lodash-es"),hu=require("zod");_();se();D();fo=class extends P{getValidationSchema(){return hu.z.undefined()}async execute(){if(!this.context)throw B("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:e}=this.context,{data:r,error:a}=await b(()=>y.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,Za.and)((0,Za.eq)(s.appPages.lang,""),(0,Za.eq)(s.appPages.app,e))));if(a)throw B("FETCH_SITE_DATA_FAILED",a);let n={};return(0,yo.each)(r,i=>{var o,l;n[i.id]={name:i.name,isPartial:(0,yo.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 yu,bu,Tu,Ll,Jr,Ol=T(()=>{"use strict";yu=require("crypto"),bu=require("drizzle-orm"),Tu=require("lodash-es"),Ll=require("zod");D();_();se();Jr=class extends P{getValidationSchema(){return Ll.z.object({draft:Ll.z.boolean()})}async execute(e){var d;if(!this.context)throw B("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:r}=this.context,{draft:a}=e,n=a?s.apps:s.appsOnline,{data:i,error:o}=await b(()=>y.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,bu.eq)(n.id,r)).limit(1));if(o)throw B("ERROR_PROJECT_CONFIG",o);if(!i||i.length===0)throw B("PROJECT_NOT_FOUND",new Error("Project not found"));let l=(0,Tu.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(r),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 r=(0,yu.createHash)("sha256").update(e).digest("hex");return[r.substring(0,8),r.substring(8,12),"4"+r.substring(13,16),(parseInt(r.substring(16,17),16)&3|8).toString(16)+r.substring(17,20),r.substring(20,32)].join("-")}}});var Au,bo,Pu=T(()=>{"use strict";Au=require("zod");D();el();tl();bl();Al();Ol();bo=class extends P{getValidationSchema(){return Au.z.object({}).optional().default({})}async execute(){let e=new Jr,r=new Vr,a=new jr,n=new Fr,i=new Or;this.context&&(e.setContext(this.context),r.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}),r.execute({lang:""}),a.execute(),n.execute(),i.execute()]);return{websiteSettings:o,websitePages:l,pageTypes:c,libraries:d,collections:u}}}});var X,Me,en,To,wu=T(()=>{"use strict";X=require("drizzle-orm"),Me=require("lodash-es"),en=require("zod");_();Xe();N();D();To=class extends P{constructor(){super(...arguments);this.appId="";this.revisionsEnabled=!1}getValidationSchema(){return en.z.object({ids:en.z.array(en.z.string()).optional(),revisions:en.z.boolean().optional()})}async execute(r){var a,n;this.validateContext(),this.appId=this.context.appId,this.revisionsEnabled=(a=r.revisions)!=null?a:!1;try{let i=(n=r.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,Me.uniq)((0,Me.flattenDeep)(o.map(d=>d.tags))),c=(0,Me.uniq)((0,Me.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 r=await this.cloneApp(),{error:a}=await b(()=>y.delete(s.appsOnline).where((0,X.eq)(s.appsOnline.id,this.appId)));if(a)throw new m("Error deleting online theme","ERROR_PUBLISHING_THEME",500,a);let{error:n}=await b(()=>y.insert(s.appsOnline).values({...r,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 r=await this.cloneApp(),{error:a}=await b(()=>y.delete(s.appsOnline).where((0,X.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 b(()=>y.insert(s.appsOnline).values({...r,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(r,a){var d,u;let{data:n,error:i}=await b(()=>y.select({changes:s.apps.changes}).from(s.apps).where((0,X.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!==r),{error:c}=await b(()=>y.update(s.apps).set({changes:l.length>0?l:null}).where((0,X.eq)(s.apps.id,this.appId)));if(c)throw new m("Error updating changes",a,500,c)}async cloneApp(){let{data:r,error:a}=await b(()=>y.query.apps.findFirst({where:(0,X.eq)(s.apps.id,this.appId)}));if(a||!r)throw new m("Site not found","SITE_NOT_FOUND",404,a);return r}async clearChanges(r){let a=r.filter(i=>i!=="THEME"&&i!=="DESIGN_TOKENS");if(a.length===0)return;let{error:n}=await b(()=>y.update(s.appPages).set({changes:null,online:!0}).where((0,X.and)((0,X.inArray)(s.appPages.id,a),(0,X.eq)(s.appPages.app,this.appId))));if(n)throw new m("Error clearing changes","ERROR_CLEARING_CHANGES",500,n)}async getLinkingPages(r){let{data:a}=await b(()=>y.query.appPagesOnline.findMany({where:(0,X.and)((0,X.eq)(s.appPagesOnline.app,this.appId),(0,X.like)(s.appPagesOnline.links,`%${r}%`)),columns:{id:!0,slug:!0}})),n=[],i=[];return(a!=null?a:[]).forEach(o=>{n.push(`page-${o.id}`),(0,Me.isEmpty)(o.slug)||i.push(o.slug)}),{tags:n,paths:i}}async getPartialBlockUsage(r){let{data:a}=await b(()=>y.query.appPagesOnline.findMany({where:(0,X.and)((0,X.eq)(s.appPagesOnline.app,this.appId),(0,X.like)(s.appPagesOnline.partialBlocks,`%${r}%`)),columns:{id:!0,slug:!0}})),n=[],i=[];return(a!=null?a:[]).forEach(o=>{n.push(`page-${o.id}`),(0,Me.isEmpty)(o.slug)||i.push(o.slug)}),{tags:n,paths:i}}async publishPage(r){var l;let a=await this.clonePage(r);await this.addOnlinePage(a);let n=(l=a.primaryPage)!=null?l:a.id,i=[`page-${n}`,`breadcrumb-${n}`],o=[];if((0,Me.isEmpty)(a.slug)){let c=await this.getPartialBlockUsage(n);i.push(...c.tags),o.push(...c.paths)}else{o.push(`${a.slug}`),i.push(ft(a.slug));let c=await this.getLinkingPages(n);i.push(...c.tags),o.push(...c.paths)}return{tags:(0,Me.uniq)(i),paths:(0,Me.uniq)(o)}}async createRevision(r){if(!this.revisionsEnabled)return!1;let{data:a,error:n}=await b(()=>y.query.appPagesOnline.findFirst({where:(0,X.eq)(s.appPagesOnline.id,r)}));if(n||!a||!(0,Me.isEmpty)(a.primaryPage))return!1;let{error:i}=await b(()=>y.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(r){await this.createRevision(r.id);let{error:a}=await b(()=>y.delete(s.appPagesOnline).where((0,X.eq)(s.appPagesOnline.id,r.id)));if(a)throw new m("Error deleting online page","ERROR_PUBLISHING_PAGE",500,a);let{changes:n,createdAt:i,...o}=r,{data:l,error:c}=await b(()=>{var u;return y.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 b(()=>y.update(s.appPages).set({changes:null}).where((0,X.eq)(s.appPages.id,r.id)));if(d)throw new m("Error clearing page changes","ERROR_PUBLISHING_PAGE",500,d);return l[0]}async clonePage(r){let{data:a,error:n}=await b(()=>y.query.appPages.findFirst({where:(0,X.and)((0,X.eq)(s.appPages.id,r),(0,X.eq)(s.appPages.app,this.appId))}));if(n||!a)throw new m("Page not found","PAGE_NOT_FOUND",404,n);return a}handleExecutionError(r){throw r instanceof m?r:new m(`Failed to publish changes: ${r instanceof Error?r.message:"Unknown error"}`,"PUBLISH_CHANGES_FAILED")}}});var Fl,Cu,Ul,Ao,Eu=T(()=>{"use strict";Fl=require("drizzle-orm"),Cu=require("lodash-es"),Ul=require("zod");_();se();D();Ao=class extends P{getValidationSchema(){return Ul.z.object({settings:Ul.z.any()})}async execute(e){var h;if(!this.context)throw B("CONTEXT_NOT_SET",new Error("CONTEXT_NOT_SET"));let{appId:r}=this.context,a=(0,Cu.pick)(e.settings,["theme","designTokens"]),{data:n,error:i}=await b(()=>y.select({changes:s.apps.changes}).from(s.apps).where((0,Fl.eq)(s.apps.id,r)));if(i)throw B("ERROR_UPDATE_WEBSITE_FIELDS",i);let o=(h=n[0].changes)!=null?h:[],l={theme:"THEME",designTokens:"DESIGN_TOKENS"},c=Object.keys(a).map(f=>l[f]).filter(Boolean),d=[...new Set([...o,...c])],u={...a,changes:d},{error:g}=await b(()=>y.update(s.apps).set(u).where((0,Fl.eq)(s.apps.id,r)));if(g)throw B("ERROR_UPDATE_WEBSITE_FIELDS",g);return{success:!0}}}});function v(t,e){return t.requiredPermission=e,t}var bi,Ws=T(()=>{"use strict";_n();jp();Vp();Zp();ed();td();ad();ld();cd();dd();gd();md();hd();bd();Td();Ad();Pd();wd();Cd();Ed();ng();el();tl();cg();dg();gg();mg();yg();bg();Tg();Gs();Ag();pl();wg();Cg();gl();Eg();ml();Ig();Sg();bl();yl();Al();_g();kg();Dg();Bg();Ms();Ng();Lg();Fg();Ug();Mg();$g();Hg();zg();Vg();Kg();Yg();Xg();Zg();eu();tu();ru();au();mu();fu();Pu();Ol();wu();Eu();bi={AI_EDIT_BLOCK:v(new Mn,I["ai:use"]),AI_EDIT_PAGE:v(new qn,I["ai:use"]),AI_GENERATE_IMAGE:v(new jn,I["ai:generate_image"]),AI_EDIT_LANG_PAGE:v(new $n,I["ai:use"]),AI_GENERATE_SEO_FIELD:v(new Kn,I["ai:use"]),AI_ENHANCE_CONTEXT:v(new Vn,I["ai:use"]),AI_GENERATE_THEME:v(new Yn,I["ai:generate_theme"]),AI_SAVE_CONTEXT:v(new Zn,I["ai:use"]),AI_GET_CONTEXT:v(new Xn,I["ai:read"]),AI_GET_CREDITS:v(new Jn,I["ai:read"]),AI_GET_ADDONS:v(new Qn,I["ai:read"]),AI_GENERATE_IMAGE_DESCRIPTION:v(new Wn,I["ai:use"]),CHECK_USER_ACCESS:new ho,CREATE_PAGE:v(new Di,I["pages:create"]),DELETE_PAGE:v(new Vt,I["pages:delete"]),DUPLICATE_PAGE:v(new Bi,I["pages:create"]),UPDATE_PAGE:v(new Dr,I["pages:update"]),UPDATE_PAGE_METADATA:v(new Vi,I["pages:update"]),PUBLISH_CHANGES:v(new To,I["pages:publish"]),TAKE_OFFLINE:v(new ji,I["pages:unpublish"]),ACQUIRE_PAGE_LOCK:v(new ki,I["pages:update"]),RELEASE_PAGE_LOCK:v(new Mi,I["pages:update"]),GET_WEBSITE_PAGES:v(new Vr,I["pages:read"]),GET_MENU_PAGES:v(new Ui,I["pages:read"]),GET_DRAFT_PAGE:v(new Mr,I["pages:read"]),GET_LANGUAGE_PAGES:v(new Hr,I["pages:read"]),GET_DYNAMIC_PAGES:v(new Fi,I["pages:read"]),GET_PAGE_ALL_DATA:v(new Gi,I["pages:read"]),GET_BUILDER_PAGE_DATA:v(new Gr,I["pages:read"]),GET_CHANGES:v(new Ni,I["pages:read"]),GET_COMPARE_DATA:v(new Oi,I["pages:read"]),SEARCH_PAGES:v(new zi,I["pages:read"]),GET_PAGE_TYPES:v(new jr,I["pages:read"]),SEARCH_PAGE_TYPE_ITEMS:v(new Hi,I["pages:read"]),GET_PAGE_REVISIONS:v(new Ki,I["revisions:read"]),GET_REVISION_PAGE:v(new Qi,I["revisions:read"]),DELETE_PAGE_REVISION:v(new Wi,I["revisions:delete"]),RESTORE_PAGE_REVISION:v(new Xi,I["revisions:restore"]),GET_WEBSITE_DATA:v(new bo,I["app:read"]),GET_WEBSITE_DRAFT_SETTINGS:v(new Jr,I["app:read"]),GET_SITE_GLOBAL_DATA:v(new qr,I["app:read"]),GET_SITE_WIDE_USAGE:v(new fo,I["app:read"]),GET_COLLECTIONS:v(new Or,I["app:read"]),UPDATE_WEBSITE_FIELDS:v(new Ao,I["app:update"]),GET_LIBRARIES:v(new Fr,I["library:read"]),GET_LIBRARY_GROUPS:v(new Ii,I["library:read"]),GET_LIBRARY_ITEM:v(new Ri,I["library:read"]),GET_LIBRARY_ITEMS:v(new vi,I["library:read"]),GET_TEMPLATES_BY_TYPE:v(new ao,I["library:read"]),UPSERT_LIBRARY_ITEM:v(new _i,I["library:update"]),MARK_AS_TEMPLATE:v(new no,I["library:update"]),UNMARK_AS_TEMPLATE:v(new io,I["library:update"]),DELETE_LIBRARY_ITEM:v(new Si,I["library:delete"]),GET_ASSETS:v(new si,I["assets:read"]),GET_ASSET:v(new oi,I["assets:read"]),SEARCH_IMAGES:v(new li,I["assets:read"]),CREATE_ASSET:v(new ri,I["assets:create"]),DOWNLOAD_SEARCH_IMAGE:v(new ii,I["assets:create"]),UPDATE_ASSET:v(new ci,I["assets:update"]),DELETE_ASSET:v(new ni,I["assets:delete"]),TRASH_ENTITY:v(new co,I["pages:delete"]),GET_TRASHED_ITEMS:v(new so,I["trash:read"]),RESTORE_TRASHED_ITEM:v(new lo,I["trash:restore"]),DELETE_PERMANENTLY:v(new oo,I["trash:delete_permanently"]),GET_ROLES:v(new to,I["roles:read"]),GET_ROLE:v(new eo,I["roles:read"]),CREATE_ROLE:v(new Ji,I["roles:create"]),UPDATE_ROLE:v(new ro,I["roles:update"]),DELETE_ROLE:v(new Zi,I["roles:delete"]),GET_BLOCK_ASYNC_PROPS:new xi}});var tD,jb,Je,Ti=T(()=>{"use strict";tD=require("server-only");xa();Ws();Us();Hs();di();zs();jb={drizzle:null,schema:yr},Je={debugLevel:0,globalDataProvider:qs,pageTypes:Fs,collections:[],blockDataProviders:{},trash:$s,actions:bi,builderActions:bi,extraPermissions:[],roles:void 0,ai:_r,db:jb}});var xu={};rt(xu,{fetchConfigGlobalData:()=>Lr,getActiveChaiBuilderConfig:()=>Ai,getConfigAI:()=>ht,getConfigAction:()=>Ua,getConfigActions:()=>Ys,getConfigBlockDataProvider:()=>Ci,getConfigBlockDataProviders:()=>wi,getConfigBuilderAction:()=>Jd,getConfigBuilderActions:()=>Xd,getConfigCollection:()=>Wt,getConfigCollections:()=>Nr,getConfigGlobalDataProvider:()=>Ks,getConfigPageType:()=>lt,getConfigPageTypes:()=>mr,getConfigRoles:()=>Bl,getConfigTrashEntities:()=>Qd,getConfigTrashEntity:()=>yt,getResolvedPageType:()=>Ye,getResolvedPageTypes:()=>Pi,resetActiveChaiBuilderConfigForTests:()=>Vb,setActiveChaiBuilderConfig:()=>Br,toChaiPageType:()=>bt,updateActiveActions:()=>Qs,updateActiveAiConfig:()=>Zd,updateActiveBlockDataProviders:()=>rg,updateActiveBuilderActions:()=>eg,updateActiveTrash:()=>tg});function Br(t){K=t}function Ai(){return K}function mr(){return K.pageTypes}function lt(t){return K.pageTypes.find(e=>e.key===t)}function Ye(t){let e=lt(t);return e?bt(e):void 0}function Pi(){return mr().map(bt)}function Nr(){return K.collections}function Wt(t){return K.collections.find(e=>e.id===t)}function Qd(){return K.trash}function yt(t){return K.trash.find(e=>e.key===t)}function Ks(){return K.globalDataProvider}async function Lr(t){var e;try{return(e=await Ks()(t))!=null?e:{}}catch(r){return console.error(r),{}}}function wi(){return K.blockDataProviders}function Ci(t){return K.blockDataProviders[t]}function Bl(){return K.roles}function ht(){return K.ai}function Ys(){return K.actions}function Ua(t){return K.actions[t]}function Xd(){return Ys()}function Jd(t){return Ua(t)}function Qs(t){let e={...K.actions,...t};K={...K,actions:e,builderActions:e}}function Zd(t){K={...K,ai:t}}function eg(t){Qs(t)}function tg(t){K={...K,trash:t}}function rg(t){K={...K,blockDataProviders:{...K.blockDataProviders,...t}}}function Vb(t={}){is(),K={...Je,pageTypes:[],collections:[],trash:[],...t}}function bt(t){var e;return{...t,hasSlug:t.partial?!1:(e=t.hasSlug)!=null?e:!0}}var lD,K,Ke=T(()=>{"use strict";lD=require("server-only");_();Ti();K=Je});function Xs(t,e){lp(t,e)}function Js(t=wi()){for(let[e,r]of Object.entries(t))Xs(e,r)}function Zs(t){var a;let e=nt(t);if(e!=null&&e.dataProvider&&(0,Gl.isFunction)(e.dataProvider))return e.dataProvider;let r=Ci(t);if(!(!r||!(0,Gl.isFunction)(r)))return Xs(t,r),(a=nt(t))==null?void 0:a.dataProvider}var Gl,dD,Ei=T(()=>{"use strict";Gl=require("lodash-es"),dD=require("server-only");vn();Ke()});function Su(t){return Iu.get(t)}function Ru(t,e){var n;let a={...Yd(t),...(n=e==null?void 0:e.extend)!=null?n:{}};return Sa(a.db),Br(a),Js(a.blockDataProviders),e!=null&&e.onInit&&Iu.set(a,e.onInit),Object.freeze(a)}var hD,Iu,Ml=T(()=>{"use strict";hD=require("server-only");Sn();Ei();Ke();Pe();Iu=new WeakMap});async function vu(t,e,r){return O(1)?ms(async()=>{Cr(t,r);let a=performance.now();try{return await e()}finally{$t(t,Math.round(performance.now()-a))}}):e()}async function _u(t,e,r="api"){if(!O(2))return e();let a=performance.now();try{return await e()}finally{let n=Math.round(performance.now()-a);r==="action"?Lp(t,n):Np(t,n)}}var PD,ku=T(()=>{"use strict";PD=require("server-only");Ht();ot();Da()});function Po(){var t;return(t=Wb.__chaiContextResolver)!=null?t:null}function $l(t){var e,r,a;return{appId:(r=(e=process.env.CHAIBUILDER_API_KEY)!=null?e:process.env.CHAIBUILDER_APP_KEY)!=null?r:"",siteUrl:(a=process.env.SITE_URL)!=null?a:null,draft:!1,userId:null,lang:"en",...t}}var ID,Wb,Du=T(()=>{"use strict";ID=require("server-only"),Wb=globalThis});function Ou(){return process.env.VITEST==="true"?(wo!=null||(wo={context:null}),wo):Kb()}async function Bu(t){var n;let e=Po(),r=$l();if(!e)return Lu(r,t.request);let a=await e(t);return Lu({...r,...a,siteUrl:(n=a.siteUrl)!=null?n:r.siteUrl},t.request)}function Nu(t){var r;return t&&((r=t.split(",")[0])==null?void 0:r.trim())||null}function Lu(t,e){var a;if(!e)return t;let r=t.siteUrl;if(!r){let n=(a=Nu(e.headers.get("host")))!=null?a:Yb(e.url);n&&(r=`https://${n}`)}return{...t,siteUrl:r,licenseCheck:Nu(e.headers.get("x-chai-license-check"))}}function Yb(t){try{return new URL(t).host}catch(e){return null}}async function Uu(t,e){let r=Ou();if(t!==void 0){if(!Po())throw new Error("ChaiBuilder: route props require a context resolver. Register one with `setChaiContextResolver(...)`, or call `getChaiBuilder(config)` without route props.");let n=await Bu({routeProps:t,request:e});return r.context=n,n}if(r.context)return r.context;let a=Po()?await Bu({}):$l();return r.context=a,a}var Hl,RD,Kb,wo,Fu,Gu=T(()=>{"use strict";Hl=require("react"),RD=require("server-only");Du();Kb=(0,Hl.cache)(()=>({context:null})),wo=null;Fu=(0,Hl.cache)(()=>{process.env.VITEST!=="true"&&(Ou().context=null)})});var Qb,Xb,Jt,Co=T(()=>{"use strict";Qb={persistentCache:(t=>t),invalidatePath:()=>{},invalidateTag:()=>{},runAfterResponse:t=>{Promise.resolve(t()).catch(console.error)},pageNotFound:()=>{throw new Error("Page not found")}},Xb=Qb,Jt=()=>Xb});function Mu(t){return Jb.has(t)}function tn(t){return t instanceof m?{code:t.code,message:t.message,status:t.status,...t.metadata?{metadata:t.metadata}:{}}:t&&typeof t=="object"&&"code"in t&&"message"in t&&"status"in t&&typeof t.code=="string"&&typeof t.message=="string"&&typeof t.status=="number"?t:t instanceof Error?{code:"INTERNAL_ERROR",message:t.message,status:500}:{code:"INTERNAL_ERROR",message:"Something went wrong.",status:500}}function $u(t){if(t instanceof m)return t;let e=tn(t);return new m(e.message,e.code,e.status)}var Jb,ql=T(()=>{"use strict";N();Jb=new Set(["AI_EDIT_BLOCK","AI_EDIT_LANG_PAGE","AI_GENERATE_IMAGE"])});function Hu(t){return Zb.has(t)?"public":"authenticated"}var Zb,qu=T(()=>{"use strict";Zb=new Set([])});var jl={};rt(jl,{dispatchChaiAction:()=>Zr,tryChaiAction:()=>nT});function eT(t){var e;return{role:t.role||"user",permissions:(e=t.permissions)!=null?e:null}}async function tT(t,e,r,a){let n=ti(zl);if(!n)throw new m(`Action ${zl} not found`,"ACTION_NOT_FOUND",404);n.setContext({appId:t,userId:e,action:r,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 eT(i)}function rT(t,e,r){var n;let a=t.requiredPermission;return a?typeof a=="function"?(n=a(e,r))!=null?n:null:a:null}function aT(t,e,r){var i,o;let a=rT(t,e,r);if(!a)return;let n=(o=(i=r.userAccess)==null?void 0:i.permissions)!=null?o:null;if(!su(n,a))throw new m(`Missing permission: ${a}`,"FORBIDDEN",403)}async function Zr(t,e){var r;try{let a=ti(t);if(!a)throw new m(`Action ${t} not found`,"ACTION_NOT_FOUND",404);let n=Hu(t),i;if(n==="authenticated"){let o=Mt(),l=(r=o.delegatedScopes)!=null?r:null,c=t===zl?void 0:await tT(o.appId,o.userId,t,l);i={appId:o.appId,userId:o.userId,action:t,delegatedScopes:l,...c?{userAccess:c}:{}}}else i={appId:F().appId,action:t};return a.setContext(i),aT(a,e,i),await a.run(e)}catch(a){throw console.error(`[dispatchChaiAction] Error executing action "${t}":`,a),$u(a)}}async function nT(t,e){try{return{ok:!0,data:await Zr(t,e)}}catch(r){return{ok:!1,error:tn(r)}}}var zl,rn=T(()=>{"use strict";W();mo();N();qu();ql();jt();zl="CHECK_USER_ACCESS"});function zu(t){return`--START--
|
|
802
|
+
--MSG=${t.message}--
|
|
803
|
+
--END--`}function ju(t,e){let r=new TextEncoder,a=new ReadableStream({start(n){n.enqueue(r.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":t}})}function Vu(t){var e;return(t==null?void 0:t._streamingResponse)&&(t==null?void 0:t._streamResult)&&!((e=t._streamResult)!=null&&e.textStream)}var Wu=T(()=>{"use strict"});var Ku,iT,Yu=T(()=>{"use strict";Ku=te(require("tailwindcss/plugin"),1),iT=(0,Ku.default)(function({addBase:t,theme:e}){t({"h1,h2,h3,h4,h5,h6":{fontFamily:e("fontFamily.heading")},body:{fontFamily:e("fontFamily.body"),color:e("colors.foreground"),backgroundColor:e("colors.background")}})})});var oT,Qu,sT,lT,Vl=T(()=>{"use strict";oT=require("cnfast"),Qu=require("lodash-es"),sT=require("nanoid"),lT=require("cnfast")});var Kl,an,Wl,cT,pT,dT,gT,uT,mT,hT,fT,yT,bT,TT,Xu,AT,PT,Ju,Zu=T(()=>{"use strict";Kl=require("eta/core"),an=require("lodash-es"),Wl=/\{\{(.*?)\}\}/g,cT=/^[\w$][\w$.]*$/,pT=/[\[\]():?+\-*/%=&|<>!,'"\\`]/u,dT=/[\[\]():?+*%=&|<>!,'"\\`]/u,gT=new Set(["content","htmlCode","icon"]),uT=new Kl.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; };'}),mT=new Kl.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; };'}),hT=t=>t.split(".").map(e=>e.trim()).join("."),fT=(t,e)=>{let r=e.split("."),a=t;for(let n of r){if(a==null)return;a=a[n]}return a},yT=t=>cT.test(t)?!0:t.includes(".")?t.split(".").map(r=>r.trim()).every(r=>r.length>0&&!pT.test(r)):!dT.test(t)&&(t.startsWith("#")||t.includes("/")),bT=(t,e,r)=>{let a=r.slice(2,-2).trim();return e!==-1&&(0,an.startsWith)(t,"$index.")?`${a}.${e}.${t.slice(7)}`:e!==-1&&(0,an.startsWith)(t,"$index")?`${a}.${e}`:t},TT=(t,e,r)=>{if(e===-1||!r)return t;let a=r.slice(2,-2).trim();return t.replace(/\$index\./g,`safeGet(it, "${a}.${e}").`).replace(/\$index/g,`safeGet(it, "${a}.${e}")`)},Xu=(t,e,r)=>yT(t)?hT(bT(t,e,r)):null,AT=(t,e,r)=>t.replace(Wl,(a,n)=>{let i=n.trim();if(!i)return'{{""}}';let o=Xu(i,e,r);return o?`{{safeGet(it, ${JSON.stringify(o)}) ?? ""}}`:`{{${TT(i,e,r)}}}`}),PT=(t,e,r,a,n)=>{try{return(n!=null&&n.renderRaw?mT:uT).renderString(AT(t,r,a),e)}catch(i){return""}},Ju=(t,e,r,a,n)=>{Wl.lastIndex=0;let i=t.match(Wl);if(!i)return t;let o=n==="image"||n==="mobileImage",l=n!==void 0&&gT.has(n);for(let c of i){let d=c.slice(2,-2).trim(),u=Xu(d,r,a);if(!u)continue;let g=fT(e,u);if((0,an.isArray)(g)||o&&g!==void 0)return g}return PT(t,e,r,a,{renderRaw:l})}});var me,Yl,em,tm=T(()=>{"use strict";me=require("lodash-es");or();Zu();Yl=(t,e,{index:r,key:a},n)=>{if((0,me.isString)(t))return Ju(t,e,r,a,n);if((0,me.isArray)(t))return t.map(i=>Yl(i,e,{index:r,key:a},n));if(t&&typeof t=="object"){let i={};return(0,me.forEach)((0,me.keys)(t),o=>{!(0,me.startsWith)(o,"_")&&o!=="$repeaterItemsKey"?i[o]=Yl(t[o],e,{index:r,key:a},o):i[o]=t[o]}),i}return t},em=(t,e,{index:r,key:a})=>{let n=(0,me.cloneDeep)(t);if(n.repeaterItems){let i=n.repeaterItems;if(n.$repeaterItemsKey=n.repeaterItems,(0,me.startsWith)(n.repeaterItems,`{{${"#"}`)&&(n.$repeaterItemsKey=n.repeaterItems=`${n.repeaterItems.replace("}}",`/${n._id}}}`)}`),!(0,me.isEmpty)(n.repeaterItems)&&n.pagination){let o=`${i.replace("}}",`/${n._id}/totalItems}}`)}`,l=(0,me.get)(e,o.slice(2,-2));n.repeaterTotalItems=l,n.totalItems=l}}return Yl(n,e,{index:r,key:a})}});var Eo,Ql=T(()=>{"use strict";tm();Eo=(t,e)=>em(t,e,{index:-1,key:""})});var rm,am=T(()=>{"use strict";or();rm=t=>{if(t=t.replace(Ot,""),!t)return{baseClasses:"",classes:""};let e=t.split(/,(?![^\[]*\])/);if(e.length===1)return{baseClasses:"",classes:e[0].trim()};let[r,...a]=e;return{baseClasses:r.trim(),classes:a.join(",").trim().replace(/ +(?= )/g,"")}}});var $e,nm,im,CT,om,aB,sm=T(()=>{"use strict";$e=require("lodash-es"),nm=require("cnfast");am();_a();or();Ft();Ql();im=(t,e,r)=>t?t.split(" ").map(a=>{var n;return a.startsWith("dt#")?r.has(a)?"":(r.add(a),im((n=e[a])==null?void 0:n.value,e,r)):a}).filter(Boolean).join(" "):"",CT=(0,$e.memoize)(t=>({...Ut,...t})),om=(t,e)=>{let r=CT(e),{baseClasses:a,classes:n}=rm(t),o=n.split(" ").filter(c=>c.startsWith("dt#")).map(c=>{var d;return im((d=r[c])==null?void 0:d.value,r,new Set([c]))}),l=n.split(" ").filter(c=>!c.startsWith("dt#")).join(" ");return nm.twMerge.apply(null,[a,...o,l])},aB=(0,$e.memoize)(t=>{var n,i;let e=nt(t),r=(i=(n=e==null?void 0:e.props)==null?void 0:n.schema)!=null?i:{},a=(0,$e.get)(r,"properties",{});return Object.fromEntries(Object.entries(a).filter(([,o])=>(0,$e.get)(o,"runtime",!1)))})});var ea,Jl,lm=T(()=>{"use strict";ea=require("lodash-es");sm();or();Jl=(t,e)=>t.map(r=>{let a=(0,ea.keys)(r).filter(n=>(0,ea.isString)(r[n])&&r[n].startsWith(Ot));return(0,ea.each)(a,n=>{r[n]=`${Ot},${om(r[n],e)}`}),r})});var ET,cm=T(()=>{"use strict";ET=require("lodash-es")});var pm,le,dm=T(()=>{"use strict";pm=require("himalaya"),le=require("lodash-es");Dn();Vl();or();ss();Ft();cm()});var gm=T(()=>{"use strict";dm()});var um=T(()=>{"use strict"});var IT,ST,RT,mm=T(()=>{"use strict";IT=te(require("@tailwindcss/container-queries"),1),ST=te(require("@tailwindcss/forms"),1),RT=te(require("@tailwindcss/typography"),1)});var ta,hm,fm=T(()=>{"use strict";ta=require("lodash-es");Ft();hm=t=>({fontFamily:t.fontFamily?(0,ta.keys)(t.fontFamily).reduce((r,a)=>({...r,[a.replace("font-","")]:`var(--${a})`}),{}):{},borderRadius:t.borderRadius?{lg:"var(--radius)",md:"calc(var(--radius) - 2px)",sm:"calc(var(--radius) - 4px)"}:{},colors:t.colors?(0,ta.flatten)(t.colors.map(r=>Object.entries(r.items))).reduce((r,[a])=>({...r,[a]:`hsl(var(--${a}))`}),{}):{}})});var ym,bm=T(()=>{"use strict";ym={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 Zl,Tm=T(()=>{"use strict";fm();bm();Zl=(t=ym)=>({container:{center:!0,padding:"1rem",screens:{"2xl":"1400px"}},...hm(t)})});function ec(t){return t.replace("%3A",":").replace("%2E",".").replace(/^www\./,"")}var tc=T(()=>{"use strict"});var xo=T(()=>{"use strict";Yu();Vl();Ql();lm();gm();um();mm();Tm();tc()});function Am(t,e){let r=e.map(Cm).join(":");return r?`${t}:${r}`:t}function Pm(t){return t.join(":")}function rc(t,e){if(e.length===0)return t;let r=e.map(UT).filter(Boolean);return r.length>0?r.join(" \xB7 "):t}function wm(t){return t.map(e=>e.startsWith("website-settings-")?`app=${ie(e.replace("website-settings-",""))}`:e.startsWith("pages-metadata-")?vT(e):e.startsWith("page-by-slug-")?_T(e):e.startsWith("page-slugs-batch-")?DT(e):e.startsWith("page-slug-")?kT(e):e.startsWith("alternate-")?BT(e):e.startsWith("breadcrumb-")?NT(e):e.startsWith("page-details-")?LT(e):e.startsWith("full-page-")?OT(e):e.startsWith("page-styles-")?FT(e):e.includes("-")&&e.length>20?ie(e):e).join(" \xB7 ")}function vT(t){let e=t.slice(15),r=e.endsWith("-draft")?"draft":e.endsWith("-online")?"online":"unknown",a=e.replace(/-(draft|online)$/,"");return`app=${ie(a)} \xB7 ${r}`}function Io(t,e,r){let a=t.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=${ie(o)} \xB7 ${n} \xB7 ${r}=${l.slice(0,12)}`:`app=${ie(o)} \xB7 ${n}`}function _T(t){return Io(t,"page-by-slug-","slug")}function kT(t){return Io(t,"page-slug-","page")}function DT(t){let e=t.slice(17),r=e.indexOf("-online-"),a=e.indexOf("-draft-");if(r>0){let n=e.slice(0,r),i=e.slice(r+8),o=i?i.split(",").filter(Boolean).length:0;return`app=${ie(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=${ie(n)} \xB7 draft \xB7 ids=${o}`}return ie(e)}function BT(t){return Io(t,"alternate-","alt")}function NT(t){return Io(t,"breadcrumb-","crumb")}function LT(t){let e=t.slice(13);if(e.length<=36)return`app=${ie(e)}`;let r=e.slice(0,36),a=e.slice(37);return`app=${ie(r)} page=${ie(a)}`}function OT(t){let e=t.slice(10);if(e.length<=36)return`app=${ie(e)}`;let r=e.slice(0,36),a=e.slice(37);return`app=${ie(r)} page=${ie(a)}`}function FT(t){let e=t.slice(12);if(e.length<=36)return`app=${ie(e)}`;let r=e.slice(0,36),a=e.slice(37);return`app=${ie(r)} page=${ie(a)}`}function Cm(t){if(t===null)return"null";if(t===void 0)return"undefined";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);try{return JSON.stringify(t)}catch(e){return String(t)}}function UT(t){if(typeof t=="string")return t.length>36&&t.includes("-")?ie(t):t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(t&&typeof t=="object"){let r=t;if(typeof r.slug=="string"||typeof r.pageType=="string"){let a=[typeof r.slug=="string"?`slug=${r.slug}`:null,typeof r.pageType=="string"?`type=${r.pageType}`:null,typeof r.pageLang=="string"?`lang=${r.pageLang}`:null,typeof r.pageId=="string"?`page=${ie(r.pageId)}`:null].filter(Boolean);if(a.length>0)return a.join(" ")}if(typeof r.id=="string")return[`page=${ie(r.id)}`,typeof r.slug=="string"?`slug=${r.slug}`:null,typeof r.lang=="string"?`lang=${r.lang}`:null].filter(Boolean).join(" ");if(Array.isArray(r))return`[${r.length} items]`}let e=Cm(t);return e.length>60?`${e.slice(0,57)}\u2026`:e}function ie(t){return t.length<=8?t:t.slice(0,8)}var VB,Em=T(()=>{"use strict";VB=require("server-only")});function xm(t,e){return e!=null?e:t.name||"anonymous"}function Ce(t,e){let r=xm(t,e),a=(0,ac.cache)((...n)=>(O(1)&&Ts("request",r,rc(r,n)),t(...n)));return((...n)=>{var c;let i=Am(r,n),o=ge(),l=(c=o==null?void 0:o.cacheKeys.has(i))!=null?c:!1;return l&&O(1)&&bs("request",r,rc(r,n)),o&&!l&&o.cacheKeys.set(i,!0),a(...n)})}function nc(t,e,r=[],a=!1,n){let i=xm(t,n),o=Pm(e),l=wm(e),c=async(...u)=>{let g=ge();return On(g,async()=>{let h=ge();return h&&h.cacheKeys.set(`persistent:${o}`,!0),O(1)&&Ts("persistent",i,l),t(...u)})},d=Jt().persistentCache(c,e,{revalidate:a,tags:r});return(0,ac.cache)(async(...u)=>{let g=`persistent-pending:${o}`,h=ge();h&&(h.cacheKeys.delete(`persistent:${o}`),h.cacheKeys.set(g,!0));let f=await On(h,()=>d(...u));return O(1)&&(h!=null&&h.cacheKeys.has(g))&&!h.cacheKeys.has(`persistent:${o}`)&&bs("persistent",i,l),h==null||h.cacheKeys.delete(g),f})}function oe(t,e,r,a=!1,n){if((F().draftMode?"memory":"persistent")==="memory")return Ce(t,n);if(!e)throw new Error("keyParts required for persistent cache strategy");return nc(t,e,r,a,n)}var ac,he=T(()=>{"use strict";ac=require("react");Co();Em();ot();Ht();W()});function GT(t){let e=new Map;return t.forEach(r=>{e.set(r._id,(0,Sm.nanoid)())}),t.map(r=>{var a;return{...r,_id:e.get(r._id),_parent:r._parent&&(a=e.get(r._parent))!=null?a:r._parent}})}function Im(t){return t.filter(({_type:e})=>e==="GlobalBlock"||e==="PartialBlock").map(e=>(0,gt.get)(e,"partialBlockId",(0,gt.get)(e,"globalBlock",""))).filter(e=>e!=="")}async function MT(t,e,r){let a=e?s.appPages:s.appPagesOnline,n=new Map,i=new Set,o=Im(t).filter(l=>!i.has(l));for(let l=0;l<Rm&&o.length>0;l++){let{data:c}=await b(()=>y.select({id:a.id,blocks:a.blocks}).from(a).where((0,et.and)((0,et.eq)(a.app,r),(0,et.inArray)(a.id,o)))),d=[];c&&c.forEach(u=>{var f;let g=(f=u.blocks)!=null?f:[];n.set(u.id,g),i.add(u.id),Im(g).forEach(A=>{!i.has(A)&&!d.includes(A)&&d.push(A)})}),o.forEach(u=>i.add(u)),o=d}return ic(t,n)}function ic(t,e,r=new Set,a=0){var i;if(a>=Rm)return t;let n=[];for(let o of t)if(o._type==="GlobalBlock"||o._type==="PartialBlock"){let l=(0,gt.get)(o,"partialBlockId",(0,gt.get)(o,"globalBlock",""));if(l===""){n.push(o);continue}if(r.has(l)){n.push(o);continue}let c=(i=e.get(l))!=null?i:[];if(c.length===0){n.push(o);continue}c=GT(c),c=c.map(g=>((0,gt.isEmpty)(g._parent)&&(g._parent=o._parent),(0,gt.has)(o,"_show")&&(g._show=o._show),g));let d=new Set(r);d.add(l);let u=ic(c,e,d,a+1);n.push(...u)}else n.push(o);return n}async function $T(t,e,r,a){var w,E,S,R,k,x,G;let n=e?s.appPages:s.appPagesOnline,i=(a==null?void 0:a.partialBlocks)!==void 0,o=null,l=r,c=(w=a==null?void 0:a.partialBlocks)!=null?w:"";if(!i){let{data:j,error:ae}=await b(()=>y.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,et.and)((0,et.eq)(n.app,t),(0,et.eq)(n.id,r))).limit(1));if(ae||!j||j.length===0)throw new Error("PAGE_NOT_FOUND");if(o=j[0],!o)throw new Error("PAGE_NOT_FOUND");l=(E=o.primaryPage)!=null?E:o.id,c=(S=o.partialBlocks)!=null?S:""}let d=(0,gt.compact)((c||"").split("|")),u=[l,...d.filter(j=>j!==l)],{data:g,error:h}=await b(()=>y.select({id:n.id,blocks:n.blocks}).from(n).where((0,et.and)((0,et.eq)(n.app,t),(0,et.inArray)(n.id,u))));if(h)throw new Error("FAILED_TO_FETCH_PAGE_BLOCKS");let f=new Map;g&&g.forEach(j=>{var ae;f.set(j.id,(ae=j.blocks)!=null?ae:[])});let A=(R=f.get(l))!=null?R:[],C=(x=(k=a==null?void 0:a.mergeGlobal)!=null?k:a==null?void 0:a.mergePartials)!=null?x:!0;if(C&&d.length>0){let j=new Map;d.forEach(ae=>{let ze=f.get(ae);ze&&j.set(ae,ze)}),A=ic(A,j)}else C&&(A=await MT(A,e,t));return o?{id:r,name:o.name,slug:o.slug,lang:o.lang,primaryPage:o.primaryPage,seo:(G=o.seo)!=null?G:{},currentEditor:o.currentEditor,pageType:o.pageType,lastSaved:o.lastSaved,dynamic:o.dynamic,parent:o.parent,blocks:A}:{id:r,name:"",slug:"",lang:"",primaryPage:null,seo:{},currentEditor:null,pageType:null,lastSaved:null,dynamic:null,parent:null,blocks:A}}var et,gt,Sm,Rm,ra,So=T(()=>{"use strict";et=require("drizzle-orm"),gt=require("lodash-es"),Sm=require("nanoid");_();W();he();Rm=4;ra=async(t,e)=>{let r=F();return await oe($T,[`full-page-${r.appId}-${t}`],["full-page",`page-${t}`],!1,"fetchFullPage")(r.appId,r.draftMode,t,e)}});var km,Dm,Bm,Nm,ut,Lm,Om,_m,oc,HT,Ro,vm,qT,Fm,zT,jT,VT,WT,Um,Gm=T(()=>{"use strict";km=te(require("autoprefixer"),1),Dm=require("fs"),Bm=require("fs/promises"),Nm=require("module"),ut=te(require("path"),1),Lm=require("url"),Om=te(require("postcss"),1),_m={},oc="virtual:chai-builder-tailwind-config",HT=/[^<>"'`\s]*[^<>"'`\s:]/g,vm=t=>ut.default.dirname((0,Nm.createRequire)(t).resolve("tailwindcss/package.json")),qT=()=>{for(let t=process.cwd();;t=ut.default.dirname(t)){let e=ut.default.join(t,"node_modules","tailwindcss","package.json");if((0,Dm.existsSync)(e))return ut.default.dirname(e);if(t===ut.default.dirname(t))break}throw new Error("Unable to locate tailwindcss in node_modules.")},Fm=()=>{if(Ro)return Ro;let t=[()=>ut.default.dirname((0,Lm.fileURLToPath)(_m.resolve("tailwindcss/package.json"))),()=>vm(_m.url),()=>vm(ut.default.join(process.cwd(),"package.json")),qT];for(let e of t)try{return Ro=e(),Ro}catch(r){continue}throw new Error("Unable to resolve Tailwind CSS from the current project. Ensure `tailwindcss` is installed.")},zT=t=>{let e=Fm(),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"}[t];if(!a)throw new Error(`Unsupported Tailwind stylesheet import: ${t}`);return ut.default.join(e,a)},jT=async(t,e)=>{let r=t.startsWith("tailwindcss")?zT(t):ut.default.resolve(e,t);return{path:r,base:ut.default.dirname(r),content:await(0,Bm.readFile)(r,"utf8")}},VT=(t,e=[])=>{let r=new Set(e);for(let a of t){let n=a.match(HT)||[];for(let i of n)r.add(i)}return Array.from(r)},WT=async({compile:t,includeBaseStyles:e,config:r,candidates:a})=>{let n=e?`@config "${oc}";
|
|
804
|
+
@import "tailwindcss";`:`@config "${oc}";
|
|
805
|
+
@import "tailwindcss/theme";
|
|
806
|
+
@import "tailwindcss/utilities";`;return(await t(n,{base:Fm(),loadModule:async(o,l,c)=>{if(o===oc&&c==="config")return{path:o,base:l,module:r};throw new Error(`Unsupported Tailwind ${c} import: ${o}`)},loadStylesheet:jT})).build(a)},Um=async({markupStrings:t,safelist:e=[],includeBaseStyles:r=!1,config:a})=>{var l;let n=await import("tailwindcss");if(typeof n.compile=="function")return WT({compile:n.compile,includeBaseStyles:r,config:a,candidates:VT(t,e)});let i=[r?"@tailwind base;":"","@tailwind components;","@tailwind utilities;"].filter(Boolean).join(`
|
|
807
|
+
`);return(await(0,Om.default)([(l=n.default)==null?void 0:l.call(n,{...a,safelist:e,content:[{raw:`<div>${t.join(" ")}</div>`,extension:"html"}]}),(0,km.default)()]).process(i,{from:void 0})).css}});var qm={};rt(qm,{getBlocksStyles:()=>sc});var Mm,$m,Hm,sc,lc=T(()=>{"use strict";Mm=te(require("@tailwindcss/container-queries"),1),$m=te(require("@tailwindcss/forms"),1),Hm=te(require("@tailwindcss/typography"),1);xo();Gm();sc=async t=>{let e=JSON.stringify(t,null,2).replace(/#styles:([^"]*)/g,(r,a)=>a.replace(/#styles:,/g,"").replace(/#styles:/g,"").replace(/^,/g,""));return Um({markupStrings:[e],includeBaseStyles:!1,config:{darkMode:"class",theme:{extend:{...Zl(),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:[$m.default,Hm.default,Mm.default],corePlugins:{preflight:!1}}})}});async function KT(){return jm.default.resolve("./public/chaistyles.css")}async function Vm(t){try{let e=await KT(),r=await zm.default.readFile(e,"utf-8"),a=cc.default.parse(r),n=cc.default.parse(t),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),t}}var zm,jm,cc,Wm=T(()=>{"use strict";zm=te(require("fs/promises"),1),jm=te(require("path"),1),cc=te(require("postcss"),1)});var Qm={};rt(Qm,{fetchPageStylesUncached:()=>Ym,getPageStyles:()=>pc});async function Ym(t){let e=t.length,r=performance.now();try{let n=(await sc(t)).replace(/\s+/g," ").trim();return await Vm(n)}finally{let a=Math.round(performance.now()-r);a>YT&&QT.warn(`Slow page styles compile: ${a}ms \xB7 blocks: ${e}`)}}var Km,YT,QT,pc,dc=T(()=>{"use strict";Km=require("consola");W();he();lc();Wm();YT=30,QT=Km.consola.withTag("ChaiPageStyles");pc=async(t,e)=>{let r=F();return await oe(Ym,[`page-styles-${r.appId}-${t}`],["page-styles",`page-${t}`],!1,"fetchPageStyles")(e)}});async function XT(t,e){let r=e?y.query.apps:y.query.appsOnline,{data:a,error:n}=await b(()=>r.findFirst({where:(0,Xm.eq)(s.apps.id,t),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 Xm,Oe,Zt=T(()=>{"use strict";Xm=require("drizzle-orm");_();W();he();Oe=async()=>{let t=F();return await oe(XT,[`website-settings-${t.appId}`],["website-settings",`website-settings-${t.appId}`],!1,"fetchSiteSettings")(t.appId,t.draftMode)}});function eA(t){let e=new Set;for(let r of t){let a=r.match(JT);if(!a)continue;let n=a[1];ZT.has(n)||e.add(n)}return Array.from(e)}function tA(t,e){return`${t.replace(/\/$/,"")}${e.startsWith("/")?e:`/${e}`}`}async function rA(t,e){let{data:r}=await b(()=>y.query.appPagesOnline.findFirst({where:(0,nn.and)((0,nn.eq)(s.appPagesOnline.app,t),(0,nn.eq)(s.appPagesOnline.slug,e)),columns:{id:!0,primaryPage:!0,dynamic:!0,slug:!0}}));return r!=null?r:null}async function aA(t,e){let r=await fetch(tA(t,e),{headers:{"User-Agent":"ChaiBuilder-Publish-Warmup"}});if(!r.ok)throw new Error(`Route prefetch failed with status ${r.status} for ${e}`)}async function nA(t){var i;let e=await ra(t,{mergePartials:!0});if((0,aa.isEmpty)(e.slug))return!1;let r=await Oe(),a={...Ut,...(0,aa.get)(r,"designTokens",{})},n=Jl((i=e.blocks)!=null?i:[],a);return await pc(t,n),!0}function iA(t,e){t.add(e.id),e.primaryPage&&t.add(e.primaryPage)}async function Zm(t,e,r){for(let a=0;a<t.length;a+=e)await Promise.all(t.slice(a,a+e).map(r))}async function th(t){let{appId:e,tags:r,paths:a,siteUrl:n}=t,i=eA(r),o=(0,aa.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 Gt({appId:e,draft:!1},async()=>{n&&o.length>0?await Zm(o,Jm,async u=>{try{let g=await rA(e,u);if(!g||g.dynamic){c.routesSkipped+=1;return}await aA(n,u),iA(l,g),c.routesWarmed+=1}catch(g){c.routesFailed+=1,gc.warn(`Failed to prefetch route ${u}: ${g instanceof Error?g.message:"Unknown error"}`)}}):o.length>0&&(c.routesSkipped+=o.length),i.length>0&&await Zm(i,Jm,async u=>{if(l.has(u)){c.stylesSkipped+=1;return}try{await nA(u)?c.stylesWarmed+=1:c.stylesSkipped+=1}catch(g){c.stylesFailed+=1,gc.warn(`Failed to warm page styles for ${u}: ${g instanceof Error?g.message:"Unknown error"}`)}})}),c.totalMs=Math.round(performance.now()-d),gc.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}var eh,nn,aa,fN,Jm,JT,ZT,gc,rh=T(()=>{"use strict";eh=require("consola"),nn=require("drizzle-orm"),aa=require("lodash-es"),fN=require("server-only");_a();_();W();xo();So();dc();Zt();Jm=3,JT=/^page-([a-zA-Z0-9_-]+)$/,ZT=new Set(["styles"]),gc=eh.consola.withTag("ChaiPublishWarmup")});var ah,nh,vo,on=T(()=>{"use strict";ah="https://chaibuilder.com/pro-api/validate",nh="MCowBQYDK2VwAyEAft33iIqz6lHFVh0pK9rVxmd8t2RKd+IUGkxEpnQ4yAo=",vo="0.1.0"});var IN,oA,_o=T(()=>{"use strict";IN=require("server-only"),oA=require("consola");ot()});var ih,oh=T(()=>{"use strict";ih=()=>process.env.NODE_ENV==="development"});function lh(){let t=process.env.CHAIBUILDER_LICENSE_DEBUG;return t==="1"||t==="true"}function lA(t){let e=t.trim();if(!e)return null;try{let r=new URL(e.includes("://")?e:`https://${e}`);return ec(r.hostname).toLowerCase()}catch(r){return null}}function cA(t){return sA.has(t)||t.endsWith(".localhost")}function ko(){var r,a,n;let t=(n=(a=(r=ge())==null?void 0:r.siteUrl)!=null?a:process.env.SITE_URL)!=null?n:null;if(!t)return null;let e=lA(t);return e?cA(e)&&!lh()?null:e:null}function ch(){return lh()?ko()===null:ih()||process.env.VITEST==="true"||process.env.VERCEL_ENV==="preview"?!0:ko()===null}var _N,sA,ph=T(()=>{"use strict";_N=require("server-only");W();tc();oh();_o();sA=new Set(["localhost","127.0.0.1","0.0.0.0","::1","[::1]"])});function dh(){var t;return(t=process.env.CHAIBUILDER_LICENSE_KEY)!=null?t:""}var ON,gh=T(()=>{"use strict";ON=require("server-only")});function pA(){return uh||(uc||(uc=(0,Do.createPublicKey)({key:Buffer.from(nh,"base64"),format:"der",type:"spki"})),uc)}function gA(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.domain=="string"&&typeof e.status=="string"&&dA.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 mh(t,e){try{let r=Buffer.from(t,"base64"),a=Buffer.from(e,"base64");if(r.length===0||a.length===0||!(0,Do.verify)(null,r,pA(),a))return null;let i=JSON.parse(r.toString("utf8"));return gA(i)?i:null}catch(r){return null}}var Do,MN,uc,uh,dA,hh=T(()=>{"use strict";Do=require("crypto"),MN=require("server-only");on();uc=null,uh=null;dA=new Set(["trial","active","expired","version_blocked","limit_reached","invalid"])});async function yh(t){let e=(0,fh.randomUUID)(),r;try{r=await fetch(ah,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({domain:t,licenseKey:dh(),version:vo,nonce:e}),signal:AbortSignal.timeout(5e3)})}catch(o){return{ok:!1,error:o instanceof Error?o.message:"network error"}}if(!r.ok)return{ok:!1,error:`validate endpoint returned ${r.status}`};let a;try{a=await r.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=mh(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!==t)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 qN,fh,bh=T(()=>{"use strict";qN=require("server-only"),fh=require("crypto");on();gh();hh()});function hc(){return mc.__chaiLicenseState||(mc.__chaiLicenseState={verdicts:new Map,inFlight:new Map,lastAttempt:new Map}),mc.__chaiLicenseState}function fc(t){var e;return(e=hc().verdicts.get(t))!=null?e:null}function TA(t,e){let{verdicts:r}=hc();for(r.delete(t),r.set(t,e);r.size>bA;){let a=r.keys().next().value;if(a===void 0)break;r.delete(a)}}async function Th(t){var i;let{inFlight:e,lastAttempt:r}=hc(),a=e.get(t);if(a)return a;if(Date.now()-((i=r.get(t))!=null?i:0)<6e5){return}r.set(t,Date.now());let n=(async()=>{let o=await yh(t);o.ok?(TA(t,o.payload),o.payload.status,void 0):(o.error,void 0)})().catch(o=>{console.error("[chai-license] revalidation failed",o)}).finally(()=>{e.delete(t)});return e.set(t,n),n}function Ah(t,e=Date.now()){var n;if(!t)return"unvalidated";if(t.status==="version_blocked")return"version_blocked";if(t.status==="expired")return"expired";if(t.status==="limit_reached")return"limit_reached";if(t.status==="invalid")return"invalid";let r=Date.parse(t.expiresAt);if(Number.isNaN(r))return"unvalidated";if(e<=r)return"valid";let a=((n=t.graceDays)!=null?n:3)*yA;return e<=r+a?"grace":"expired"}var KN,yA,bA,mc,Ph=T(()=>{"use strict";KN=require("server-only");on();_o();bh();yA=1440*60*1e3,bA=200,mc=globalThis});function PA(t){if(!t)return null;let e=Number(t);return Number.isFinite(e)&&e>0?e:null}function wA(t,e){let r=Date.parse(t);return Number.isFinite(r)&&e>=r}async function wh(t){var g,h,f,A;if(ch())return null;let e=ko();if(!e)return null;let r=Date.now(),a=fc(e),n=PA(t),i=n!==null?Math.min(n,r):null,o=a!==null&&wA(a.expiresAt,r),l=i===null||r-i>=18e6,c=a===null||o||l,d=a===null?"no-verdict":o?"ttl-expired":l?"throttle-elapsed":"fresh";c&&(await Th(e),a=fc(e));let u=Ah(a,r);return(g=a==null?void 0:a.status)!=null,{state:u,status:(h=a==null?void 0:a.status)!=null?h:null,trialEndsAt:(f=a==null?void 0:a.trialEndsAt)!=null?f:null,updatesUntil:(A=a==null?void 0:a.updatesUntil)!=null?A:null,version:vo,refreshed:c}}var ZN,Ch=T(()=>{"use strict";ZN=require("server-only");on();_o();ph();Ph()});function xh(t){if(!t)return[];if(Array.isArray(t))return t.flatMap(e=>e&&typeof e=="object"&&"tags"in e&&Array.isArray(e.tags)?e.tags:[]);if((0,Eh.has)(t,"tags")){let{tags:e}=t;return e!=null?e:[]}return[]}function Ih(t){if(!t||typeof t!="object"||!("paths"in t))return[];let{paths:e}=t;return e!=null?e:[]}async function CA(t,e){var c;let{invalidatePath:r,invalidateTag:a}=Jt(),n=xh(t),i=Ih(t);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=>r(d,"layout")))!=null?c:[],o("website-settings")),n.length&&l.push(...n.map(o)),i!=null&&i.length&&l.push(...i.map(d=>r(d))),l.length&&await Promise.all(l)}function Sh(t,e){return new Response(JSON.stringify(t),{status:e,headers:{"Content-Type":"application/json"}})}function Rh(t,e){return e?{...t,license:e}:t}function yc(t,e,r){let a=tn(e);if(Mu(t)){let i=zu({code:a.code,message:a.message,statusCode:a.status});return ju(a.code,i)}return Sh(Rh({ok:!1,error:a},r),a.status)}function EA(t,e){return Sh(Rh({ok:!0,data:t},e),200)}async function vh(t,e={}){var o,l;let{catchAllRoute:r=["/(public)/[[...slug]]"]}=e,{action:a,data:n}=t,i=wh((o=ge())==null?void 0:o.licenseCheck).catch(()=>null);try{let c=await Zr(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:yc(a,{code:"NO_STREAM",message:"No streaming response available. Please try again.",status:500},await i):Vu(g)?yc(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 CA(c,r);let d=xh(c),u=Ih(c);if(a==="PUBLISH_CHANGES"&&(d.length>0||u.length>0)){let{appId:g,siteUrl:h}=Mt();Jt().runAfterResponse(()=>th({appId:g,siteUrl:h,tags:d,paths:u}))}return EA(c,await i)}catch(c){return yc(a,c,await i)}}var Eh,_h=T(()=>{"use strict";Eh=require("lodash-es");Co();ql();rn();Wu();rh();W();Ch()});var Bo,kh,No=T(()=>{"use strict";Zt();W();Bo=t=>{let e=ka();e.lang=t},kh=()=>wr().siteUrl});var Dh,Bh=T(()=>{"use strict";No();xo();Dh=(t,e)=>{var C,w,E,S,R,k;let r=Eo((w=(C=t.page)==null?void 0:C.seo)!=null?w:{},t.pageData),{alternatePages:a=[],fallbackLang:n,lang:i,slug:o,primaryPage:l}=t.page,c=(S=(E=kh())==null?void 0:E.replace(/\/$/,""))!=null?S:"",d={};for(let x of a)x.lang&&(d[x.lang]=c?`${c}${x.slug}`:x.slug);n&&d[n]&&(d["x-default"]=d[n]);let u=l&&(k=(R=a.find(x=>x.id===l))==null?void 0:R.slug)!=null?k:o,g=(r==null?void 0:r.canonicalUrl)||(l?u:o),h=c?`${c}${g}`:g,f;if(r!=null&&r.metaOther)try{let x=typeof r.metaOther=="string"?JSON.parse(r.metaOther):r.metaOther;x&&typeof x=="object"&&Object.keys(x).length>0&&(f=x)}catch(x){}let A={title:r==null?void 0:r.title,description:r==null?void 0:r.description,...c?{metadataBase:new URL(c)}:{},openGraph:{title:(r==null?void 0:r.ogTitle)||(r==null?void 0:r.title),description:(r==null?void 0:r.ogDescription)||(r==null?void 0:r.description),images:r!=null&&r.ogImage?[r==null?void 0:r.ogImage]:[],url:h||void 0,locale:i||void 0},alternates:{canonical:h,...Object.keys(d).length>0?{languages:d}:{}},robots:{index:!(r!=null&&r.noIndex),follow:!(r!=null&&r.noFollow),googleBot:{index:!(r!=null&&r.noIndex),follow:!(r!=null&&r.noFollow)}},...f?{other:f}:{}};return e?e(A,{...t,seo:r}):A}});async function xA(t,e,r,a){let n=r.draft?s.appPages:s.appPagesOnline,i=[(0,tt.eq)(n.app,t),(0,tt.eq)(n.pageType,e),(0,tt.eq)(n.dynamic,!0),(0,tt.isNotNull)(n.slug),(0,tt.ne)(n.slug,"")];r.lang&&r.lang!==a?i.push((0,tt.eq)(n.lang,r.lang)):i.push((0,tt.eq)(n.lang,""));let{data:o,error:l}=await b(()=>y.select({slug:n.slug,lang:n.lang,pageId:n.id,primaryPageId:n.primaryPage,dynamicSlugCustom:n.dynamicSlugCustom}).from(n).where((0,tt.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 Nh(t,e={}){var n,i;let r=F(),a=(i=(n=e.draft)!=null?n:r.draftMode)!=null?i:!1;return await Ce(xA,"fetchBaseSlugs")(r.appId,t,{...e,draft:a},r.fallbackLang)}var tt,Lh=T(()=>{"use strict";tt=require("drizzle-orm");_();W();he()});async function IA(t){var i,o,l,c,d,u,g,h;let{data:e,error:r}=await b(()=>y.select().from(s.clients).where((0,Oh.eq)(s.clients.id,t)).limit(1)),a=e==null?void 0:e[0];if(r||!a)throw r||new Error("Client not found");let n=()=>{var E,S,R;let f=a==null?void 0:a.plansAndAddOns,A=(f==null?void 0:f.paymentEnv)||"sandbox",C=a,w=A==="sandbox"?((f==null?void 0:f.plans)||[]).map(k=>({...k,items:((k==null?void 0:k.items)||[]).map(x=>({...x,id:x==null?void 0:x.sandboxId}))})):f==null?void 0:f.plans;return{...f||{},plans:w,paymentEnv:A,sandboxToken:((R=(S=(E=C==null?void 0:C.envs)==null?void 0:E.payment)==null?void 0:S.sandbox)==null?void 0:R.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:((h=a==null?void 0:a.settings)==null?void 0:h.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 Oh,Fh,Uh=T(()=>{"use strict";Oh=require("drizzle-orm");_();he();Fh=async t=>await nc(IA,[`client-settings-${t}`],["client-settings",`settings-${t}`])(t)});async function SA(t,e,r,a){let n=e?s.appPages:s.appPagesOnline,{data:i}=await b(()=>y.select({id:n.id,name:n.name,slug:n.slug,lang:n.lang,dynamic:n.dynamic,primaryPage:n.primaryPage}).from(n).where((0,er.and)((0,er.eq)(n.app,t),(0,er.or)((0,er.eq)(n.primaryPage,r),(0,er.eq)(n.id,r))))),l=F().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===r}})}async function bc(t,e){let r=F();return await oe(SA,Ld(r.appId,r.draftMode,t,e),[`alternate-${t}`,`page-${t}`],!1,"getAlternateLangPages")(r.appId,r.draftMode,t,e)}var er,Gh=T(()=>{"use strict";er=require("drizzle-orm");_();W();he();Xe()});function RA(t){return{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}}async function vA(t,e){let r=e?s.appPages:s.appPagesOnline,{data:a}=await b(()=>y.select(RA(r)).from(r).where((0,Mh.eq)(r.app,t)));return a!=null?a:[]}function _A(t,e,r){let a=F(),n=new Ue(r),i=e.filter(h=>!h.primaryPage),o=e.filter(h=>h.primaryPage),l=n.buildPrimaryTree(i),c=n.buildLanguageTree(o,l),d=t.primaryPage?c:l,u=(h,f,A=[])=>{var C;for(let w of h){if(w.id===f)return[...A,w];if(((C=w.children)==null?void 0:C.length)>0){let E=u(w.children,f,[...A,w]);if(E)return E}}return null},g=u(d,t.id);return g?g.map(h=>({id:h.id,name:h.name,slug:h.slug,lang:h.lang||t.lang||a.fallbackLang})):[{id:t.id,name:t.name,slug:t.slug,lang:t.lang||a.fallbackLang}]}async function kA(t,e,r){let a=await vA(t,e),n=a.find(i=>i.id===r);if(!n)throw new Error("PAGE_NOT_FOUND");return _A(n,a,t)}async function $h(t){let e=F();return await oe(kA,Od(e.appId,e.draftMode,t),[`page-${t}`,`breadcrumb-${t}`],!1,"getBreadcrumb")(e.appId,e.draftMode,t)}var Mh,Hh=T(()=>{"use strict";Mh=require("drizzle-orm");_();$a();W();he();Xe()});function Tc(t,e,r){let a=e.find(u=>u.slug===t&&!u.dynamic);if(a)return a;let n=t.slice(1),i=`/${(0,He.take)(n.split("/"),1).join("/")}`,o=`/${(0,He.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,He.reverse)((0,He.sortBy)(l,u=>u.slug.split("/").length)),d=(0,He.keys)(r);d.length>0&&c.sort((u,g)=>{let h=d.indexOf(u.pageType||""),f=d.indexOf(g.pageType||""),A=h===-1?Number.MAX_SAFE_INTEGER:h,C=f===-1?Number.MAX_SAFE_INTEGER:f;return A-C});for(let u of c){if((0,He.isEmpty)(u.slug))continue;let g=u.pageType||"",h=(0,He.get)(r,g,""),f=u.dynamicSlugCustom||"",A=u.slug+h+f,C=new RegExp(A),w=t.match(C);if(w&&w[0]===t)return u}throw new Error("PAGE_NOT_FOUND")}var He,qh=T(()=>{"use strict";He=require("lodash-es")});function zh(){return Pi().reduce((e,r)=>(r.dynamicSegments&&(e[r.key]=r.dynamicSegments),e),{})}var jh=T(()=>{"use strict";Pe();qh()});async function DA(t,e,r){var i;let a=e?s.appPages:s.appPagesOnline,{data:n}=await b(()=>y.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,qe.and)((0,qe.eq)(a.app,t),(0,qe.eq)(a.slug,r),(0,qe.or)((0,qe.eq)(a.dynamic,!1),(0,qe.isNull)(a.dynamic)))).limit(1));return(i=n==null?void 0:n[0])!=null?i:null}async function BA(t,e){let r=e?s.appPages:s.appPagesOnline,{data:a}=await b(()=>y.select({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}).from(r).where((0,qe.and)((0,qe.eq)(r.app,t),(0,qe.eq)(r.dynamic,!0))));return a!=null?a:[]}async function NA(t,e,r){let a=await DA(t,e,r);if(a)return a;let n=await BA(t,e),i=zh();return Tc(r,n,i)}async function Vh(t){let e=F();return await oe(NA,Dd(e.appId,e.draftMode,t),Fd(t),!1,"resolvePageBySlug")(e.appId,e.draftMode,t)}var qe,Wh=T(()=>{"use strict";qe=require("drizzle-orm");_();W();he();Xe();jh()});async function LA(t,e,r){var l,c;let a=e?s.appPages:s.appPagesOnline,{data:n,error:i}=await b(()=>y.select({seo:a.seo,currentEditor:a.currentEditor,lastSaved:a.lastSaved,tracking:a.tracking,metadata:a.metadata}).from(a).where((0,sn.and)((0,sn.eq)(a.app,t),(0,sn.eq)(a.id,r))).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 Ac(t){let e=F();return await oe(LA,Gd(e.appId,t),Md(t),!1,"fetchPageDetails")(e.appId,e.draftMode,t)}var sn,Kh=T(()=>{"use strict";sn=require("drizzle-orm");_();W();he();fi()});var Pc,Yh=T(()=>{"use strict";W();So();Zt();Pc=async t=>{F();let e=t.split("/").pop();if(!e)throw new Error("PAGE_NOT_FOUND");let r=await Oe(),a=await ra(e),n=t.split("/").length>3?t.split("/")[2]:r==null?void 0:r.fallbackLang;return{...a,lang:n,breadcrumbPages:[],langPages:[]}}});async function OA(t,e){var c,d,u;let r=(c=t.primaryPage)!=null?c:t.id,a=t.lang||e,[n,i,o]=await Promise.all([Ac(t.id),Oe(),bc(r,a)]),l=(i==null?void 0:i.fallbackLang)||e;return{id:t.id,name:t.name,slug:t.slug,lang:t.lang||l,primaryPage:t.primaryPage,seo:(d=n.seo)!=null?d:{},currentEditor:n.currentEditor,pageType:t.pageType,lastSaved:n.lastSaved,dynamic:t.dynamic,dynamicSlugCustom:t.dynamicSlugCustom,parent:t.parent,blocks:[],fallbackLang:l,breadcrumb:[],alternatePages:o,tracking:n.tracking,metadata:(u=n.metadata)!=null?u:{}}}async function FA(t,e){var g,h,f;let r=(g=t.primaryPage)!=null?g:t.id,a=t.lang||e,[n,i,o,l,c]=await Promise.all([ra(r,{mergePartials:!0}),Ac(t.id),Oe(),$h(t.id),bc(r,a)]),d=n.blocks,u=(o==null?void 0:o.fallbackLang)||e;return{id:t.id,name:t.name,slug:t.slug,lang:t.lang||u,primaryPage:t.primaryPage,seo:(h=i.seo)!=null?h:{},currentEditor:i.currentEditor,pageType:t.pageType,lastSaved:i.lastSaved,dynamic:t.dynamic,dynamicSlugCustom:t.dynamicSlugCustom,parent:t.parent,blocks:d,fallbackLang:u,breadcrumb:l,alternatePages:c,tracking:i.tracking,metadata:(f=i.metadata)!=null?f:{}}}var Lo,Qh,Xh,Oo,Fo=T(()=>{"use strict";Lo=require("react");Co();W();he();Gh();Hh();So();Wh();Kh();Yh();Zt();Qh=(0,Lo.cache)(async t=>(F(),Vh(t))),Xh=(0,Lo.cache)(async t=>{if(t.startsWith("/_partial/"))return await Pc(t);let e=F();try{let r=await Qh(t);return await Ce(OA,"fetchPageMetadata")(r,e.fallbackLang)}catch(r){throw r instanceof Error&&r.message==="PAGE_NOT_FOUND"&&Jt().pageNotFound(),r}}),Oo=(0,Lo.cache)(async t=>{if(t.startsWith("/_partial/"))return await Pc(t);let e=F();try{let r=await Qh(t);return await Ce(FA,"fetchPageData")(r,e.fallbackLang)}catch(r){throw r instanceof Error&&r.message==="PAGE_NOT_FOUND"&&Jt().pageNotFound(),r}})});async function UA(t,e,r){return await Lr({lang:r,draft:e,inBuilder:!1})}async function GA(t,e,r,a){let n=Ye(t);return n!=null&&n.dataProvider?await n.dataProvider({lang:e,draft:r,inBuilder:!1,pageProps:a}):{}}async function MA(t,e,r,a,n,i){var l,c;let o=Wt(t);if(!o)return{[`#${t}/${e}`]:[],[`#${t}/${e}/totalItems`]:-1};try{let d=await o.fetch({lang:r,draft:a,inBuilder:!1,pageProps:n,block:i});return{[`#${t}/${e}`]:(l=(0,wc.get)(d,"items",[]))!=null?l:[],[`#${t}/${e}/totalItems`]:(c=(0,wc.get)(d,"totalItems",-1))!=null?c:-1}}catch(d){return{[`#${t}/${e}`]:[],[`#${t}/${e}/totalItems`]:-1}}}var wc,ln,cn,Cc,Uo,Go=T(()=>{"use strict";wc=require("lodash-es");Pe();W();he();ln=async t=>{let e=F(),r=e.appId;return await oe(UA,[`site-global-data-${r}-${t}`],["site-global-data",`site-global-data-${r}`,"global:site-settings"],!1,"fetchSiteGlobalData")(r,e.draftMode,t)};cn=async t=>{var c,d;let e=F(),{pageType:r,pageProps:a,lang:n}=t,i=e.appId,o=(c=a.slug)!=null?c:"",l=(d=a.pageId)!=null?d:"";return await oe(GA,[`page-type-data-${i}-${r}-${n}-${o}-${l}`],["page-type-data",`page-type-data-${i}`,`page-type-data-${i}-${r}`],!1,"fetchDataByPageType")(r,n,e.draftMode,a)};Cc=async t=>{let e=F(),{blocks:r,pageProps:a,lang:n}=t,i=r.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 Ce(MA,"fetchCollectionData")(d,c._id,n,e.draftMode,a,c)});return(await Promise.all(o)).reduce((c,d)=>({...c,...d}),{})},Uo=async t=>{let{blocks:e,pageProps:r,pageType:a,lang:n}=t,[i,o,l]=await Promise.all([ln(n),cn({pageType:a,pageProps:r,lang:n}),Cc({blocks:e,pageProps:r,lang:n})]);return{...o,global:i,...l}}});var Jh,Zh,ef=T(()=>{"use strict";Jh=require("react");No();Fo();Go();Zt();Zh=(0,Jh.cache)(async t=>{let[e,r]=await Promise.all([Xh(t),Oe()]);Bo(e.lang);let a={slug:t,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([ln(e.lang),cn({pageType:e.pageType,pageProps:a,lang:e.lang})]),o={...i,global:n};return{page:e,settings:r,pageData:o}})});async function $A(t,e,r){var o;let a=e?s.appPages:s.appPagesOnline,{data:n,error:i}=await b(()=>y.select({slug:a.slug}).from(a).where((0,Nt.and)((0,Nt.eq)(a.app,t),(0,Nt.eq)(a.id,r))).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 HA(t,e,r){if(r.length===0)return{};let a=e?s.appPages:s.appPagesOnline,{data:n,error:i}=await b(()=>y.select({id:a.id,slug:a.slug}).from(a).where((0,Nt.and)((0,Nt.eq)(a.app,t),(0,Nt.inArray)(a.id,r))));if(i||!n)return{};let o={};for(let l of n)l.slug&&(o[l.id]=l.slug);return o}async function Ec(t){let e=F();try{return await oe($A,Bd(e.appId,e.draftMode,t),[`page-${t}`],!1,"resolvePageSlug")(e.appId,e.draftMode,t)}catch(r){return null}}async function tf(t){let e=F(),r=[...new Set(t.filter(Boolean))];if(r.length===0)return new Map;if(r.length===1){let n=await Ec(r[0]);return n?new Map([[r[0],n]]):new Map}let a=await oe(HA,Nd(e.appId,e.draftMode,r),kr(r),!1,"resolvePageSlugs")(e.appId,e.draftMode,r);return new Map(Object.entries(a))}var Nt,xc=T(()=>{"use strict";Nt=require("drizzle-orm");_();W();he();Xe()});function qA(t){let e=[],r=new Set;function a(n){if(n)if(typeof n=="string"&&(0,Mo.startsWith)(n,"pageType:")){let i=n.split(":");if(i.length===3&&i[1]&&i[2]){let o=n;r.has(o)||(r.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 t.forEach(n=>a(n)),e}async function zA(t,e,r,a,n){let i=qA(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=Ye(d);if(!g){u.forEach(f=>o.set(f.href,"#"));return}if(g.resolveLink){await Promise.all(u.map(async f=>{try{let A=await g.resolveLink(f.id,e,r);o.set(f.href,A)}catch(A){o.set(f.href,"#")}}));return}let h=await tf(u.map(f=>f.id));u.forEach(f=>{var A;o.set(f.href,(A=h.get(f.id))!=null?A:"#")})}));function c(d){if(!d)return d;if(typeof d=="string"&&(0,Mo.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,h]of Object.entries(d))u[g]=c(h);if(typeof d.href=="string"&&(0,Mo.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 Mo,rf,$o,Ic=T(()=>{"use strict";Mo=require("lodash-es"),rf=require("react");Pe();W();he();xc();$o=(0,rf.cache)(async(t,e)=>{let r=F(),a=e||r.lang||r.fallbackLang;return await Ce(zA,"resolveLinksData")(r.appId,r.draftMode,a,t.id,t.blocks)})});var af,nf,of=T(()=>{"use strict";af=require("react");No();Fo();Go();Zt();Ic();nf=(0,af.cache)(async(t,e)=>{let[r,a]=await Promise.all([Oo(t),Oe()]);Bo(r.lang);let n={slug:t,pageType:r.pageType,fallbackLang:r.fallbackLang,pageLang:r.lang,dynamic:r.dynamic,dynamicSlugCustom:r.dynamicSlugCustom,pageBaseSlug:r.slug,pageId:r.id,primaryPageId:r.primaryPage||r.id,languagePageId:r.id},i=e?{...n,...e(r,a)}:n,o=await $o(r),l=await Uo({blocks:o,pageProps:i,pageType:r.pageType,lang:r.lang});return{page:{...r,blocks:o},settings:a,pageData:l,pageProps:i}})});async function jA(t,e,r,a){let n=e==="live"?s.appPagesOnline:s.appPages,i={};for(let d of r)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,wt.eq)(n.app,t),(0,wt.isNull)(n.deletedAt),(0,wt.ne)(n.slug,"")],{data:l,error:c}=await b(()=>y.select(i).from(n).where((0,wt.and)(...o)).orderBy((0,wt.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 sf(t,e){let r=ka(),{fields:a=["id","slug","updatedAt","name","lang"]}=e||{};return Ce(jA)(r.appId,t,a,r.fallbackLang)}var wt,lf=T(()=>{"use strict";wt=require("drizzle-orm");_();W();he()});async function VA(t){var a;let{data:e,error:r}=await b(()=>y.query.appDomains.findFirst({where:(0,cf.eq)(s.appDomains.app,t),columns:{subdomain:!0,domain:!0,domainConfigured:!0}}));if(r||!(e!=null&&e.subdomain))throw console.error("Error fetching site domains",r),new Error("SITE_DOMAINS_NOT_FOUND");return{subdomain:e.subdomain,domain:e.domain,domainConfigured:(a=e.domainConfigured)!=null?a:!1}}var cf,pf,df=T(()=>{"use strict";cf=require("drizzle-orm");_();W();he();pf=async()=>{let t=F();if(!t.appId)throw new Error("APP_ID_NOT_FOUND");return await Ce(VA)(t.appId)}});async function WA(t,e){if(!(0,gf.startsWith)(t,"pageType:"))return t;let r=t.split(":");if(r.length!==3||!r[1]||!r[2])return"#";let a=r[1],n=r[2],i=Ye(a);if(!i)return"#";let o=F();if(i.resolveLink)return await i.resolveLink(n,o.draftMode,e);let l=await Ec(n);return l!=null?l:"#"}var gf,uf,mf=T(()=>{"use strict";gf=require("lodash-es");Pe();W();he();xc();uf=Ce(WA,"resolveLink")});var M,hf,ff,yf,bf,Tf,Af,Pf,wf,Cf,Ef,xf,If,Sf,Rf,vf,_f,kf,Df,Bf,Nf,Lf,Of,Ff,Uf,Gf,Mf,$f,Hf,qf,zf,jf,Vf,Wf,Kf,Yf=T(()=>{"use strict";rn();M=async(t,e)=>Zr(t,e),hf=t=>M("GET_ASSET",t),ff=(t={})=>M("GET_ASSETS",t),yf=t=>M("SEARCH_IMAGES",t),bf=t=>M("UPDATE_ASSET",t),Tf=t=>M("CREATE_PAGE",t),Af=t=>M("DELETE_PAGE",t),Pf=t=>M("DUPLICATE_PAGE",t),wf=t=>M("GET_WEBSITE_PAGES",t),Cf=t=>M("TAKE_OFFLINE",t),Ef=t=>M("UPDATE_PAGE",t),xf=t=>M("UPDATE_PAGE_METADATA",t),If=()=>M("GET_LIBRARIES",{}),Sf=()=>M("GET_LIBRARY_GROUPS",{}),Rf=t=>M("DELETE_LIBRARY_ITEM",t),vf=t=>M("GET_LIBRARY_ITEM",t),_f=t=>M("GET_LIBRARY_ITEMS",t),kf=t=>M("UPSERT_LIBRARY_ITEM",t),Df=t=>M("GET_TEMPLATES_BY_TYPE",t),Bf=t=>M("MARK_AS_TEMPLATE",t),Nf=t=>M("UNMARK_AS_TEMPLATE",t),Lf=t=>M("DELETE_PERMANENTLY",t),Of=t=>M("GET_TRASHED_ITEMS",t),Ff=t=>M("PERMANENTLY_DELETE_BY_DAYS",t),Uf=t=>M("RESTORE_TRASHED_ITEM",t),Gf=t=>M("TRASH_ENTITY",t),Mf=()=>M("GET_ROLES",{}),$f=t=>M("GET_ROLE",t),Hf=t=>M("CREATE_ROLE",t),qf=t=>M("UPDATE_ROLE",t),zf=t=>M("DELETE_ROLE",t),jf=t=>M("DELETE_PAGE_REVISION",t),Vf=t=>M("GET_PAGE_REVISIONS",t),Wf=t=>M("GET_REVISION_PAGE",t),Kf=t=>M("RESTORE_PAGE_REVISION",t)});function KA(t,e){var r;if(t==="getPagePayload"||t==="getPage"||t==="getPageMetadataPayload")return typeof e[0]=="string"?`slug=${e[0]}`:void 0;if(t==="runAction"||t.startsWith("runAction:")||t.startsWith("tryAction:"))return typeof e[0]=="string"?e[0]:void 0;if(t==="handleHttpAction"&&e[0]&&typeof e[0]=="object"&&"action"in e[0])return String((r=e[0].action)!=null?r:"")}function Rc(t,e,r,a="api"){return(...n)=>Gt(t,()=>{var o,l,c;let i=KA(r,n);if(gs(r,i)&&Et()>=1?fs(r,(o=i!=null?i:us())!=null?o:void 0):(l=ge())!=null&&l.traceId&&Et()>=1&&Cr(r,(c=i!=null?i:us())!=null?c:void 0),Et()>=2)return _u(r,()=>e(...n),a);if(Et()>=1){let d=performance.now(),u=e(...n),g=()=>$t(r,Math.round(performance.now()-d));return u instanceof Promise?u.finally(g):(g(),u)}return e(...n)})}function Sc(t,e,r){return(...a)=>{let n=r(...a);return Rc(t,e,n,"action")(...a)}}async function Qf(t,e,r){let{config:a,routeProps:n,request:i}="config"in t?t:{config:t,routeProps:e,request:r};if(Ho||(Ho=QA(a)),i!==void 0&&n===void 0)throw new Error("ChaiBuilder: when passing a request, supply route props as the second argument ({ params, searchParams }).");Fu();let o=performance.now(),l=await Uu(n,i);return await os(),await Ho.ensureSynced(),Et()>=1&&Bp("getChaiBuilder",Math.round(performance.now()-o)),YA(Ho,l)}function YA(t,e){let{config:r}=t,a=(g,h)=>Rc(e,g,h),n=Rc(e,async g=>await r.globalDataProvider(g),"getGlobalData"),i=async(g,h)=>{let{dispatchChaiAction:f}=await Promise.resolve().then(()=>(rn(),jl));return f(g,h)},o=async(g,h)=>{let{tryChaiAction:f}=await Promise.resolve().then(()=>(rn(),jl));return f(g,h)},l=Sc(e,i,(g,h)=>`runAction:${g}`),c=Sc(e,o,(g,h)=>`tryAction:${g}`),d=In(),u={db:d,schema:s};return{config:r,getConfig:g=>r[g],context:Object.freeze({...e}),db:d,schema:s,safeQuery:g=>b(()=>g(u)),runPageRequest:g=>Promise.resolve(Gt(e,g)),withRenderPhase:(g,h,f)=>Promise.resolve(Gt(e,()=>vu(g,h,f))),runPageRender:(g,h)=>Promise.resolve(Gt(e,async()=>{let f=performance.now();gs("renderPage",`slug=${g}`)&&fs("renderPage",`slug=${g}`);try{return await h()}finally{Et()>=1&&$t("renderPage",Math.round(performance.now()-f))}})),getPage:a(Oo,"getPage"),getPagePayload:a(nf,"getPagePayload"),getPageData:a(Uo,"getPageData"),generateMetaData:a(Dh,"generateMetaData"),getPageMetadataPayload:a(Zh,"getPageMetadataPayload"),getPages:a(sf,"getPages"),getBaseSlugs:a(Nh,"getBaseSlugs"),getSiteGlobalData:a(ln,"getSiteGlobalData"),getDataByPageType:a(cn,"getDataByPageType"),getDataByCollections:a(Cc,"getDataByCollections"),getGlobalData:n,getPageStyles:a(async(...g)=>{let{getPageStyles:h}=await Promise.resolve().then(()=>(dc(),Qm));return h(...g)},"getPageStyles"),getBlocksStyles:a(async(...g)=>{let{getBlocksStyles:h}=await Promise.resolve().then(()=>(lc(),qm));return h(...g)},"getBlocksStyles"),resolveLink:a(uf,"resolveLink"),resolveLinksInBlocks:a($o,"resolveLinksInBlocks"),getSiteSettings:a(Oe,"getSiteSettings"),getSiteDomains:a(pf,"getSiteDomains"),getClientSettings:a(Fh,"getClientSettings"),getPageType:lt,getPageTypes:mr,getCollection:Wt,getCollections:Nr,getTrashEntity:yt,getAIConfig:ht,runAction:l,tryAction:c,handleHttpAction:Sc(e,vh,g=>{var h;return(h=g==null?void 0:g.action)!=null?h:"handleHttpAction"}),getAssets:a(ff,"getAssets"),getAsset:a(hf,"getAsset"),updateAsset:a(bf,"updateAsset"),searchImages:a(yf,"searchImages"),createPage:a(Tf,"createPage"),deletePage:a(Af,"deletePage"),duplicatePage:a(Pf,"duplicatePage"),getWebsitePages:a(wf,"getWebsitePages"),updatePage:a(Ef,"updatePage"),updatePageMetadata:a(xf,"updatePageMetadata"),takeOffline:a(Cf,"takeOffline"),getLibraries:a(If,"getLibraries"),getLibraryGroups:a(Sf,"getLibraryGroups"),getLibraryItem:a(vf,"getLibraryItem"),getLibraryItems:a(_f,"getLibraryItems"),upsertLibraryItem:a(kf,"upsertLibraryItem"),deleteLibraryItem:a(Rf,"deleteLibraryItem"),getTemplatesByType:a(Df,"getTemplatesByType"),markAsTemplate:a(Bf,"markAsTemplate"),unmarkAsTemplate:a(Nf,"unmarkAsTemplate"),getTrashedItems:a(Of,"getTrashedItems"),restoreTrashedItem:a(Uf,"restoreTrashedItem"),deleteTrashedItemPermanently:a(Lf,"deleteTrashedItemPermanently"),permanentlyDeleteByDays:a(Ff,"permanentlyDeleteByDays"),trashEntity:a(Gf,"trashEntity"),getPageRevisions:a(Vf,"getPageRevisions"),getRevisionPage:a(Wf,"getRevisionPage"),deletePageRevision:a(jf,"deletePageRevision"),restorePage:a(Kf,"restorePage"),roles:{getAll:a(Mf,"roles.getAll"),get:a($f,"roles.get"),create:a(Hf,"roles.create"),update:a(qf,"roles.update"),delete:a(zf,"roles.delete")}}}function QA(t){Sa(t.db),Br(t),Sp(t.debugLevel);let e=Object.freeze(t),r=null;return{config:e,ensureSynced:async()=>{r||(r=(async()=>{let a=Su(e);a&&await a(Ai())})()),await r}}}var ZO,Ho,Xf=T(()=>{"use strict";ZO=require("server-only");Ml();_();W();ot();Ht();ku();Da();Ke();Gu();_h();Bh();Lh();Uh();Fo();Go();ef();of();lf();df();Zt();mf();Ic();Yf();Ho=null});function Jf(t,e){var i;let r=t.slug.endsWith("/")?t.slug.slice(0,-1):t.slug,a=e.replace(/^\/+/,""),n=(i=t.dynamicSlugCustom)!=null?i:"";return`${r}/${a}${n}`}var Zf=T(()=>{"use strict"});var ty={};rt(ty,{revalidateCollectionItem:()=>_c});async function _c(t,{pageType:e,itemSlug:r,lang:a}){var f;if(!(r!=null&&r.trim()))return{paths:[],tags:[]};let n=await Qf(t),i="revalidateCollectionItem",o=performance.now();O(1)&&Cr(i,`pageType="${e}" itemSlug="${r}" lang="${a||"none"}"`);let l=await n.getBaseSlugs(e,a?{lang:a}:void 0);if(l.length===0)return O(1)&&(vc.warn(`[${i}] no dynamic template for pageType="${e}"`+(a?` lang="${a}"`:"")),$t(`${i} (skipped: no bases)`,Math.round(performance.now()-o))),{paths:[],tags:[]};let c=l.map(A=>Jf(A,r)),d=n.context.appId,u=new Set([`page-type-data-${d}-${e}`]);for(let A of l)u.add(`page-${(f=A.primaryPageId)!=null?f:A.pageId}`);O(1)&&(vc.info("paths:",c),vc.info("tags:",[...u]));let{revalidatePath:g,revalidateTag:h}=await import("next/cache");return await Promise.all([...c.map(A=>g(A)),...[...u].map(A=>h(A,"max"))]),O(1)&&$t(i,Math.round(performance.now()-o)),{paths:c,tags:[...u]}}var ey,vc,kc=T(()=>{"use strict";ey=require("consola");Xf();Zf();ot();Ht();vc=ey.consola.withTag("ChaiDebug")});var ay={};rt(ay,{aiAddonPurchasesRelations:()=>gP,aiCreditAddonsRelations:()=>dP,aiLogsRelations:()=>PP,appApiKeysRelations:()=>ZA,appAssetsRelations:()=>uP,appDomainsRelations:()=>lP,appFormSubmissionsRelations:()=>sP,appPagesOnlineRelations:()=>TP,appPagesRelations:()=>pP,appPagesRevisionsRelations:()=>yP,appTrashRelations:()=>fP,appUserAddonsRelations:()=>hP,appUserPlansRelations:()=>oP,appUsersRelations:()=>cP,appsOnlineRelations:()=>aP,appsRelations:()=>eP,clientUsersRelations:()=>mP,clientsRelations:()=>rP,invitedUsersRelations:()=>tP,librariesRelations:()=>nP,libraryItemsRelations:()=>AP,libraryTemplatesRelations:()=>bP,webhookEventsRelations:()=>iP});var J,ZA,eP,tP,rP,aP,nP,iP,oP,sP,lP,cP,pP,dP,gP,uP,mP,hP,fP,yP,bP,TP,AP,PP,ny=T(()=>{"use strict";J=require("drizzle-orm/relations");xa();ZA=(0,J.relations)(la,({one:t})=>({app:t(U,{fields:[la.app],references:[U.id]})})),eP=(0,J.relations)(U,({one:t,many:e})=>({appApiKeys:e(la),invitedUsers:e(rr),client:t($,{fields:[U.client],references:[$.id]}),libraries:e(at),appFormSubmissions:e(ga),appDomains:e(ua),appUsers:e(ma),appPages:e(Ct),appAssets:e(ya),appTrashes:e(Aa),appPagesRevisions:e(Pa),appPagesOnlines:e(Ca),aiLogs:e(ar)})),tP=(0,J.relations)(rr,({one:t})=>({app:t(U,{fields:[rr.app],references:[U.id]}),client:t($,{fields:[rr.client],references:[$.id]})})),rP=(0,J.relations)($,({many:t})=>({invitedUsers:t(rr),apps:t(U),appsOnlines:t(ca),webhookEvents:t(pa),appUserPlans:t(da),aiCreditAddons:t(ha),aiAddonPurchases:t(fa),clientUsers:t(ba),appUserAddons:t(Ta),aiLogs:t(ar)})),aP=(0,J.relations)(ca,({one:t})=>({client:t($,{fields:[ca.client],references:[$.id]})})),nP=(0,J.relations)(at,({one:t,many:e})=>({app:t(U,{fields:[at.app],references:[U.id]}),libraryTemplates:e(wa),libraryItems:e(Ea)})),iP=(0,J.relations)(pa,({one:t})=>({client:t($,{fields:[pa.clientId],references:[$.id]})})),oP=(0,J.relations)(da,({one:t})=>({client:t($,{fields:[da.client],references:[$.id]})})),sP=(0,J.relations)(ga,({one:t})=>({app:t(U,{fields:[ga.app],references:[U.id]})})),lP=(0,J.relations)(ua,({one:t})=>({app:t(U,{fields:[ua.app],references:[U.id]})})),cP=(0,J.relations)(ma,({one:t})=>({app:t(U,{fields:[ma.app],references:[U.id]})})),pP=(0,J.relations)(Ct,({one:t,many:e})=>({app:t(U,{fields:[Ct.app],references:[U.id]}),appPage:t(Ct,{fields:[Ct.parent],references:[Ct.id],relationName:"appPages_parent_appPages_id"}),appPages:e(Ct,{relationName:"appPages_parent_appPages_id"})})),dP=(0,J.relations)(ha,({one:t})=>({client:t($,{fields:[ha.client],references:[$.id]})})),gP=(0,J.relations)(fa,({one:t})=>({client:t($,{fields:[fa.client],references:[$.id]})})),uP=(0,J.relations)(ya,({one:t})=>({app:t(U,{fields:[ya.app],references:[U.id]})})),mP=(0,J.relations)(ba,({one:t})=>({client:t($,{fields:[ba.client],references:[$.id]})})),hP=(0,J.relations)(Ta,({one:t})=>({client:t($,{fields:[Ta.client],references:[$.id]})})),fP=(0,J.relations)(Aa,({one:t})=>({app:t(U,{fields:[Aa.app],references:[U.id]})})),yP=(0,J.relations)(Pa,({one:t})=>({app:t(U,{fields:[Pa.app],references:[U.id]})})),bP=(0,J.relations)(wa,({one:t})=>({library:t(at,{fields:[wa.library],references:[at.id]})})),TP=(0,J.relations)(Ca,({one:t})=>({app:t(U,{fields:[Ca.app],references:[U.id]})})),AP=(0,J.relations)(Ea,({one:t})=>({library:t(at,{fields:[Ea.library],references:[at.id]})})),PP=(0,J.relations)(ar,({one:t})=>({app:t(U,{fields:[ar.app],references:[U.id]}),client:t($,{fields:[ar.client],references:[$.id]})}))});var MP={};rt(MP,{DEFAULT_ADMIN_ROUTE:()=>Wo,appWhere:()=>Fe,appendCacheBust:()=>hr,asChaiBuilderGlobalProvider:()=>Jo,asChaiBuilderPartialType:()=>hy,buildChaiBuilderConfig:()=>Ay,chaiBuilderAssetActions:()=>Zo,chaiBuilderAssetTrashEntity:()=>ts,chaiBuilderAssets:()=>Ty,chaiBuilderFields:()=>Tn,chaiBuilderPlugin:()=>ry,chaiBuilderSchemaHook:()=>oy,chaiBuilderUserActions:()=>es,configureChaiPayload:()=>Xo,createAppScopedAccess:()=>rs,createAppScopedSingletonCreate:()=>Qc,createChaiBuilderFields:()=>sa,createMenusCollection:()=>Cn,createPayloadUserResolver:()=>cy,defaultAdminUrl:()=>Ko,defaultGetAppId:()=>mn,defaultGetMediaUrl:()=>Lt,getAdminRoute:()=>Nc,hasSlugField:()=>jo,injectAppFilterOptions:()=>bn,mapPayloadMediaToDamAsset:()=>zo,menuItemsField:()=>wn,parseAdminRoute:()=>Bc,registerAppIdResolver:()=>hn,resolveAppId:()=>de,resolveName:()=>Vo,revalidateCollectionItem:()=>_c,sanitizePayloadData:()=>na,transformRichTextToHTML:()=>ia,validateMenuItems:()=>Pn,withAppBaseFilter:()=>Kc,withAppIdAccess:()=>oa,withAppScopedAccess:()=>fn});module.exports=vy(MP);function mn(){let t=process.env.CHAIBUILDER_APP_KEY;if(!t)throw new Error("CHAIBUILDER_APP_KEY is required");return t}var Wc=()=>mn();function hn(t){Wc=t!=null?t:(()=>mn())}function de(t){return Wc(t)}function Fe(t,e,r="app"){let a={[r]:{equals:t}};return e?{and:[a,e]}:a}function oa(t,e="app"){return async r=>{let a={[e]:{equals:await de({req:r.req})}};if(!t)return a;let n=await t(r);return n===!1?!1:n===!0?a:{and:[a,n]}}}function Kc(t,e="app"){var n;let r=(n=t.admin)==null?void 0:n.baseFilter,a=async i=>{let o={[e]:{equals:await de({req:i.req})}};if(!r)return o;let l=await r(i);return l==null?o:{and:[o,l]}};return{...t,admin:{...t.admin,baseFilter:a}}}var Yc=({req:t})=>!!t.user;function Qc(t,e){var n,i;let r=(n=e==null?void 0:e.appField)!=null?n:"app",a=(i=e==null?void 0:e.roleAccess)!=null?i:Yc;return async o=>{if(!await a(o))return!1;let c=await de({req:o.req}),{totalDocs:d}=await o.req.payload.find({collection:t,where:Fe(c,void 0,r),limit:1,depth:0,req:o.req,overrideAccess:!0});return d===0}}function rs(t){var i,o;let e=(i=t==null?void 0:t.appField)!=null?i:"app",r=(o=t==null?void 0:t.drafts)!=null?o:!0,a=async({req:l})=>l.user?Fe(await de({req:l}),void 0,e):r?Fe(await de({req:l}),{_status:{equals:"published"}},e):Fe(await de({req:l}),void 0,e),n=async({req:l})=>l.user?Fe(await de({req:l}),void 0,e):!1;return{create:Yc,read:a,update:n,delete:n}}function fn(t,e="app"){var i,o,l,c;let r=!!(t.versions&&typeof t.versions=="object"&&t.versions.drafts),a=rs({appField:e,drafts:r}),n=t.access;return{...t,access:{create:(i=n==null?void 0:n.create)!=null?i:a.create,read:oa((o=n==null?void 0:n.read)!=null?o:a.read,e),update:oa((l=n==null?void 0:n.update)!=null?l:a.update,e),delete:oa((c=n==null?void 0:n.delete)!=null?c:a.delete,e)}}}function _y(t,e,r){return async a=>{let n=r.has(a.relationTo)?{[e]:{equals:await de({req:a.req})}}:!0,i=typeof t=="function"?await t(a):t!=null?t:!0;return i===!1?!1:n===!0?i:i===!0?n:{and:[n,i]}}}function ky(t,e){if(!("relationTo"in t))return!1;let r=t.relationTo;return Array.isArray(r)?r.some(a=>e.has(a)):e.has(r)}function yn(t,e,r){return(t.type==="relationship"||t.type==="upload")&&ky(t,r)?{...t,filterOptions:_y(t.filterOptions,e,r)}:"fields"in t&&Array.isArray(t.fields)?{...t,fields:t.fields.map(a=>yn(a,e,r))}:t.type==="tabs"&&Array.isArray(t.tabs)?{...t,tabs:t.tabs.map(a=>{var n;return{...a,fields:((n=a.fields)!=null?n:[]).map(i=>yn(i,e,r))}})}:t.type==="blocks"&&Array.isArray(t.blocks)?{...t,blocks:t.blocks.map(a=>{var n;return{...a,fields:((n=a.fields)!=null?n:[]).map(i=>yn(i,e,r))}})}:t}function bn(t,e){var r;return{...t,fields:((r=t.fields)!=null?r:[]).map(a=>yn(a,e.appField,e.appSlugs))}}var Dy="~/payload/components/iframe-notifier#IframeNotifier",By="~/payload/components/iframe-close-guard#IframeCloseGuard";function sa(t={}){var r;let e=(r=t.appField)!=null?r:"app";return[{name:"iframeEventTrigger",type:"ui",admin:{components:{Field:Dy}}},{name:"iframeCloseGuard",type:"ui",admin:{components:{Field:By}}},{name:e,type:"text",required:!0,hidden:!0,defaultValue:async({req:a})=>de({req:a}),hooks:{beforeChange:[async({value:a,req:n})=>a||de({req:n})]}}]}var Tn=sa();var Xc=["page","custom","submenu-trigger"],Jc=["page","custom","divider","label"];function An(t){return typeof t=="string"&&t.trim().length>0}function Zc(t,e){return An(t.label)?An(t.url)?!0:t.type==="page"?`${e}: page selection is required.`:`${e}: url is required for Custom links.`:`${e}: label is required.`}function Ny(t,e,r){let a=`items[${r}].children[${e}]`,n=t.type;return!n||!Jc.includes(n)?`${a}: type must be one of ${Jc.join(", ")}.`:n==="divider"?!0:n==="label"?An(t.label)?!0:`${a}: label is required.`:n==="page"||n==="custom"?Zc(t,a):!0}function Ly(t,e){var i;let r=`items[${e}]`,a=t.type;if(!a||!Xc.includes(a))return`${r}: type must be one of ${Xc.join(", ")}.`;if(a==="page"||a==="custom")return Zc(t,r);if(!An(t.label))return`${r}: label is required for Submenu Trigger.`;let n=(i=t.children)!=null?i:[];if(n.length===0)return`${r}: submenu-trigger must have at least one child item.`;for(let o=0;o<n.length;o++){let l=Ny(n[o],o,e);if(l!==!0)return l}return!0}function Pn(t){if(!t||t.length===0)return!0;for(let e=0;e<t.length;e++){let r=Ly(t[e],e);if(r!==!0)return r}return!0}var Oy="~/payload/menu/components/menu-url-field#MenuUrlField",tp="~/payload/menu/components/menu-item-row-label#MenuItemRowLabel",ep=(t,e)=>(e==null?void 0:e.type)==="page"||(e==null?void 0:e.type)==="custom",Fy=(t,e)=>(e==null?void 0:e.type)==="submenu-trigger",Uy=(t,e)=>(e==null?void 0:e.type)!=="divider",rp=[{name:"label",type:"text",localized:!0,admin:{condition:Uy}},{name:"url",type:"text",admin:{condition:ep,components:{Field:Oy}}},{name:"openInNewTab",type:"checkbox",label:"Open in new tab",defaultValue:!1,admin:{condition:ep}},{name:"icon",type:"textarea",admin:{condition:(t,e)=>(e==null?void 0:e.type)==="page"||(e==null?void 0:e.type)==="custom"||(e==null?void 0:e.type)==="submenu-trigger",description:"Optional raw SVG markup"}}],Gy=[{name:"type",type:"select",required:!0,defaultValue:"page",options:[{label:"Page",value:"page"},{label:"Custom",value:"custom"},{label:"Divider",value:"divider"},{label:"Label",value:"label"}]},...rp],My={name:"children",type:"array",labels:{singular:"Sub Item",plural:"Sub Items"},admin:{condition:Fy,description:"Nested items (Page, Custom, Divider, or Label)",initCollapsed:!1,components:{RowLabel:tp}},fields:Gy},wn={name:"items",type:"array",labels:{singular:"Menu Item",plural:"Menu Items"},admin:{position:"sidebar",initCollapsed:!1,components:{RowLabel:tp}},validate:t=>Pn(t),fields:[{name:"type",type:"select",required:!0,defaultValue:"page",options:[{label:"Page",value:"page"},{label:"Custom",value:"custom"},{label:"Submenu Trigger",value:"submenu-trigger"}]},...rp,My]};var as=({req:t})=>!!t.user,$y={create:as,read:(({req:t})=>t.user?!0:{_status:{equals:"published"}}),update:as,delete:as};function Cn(t={}){let{slug:e="menus",showInAdmin:r=!0,access:a=$y,commonFields:n=Tn}=t;return{slug:e,labels:{singular:"Menu",plural:"Menus"},admin:{useAsTitle:"name",defaultColumns:["name","updatedAt"],group:"Collections",hidden:!r},versions:{drafts:!0},access:a,fields:[...n,{name:"name",type:"text",required:!0},{name:"description",type:"textarea",admin:{description:"Optional note for editors (not shown on the frontend)"}},wn],hooks:{afterChange:[async({doc:i})=>{if(!(i!=null&&i._status)||(i==null?void 0:i._status)==="published"){let{revalidateTag:o}=await import("next/cache");o(`collection:${e}`,"max"),typeof(i==null?void 0:i.id)=="string"&&i.id.trim()&&o(`${e}:${i.id}`,"max")}}]}}}function qo(t){var r;let e=[];for(let a of t)if("name"in a&&typeof a.name=="string"&&e.push(a.name),"fields"in a&&Array.isArray(a.fields)&&e.push(...qo(a.fields)),"tabs"in a&&Array.isArray(a.tabs))for(let n of a.tabs)e.push(...qo((r=n.fields)!=null?r:[]));return e}function XA(t,e){var r,a;return qo((r=t.fields)!=null?r:[]).includes(e)?t:{...t,fields:[...sa({appField:e}),...(a=t.fields)!=null?a:[]]}}function JA(t){var r,a;let e=t.slug;return{...t,hooks:{...t.hooks,afterChange:[...(a=(r=t.hooks)==null?void 0:r.afterChange)!=null?a:[],async({doc:n,req:i})=>{var o;if(!(n!=null&&n._status)||(n==null?void 0:n._status)==="published"){let l=typeof(n==null?void 0:n.slug)=="string"?n.slug:null;if(!l)return;let c=(o=i==null?void 0:i.locale)!=null?o:void 0,[{revalidateCollectionItem:d},{getActiveChaiBuilderConfig:u}]=await Promise.all([Promise.resolve().then(()=>(kc(),ty)),Promise.resolve().then(()=>(Ke(),xu))]);await import("@chaibuilder-config");let g=u();await d(g,{pageType:e,itemSlug:l,lang:c})}}]}}}function ry(t={}){let{appField:e="app",appCollections:r=[],getAppId:a,menus:n=!1,revalidateCollections:i=[],mediaSlug:o="media"}=t;return hn(a),l=>{var g,h;let c=[...(g=l.collections)!=null?g:[],Cn({showInAdmin:n})];if(!c.some(f=>f.slug===o))throw new Error(`chaiBuilderPlugin: media collection "${o}" not found in payload config. The builder asset manager requires it (override via the mediaSlug option).`);for(let f of r)if(!c.find(C=>C.slug===f))throw new Error(`chaiBuilderPlugin: appCollections entry "${f}" not found in payload config.`);let d=new Set([...r,"menus"]),u=f=>d.has(f);c=c.map(f=>{if(!u(f.slug))return f;let A=XA(f,e);return A=fn(A,e),A=bn(A,{appField:e,appSlugs:d}),A});for(let f of i){let A=c.find(C=>C.slug===f);if(!A)throw new Error(`chaiBuilderPlugin: revalidateCollections entry "${f}" not found in payload config.`);if(!qo((h=A.fields)!=null?h:[]).includes(e))throw new Error(`chaiBuilderPlugin: collection "${f}" has no "${e}" field \u2014 add it to appCollections (or define the field yourself).`)}return{...l,collections:c.map(f=>i.includes(f.slug)?JA(f):f)}}}var iy=require("drizzle-orm");function wP(t){if(!t||typeof t!="object")return!1;try{let e=(0,iy.getTableName)(t);return typeof e=="string"&&e.length>0}catch(e){return!1}}function CP(t){let e={};for(let[r,a]of Object.entries(t))wP(a)&&(e[r]=a);return e}function EP(t){let e={};for(let[r,a]of Object.entries(t))r.endsWith("Relations")&&(e[r]=a);return e}var oy=async({schema:t})=>{let[e,r]=await Promise.all([Promise.resolve().then(()=>(xa(),yr)),Promise.resolve().then(()=>(ny(),ay))]);return{...t,tables:{...t.tables,...CP(e)},relations:{...t.relations,...EP(r)}}};kc();var Lt=(t,e)=>{if(!t)return"";if(!e)return t;try{let r=/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(t)||t.startsWith("//"),a=r?new URL(t.startsWith("//")?`https:${t}`:t):new URL(t,"http://payload.local");return a.searchParams.set("t",String(e)),r?a.toString():`${a.pathname}${a.search}`}catch(r){let a=t.includes("?")?"&":"?";return`${t}${a}t=${encodeURIComponent(String(e))}`}};function hr(t,e,r=Lt){if(!t)return"";let a=String(new Date(e).getTime());return r(t,a)}function zo(t,e,r=Lt){var l,c,d,u,g,h,f,A;let a=hr(t.url,t.updatedAt,r),n=hr(t.thumbnailURL||t.url,t.updatedAt,r),i={en:typeof t.alt=="string"?t.alt:""};e?i=e:t.alt&&typeof t.alt=="object"&&(i=t.alt);let o=t.filename?(l=t.filename.split(".").pop())==null?void 0:l.toLowerCase():((c=t.mimeType)==null?void 0:c.split("/").pop())||"";return{id:String(t.id),name:(u=(d=t.filename)!=null?d:typeof t.alt=="string"?t.alt:void 0)!=null?u:String(t.id),url:a,thumbnailUrl:n,type:(g=t.mimeType)!=null&&g.startsWith("image/")?"image":"file",size:Number((h=t.filesize)!=null?h:0),width:(f=t.width)!=null?f:void 0,height:(A=t.height)!=null?A:void 0,format:o,description:i,createdAt:t.createdAt,updatedAt:t.updatedAt}}var sy=te(require("lodash-es/camelCase"),1),ly=te(require("pluralize"),1),q0=require("server-only");function xP(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.id=="string"&&(typeof e.mimeType=="string"||typeof e.filename=="string"||"thumbnailURL"in e)}function IP(t,e){var a,n,i,o;let r=(a=t.updatedAt)!=null?a:"";return{id:t.id,alt:(n=t.alt)!=null?n:"",url:hr(t.url,r,e),thumbnailUrl:hr(t.thumbnailURL||t.url,r,e),width:(i=t.width)!=null?i:null,height:(o=t.height)!=null?o:null}}async function na(t,e=Lt){if(t==null)return t;if(Array.isArray(t))return Promise.all(t.map(r=>na(r,e)));if(xP(t))return IP(t,e);if(t instanceof Date)return t;if(typeof t=="object"){let r=await Promise.all(Object.entries(t).filter(([a])=>!a.startsWith("_")).map(async([a,n])=>[a==="meta"?"seo":a,await na(n,e)]));return Object.fromEntries(r)}return t}function jo(t){return t.some(e=>"name"in e&&e.name==="slug")}function Vo(t){var a,n;let e=typeof((a=t.labels)==null?void 0:a.singular)=="string"?t.labels.singular:SP(t.slug),r=typeof((n=t.labels)==null?void 0:n.plural)=="string"?t.labels.plural:`${e}s`;return{name:e,pluralName:r}}function SP(t){return t.split("-").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function RP(t){return(0,sy.default)(ly.default.singular(t))}function Dc(t){let e=async l=>Fe(await t.getAppId(),l,t.appField);async function r(l){return na(await t.richTextToHTML(l),t.getMediaUrl)}function a(l,c={}){var C,w,E,S,R,k;let{name:d,pluralName:u}=Vo(l),g=typeof((C=l.admin)==null?void 0:C.useAsTitle)=="string"?l.admin.useAsTitle:"title",h=jo((w=l.fields)!=null?w:[]),f=x=>!(!(typeof(x==null?void 0:x[g])=="string"&&x[g].trim().length>0)||h&&!(typeof(x==null?void 0:x.slug)=="string"&&x.slug.trim().length>0)),A=(E=c.dataProviderDepth)!=null?E:1;return{key:l.slug,name:(S=c.name)!=null?S:d,pluralName:(R=c.pluralName)!=null?R:u,icon:c.icon,helpText:c.helpText,editUrl:`${t.adminUrl("embed","collections",l.slug,"{{ID}}")}`,createUrl:`${t.adminUrl("embed","collections",l.slug,"create")}`,dynamicSegments:(k=c.dynamicSegments)!=null?k:"/[a-zA-Z0-9-]+",dynamicSlug:h?"{{slug}}":void 0,hasSlug:h,getDynamicPages:async({query:x,slug:G,lang:j})=>{var fe,je;let ae=await t.getPayload();if(G){let ye=await e(h?{slug:{equals:G}}:void 0),{docs:Ve}=await ae.find({collection:l.slug,where:ye,depth:0,limit:1,draft:!0,locale:j,select:{id:!0,[g]:!0,...h?{slug:!0}:{}}}),ne=Ve[0];return!ne||!f(ne)?[]:[{id:ne.id.toString(),name:(fe=ne[g])!=null?fe:ne.id.toString(),slug:h&&(je=ne.slug)!=null?je:ne.id.toString()}]}let ze=x?await e({[g]:{contains:x}}):await e(),{docs:L}=await ae.find({collection:l.slug,where:ze,limit:100,depth:0,draft:!0,locale:j,select:{id:!0,[g]:!0,...h?{slug:!0}:{}}});return L.filter(f).map(ye=>{var Ve,ne;return{id:ye.id.toString(),name:(Ve=ye[g])!=null?Ve:ye.id.toString(),slug:h&&(ne=ye.slug)!=null?ne:ye.id.toString()}})},dataProvider:async({pageProps:x,draft:G,lang:j})=>{var Ve,ne;let ae=RP(l.slug),ze=await t.getPayload(),L=(ne=(Ve=x.slug)==null?void 0:Ve.split("/").pop())!=null?ne:"";if(!L)return{};let fe=await e(h?{slug:{equals:L}}:{id:{equals:L}}),{docs:je}=await ze.find({collection:l.slug,where:fe,depth:A,limit:1,draft:G,locale:j}),ye=je[0];return ye?{[ae]:await r(ye)}:{}}}}function n(l,c={}){return{...a(l,c),partial:!0,hasSlug:!1}}function i(l){var h,f;let{pluralName:c}=Vo(l),d=typeof((h=l.admin)==null?void 0:h.useAsTitle)=="string"?l.admin.useAsTitle:"title",u=jo((f=l.fields)!=null?f:[]),g=A=>!(!(typeof(A==null?void 0:A[d])=="string"&&A[d].trim().length>0)||u&&!(typeof(A==null?void 0:A.slug)=="string"&&A.slug.trim().length>0));return{id:l.slug,name:c,filters:[],sort:[],fetch:async({draft:A,lang:C})=>{let w=await t.getPayload(),{docs:E}=await w.find({collection:l.slug,where:await e(),depth:1,draft:A,locale:C}),S=E.filter(g),R=await Promise.all(S.map(k=>r(k)));return{items:R,totalItems:R.length}}}}function o({slug:l,depth:c=1}){let d=async({draft:g,lang:h})=>{let f=await t.getPayload(),A=await t.getAppId(),w=(await f.find({collection:l,where:Fe(A,void 0,t.appField),limit:1,depth:c,draft:g,locale:h,sort:"-updatedAt"})).docs[0];return!w||Object.keys(w).length===0||w.app&&w.app!==A||!g&&w._status!=="published"?null:w},u=new Map;return async({draft:g,lang:h})=>{let f=h!=null?h:"en";if(g)return r(await d({draft:!0,lang:f}));let A=await t.getAppId(),C=u.get(A);if(!C){let{unstable_cache:E}=await import("next/cache");C=E(async({draft:S,lang:R})=>d({draft:S,lang:R}),[`global-${l}`,A],{tags:[`global:${l}:${A}`],revalidate:!1}),u.set(A,C)}let w=await C({draft:!1,lang:f});return r(w)}}return{payloadPageType:a,payloadPartialType:n,payloadCollection:i,payloadGlobalProvider:o}}function cy({getPayload:t,cookieName:e="payload-token"}){async function r(n){if(!n)return null;try{let i=new Headers;i.set("Authorization",`JWT ${n}`);let o=await t(),{user:l}=await o.auth({headers:i});return l?String(l.id):null}catch(i){return null}}async function a(n){var l,c;let o=((l=n.headers.get("authorization"))!=null?l:"").split(" ")[1];if(o){let d=await r(o);if(d)return d}return r((c=n.cookies.get(e))==null?void 0:c.value)}return{userIdFromToken:r,userIdFromRequest:a,cookieName:e}}var Wo="/admin";function Bc(t){let e=t==null?void 0:t.trim();if(!e)return Wo;let r=e.replace(/^\/+|\/+$/g,"").replace(/\/{2,}/g,"/");if(!r||r==="admin")return Wo;if(/[:?*+(){}\[\]|\\]/.test(r))throw new Error("PAYLOAD_ADMIN_ROUTE contains unsupported characters");if(r.length<4)throw new Error("PAYLOAD_ADMIN_ROUTE must be at least 4 characters");return`/${r}`}function Nc(){var t;return Bc((t=process.env.PAYLOAD_ADMIN_ROUTE)!=null?t:process.env.NEXT_PUBLIC_PAYLOAD_ADMIN_ROUTE)}function Ko(...t){let e=Nc(),r=t.map(a=>a.replace(/^\/+|\/+$/g,"")).filter(Boolean).join("/");return r?`${e}/${r}`:e}var vP=t=>{if(!t||typeof t!="object")return!1;let e=t.root;if(!e||typeof e!="object")return!1;let r=e;return r.type==="root"&&Array.isArray(r.children)},_P=t=>t.replace(/<p\b[^>]*>\s*<br\s*\/?\s*>\s*<\/p>/gi,"").trim(),kP=async t=>{let e="@payloadcms/richtext-lexical/html-async",{convertLexicalToHTMLAsync:r}=await import(e),a=await r({data:t,disableContainer:!0});return _P(a)},ia=async t=>{if(Array.isArray(t))return Promise.all(t.map(ia));if(vP(t))return kP(t);if(t instanceof Date)return t;if(t&&typeof t=="object"){let e=await Promise.all(Object.entries(t).map(async([r,a])=>[r,await ia(a)]));return Object.fromEntries(e)}return t};Ml();var Z=require("zod");N();D();var py=require("nanoid"),Q0=require("server-only");N();var tr=class{constructor(e,r,a){this.deps=e;this.appId=r;this.userId=a;this.payloadInstance=null}async getPayload(){return this.payloadInstance||(this.payloadInstance=await this.deps.getPayload()),this.payloadInstance}get mediaSlug(){return this.deps.slugs.media}async getUser(){if(!this.userId)return null;let e=await this.getPayload();try{return await e.findByID({collection:this.deps.slugs.users,id:this.userId,overrideAccess:!0})}catch(r){return null}}baseWhere(e){let r={or:[{deletedAt:{exists:!1}},{deletedAt:{equals:null}}]};return Fe(this.appId,e?{and:[r,e]}:r,this.deps.appField)}getBufferFromBase64(e){try{let r=e.split(",")[1]||e;return Buffer.from(r,"base64")}catch(r){throw new m("Invalid base64 string format","BAD_REQUEST",400)}}getMimeType(e){var n;let r=((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"}[r]||"application/octet-stream"}sanitizeName(e){let r=e.split("."),a=(r.length>1?r.pop().toLowerCase():"webp")||"webp";return`${r.join(".").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,30)||"image"}-${(0,py.nanoid)(10)}.${a}`}toDamAsset(e,r){return zo(e,r,this.deps.getMediaUrl)}async list({search:e,page:r=1,limit:a=20}){let n=await this.getPayload(),i;e&&(i={or:[{filename:{contains:e}},{alt:{contains:e}}]});let o=await n.find({collection:this.mediaSlug,where:this.baseWhere(i),page:r,limit:a,sort:"-createdAt",locale:"all",overrideAccess:!0});return{assets:o.docs.map(c=>this.toDamAsset(c)),total:o.totalDocs,page:o.page||r,pageSize:o.limit||a}}async getById(e){let r=await this.getPayload();try{let a=await r.findByID({collection:this.mediaSlug,id:e,locale:"all",overrideAccess:!0,showHiddenFields:!0});if(!a||a[this.deps.appField]!==this.appId||a.deletedAt)throw new m("Asset not found","NOT_FOUND",404);return this.toDamAsset(a)}catch(a){throw a instanceof m?a:new m("Asset not found","NOT_FOUND",404)}}async create({name:e,file:r,description:a}){var u;let n=await this.getPayload(),i=await this.getUser();if(!i)throw new m("User unauthorized","UNAUTHORIZED",401);let o=this.getBufferFromBase64(r),l=((u=r.match(/^data:([^;]+);base64,/))==null?void 0:u[1])||this.getMimeType(e),c=this.sanitizeName(e),d=await n.create({collection:this.mediaSlug,data:{[this.deps.appField]:this.appId,alt:{en:e,...a}},file:{data:o,mimetype:l,name:c,size:o.length},user:i,locale:"all",overrideAccess:!0});return this.toDamAsset(d,a)}async update({id:e,file:r,description:a}){var u;let n=await this.getPayload(),i=await this.getUser();if(!i)throw new m("User unauthorized","UNAUTHORIZED",401);let o=await n.findByID({collection:this.mediaSlug,id:e,overrideAccess:!0,showHiddenFields:!0});if(!o||o[this.deps.appField]!==this.appId||o.deletedAt)throw new m("Asset not found","NOT_FOUND",404);let l={};a!==void 0&&(l.alt=a);let c;if(r){let g=this.getBufferFromBase64(r),h=((u=r.match(/^data:([^;]+);base64,/))==null?void 0:u[1])||this.getMimeType(o.filename||"asset.png"),f=this.sanitizeName(o.filename||"asset.png");c={data:g,mimetype:h,name:f,size:g.length}}let d=await n.update({collection:this.mediaSlug,id:e,data:l,file:c,user:i,locale:"all",overrideAccess:!0});return this.toDamAsset(d,a)}async deleteMany(e){let r=await this.getPayload(),a=await this.getUser();if(!a)throw new m("User unauthorized","UNAUTHORIZED",401);for(let n of e)try{let i=await r.findByID({collection:this.mediaSlug,id:n,overrideAccess:!0,showHiddenFields:!0});i&&i[this.deps.appField]===this.appId&&await r.delete({collection:this.mediaSlug,id:n,user:a,overrideAccess:!0})}catch(i){}return{success:!0}}async softDelete(e){let r=await this.getPayload(),a=await this.getUser();if(!a)throw new m("User unauthorized","UNAUTHORIZED",401);let n=await r.findByID({collection:this.mediaSlug,id:e,overrideAccess:!0,showHiddenFields:!0});if(!n||n[this.deps.appField]!==this.appId)throw new m("Asset not found","NOT_FOUND",404);return await r.update({collection:this.mediaSlug,id:e,data:{deletedAt:new Date().toISOString(),deletedBy:String(a.id)},user:a,locale:"all",overrideAccess:!0})}async restore(e){let r=await this.getPayload(),a=await this.getUser();if(!a)throw new m("User unauthorized","UNAUTHORIZED",401);let n=await r.findByID({collection:this.mediaSlug,id:e,overrideAccess:!0,showHiddenFields:!0});if(!n||n[this.deps.appField]!==this.appId)throw new m("Asset not found","NOT_FOUND",404);return await r.update({collection:this.mediaSlug,id:e,data:{deletedAt:null,deletedBy:null},user:a,locale:"all",overrideAccess:!0})}async deletePermanently(e){let r=await this.getPayload(),a=await this.getUser();if(!a)throw new m("User unauthorized","UNAUTHORIZED",401);let n=await r.findByID({collection:this.mediaSlug,id:e,overrideAccess:!0,showHiddenFields:!0});if(!n||n[this.deps.appField]!==this.appId)throw new m("Asset not found","NOT_FOUND",404);return await r.delete({collection:this.mediaSlug,id:e,user:a,overrideAccess:!0}),{success:!0}}};var DP=Z.z.object({search:Z.z.string().optional().default(""),page:Z.z.number().optional().default(1),limit:Z.z.number().optional().default(20)}),BP=Z.z.object({id:Z.z.string().min(1)}),NP=Z.z.object({name:Z.z.string(),file:Z.z.string(),folderId:Z.z.string().optional().nullable(),description:Z.z.record(Z.z.string(),Z.z.string()).optional(),optimize:Z.z.boolean().optional().default(!0)}),LP=Z.z.object({id:Z.z.string().min(1),file:Z.z.string().optional(),description:Z.z.record(Z.z.string(),Z.z.string()).optional()}),OP=Z.z.object({ids:Z.z.array(Z.z.string().min(1)).min(1,"At least one asset ID is required")}),fr=class extends P{constructor(r){super();this.deps=r}getAssets(){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET");let{appId:r,userId:a}=this.context;if(!a)throw new m("User ID is required","UNAUTHORIZED",401);return new tr(this.deps,r,a)}},Lc=class extends fr{getValidationSchema(){return DP}async execute(e){return await this.getAssets().list(e)}},Oc=class extends fr{getValidationSchema(){return BP}async execute(e){return await this.getAssets().getById(e.id)}},Fc=class extends fr{getValidationSchema(){return NP}async execute(e){return await this.getAssets().create(e)}},Uc=class extends fr{getValidationSchema(){return LP}async execute(e){return await this.getAssets().update(e)}},Gc=class extends fr{getValidationSchema(){return OP}async execute(e){return await this.getAssets().deleteMany(e.ids)}};function dy(t){return{GET_ASSETS:new Lc(t),GET_ASSET:new Oc(t),CREATE_ASSET:new Fc(t),UPDATE_ASSET:new Uc(t),DELETE_ASSET:new Gc(t)}}var Mc=require("zod");N();D();var FP=Mc.z.object({userId:Mc.z.string().min(1)}),$c=class extends P{constructor(r){super();this.deps=r}getValidationSchema(){return FP}async execute(r){if(!this.context)throw new m("Context not set","CONTEXT_NOT_SET",500);let a=await this.deps.getPayload(),n=null;try{n=await a.findByID({collection:this.deps.slugs.users,id:r.userId,overrideAccess:!0})}catch(l){n=null}if(!n)throw new m("User not found","NOT_FOUND",404);let i=typeof n.email=="string"?n.email:"",o=typeof n.name=="string"&&n.name.trim()?n.name:i;return{data:{id:String(n.id),name:o,email:i,avatar:typeof n.avatar=="string"?n.avatar:""}}}};function gy(t){return{GET_CHAI_USER:new $c(t)}}N();function uy(t){let e=r=>{let a=r.appId,n=r.userId||"";if(!n)throw new m("User ID is required","UNAUTHORIZED",401);return new tr(t,a,n)};return{key:"asset",label:"Asset",icon:"image",moveToTrash:async(r,a)=>{let n=e(a),i=await n.getById(r);return await n.softDelete(r),{entityType:"asset",entityId:r,name:i.name||"Unknown Asset",metadata:{name:i.name||"Unknown Asset",url:i.url,type:i.type},deletedAt:new Date().toISOString(),deletedBy:a.userId||"",app:a.appId}},restore:async(r,a)=>{await e(a).restore(r.entityId)},deletePermanently:async(r,a)=>(await e(a).deletePermanently(r.entityId),!0),hasRestoreConflict:async(r,a)=>!1}}var Qo=Symbol.for("chaibuilder.payload.deferred");function UP(t){var r,a,n,i,o,l,c,d,u;let{config:e}=t;return{getPayload:async()=>{let{getPayload:g}=await import("payload");return g({config:e})},getAppId:(r=t.getAppId)!=null?r:(async()=>{var g;try{let{getOptionalRequestState:h}=await Promise.resolve().then(()=>(W(),_p)),f=(g=h())==null?void 0:g.appId;if(f)return f}catch(h){}return de()}),adminUrl:(a=t.adminUrl)!=null?a:Ko,getMediaUrl:(n=t.getMediaUrl)!=null?n:Lt,richTextToHTML:(i=t.richTextToHTML)!=null?i:ia,appField:(o=t.appField)!=null?o:"app",slugs:{media:(c=(l=t.slugs)==null?void 0:l.media)!=null?c:"media",users:(u=(d=t.slugs)==null?void 0:d.users)!=null?u:"users"}}}var pn=null,Yo=null;function dn(){if(!pn)throw new Error("configureChaiPayload() must be called before using the payload adapters (pass payloadConfig to buildChaiBuilderConfig, or call configureChaiPayload).");return pn}function gn(){return Yo||(Yo=Dc(dn())),Yo}function my(){return pn!==null}function Xo(t){pn=UP(t),Yo=Dc(pn)}function hy(t,e){return my()?gn().payloadPartialType(t,e):{[Qo]:"partialType",collection:t,opts:e}}function Jo(t){return my()?gn().payloadGlobalProvider(t):{[Qo]:"globalProvider",opts:t}}function fy(){return gn()}function yy(t){let e=t;return(e==null?void 0:e[Qo])==="partialType"?gn().payloadPartialType(e.collection,e.opts):t}function by(t){let e=t;return(e==null?void 0:e[Qo])==="globalProvider"?gn().payloadGlobalProvider(e.opts):t}function Ty(t,e){return new tr(dn(),t,e)}function Zo(){return dy(dn())}function es(){return gy(dn())}function ts(){return uy(dn())}function GP(t){var e;return typeof t=="object"&&t!==null&&"collection"in t&&typeof((e=t.collection)==null?void 0:e.slug)=="string"}function Ay(t,e){let{payloadConfig:r,getAppId:a,adminUrl:n,getMediaUrl:i,richTextToHTML:o,slugs:l,appField:c,globalProvider:d,globalDataProvider:u,pageTypes:g=[],collections:h=[],trash:f=[],assetTrash:A=!0,builderActions:C,actions:w,includeUserActions:E=!0,includeAssetActions:S=!0,...R}=t;Xo({config:r,getAppId:a,adminUrl:n,getMediaUrl:i,richTextToHTML:o,slugs:l,appField:c});let k=fy(),x=g.map(je=>{if(GP(je)){let{collection:ye,partial:Ve,...ne}=je;return Ve?k.payloadPartialType(ye,ne):k.payloadPageType(ye,ne)}return yy(je)}),G=h.map(je=>k.payloadCollection(je)),j=u?by(u):d?Jo(d):void 0,ae=[...A?[ts()]:[],...f],ze={...E?es():{},...S?Zo():{}},L={...ze,...C},fe=w?{...ze,...w}:void 0;return Ru({...R,globalDataProvider:j,pageTypes:x,collections:G,trash:ae,builderActions:Object.keys(L).length>0?L:void 0,actions:fe},e)}0&&(module.exports={DEFAULT_ADMIN_ROUTE,appWhere,appendCacheBust,asChaiBuilderGlobalProvider,asChaiBuilderPartialType,buildChaiBuilderConfig,chaiBuilderAssetActions,chaiBuilderAssetTrashEntity,chaiBuilderAssets,chaiBuilderFields,chaiBuilderPlugin,chaiBuilderSchemaHook,chaiBuilderUserActions,configureChaiPayload,createAppScopedAccess,createAppScopedSingletonCreate,createChaiBuilderFields,createMenusCollection,createPayloadUserResolver,defaultAdminUrl,defaultGetAppId,defaultGetMediaUrl,getAdminRoute,hasSlugField,injectAppFilterOptions,mapPayloadMediaToDamAsset,menuItemsField,parseAdminRoute,registerAppIdResolver,resolveAppId,resolveName,revalidateCollectionItem,sanitizePayloadData,transformRichTextToHTML,validateMenuItems,withAppBaseFilter,withAppIdAccess,withAppScopedAccess});
|