@upstart.gg/sdk 0.0.133 → 0.0.135

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/dist/shared/ai/schemas.d.ts +1 -2
  2. package/dist/shared/ai/schemas.d.ts.map +1 -1
  3. package/dist/shared/ai/schemas.js +28 -1
  4. package/dist/shared/ai/schemas.js.map +1 -1
  5. package/dist/shared/ai/types.d.ts +15 -1
  6. package/dist/shared/ai/types.d.ts.map +1 -1
  7. package/dist/shared/ajv.js +6861 -1
  8. package/dist/shared/ajv.js.map +1 -1
  9. package/dist/shared/analytics/init.js +20 -1
  10. package/dist/shared/analytics/init.js.map +1 -1
  11. package/dist/shared/analytics/track.js +24 -1
  12. package/dist/shared/analytics/track.js.map +1 -1
  13. package/dist/shared/attributes.d.ts +97 -30
  14. package/dist/shared/attributes.d.ts.map +1 -1
  15. package/dist/shared/attributes.js +46 -1
  16. package/dist/shared/brick-manifest.d.ts +1 -1
  17. package/dist/shared/brick-manifest.js +26 -1
  18. package/dist/shared/bricks/manifests/accordion.manifest.d.ts +2 -2
  19. package/dist/shared/bricks/manifests/accordion.manifest.js +29 -1
  20. package/dist/shared/bricks/manifests/all-manifests.d.ts.map +1 -1
  21. package/dist/shared/bricks/manifests/all-manifests.js +59 -1
  22. package/dist/shared/bricks/manifests/box.manifest.d.ts +2 -2
  23. package/dist/shared/bricks/manifests/box.manifest.js +28 -1
  24. package/dist/shared/bricks/manifests/button.manifest.d.ts +2 -2
  25. package/dist/shared/bricks/manifests/button.manifest.js +28 -1
  26. package/dist/shared/bricks/manifests/card.manifest.d.ts +3 -3
  27. package/dist/shared/bricks/manifests/card.manifest.js +28 -1
  28. package/dist/shared/bricks/manifests/carousel.manifest.d.ts +2 -2
  29. package/dist/shared/bricks/manifests/carousel.manifest.js +28 -1
  30. package/dist/shared/bricks/manifests/footer.manifest.d.ts +4 -4
  31. package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
  32. package/dist/shared/bricks/manifests/footer.manifest.js +30 -1
  33. package/dist/shared/bricks/manifests/form.manifest.d.ts +3 -3
  34. package/dist/shared/bricks/manifests/form.manifest.js +29 -1
  35. package/dist/shared/bricks/manifests/hero.manifest.d.ts +2 -2
  36. package/dist/shared/bricks/manifests/hero.manifest.js +28 -1
  37. package/dist/shared/bricks/manifests/html.manifest.d.ts +2 -2
  38. package/dist/shared/bricks/manifests/html.manifest.js +28 -1
  39. package/dist/shared/bricks/manifests/icon.manifest.d.ts +2 -2
  40. package/dist/shared/bricks/manifests/icon.manifest.js +28 -1
  41. package/dist/shared/bricks/manifests/image.manifest.d.ts +2 -2
  42. package/dist/shared/bricks/manifests/image.manifest.js +28 -1
  43. package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +2 -2
  44. package/dist/shared/bricks/manifests/images-gallery.manifest.js +28 -1
  45. package/dist/shared/bricks/manifests/map.manifest.d.ts +2 -2
  46. package/dist/shared/bricks/manifests/map.manifest.js +31 -1
  47. package/dist/shared/bricks/manifests/navbar.manifest.d.ts +4 -4
  48. package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -1
  49. package/dist/shared/bricks/manifests/navbar.manifest.js +31 -1
  50. package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +2 -2
  51. package/dist/shared/bricks/manifests/sidebar.manifest.js +29 -1
  52. package/dist/shared/bricks/manifests/social-links.manifest.d.ts +2 -2
  53. package/dist/shared/bricks/manifests/social-links.manifest.js +28 -1
  54. package/dist/shared/bricks/manifests/spacer.manifest.d.ts +2 -2
  55. package/dist/shared/bricks/manifests/spacer.manifest.js +28 -1
  56. package/dist/shared/bricks/manifests/table.manifest.d.ts +91 -0
  57. package/dist/shared/bricks/manifests/table.manifest.d.ts.map +1 -0
  58. package/dist/shared/bricks/manifests/table.manifest.js +31 -0
  59. package/dist/shared/bricks/manifests/tabs.manifest.d.ts +90 -0
  60. package/dist/shared/bricks/manifests/tabs.manifest.d.ts.map +1 -0
  61. package/dist/shared/bricks/manifests/tabs.manifest.js +31 -0
  62. package/dist/shared/bricks/manifests/tabs.manifest.js.map +1 -0
  63. package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +2 -2
  64. package/dist/shared/bricks/manifests/testimonials.manifest.js +28 -1
  65. package/dist/shared/bricks/manifests/text.manifest.d.ts +2 -2
  66. package/dist/shared/bricks/manifests/text.manifest.js +28 -1
  67. package/dist/shared/bricks/manifests/timeline.manifest.d.ts +101 -0
  68. package/dist/shared/bricks/manifests/timeline.manifest.d.ts.map +1 -0
  69. package/dist/shared/bricks/manifests/timeline.manifest.js +31 -0
  70. package/dist/shared/bricks/manifests/timeline.manifest.js.map +1 -0
  71. package/dist/shared/bricks/manifests/video.manifest.d.ts +2 -2
  72. package/dist/shared/bricks/manifests/video.manifest.js +28 -1
  73. package/dist/shared/bricks/props/align.d.ts +2 -2
  74. package/dist/shared/bricks/props/align.js +19 -1
  75. package/dist/shared/bricks/props/background.d.ts +4 -4
  76. package/dist/shared/bricks/props/background.js +15 -1
  77. package/dist/shared/bricks/props/boolean.js +7 -1
  78. package/dist/shared/bricks/props/border.js +16 -1
  79. package/dist/shared/bricks/props/color-preset.d.ts.map +1 -1
  80. package/dist/shared/bricks/props/color-preset.js +13 -1
  81. package/dist/shared/bricks/props/color.js +14 -1
  82. package/dist/shared/bricks/props/common.d.ts +2 -2
  83. package/dist/shared/bricks/props/common.js +13 -1
  84. package/dist/shared/bricks/props/css-length.js +14 -1
  85. package/dist/shared/bricks/props/datarecord.js +7 -1
  86. package/dist/shared/bricks/props/datasource.d.ts +1 -1
  87. package/dist/shared/bricks/props/datasource.js +86 -1
  88. package/dist/shared/bricks/props/datasource.js.map +1 -1
  89. package/dist/shared/bricks/props/date.js +9 -1
  90. package/dist/shared/bricks/props/direction.js +11 -1
  91. package/dist/shared/bricks/props/dynamic.d.ts.map +1 -1
  92. package/dist/shared/bricks/props/dynamic.js +30 -1
  93. package/dist/shared/bricks/props/effects.js +17 -1
  94. package/dist/shared/bricks/props/file.js +15 -1
  95. package/dist/shared/bricks/props/file.js.map +1 -1
  96. package/dist/shared/bricks/props/geolocation.js +44 -1
  97. package/dist/shared/bricks/props/geolocation.js.map +1 -1
  98. package/dist/shared/bricks/props/helpers.d.ts +1 -1
  99. package/dist/shared/bricks/props/helpers.js +18 -1
  100. package/dist/shared/bricks/props/image.js +11 -1
  101. package/dist/shared/bricks/props/number.js +7 -1
  102. package/dist/shared/bricks/props/position.js +7 -1
  103. package/dist/shared/bricks/props/string.js +18 -1
  104. package/dist/shared/bricks/props/tags.js +10 -1
  105. package/dist/shared/bricks/props/text.js +19 -1
  106. package/dist/shared/bricks.d.ts +56 -44
  107. package/dist/shared/bricks.d.ts.map +1 -1
  108. package/dist/shared/bricks.js +79 -1
  109. package/dist/shared/chunk-2BPYOTKA.js +21 -0
  110. package/dist/shared/{chunk-WHTPGWUV.js.map → chunk-2BPYOTKA.js.map} +1 -1
  111. package/dist/shared/chunk-2HO4FHLM.js +456 -0
  112. package/dist/shared/{chunk-I3VL6SRH.js.map → chunk-2HO4FHLM.js.map} +1 -1
  113. package/dist/shared/chunk-2RK3CPYJ.js +74 -0
  114. package/dist/shared/{chunk-W33JMRRN.js.map → chunk-2RK3CPYJ.js.map} +1 -1
  115. package/dist/shared/chunk-3KLRW4I2.js +560 -0
  116. package/dist/shared/{chunk-B3EATRFX.js.map → chunk-3KLRW4I2.js.map} +1 -1
  117. package/dist/shared/chunk-3ZDN5BWN.js +18 -0
  118. package/dist/shared/{chunk-OIY3EPHO.js.map → chunk-3ZDN5BWN.js.map} +1 -1
  119. package/dist/shared/chunk-4WI23M7W.js +30 -0
  120. package/dist/shared/chunk-4WI23M7W.js.map +1 -0
  121. package/dist/shared/chunk-55C6MTX2.js +21 -0
  122. package/dist/shared/{chunk-KBHDY425.js.map → chunk-55C6MTX2.js.map} +1 -1
  123. package/dist/shared/chunk-6E42XWFH.js +103 -0
  124. package/dist/shared/{chunk-ZA3GAB4H.js.map → chunk-6E42XWFH.js.map} +1 -1
  125. package/dist/shared/chunk-6TVVKUWM.js +15 -0
  126. package/dist/shared/{chunk-4WDWJA3N.js.map → chunk-6TVVKUWM.js.map} +1 -1
  127. package/dist/shared/chunk-6WIMWLCJ.js +17 -0
  128. package/dist/shared/{chunk-KYY3PHP7.js.map → chunk-6WIMWLCJ.js.map} +1 -1
  129. package/dist/shared/chunk-7LAWWRU7.js +21 -0
  130. package/dist/shared/{chunk-IUXCWWGO.js.map → chunk-7LAWWRU7.js.map} +1 -1
  131. package/dist/shared/chunk-A2QPY54H.js +13 -0
  132. package/dist/shared/{chunk-KFM6KXSE.js.map → chunk-A2QPY54H.js.map} +1 -1
  133. package/dist/shared/chunk-BHC2A43S.js +67 -0
  134. package/dist/shared/{chunk-3YVJ2ELD.js.map → chunk-BHC2A43S.js.map} +1 -1
  135. package/dist/shared/chunk-BMWRR4DI.js +572 -0
  136. package/dist/shared/chunk-BMWRR4DI.js.map +1 -0
  137. package/dist/shared/chunk-BPBKHEQ5.js +39 -0
  138. package/dist/shared/{chunk-OHNYCXPX.js.map → chunk-BPBKHEQ5.js.map} +1 -1
  139. package/dist/shared/chunk-BW6EFRSF.js +794 -0
  140. package/dist/shared/chunk-BW6EFRSF.js.map +1 -0
  141. package/dist/shared/chunk-CKFRSHR2.js +105 -0
  142. package/dist/shared/{chunk-CFF6Q7O7.js.map → chunk-CKFRSHR2.js.map} +1 -1
  143. package/dist/shared/chunk-CSF2WQX2.js +60 -0
  144. package/dist/shared/{chunk-GLS7HPIZ.js.map → chunk-CSF2WQX2.js.map} +1 -1
  145. package/dist/shared/chunk-D4YQ6ABM.js +338 -0
  146. package/dist/shared/{chunk-PXI7AHWS.js.map → chunk-D4YQ6ABM.js.map} +1 -1
  147. package/dist/shared/chunk-DRTGM2UJ.js +129 -0
  148. package/dist/shared/{chunk-FLOMNC6J.js.map → chunk-DRTGM2UJ.js.map} +1 -1
  149. package/dist/shared/chunk-EQMU6NIU.js +1222 -0
  150. package/dist/shared/chunk-EQMU6NIU.js.map +1 -0
  151. package/dist/shared/chunk-EWSPTRDL.js +378 -0
  152. package/dist/shared/{chunk-QX6OGRRT.js.map → chunk-EWSPTRDL.js.map} +1 -1
  153. package/dist/shared/chunk-F22LDHEO.js +105 -0
  154. package/dist/shared/{chunk-5YRC3IT3.js.map → chunk-F22LDHEO.js.map} +1 -1
  155. package/dist/shared/chunk-FVU5PXRC.js +244 -0
  156. package/dist/shared/chunk-FVU5PXRC.js.map +1 -0
  157. package/dist/shared/chunk-GCQURRVB.js +837 -0
  158. package/dist/shared/{chunk-WYVJE6J5.js.map → chunk-GCQURRVB.js.map} +1 -1
  159. package/dist/shared/chunk-GPCI2N2A.js +395 -0
  160. package/dist/shared/{chunk-WBZW5LVH.js.map → chunk-GPCI2N2A.js.map} +1 -1
  161. package/dist/shared/chunk-GRMY35BU.js +722 -0
  162. package/dist/shared/{chunk-NJGXC7D6.js.map → chunk-GRMY35BU.js.map} +1 -1
  163. package/dist/shared/chunk-HPCCD6V5.js +17 -0
  164. package/dist/shared/{chunk-6I3ONVU6.js.map → chunk-HPCCD6V5.js.map} +1 -1
  165. package/dist/shared/chunk-JK2FWFJU.js +15 -0
  166. package/dist/shared/{chunk-JMN3HTZU.js.map → chunk-JK2FWFJU.js.map} +1 -1
  167. package/dist/shared/chunk-KNREHAPN.js +13 -0
  168. package/dist/shared/{chunk-KSEURRVZ.js.map → chunk-KNREHAPN.js.map} +1 -1
  169. package/dist/shared/chunk-KT7SSWMM.js +24 -0
  170. package/dist/shared/{chunk-KO5FPOWZ.js.map → chunk-KT7SSWMM.js.map} +1 -1
  171. package/dist/shared/chunk-LXAO3JA6.js +368 -0
  172. package/dist/shared/chunk-LXAO3JA6.js.map +1 -0
  173. package/dist/shared/chunk-MLZT7MRQ.js +538 -0
  174. package/dist/shared/chunk-MLZT7MRQ.js.map +1 -0
  175. package/dist/shared/chunk-NT3IW52F.js +260 -0
  176. package/dist/shared/chunk-NT3IW52F.js.map +1 -0
  177. package/dist/shared/chunk-NTLAKMMQ.js +94 -0
  178. package/dist/shared/{chunk-ZTZJHY4E.js.map → chunk-NTLAKMMQ.js.map} +1 -1
  179. package/dist/shared/chunk-O5PLB3YB.js +413 -0
  180. package/dist/shared/chunk-O5PLB3YB.js.map +1 -0
  181. package/dist/shared/chunk-O5PQISX4.js +51 -0
  182. package/dist/shared/{chunk-VEDQV5XO.js.map → chunk-O5PQISX4.js.map} +1 -1
  183. package/dist/shared/chunk-OJP4HMJT.js +22 -0
  184. package/dist/shared/{chunk-6HLU4UI2.js.map → chunk-OJP4HMJT.js.map} +1 -1
  185. package/dist/shared/chunk-OSJ6KGPX.js +16 -0
  186. package/dist/shared/{chunk-GPEMPZXK.js.map → chunk-OSJ6KGPX.js.map} +1 -1
  187. package/dist/shared/chunk-OXYXZHP2.js +48 -0
  188. package/dist/shared/{chunk-5O4Z3YQY.js.map → chunk-OXYXZHP2.js.map} +1 -1
  189. package/dist/shared/chunk-P3RH5URN.js +230 -0
  190. package/dist/shared/{chunk-R6ATC4TC.js.map → chunk-P3RH5URN.js.map} +1 -1
  191. package/dist/shared/chunk-Q4NPPLEU.js +34 -0
  192. package/dist/shared/{chunk-QWGUMKZC.js.map → chunk-Q4NPPLEU.js.map} +1 -1
  193. package/dist/shared/chunk-QL3T5HJQ.js +59 -0
  194. package/dist/shared/{chunk-E6XEI7IK.js.map → chunk-QL3T5HJQ.js.map} +1 -1
  195. package/dist/shared/chunk-QLQVDZIL.js +11 -0
  196. package/dist/shared/{chunk-KLD3P5XH.js.map → chunk-QLQVDZIL.js.map} +1 -1
  197. package/dist/shared/chunk-QQQ3FYPG.js +248 -0
  198. package/dist/shared/{chunk-SXHDQ64Z.js.map → chunk-QQQ3FYPG.js.map} +1 -1
  199. package/dist/shared/chunk-QSND5IWT.js +165 -0
  200. package/dist/shared/{chunk-ZQPXQCY2.js.map → chunk-QSND5IWT.js.map} +1 -1
  201. package/dist/shared/chunk-RV7AYVFV.js +75 -0
  202. package/dist/shared/{chunk-DHI3IBOD.js.map → chunk-RV7AYVFV.js.map} +1 -1
  203. package/dist/shared/chunk-SE6O65HC.js +44 -0
  204. package/dist/shared/{chunk-NM5MMPCF.js.map → chunk-SE6O65HC.js.map} +1 -1
  205. package/dist/shared/chunk-SHUGHJ7V.js +519 -0
  206. package/dist/shared/{chunk-IKC3FK7L.js.map → chunk-SHUGHJ7V.js.map} +1 -1
  207. package/dist/shared/chunk-TB3X4LRQ.js +56 -0
  208. package/dist/shared/{chunk-RJYZ5FAR.js.map → chunk-TB3X4LRQ.js.map} +1 -1
  209. package/dist/shared/chunk-TEO6TJOM.js +212 -0
  210. package/dist/shared/chunk-TEO6TJOM.js.map +1 -0
  211. package/dist/shared/chunk-TFGGYU6Y.js +394 -0
  212. package/dist/shared/{chunk-CZRCW5EN.js.map → chunk-TFGGYU6Y.js.map} +1 -1
  213. package/dist/shared/chunk-TKMWY2VN.js +18 -0
  214. package/dist/shared/{chunk-RDZK73KV.js.map → chunk-TKMWY2VN.js.map} +1 -1
  215. package/dist/shared/chunk-TNMNMYOB.js +69 -0
  216. package/dist/shared/{chunk-4BTB3MU2.js.map → chunk-TNMNMYOB.js.map} +1 -1
  217. package/dist/shared/chunk-U7TVEPKA.js +432 -0
  218. package/dist/shared/chunk-U7TVEPKA.js.map +1 -0
  219. package/dist/shared/chunk-UQF52PWK.js +70 -0
  220. package/dist/shared/{chunk-A3GF4PYW.js.map → chunk-UQF52PWK.js.map} +1 -1
  221. package/dist/shared/chunk-V3UA3LRK.js +253 -0
  222. package/dist/shared/{chunk-G5CJU6RD.js.map → chunk-V3UA3LRK.js.map} +1 -1
  223. package/dist/shared/chunk-W6MRYRGJ.js +100 -0
  224. package/dist/shared/{chunk-CCI4C3TM.js.map → chunk-W6MRYRGJ.js.map} +1 -1
  225. package/dist/shared/chunk-WGDUJSSS.js +462 -0
  226. package/dist/shared/chunk-WGDUJSSS.js.map +1 -0
  227. package/dist/shared/chunk-WKN566LN.js +29 -0
  228. package/dist/shared/{chunk-Q4H4QEMB.js.map → chunk-WKN566LN.js.map} +1 -1
  229. package/dist/shared/chunk-X6N463D4.js +222 -0
  230. package/dist/shared/{chunk-IKHZD2JH.js.map → chunk-X6N463D4.js.map} +1 -1
  231. package/dist/shared/chunk-X75YV73Q.js +178 -0
  232. package/dist/shared/{chunk-PLSV746R.js.map → chunk-X75YV73Q.js.map} +1 -1
  233. package/dist/shared/chunk-XCWMZVF5.js +89 -0
  234. package/dist/shared/{chunk-ZFCUSWMT.js.map → chunk-XCWMZVF5.js.map} +1 -1
  235. package/dist/shared/chunk-XCZVD5H6.js +13 -0
  236. package/dist/shared/{chunk-HAGKVQOW.js.map → chunk-XCZVD5H6.js.map} +1 -1
  237. package/dist/shared/chunk-XZ6WJZHN.js +10 -0
  238. package/dist/shared/{chunk-DCH4ZKWT.js.map → chunk-XZ6WJZHN.js.map} +1 -1
  239. package/dist/shared/chunk-Y74LZNND.js +30 -0
  240. package/dist/shared/{chunk-GACHLACT.js.map → chunk-Y74LZNND.js.map} +1 -1
  241. package/dist/shared/chunk-Z2NTDFB4.js +505 -0
  242. package/dist/shared/{chunk-SQ5T4AT5.js.map → chunk-Z2NTDFB4.js.map} +1 -1
  243. package/dist/shared/chunk-Z35I5JM5.js +131 -0
  244. package/dist/shared/{chunk-PSTFJ5IJ.js.map → chunk-Z35I5JM5.js.map} +1 -1
  245. package/dist/shared/chunk-ZEFOWKYP.js +44 -0
  246. package/dist/shared/{chunk-DQ7PRWTG.js.map → chunk-ZEFOWKYP.js.map} +1 -1
  247. package/dist/shared/chunk-ZGQ3AQBG.js +33 -0
  248. package/dist/shared/chunk-ZGQ3AQBG.js.map +1 -0
  249. package/dist/shared/chunk-ZLYIRH2B.js +68 -0
  250. package/dist/shared/{chunk-SWLUQVK7.js.map → chunk-ZLYIRH2B.js.map} +1 -1
  251. package/dist/shared/datarecords/external/airtable/handler.js +377 -1
  252. package/dist/shared/datarecords/external/airtable/handler.js.map +1 -1
  253. package/dist/shared/datarecords/external/airtable/oauth/config.js +15 -1
  254. package/dist/shared/datarecords/external/airtable/oauth/config.js.map +1 -1
  255. package/dist/shared/datarecords/external/airtable/types.js +11 -1
  256. package/dist/shared/datarecords/external/generic-webhook/handler.js +14 -1
  257. package/dist/shared/datarecords/external/generic-webhook/handler.js.map +1 -1
  258. package/dist/shared/datarecords/external/generic-webhook/options.js +16 -1
  259. package/dist/shared/datarecords/external/generic-webhook/options.js.map +1 -1
  260. package/dist/shared/datarecords/external/google/oauth/config.js +35 -1
  261. package/dist/shared/datarecords/external/google/oauth/config.js.map +1 -1
  262. package/dist/shared/datarecords/external/google/sheets/client.js +7 -1
  263. package/dist/shared/datarecords/external/google/sheets/handler.js +184 -5
  264. package/dist/shared/datarecords/external/google/sheets/handler.js.map +1 -1
  265. package/dist/shared/datarecords/external/google/sheets/types.js +7 -1
  266. package/dist/shared/datarecords/external/notion/handler.js +397 -1
  267. package/dist/shared/datarecords/external/notion/handler.js.map +1 -1
  268. package/dist/shared/datarecords/external/notion/oauth/config.js +11 -1
  269. package/dist/shared/datarecords/external/notion/oauth/config.js.map +1 -1
  270. package/dist/shared/datarecords/external/notion/types.js +7 -1
  271. package/dist/shared/datarecords/types.d.ts +3 -3
  272. package/dist/shared/datarecords/types.js +16 -1
  273. package/dist/shared/datarecords.js +9 -1
  274. package/dist/shared/datarecords.js.map +1 -1
  275. package/dist/shared/datasources/external/facebook/posts/fetcher.js +49 -1
  276. package/dist/shared/datasources/external/facebook/posts/fetcher.js.map +1 -1
  277. package/dist/shared/datasources/external/facebook/posts/schema.js +36 -1
  278. package/dist/shared/datasources/external/facebook/posts/schema.js.map +1 -1
  279. package/dist/shared/datasources/external/http-json/fetcher.js +29 -1
  280. package/dist/shared/datasources/external/http-json/fetcher.js.map +1 -1
  281. package/dist/shared/datasources/external/http-json/options.js +11 -1
  282. package/dist/shared/datasources/external/http-json/options.js.map +1 -1
  283. package/dist/shared/datasources/external/http-json/schema.js +10 -1
  284. package/dist/shared/datasources/external/http-json/schema.js.map +1 -1
  285. package/dist/shared/datasources/external/instagram/feed/fetcher.js +29 -1
  286. package/dist/shared/datasources/external/instagram/feed/fetcher.js.map +1 -1
  287. package/dist/shared/datasources/external/instagram/feed/schema.js +26 -1
  288. package/dist/shared/datasources/external/instagram/feed/schema.js.map +1 -1
  289. package/dist/shared/datasources/external/mastodon/account/fetcher.js +7 -1
  290. package/dist/shared/datasources/external/mastodon/account/schema.js +7 -1
  291. package/dist/shared/datasources/external/mastodon/options.js +10 -1
  292. package/dist/shared/datasources/external/mastodon/options.js.map +1 -1
  293. package/dist/shared/datasources/external/mastodon/status/fetcher.js +31 -1
  294. package/dist/shared/datasources/external/mastodon/status/fetcher.js.map +1 -1
  295. package/dist/shared/datasources/external/mastodon/status/sample.array.js +61 -1
  296. package/dist/shared/datasources/external/mastodon/status/sample.array.js.map +1 -1
  297. package/dist/shared/datasources/external/mastodon/status/sample.single.js +59 -1
  298. package/dist/shared/datasources/external/mastodon/status/sample.single.js.map +1 -1
  299. package/dist/shared/datasources/external/mastodon/status/schema.js +125 -1
  300. package/dist/shared/datasources/external/mastodon/status/schema.js.map +1 -1
  301. package/dist/shared/datasources/external/meta/oauth/config.js +17 -1
  302. package/dist/shared/datasources/external/meta/oauth/config.js.map +1 -1
  303. package/dist/shared/datasources/external/meta/options.js +10 -1
  304. package/dist/shared/datasources/external/meta/options.js.map +1 -1
  305. package/dist/shared/datasources/external/rss/fetcher.js +26 -1
  306. package/dist/shared/datasources/external/rss/fetcher.js.map +1 -1
  307. package/dist/shared/datasources/external/rss/options.js +10 -1
  308. package/dist/shared/datasources/external/rss/options.js.map +1 -1
  309. package/dist/shared/datasources/external/rss/schema.js +7 -1
  310. package/dist/shared/datasources/external/threads/media/fetcher.js +47 -1
  311. package/dist/shared/datasources/external/threads/media/fetcher.js.map +1 -1
  312. package/dist/shared/datasources/external/threads/media/schema.js +40 -1
  313. package/dist/shared/datasources/external/threads/media/schema.js.map +1 -1
  314. package/dist/shared/datasources/external/tiktok/oauth/config.js +18 -1
  315. package/dist/shared/datasources/external/tiktok/oauth/config.js.map +1 -1
  316. package/dist/shared/datasources/external/tiktok/video/fetcher.js +34 -1
  317. package/dist/shared/datasources/external/tiktok/video/fetcher.js.map +1 -1
  318. package/dist/shared/datasources/external/tiktok/video/options.js +11 -1
  319. package/dist/shared/datasources/external/tiktok/video/options.js.map +1 -1
  320. package/dist/shared/datasources/external/tiktok/video/schema.js +30 -1
  321. package/dist/shared/datasources/external/tiktok/video/schema.js.map +1 -1
  322. package/dist/shared/datasources/external/youtube/list/fetcher.js +32 -1
  323. package/dist/shared/datasources/external/youtube/list/fetcher.js.map +1 -1
  324. package/dist/shared/datasources/external/youtube/list/options.js +14 -1
  325. package/dist/shared/datasources/external/youtube/list/options.js.map +1 -1
  326. package/dist/shared/datasources/external/youtube/list/schema.js +7 -1
  327. package/dist/shared/datasources/external/youtube/oauth/config.js +18 -1
  328. package/dist/shared/datasources/external/youtube/oauth/config.js.map +1 -1
  329. package/dist/shared/datasources/internal/blog/schema.js +72 -1
  330. package/dist/shared/datasources/internal/blog/schema.js.map +1 -1
  331. package/dist/shared/datasources/internal/changelog/schema.js +51 -1
  332. package/dist/shared/datasources/internal/changelog/schema.js.map +1 -1
  333. package/dist/shared/datasources/internal/contact-info/schema.js +25 -1
  334. package/dist/shared/datasources/internal/contact-info/schema.js.map +1 -1
  335. package/dist/shared/datasources/internal/cv/schema.js +222 -1
  336. package/dist/shared/datasources/internal/cv/schema.js.map +1 -1
  337. package/dist/shared/datasources/internal/faq/schema.js +30 -1
  338. package/dist/shared/datasources/internal/faq/schema.js.map +1 -1
  339. package/dist/shared/datasources/internal/job-board/schema.js +224 -1
  340. package/dist/shared/datasources/internal/job-board/schema.js.map +1 -1
  341. package/dist/shared/datasources/internal/links/schema.js +7 -1
  342. package/dist/shared/datasources/internal/recipes/schema.js +45 -1
  343. package/dist/shared/datasources/internal/recipes/schema.js.map +1 -1
  344. package/dist/shared/datasources/internal/restaurant/schema.js +226 -1
  345. package/dist/shared/datasources/internal/restaurant/schema.js.map +1 -1
  346. package/dist/shared/datasources/samples.js +69 -1
  347. package/dist/shared/datasources/samples.js.map +1 -1
  348. package/dist/shared/datasources/schemas.js +34 -1
  349. package/dist/shared/datasources/schemas.js.map +1 -1
  350. package/dist/shared/datasources/types.d.ts +1 -1
  351. package/dist/shared/datasources/types.d.ts.map +1 -1
  352. package/dist/shared/datasources/types.js +32 -1
  353. package/dist/shared/datasources/utils.js +11 -1
  354. package/dist/shared/datasources.js +51 -1
  355. package/dist/shared/datasources.js.map +1 -1
  356. package/dist/shared/errors.js +7 -1
  357. package/dist/shared/images.d.ts +4 -4
  358. package/dist/shared/images.d.ts.map +1 -1
  359. package/dist/shared/images.js +44 -1
  360. package/dist/shared/images.js.map +1 -1
  361. package/dist/shared/index.js +9 -1
  362. package/dist/shared/index.js.map +1 -1
  363. package/dist/shared/layout-constants.js +14 -1
  364. package/dist/shared/layout-constants.js.map +1 -1
  365. package/dist/shared/manifest.js +52 -1
  366. package/dist/shared/manifest.js.map +1 -1
  367. package/dist/shared/oauth.js +8 -1
  368. package/dist/shared/page.d.ts +12 -126
  369. package/dist/shared/page.d.ts.map +1 -1
  370. package/dist/shared/page.js +58 -1
  371. package/dist/shared/prompt.js +7 -1
  372. package/dist/shared/responsive.js +10 -1
  373. package/dist/shared/responsive.js.map +1 -1
  374. package/dist/shared/schema-registry.d.ts +5 -0
  375. package/dist/shared/schema-registry.d.ts.map +1 -0
  376. package/dist/shared/schema-registry.js +119 -0
  377. package/dist/shared/schema-registry.js.map +1 -0
  378. package/dist/shared/site.d.ts +36 -33
  379. package/dist/shared/site.d.ts.map +1 -1
  380. package/dist/shared/site.js +127 -1
  381. package/dist/shared/site.js.map +1 -1
  382. package/dist/shared/sitemap.d.ts +17 -17
  383. package/dist/shared/sitemap.d.ts.map +1 -1
  384. package/dist/shared/sitemap.js +69 -1
  385. package/dist/shared/social-icons.js +312 -1
  386. package/dist/shared/social-icons.js.map +1 -1
  387. package/dist/shared/tests/schema-registry.test.d.ts +2 -0
  388. package/dist/shared/tests/schema-registry.test.d.ts.map +1 -0
  389. package/dist/shared/theme.d.ts +1 -1
  390. package/dist/shared/theme.d.ts.map +1 -1
  391. package/dist/shared/theme.js +35 -1
  392. package/dist/shared/themes/color-system.d.ts +0 -1
  393. package/dist/shared/themes/color-system.d.ts.map +1 -1
  394. package/dist/shared/themes/color-system.js +103 -1
  395. package/dist/shared/themes/color-system.js.map +1 -1
  396. package/dist/shared/utils/canvas-data-uri.js +7 -1
  397. package/dist/shared/utils/canvas-data-uri.js.map +1 -1
  398. package/dist/shared/utils/invariant.js +7 -1
  399. package/dist/shared/utils/json-date.js +7 -1
  400. package/dist/shared/utils/llm.d.ts +2 -3
  401. package/dist/shared/utils/llm.d.ts.map +1 -1
  402. package/dist/shared/utils/llm.js +24 -1
  403. package/dist/shared/utils/merge.js +7 -1
  404. package/dist/shared/utils/object-hash.js +13 -1
  405. package/dist/shared/utils/object-hash.js.map +1 -1
  406. package/dist/shared/utils/schema-registry.d.ts +5 -0
  407. package/dist/shared/utils/schema-registry.d.ts.map +1 -0
  408. package/dist/shared/utils/schema-registry.js +29 -0
  409. package/dist/shared/utils/schema-registry.js.map +1 -0
  410. package/dist/shared/utils/schema.d.ts +2 -1
  411. package/dist/shared/utils/schema.d.ts.map +1 -1
  412. package/dist/shared/utils/schema.js +31 -1
  413. package/dist/shared/utils/string-enum.js +7 -1
  414. package/dist/shared/utils/tests/schema-registry.test.d.ts +2 -0
  415. package/dist/shared/utils/tests/schema-registry.test.d.ts.map +1 -0
  416. package/dist/shared/utils/try-catch.js +13 -1
  417. package/dist/shared/utils/try-catch.js.map +1 -1
  418. package/dist/shared/utils/typed-ref.js +7 -1
  419. package/package.json +12 -13
  420. package/src/shared/ai/schemas.ts +4 -8
  421. package/src/shared/ai/types.ts +9 -1
  422. package/src/shared/attributes.ts +27 -25
  423. package/src/shared/bricks/manifests/all-manifests.ts +15 -0
  424. package/src/shared/bricks/manifests/footer.manifest.ts +36 -27
  425. package/src/shared/bricks/manifests/navbar.manifest.ts +1 -3
  426. package/src/shared/bricks/manifests/table.manifest.ts +443 -0
  427. package/src/shared/bricks/manifests/tabs.manifest.ts +576 -0
  428. package/src/shared/bricks/manifests/timeline.manifest.ts +441 -0
  429. package/src/shared/bricks/props/color-preset.ts +3 -1
  430. package/src/shared/bricks/props/dynamic.ts +0 -1
  431. package/src/shared/bricks.ts +54 -45
  432. package/src/shared/datasources/types.ts +1 -5
  433. package/src/shared/images.ts +10 -8
  434. package/src/shared/page.ts +0 -4
  435. package/src/shared/schema-registry.ts +82 -0
  436. package/src/shared/sitemap.ts +12 -16
  437. package/src/shared/tests/schema-registry.test.ts +14 -0
  438. package/src/shared/theme.ts +1 -4
  439. package/src/shared/themes/color-system.ts +0 -1
  440. package/src/shared/utils/llm.ts +13 -12
  441. package/src/shared/utils/schema-registry.ts +82 -0
  442. package/src/shared/utils/schema.ts +18 -3
  443. package/src/shared/utils/tests/schema-registry.test.ts +13 -0
  444. package/src/shared/utils/tests/schema.test.ts +82 -55
  445. package/dist/shared/bricks/props/enum.d.ts +0 -13
  446. package/dist/shared/bricks/props/enum.d.ts.map +0 -1
  447. package/dist/shared/bricks/props/enum.js +0 -4
  448. package/dist/shared/chunk-3YVJ2ELD.js +0 -4
  449. package/dist/shared/chunk-4BTB3MU2.js +0 -4
  450. package/dist/shared/chunk-4WDWJA3N.js +0 -4
  451. package/dist/shared/chunk-5O4Z3YQY.js +0 -4
  452. package/dist/shared/chunk-5YRC3IT3.js +0 -4
  453. package/dist/shared/chunk-6HLU4UI2.js +0 -4
  454. package/dist/shared/chunk-6I3ONVU6.js +0 -4
  455. package/dist/shared/chunk-7A2JNQX3.js +0 -4
  456. package/dist/shared/chunk-7A2JNQX3.js.map +0 -1
  457. package/dist/shared/chunk-A3GF4PYW.js +0 -4
  458. package/dist/shared/chunk-A3K4NUVP.js +0 -4
  459. package/dist/shared/chunk-A3K4NUVP.js.map +0 -1
  460. package/dist/shared/chunk-AFVJZPLS.js +0 -4
  461. package/dist/shared/chunk-AFVJZPLS.js.map +0 -1
  462. package/dist/shared/chunk-AI4GHU7R.js +0 -4
  463. package/dist/shared/chunk-AI4GHU7R.js.map +0 -1
  464. package/dist/shared/chunk-B3EATRFX.js +0 -4
  465. package/dist/shared/chunk-CCI4C3TM.js +0 -4
  466. package/dist/shared/chunk-CFF6Q7O7.js +0 -7
  467. package/dist/shared/chunk-CZRCW5EN.js +0 -4
  468. package/dist/shared/chunk-DCH4ZKWT.js +0 -4
  469. package/dist/shared/chunk-DHI3IBOD.js +0 -4
  470. package/dist/shared/chunk-DQ7PRWTG.js +0 -4
  471. package/dist/shared/chunk-E6XEI7IK.js +0 -4
  472. package/dist/shared/chunk-FLOMNC6J.js +0 -4
  473. package/dist/shared/chunk-G5CJU6RD.js +0 -7
  474. package/dist/shared/chunk-GACHLACT.js +0 -4
  475. package/dist/shared/chunk-GLS7HPIZ.js +0 -4
  476. package/dist/shared/chunk-GOMXZC4B.js +0 -35
  477. package/dist/shared/chunk-GOMXZC4B.js.map +0 -1
  478. package/dist/shared/chunk-GPEMPZXK.js +0 -4
  479. package/dist/shared/chunk-HAGKVQOW.js +0 -4
  480. package/dist/shared/chunk-I3VL6SRH.js +0 -9
  481. package/dist/shared/chunk-IKC3FK7L.js +0 -4
  482. package/dist/shared/chunk-IKHZD2JH.js +0 -4
  483. package/dist/shared/chunk-IUXCWWGO.js +0 -4
  484. package/dist/shared/chunk-JMN3HTZU.js +0 -4
  485. package/dist/shared/chunk-KBHDY425.js +0 -4
  486. package/dist/shared/chunk-KFM6KXSE.js +0 -4
  487. package/dist/shared/chunk-KLD3P5XH.js +0 -4
  488. package/dist/shared/chunk-KO5FPOWZ.js +0 -4
  489. package/dist/shared/chunk-KSEURRVZ.js +0 -4
  490. package/dist/shared/chunk-KYY3PHP7.js +0 -4
  491. package/dist/shared/chunk-NJGXC7D6.js +0 -4
  492. package/dist/shared/chunk-NM5MMPCF.js +0 -4
  493. package/dist/shared/chunk-OGBMYMZD.js +0 -4
  494. package/dist/shared/chunk-OGBMYMZD.js.map +0 -1
  495. package/dist/shared/chunk-OHNYCXPX.js +0 -4
  496. package/dist/shared/chunk-OIY3EPHO.js +0 -4
  497. package/dist/shared/chunk-PIG623TZ.js +0 -4
  498. package/dist/shared/chunk-PIG623TZ.js.map +0 -1
  499. package/dist/shared/chunk-PLSV746R.js +0 -4
  500. package/dist/shared/chunk-PSCN3VVA.js +0 -4
  501. package/dist/shared/chunk-PSCN3VVA.js.map +0 -1
  502. package/dist/shared/chunk-PSTFJ5IJ.js +0 -4
  503. package/dist/shared/chunk-PXI7AHWS.js +0 -4
  504. package/dist/shared/chunk-Q4H4QEMB.js +0 -4
  505. package/dist/shared/chunk-QGYZ7CG5.js +0 -4
  506. package/dist/shared/chunk-QGYZ7CG5.js.map +0 -1
  507. package/dist/shared/chunk-QWGUMKZC.js +0 -4
  508. package/dist/shared/chunk-QX6OGRRT.js +0 -5
  509. package/dist/shared/chunk-R6ATC4TC.js +0 -4
  510. package/dist/shared/chunk-RDZK73KV.js +0 -4
  511. package/dist/shared/chunk-RJYZ5FAR.js +0 -4
  512. package/dist/shared/chunk-SQ5T4AT5.js +0 -6
  513. package/dist/shared/chunk-SWLUQVK7.js +0 -4
  514. package/dist/shared/chunk-SXHDQ64Z.js +0 -5
  515. package/dist/shared/chunk-SY6DZLTC.js +0 -4
  516. package/dist/shared/chunk-SY6DZLTC.js.map +0 -1
  517. package/dist/shared/chunk-VEDQV5XO.js +0 -4
  518. package/dist/shared/chunk-W33JMRRN.js +0 -4
  519. package/dist/shared/chunk-WBZW5LVH.js +0 -4
  520. package/dist/shared/chunk-WHTPGWUV.js +0 -4
  521. package/dist/shared/chunk-WYVJE6J5.js +0 -4
  522. package/dist/shared/chunk-ZA3GAB4H.js +0 -9
  523. package/dist/shared/chunk-ZFCUSWMT.js +0 -4
  524. package/dist/shared/chunk-ZQPXQCY2.js +0 -4
  525. package/dist/shared/chunk-ZTZJHY4E.js +0 -4
  526. package/src/shared/bricks/props/enum.ts +0 -38
  527. /package/dist/shared/bricks/{props/enum.js.map → manifests/table.manifest.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/shared/bricks.ts"],"sourcesContent":["import { Type, type Static, type TObject } from \"@sinclair/typebox\";\nimport { customAlphabet } from \"nanoid\";\nimport { brickTypes, defaultProps } from \"./bricks/manifests/all-manifests\";\nimport { cssLengthRef } from \"./bricks/props/css-length\";\nimport { enumProp } from \"./bricks/props/enum\";\nimport { colorPresetRef } from \"./bricks/props/color-preset\";\nimport { mergeIgnoringArrays } from \"./utils/merge\";\nimport { getSchemaDefaults } from \"./utils/schema\";\nimport { StringEnum } from \"./utils/string-enum\";\nimport { alignItemsRef, justifyContentRef } from \"./bricks/props/align\";\nimport type { CommonBrickProps } from \"./bricks/props/common\";\nimport { directionRef } from \"./bricks/props/direction\";\nimport type { PageAttributes, SiteAttributes } from \"./attributes\";\nimport { toLLMSchema } from \"./utils/llm\";\nimport { backgroundRef } from \"./bricks/props/background\";\n\n/**\n * Generates a unique identifier for bricks.\n */\nexport const generateId = customAlphabet(\"azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN\", 7);\n\nconst brickAbsolutePositionSchema = Type.Object({\n left: Type.Optional(\n Type.String({\n title: \"top\",\n description: \"The left position in css unit.\",\n }),\n ),\n top: Type.Optional(\n Type.String({\n title: \"top\",\n description: \"The top position in css unit.\",\n }),\n ),\n right: Type.Optional(\n Type.String({\n title: \"right\",\n description: \"The right position in css unit.\",\n }),\n ),\n bottom: Type.Optional(\n Type.String({\n title: \"bottom\",\n description: \"The bottom position in css unit.\",\n }),\n ),\n inset: Type.Optional(\n Type.String({\n title: \"inset\",\n description: \"The inset position in css unit.\",\n }),\n ),\n translateX: Type.Optional(\n Type.String({\n title: \"translateX\",\n description: \"The translateX position in css unit.\",\n }),\n ),\n translateY: Type.Optional(\n Type.String({\n title: \"translateY\",\n description: \"The translateY position in css unit.\",\n }),\n ),\n rotate: Type.Optional(\n Type.String({\n title: \"rotate\",\n description: \"The rotate position in css unit.\",\n }),\n ),\n});\n\nexport type BrickAbsolutePosition = Static<typeof brickAbsolutePositionSchema>;\n\nexport const brickTypeSchema = StringEnum(Object.keys(defaultProps), {\n title: \"Brick type\",\n});\n\nexport const brickSchema = Type.Object(\n {\n id: Type.String({\n title: \"ID\",\n description: \"A unique identifier for the brick.\",\n }),\n type: brickTypeSchema,\n props: Type.Any({\n title: \"Props\",\n description: \"The static props of the brick. The available props depends on the brick type.\",\n }),\n mobileProps: Type.Optional(\n Type.Any({\n title: \"Props\",\n description: \"The overriden props for mobile, merged with desktop props.\",\n }),\n ),\n },\n { additionalProperties: true },\n);\n\nexport function makeFullBrickSchemaForLLM(type: string, props: TObject) {\n return toLLMSchema(\n Type.Object(\n {\n id: Type.String({\n title: \"ID\",\n description: \"A unique identifier for the brick.\",\n }),\n type: Type.Literal(type),\n props,\n mobileProps: Type.Optional(Type.Partial(props)),\n },\n { additionalProperties: false },\n ),\n );\n}\n\nexport type Brick = Omit<Static<typeof brickSchema>, \"props\" | \"mobileProps\"> & {\n props: CommonBrickProps & Record<string, unknown>;\n mobileProps?: CommonBrickProps & Record<string, unknown>;\n};\n\nexport const sectionProps = Type.Object(\n {\n colorPreset: Type.Optional(\n colorPresetRef({\n title: \"Color\",\n }),\n ),\n backgroundImage: Type.Optional(\n backgroundRef({\n title: \"Background\",\n description:\n \"The background image of the section. Prefer to set background images on sections rather than on individual bricks.\",\n }),\n ),\n direction: directionRef({\n default: \"flex-row\",\n title: \"Direction\",\n description: \"The direction of the section. Only apply to desktop. On mobile, it is always vertical.\",\n \"ui:responsive\": \"desktop\",\n }),\n minHeight: Type.Optional(\n cssLengthRef({\n title: \"Min height\",\n default: \"fit-content\",\n description: \"The min height of the section\",\n \"ui:field\": \"hidden\",\n }),\n ),\n variant: Type.Optional(\n StringEnum([\"navbar\", \"footer\", \"sidebar\"], {\n title: \"Custom section variant\",\n description: \"Used for custom styling and layout.\",\n enumNames: [\"Navbar\", \"Footer\", \"Sidebar\"],\n \"ui:field\": \"hidden\",\n \"ai:hidden\": true,\n }),\n ),\n maxWidth: Type.Optional(\n enumProp(\"Max width\", \"max-w-full\", {\n options: [\n {\n value: \"max-w-screen-lg\",\n title: \"M\",\n description: \"Common for text-heavy content/blog posts\",\n },\n {\n value: \"max-w-screen-xl\",\n title: \"L\",\n description: \"Usefull or some landing pages\",\n },\n {\n value: \"max-w-screen-2xl\",\n title: \"XL\",\n description: \"Common width\",\n },\n {\n value: \"max-w-full\",\n title: \"Full\",\n description: \"Takes the entire space\",\n },\n ],\n description: \"The maximum width of the section. Desktop only\",\n \"ai:instructions\":\n \"Choose the most appropriate max width for the section. You will likely use the same max width for all sections in a page.\",\n displayAs: \"button-group\",\n \"ui:responsive\": \"desktop\",\n }),\n ),\n justifyContent: Type.Optional(\n justifyContentRef({\n default: \"justify-center\",\n }),\n ),\n alignItems: Type.Optional(\n alignItemsRef({\n default: \"items-center\",\n }),\n ),\n padding: Type.Optional(\n cssLengthRef({\n default: \"2rem\",\n description: \"Padding inside the section.\",\n title: \"Padding\",\n \"ui:responsive\": true,\n \"ui:placeholder\": \"Not specified\",\n \"ui:styleId\": \"styles:padding\",\n }),\n ),\n gap: Type.Optional(\n cssLengthRef({\n title: \"Gap\",\n description: \"The gap between the bricks in the section.\",\n default: \"20px\",\n \"ui:styleId\": \"styles:gap\",\n }),\n ),\n wrap: Type.Optional(\n Type.Boolean({\n title: \"Wrap\",\n description: \"Wrap bricks if they overflow the section.\",\n default: true,\n \"ui:styleId\": \"styles:wrap\",\n }),\n ),\n lastTouched: Type.Optional(\n Type.Number({\n description: \"Do not use this field. It is used internally by the editor.\",\n \"ui:field\": \"hidden\",\n \"ai:hidden\": true,\n }),\n ),\n },\n {\n additionalProperties: false,\n },\n);\n\nexport const sectionSchema = Type.Object(\n {\n id: Type.String({\n description: \"The unique ID of the section. Use a human readable url-safe slug\",\n examples: [\"content-section\", \"contact-section\"],\n }),\n label: Type.Optional(\n Type.String({\n description: \"The label of the section. Used for editor purposes only.\",\n examples: [\"Content\", \"Contact\"],\n }),\n ),\n order: Type.Number({\n description: \"Determines section order in the page (lower numbers appear first). 0-based\",\n }),\n props: sectionProps,\n mobileProps: Type.Optional(Type.Partial(sectionProps, { additionalProperties: false })),\n bricks: Type.Array(brickSchema),\n },\n {\n description: \"Sections are direct children of the page that are stacked vertically.\",\n },\n);\n\nexport const sectionSchemaNoBricks = Type.Omit(sectionSchema, [\"bricks\"]);\n\nexport function getSectionSchemaNoBrickForLLM() {\n return toLLMSchema(sectionSchemaNoBricks);\n}\n\nexport function getSectionSchemaForLLM() {\n return toLLMSchema(sectionSchema);\n}\n\nconst sectionDefaultprops = getSchemaDefaults(sectionSchema.properties.props, \"desktop\") as Section[\"props\"];\nconst sectionMobileDefaultprops = getSchemaDefaults(\n sectionSchema.properties.mobileProps,\n \"mobile\",\n) as Section[\"mobileProps\"];\n\nexport type Section = Static<typeof sectionSchema>;\n\nexport function processSections(\n sections: Section[],\n siteAttributes: SiteAttributes,\n pageAttributes: PageAttributes,\n): Section[] {\n const processSection = (section: Section) => {\n return {\n ...section,\n props: mergeIgnoringArrays({} as Section[\"props\"], sectionDefaultprops, section.props),\n mobileProps: mergeIgnoringArrays({}, sectionMobileDefaultprops, section.mobileProps || {}),\n bricks: section.bricks.map(processBrick).filter(Boolean) as Brick[],\n } as const;\n };\n\n const finalSections = sections.map(processSection);\n\n if (siteAttributes.navbar && !pageAttributes.noNavbar) {\n finalSections.unshift(\n processSection({\n order: -1,\n id: \"navbar-section\",\n label: \"Navbar section\",\n props: {\n variant: \"navbar\",\n direction: \"flex-row\",\n },\n mobileProps: {},\n bricks: [\n {\n id: \"navbar\",\n type: \"navbar\",\n props: siteAttributes.navbar,\n },\n ],\n }),\n );\n }\n if (siteAttributes.footer && !pageAttributes.noFooter) {\n finalSections.push(\n processSection({\n order: 1000,\n id: \"footer-section\",\n label: \"Footer section\",\n props: {\n variant: \"footer\",\n direction: \"flex-row\",\n },\n mobileProps: {},\n bricks: [\n {\n id: \"footer\",\n type: \"footer\",\n props: siteAttributes.footer,\n },\n ],\n }),\n );\n }\n\n return finalSections satisfies Section[];\n}\n\n/**\n * process a brick and add default props\n */\nexport function processBrick<T extends Brick>(brick: T): T {\n const defProps = defaultProps[brick.type];\n // if (!defProps) {\n // console.warn(`No default props found for brick type: ${brick.type}`);\n // return false; // or throw an error if you prefer\n // }\n const result = {\n ...brick,\n props: mergeIgnoringArrays({} as Brick[\"props\"], defProps.props, {\n ...brick.props,\n ...(brick.props.$children\n ? { $children: (brick.props.$children as T[]).map(processBrick).filter(Boolean) }\n : {}),\n }),\n };\n return result;\n}\n\nexport function createEmptyBrick(type: string, ghost = false): Brick {\n const props = { ...defaultProps[type].props, ghost };\n const newBrick = {\n id: `b-${generateId()}`,\n type,\n props,\n };\n return newBrick;\n}\n\nexport const sectionsExamples: { label: string; description: string; example: Section }[] = [\n {\n label: \"Hero section with centered 'hero' and 'button' bricks\",\n description: `A simple hero section with a title and a light primary background.\nThe \"hero\" brick does not have a colorPreset so it is transparent and inherits the background/text-color settings from the section.\nBricks are centered both vertically and horizontally using justifyContent and alignItems.\nBricks are stacked vertically using the \"direction\" set to \"flex-col\".\n`,\n example: {\n id: \"hero-section\",\n order: 0,\n props: {\n colorPreset: { color: \"primary-100\" },\n direction: \"flex-col\",\n padding: \"6rem\",\n gap: \"3rem\",\n justifyContent: \"justify-center\",\n alignItems: \"items-center\",\n },\n bricks: [\n {\n id: \"hero\",\n type: \"hero\",\n props: {\n content: \"<h1 style='text-align:center'>Welcome to my SaaS</h1>\",\n tagline: \"The future of productivity starts here\",\n },\n },\n {\n id: \"cta-button\",\n type: \"button\",\n props: {\n label: \"Get Started\",\n href: \"/signup\",\n colorPreset: { color: \"primary-500\", variant: \"solid\" },\n },\n },\n ],\n },\n },\n {\n label: \"Contact section with a text and a form\",\n description: `A contact section with a title and a form.\nThe section has a light gray background using a colorPreset.\nBricks are stacked vertically using the \"direction\" set to \"flex-col\".\n`,\n example: {\n id: \"contact-section\",\n order: 1,\n props: {\n colorPreset: { color: \"gray-100\" },\n direction: \"flex-col\",\n padding: \"4rem\",\n gap: \"2rem\",\n justifyContent: \"justify-center\",\n alignItems: \"items-center\",\n },\n bricks: [\n {\n id: \"contact-title\",\n type: \"text\",\n props: {\n content: \"<h2>Get in Touch</h2>\",\n },\n },\n {\n id: \"contact-form\",\n type: \"form\",\n props: {\n title: \"Contact Us\",\n fields: [\n { name: \"name\", label: \"Name\", type: \"text\", required: true },\n { name: \"email\", label: \"Email\", type: \"email\", required: true },\n { name: \"message\", label: \"Message\", type: \"textarea\", required: true },\n ],\n },\n },\n ],\n },\n },\n {\n label: \"Feature showcase with horizontal layout and container brick\",\n description: `A features section using horizontal layout with a container \"box\" brick that holds multiple feature items.\nThe box brick is the only container type that can hold $children (other bricks).\nThis demonstrates nested brick structure where the box contains multiple feature bricks.`,\n example: {\n id: \"features-section\",\n order: 2,\n props: {\n direction: \"flex-col\",\n padding: \"5rem\",\n gap: \"3rem\",\n maxWidth: \"max-w-screen-xl\",\n justifyContent: \"justify-center\",\n alignItems: \"items-center\",\n },\n bricks: [\n {\n id: \"features-title\",\n type: \"text\",\n props: {\n content: \"<h2 style='text-align:center'>Our Features</h2>\",\n },\n },\n {\n id: \"features-container\",\n type: \"box\",\n props: {\n direction: \"flex-row\",\n gap: \"2rem\",\n padding: \"2rem\",\n $children: [\n {\n id: \"feature-1\",\n type: \"text\",\n props: {\n content: \"<h3>Fast</h3><p>Lightning-fast performance for your needs.</p>\",\n colorPreset: { color: \"blue-500\" },\n },\n },\n {\n id: \"feature-2\",\n type: \"text\",\n props: {\n content: \"<h3>Secure</h3><p>Enterprise-grade security built-in.</p>\",\n colorPreset: { color: \"green-500\" },\n },\n },\n {\n id: \"feature-3\",\n type: \"text\",\n props: {\n content: \"<h3>Scalable</h3><p>Grows with your business seamlessly.</p>\",\n colorPreset: { color: \"purple-500\" },\n },\n },\n ],\n },\n },\n ],\n },\n },\n {\n label: \"Media-rich section with image and text side by side\",\n description: `A content section using horizontal layout to place an image next to text content.\nDemonstrates how direction \"flex-row\" arranges bricks horizontally.\nThe section uses responsive mobile overrides to stack vertically on mobile.`,\n example: {\n id: \"about-section\",\n order: 3,\n props: {\n direction: \"flex-row\",\n padding: \"4rem\",\n gap: \"3rem\",\n alignItems: \"items-center\",\n maxWidth: \"max-w-screen-xl\",\n },\n mobileProps: {\n direction: \"flex-col\",\n padding: \"2rem\",\n },\n bricks: [\n {\n id: \"about-image\",\n type: \"image\",\n props: {\n src: \"https://example.com/about-image.jpg\",\n alt: \"About our company\",\n width: \"400px\",\n height: \"300px\",\n },\n },\n {\n id: \"about-text\",\n type: \"text\",\n props: {\n content:\n \"<h2>About Us</h2><p>We are a leading company in innovative solutions, dedicated to transforming how businesses operate in the digital age.</p>\",\n },\n },\n ],\n },\n },\n {\n label: \"Complex nested layout with multiple container levels\",\n description: `Advanced example showing deeply nested brick structure using multiple box containers.\nDemonstrates how box bricks can contain other box bricks, creating sophisticated layouts.\nShows responsive design with different mobile arrangements.`,\n example: {\n id: \"complex-layout-section\",\n order: 4,\n props: {\n direction: \"flex-col\",\n padding: \"4rem\",\n gap: \"2rem\",\n backgroundImage: { image: \"https://example.com/bg.jpg\" },\n },\n bricks: [\n {\n id: \"main-container\",\n type: \"box\",\n props: {\n direction: \"flex-row\",\n gap: \"2rem\",\n padding: \"2rem\",\n $children: [\n {\n id: \"left-column\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n colorPreset: { color: \"gray-50\" },\n padding: \"1.5rem\",\n $children: [\n {\n id: \"left-title\",\n type: \"text\",\n props: {\n content: \"<h3>Left Column</h3>\",\n },\n },\n {\n id: \"left-button\",\n type: \"button\",\n props: {\n label: \"Learn More\",\n href: \"/learn\",\n colorPreset: { color: \"blue-500\", variant: \"outline\" },\n },\n },\n ],\n },\n },\n {\n id: \"right-column\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n colorPreset: { color: \"blue-50\" },\n padding: \"1.5rem\",\n $children: [\n {\n id: \"right-image\",\n type: \"image\",\n props: {\n src: \"https://example.com/feature.jpg\",\n alt: \"Feature showcase\",\n width: \"100%\",\n },\n },\n {\n id: \"right-text\",\n type: \"text\",\n props: {\n content: \"<p>Detailed description of our amazing features and capabilities.</p>\",\n },\n },\n ],\n },\n },\n ],\n mobileProps: {\n direction: \"flex-col\",\n },\n },\n },\n ],\n },\n },\n {\n label: \"Footer-style section with multiple columns\",\n description: `A footer-like section demonstrating horizontal layout with multiple informational columns.\nUses the footer variant for special styling and contains multiple text bricks arranged horizontally.\nShows how to create multi-column layouts using direction and gap properties.`,\n example: {\n id: \"info-footer-section\",\n order: 5,\n props: {\n variant: \"footer\",\n direction: \"flex-row\",\n padding: \"3rem\",\n gap: \"4rem\",\n colorPreset: { color: \"gray-800\" },\n justifyContent: \"justify-center\",\n },\n mobileProps: {\n direction: \"flex-col\",\n gap: \"2rem\",\n },\n bricks: [\n {\n id: \"company-info\",\n type: \"text\",\n props: {\n content:\n \"<h4 style='color:white'>Company</h4><p style='color:gray'>About Us<br>Careers<br>Contact</p>\",\n },\n },\n {\n id: \"product-info\",\n type: \"text\",\n props: {\n content:\n \"<h4 style='color:white'>Product</h4><p style='color:gray'>Features<br>Pricing<br>Documentation</p>\",\n },\n },\n {\n id: \"support-info\",\n type: \"text\",\n props: {\n content:\n \"<h4 style='color:white'>Support</h4><p style='color:gray'>Help Center<br>Community<br>Status</p>\",\n },\n },\n ],\n },\n },\n {\n label: \"Video showcase section with title and description\",\n description: `A media section featuring a YouTube video with accompanying text.\nShows how to use video bricks for multimedia content.\nThe section uses a light background to make the video stand out.`,\n example: {\n id: \"video-showcase-section\",\n order: 6,\n props: {\n direction: \"flex-col\",\n padding: \"4rem\",\n gap: \"2rem\",\n colorPreset: { color: \"gray-50\" },\n alignItems: \"items-center\",\n maxWidth: \"max-w-screen-lg\",\n },\n bricks: [\n {\n id: \"video-title\",\n type: \"text\",\n props: {\n content: \"<h2 style='text-align:center'>Watch Our Demo</h2>\",\n },\n },\n {\n id: \"demo-video\",\n type: \"video\",\n props: {\n url: \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\n title: \"Product Demo Video\",\n },\n },\n {\n id: \"video-description\",\n type: \"text\",\n props: {\n content:\n \"<p style='text-align:center'>See how our platform can transform your workflow in just 2 minutes.</p>\",\n },\n },\n ],\n },\n },\n {\n label: \"Image gallery section with carousel\",\n description: `A media-rich section showcasing an image carousel.\nDemonstrates how to use carousel bricks for displaying multiple images.\nPerfect for portfolios, product showcases, or photo galleries.`,\n example: {\n id: \"gallery-section\",\n order: 7,\n props: {\n direction: \"flex-col\",\n padding: \"4rem\",\n gap: \"2rem\",\n alignItems: \"items-center\",\n },\n bricks: [\n {\n id: \"gallery-title\",\n type: \"text\",\n props: {\n content: \"<h2 style='text-align:center'>Our Portfolio</h2>\",\n },\n },\n {\n id: \"portfolio-carousel\",\n type: \"carousel\",\n props: {\n images: [\n { src: \"https://example.com/project1.jpg\", alt: \"Project 1\" },\n { src: \"https://example.com/project2.jpg\", alt: \"Project 2\" },\n { src: \"https://example.com/project3.jpg\", alt: \"Project 3\" },\n ],\n autoplay: true,\n showDots: true,\n },\n },\n ],\n },\n },\n {\n label: \"Interactive form section with styled inputs\",\n description: `A comprehensive form section for user registration or contact.\nShows how to create forms with various field types and validation.\nUses a card-like appearance with rounded corners and shadow.`,\n example: {\n id: \"signup-form-section\",\n order: 8,\n props: {\n direction: \"flex-col\",\n padding: \"4rem\",\n gap: \"2rem\",\n colorPreset: { color: \"blue-50\" },\n alignItems: \"items-center\",\n maxWidth: \"max-w-screen-md\",\n },\n bricks: [\n {\n id: \"form-header\",\n type: \"text\",\n props: {\n content:\n \"<h2 style='text-align:center'>Join Our Platform</h2><p style='text-align:center'>Create your account and start building today.</p>\",\n },\n },\n {\n id: \"registration-form\",\n type: \"form\",\n props: {\n title: \"Sign Up\",\n submitLabel: \"Create Account\",\n fields: [\n { name: \"firstName\", label: \"First Name\", type: \"text\", required: true },\n { name: \"lastName\", label: \"Last Name\", type: \"text\", required: true },\n { name: \"email\", label: \"Email Address\", type: \"email\", required: true },\n { name: \"password\", label: \"Password\", type: \"password\", required: true },\n { name: \"company\", label: \"Company\", type: \"text\", required: false },\n { name: \"newsletter\", label: \"Subscribe to newsletter\", type: \"checkbox\", required: false },\n ],\n colorPreset: { color: \"white\" },\n shadow: \"shadow-lg\",\n rounding: \"rounded-lg\",\n padding: \"2rem\",\n },\n },\n ],\n },\n },\n {\n label: \"Testimonials section with customer feedback\",\n description: `A social proof section using the testimonials brick to display customer feedback.\nShows how to structure testimonials with avatars, company information, and social icons.\nPerfect for building trust and credibility with potential customers.`,\n example: {\n id: \"testimonials-section\",\n order: 9,\n props: {\n direction: \"flex-col\",\n padding: \"5rem\",\n gap: \"3rem\",\n colorPreset: { color: \"purple-50\" },\n alignItems: \"items-center\",\n },\n bricks: [\n {\n id: \"testimonials-title\",\n type: \"text\",\n props: {\n content: \"<h2 style='text-align:center'>What Our Customers Say</h2>\",\n },\n },\n {\n id: \"customer-testimonials\",\n type: \"testimonials\",\n props: {\n testimonials: [\n {\n text: \"This platform has completely transformed how we handle our projects. The automation features and intuitive interface have saved us countless hours every week.\",\n author: \"Sarah Johnson\",\n company: \"TechCorp Solutions\",\n avatar: {\n src: \"https://via.placeholder.com/80x80.png?text=SJ\",\n alt: \"Sarah Johnson profile photo\",\n },\n socialIcon: \"mdi:linkedin\",\n },\n {\n text: \"Outstanding customer support and regular feature updates. We've been using this for over a year and it keeps getting better. Highly recommend!\",\n author: \"Mike Chen\",\n company: \"StartupFlow\",\n avatar: {\n src: \"https://via.placeholder.com/80x80.png?text=MC\",\n alt: \"Mike Chen profile photo\",\n },\n socialIcon: \"mdi:twitter\",\n },\n {\n text: \"The results speak for themselves - our productivity increased by 40% after implementing this solution. It's like having an extra team member.\",\n author: \"Emily Rodriguez\",\n company: \"Digital Agency Pro\",\n avatar: {\n src: \"https://via.placeholder.com/80x80.png?text=ER\",\n alt: \"Emily Rodriguez profile photo\",\n },\n socialIcon: \"mdi:briefcase\",\n },\n ],\n colorPreset: { color: \"white\" },\n shadow: \"shadow-lg\",\n padding: \"2rem\",\n gap: \"2rem\",\n },\n },\n ],\n },\n },\n {\n label: \"Location and contact information with map\",\n description: `A contact section featuring an interactive map alongside contact details.\nShows how to combine map bricks with text and contact information.\nPerfect for businesses with physical locations.`,\n example: {\n id: \"location-section\",\n order: 10,\n props: {\n direction: \"flex-row\",\n padding: \"4rem\",\n gap: \"3rem\",\n alignItems: \"items-start\",\n },\n mobileProps: {\n direction: \"flex-col\",\n },\n bricks: [\n {\n id: \"contact-details\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"2rem\",\n padding: \"2rem\",\n colorPreset: { color: \"gray-50\" },\n rounding: \"rounded-lg\",\n $children: [\n {\n id: \"office-title\",\n type: \"text\",\n props: {\n content: \"<h3>Visit Our Office</h3>\",\n },\n },\n {\n id: \"address\",\n type: \"text\",\n props: {\n content:\n \"<p><strong>Address:</strong><br>123 Business Street<br>Suite 100<br>San Francisco, CA 94105</p>\",\n },\n },\n {\n id: \"contact-info\",\n type: \"text\",\n props: {\n content:\n \"<p><strong>Phone:</strong> +1 (555) 123-4567<br><strong>Email:</strong> hello@company.com</p>\",\n },\n },\n {\n id: \"hours\",\n type: \"text\",\n props: {\n content:\n \"<p><strong>Business Hours:</strong><br>Monday - Friday: 9:00 AM - 6:00 PM<br>Saturday: 10:00 AM - 4:00 PM</p>\",\n },\n },\n ],\n },\n },\n {\n id: \"office-map\",\n type: \"map\",\n props: {\n address: \"123 Business Street, San Francisco, CA 94105\",\n zoom: 15,\n height: \"400px\",\n },\n },\n ],\n },\n },\n {\n label: \"Statistics showcase with icons and numbers\",\n description: `A metrics section displaying key statistics using icon and text bricks.\nDemonstrates how to create compelling data visualizations.\nUses horizontal layout with consistent spacing and visual hierarchy.`,\n example: {\n id: \"stats-section\",\n order: 11,\n props: {\n direction: \"flex-col\",\n padding: \"5rem\",\n gap: \"3rem\",\n colorPreset: { color: \"gradient\", gradientDirection: \"bg-gradient-to-r\" },\n alignItems: \"items-center\",\n },\n bricks: [\n {\n id: \"stats-title\",\n type: \"text\",\n props: {\n content: \"<h2 style='text-align:center; color:white'>Our Impact</h2>\",\n },\n },\n {\n id: \"stats-container\",\n type: \"box\",\n props: {\n direction: \"flex-row\",\n gap: \"4rem\",\n justifyContent: \"justify-center\",\n $children: [\n {\n id: \"users-stat\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n alignItems: \"items-center\",\n $children: [\n {\n id: \"users-icon\",\n type: \"icon\",\n props: {\n icon: \"users\",\n size: \"3rem\",\n color: \"white\",\n },\n },\n {\n id: \"users-number\",\n type: \"text\",\n props: {\n content:\n \"<h3 style='color:white; text-align:center'>50K+</h3><p style='color:white; text-align:center'>Active Users</p>\",\n },\n },\n ],\n },\n },\n {\n id: \"projects-stat\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n alignItems: \"items-center\",\n $children: [\n {\n id: \"projects-icon\",\n type: \"icon\",\n props: {\n icon: \"briefcase\",\n size: \"3rem\",\n color: \"white\",\n },\n },\n {\n id: \"projects-number\",\n type: \"text\",\n props: {\n content:\n \"<h3 style='color:white; text-align:center'>100K+</h3><p style='color:white; text-align:center'>Projects Created</p>\",\n },\n },\n ],\n },\n },\n {\n id: \"satisfaction-stat\",\n type: \"box\",\n props: {\n direction: \"flex-col\",\n gap: \"1rem\",\n alignItems: \"items-center\",\n $children: [\n {\n id: \"satisfaction-icon\",\n type: \"icon\",\n props: {\n icon: \"star\",\n size: \"3rem\",\n color: \"white\",\n },\n },\n {\n id: \"satisfaction-number\",\n type: \"text\",\n props: {\n content:\n \"<h3 style='color:white; text-align:center'>98%</h3><p style='color:white; text-align:center'>Satisfaction Rate</p>\",\n },\n },\n ],\n },\n },\n ],\n mobileProps: {\n direction: \"flex-col\",\n gap: \"2rem\",\n },\n },\n },\n ],\n },\n },\n {\n label: \"Social links and newsletter signup\",\n description: `A community engagement section combining social media links with newsletter signup.\nShows how to use social-links bricks and forms together.\nCreates a cohesive call-to-action for community building.`,\n example: {\n id: \"community-section\",\n order: 12,\n props: {\n direction: \"flex-col\",\n padding: \"4rem\",\n gap: \"3rem\",\n colorPreset: { color: \"indigo-100\" },\n alignItems: \"items-center\",\n maxWidth: \"max-w-screen-md\",\n },\n bricks: [\n {\n id: \"community-title\",\n type: \"text\",\n props: {\n content:\n \"<h2 style='text-align:center'>Stay Connected</h2><p style='text-align:center'>Join our community and never miss an update.</p>\",\n },\n },\n {\n id: \"social-links\",\n type: \"social-links\",\n props: {\n links: [\n { platform: \"twitter\", url: \"https://twitter.com/company\" },\n { platform: \"linkedin\", url: \"https://linkedin.com/company/company\" },\n { platform: \"github\", url: \"https://github.com/company\" },\n { platform: \"youtube\", url: \"https://youtube.com/company\" },\n ],\n size: \"large\",\n style: \"filled\",\n },\n },\n {\n id: \"newsletter-form\",\n type: \"form\",\n props: {\n title: \"Subscribe to Our Newsletter\",\n subtitle: \"Get weekly updates and exclusive content delivered to your inbox.\",\n submitLabel: \"Subscribe\",\n fields: [\n {\n name: \"email\",\n label: \"Email Address\",\n type: \"email\",\n required: true,\n placeholder: \"your@email.com\",\n },\n ],\n colorPreset: { color: \"white\" },\n rounding: \"rounded-lg\",\n padding: \"2rem\",\n shadow: \"shadow-md\",\n },\n },\n ],\n },\n },\n {\n label: \"Pricing table with multiple options\",\n description: `A pricing section using card bricks to create a comparison table.\nDemonstrates how to structure pricing tiers with different features.\nUses consistent styling with highlighted premium option.`,\n example: {\n id: \"pricing-section\",\n order: 13,\n props: {\n direction: \"flex-col\",\n padding: \"5rem\",\n gap: \"3rem\",\n alignItems: \"items-center\",\n },\n bricks: [\n {\n id: \"pricing-header\",\n type: \"text\",\n props: {\n content:\n \"<h2 style='text-align:center'>Choose Your Plan</h2><p style='text-align:center'>Select the perfect plan for your needs.</p>\",\n },\n },\n {\n id: \"pricing-cards\",\n type: \"box\",\n props: {\n direction: \"flex-row\",\n gap: \"2rem\",\n justifyContent: \"justify-center\",\n $children: [\n {\n id: \"basic-plan\",\n type: \"card\",\n props: {\n title: \"Basic\",\n subtitle: \"$9/month\",\n content: \"• 5 Projects<br>• 10GB Storage<br>• Email Support<br>• Basic Templates\",\n colorPreset: { color: \"white\" },\n border: { width: \"border-2\", color: \"border-gray-200\" },\n rounding: \"rounded-lg\",\n padding: \"2rem\",\n shadow: \"shadow-md\",\n },\n },\n {\n id: \"pro-plan\",\n type: \"card\",\n props: {\n title: \"Pro\",\n subtitle: \"$29/month\",\n content:\n \"• Unlimited Projects<br>• 100GB Storage<br>• Priority Support<br>• Premium Templates<br>• Advanced Analytics\",\n colorPreset: { color: \"blue-500\" },\n rounding: \"rounded-lg\",\n padding: \"2rem\",\n shadow: \"shadow-lg\",\n border: { width: \"border-2\", color: \"border-blue-400\" },\n },\n },\n {\n id: \"enterprise-plan\",\n type: \"card\",\n props: {\n title: \"Enterprise\",\n subtitle: \"Custom\",\n content:\n \"• Everything in Pro<br>• Unlimited Storage<br>• 24/7 Phone Support<br>• Custom Integrations<br>• Dedicated Account Manager\",\n colorPreset: { color: \"white\" },\n border: { width: \"border-2\", color: \"border-gray-200\" },\n rounding: \"rounded-lg\",\n padding: \"2rem\",\n shadow: \"shadow-md\",\n },\n },\n ],\n mobileProps: {\n direction: \"flex-col\",\n },\n },\n },\n ],\n },\n },\n];\n"],"mappings":";;qbAAA,OAAS,QAAAA,MAAuC,oBAChD,OAAS,kBAAAC,MAAsB,SAkBxB,IAAMC,EAAaC,EAAe,uDAAwD,CAAC,EAE5FC,EAA8BC,EAAK,OAAO,CAC9C,KAAMA,EAAK,SACTA,EAAK,OAAO,CACV,MAAO,MACP,YAAa,gCACf,CAAC,CACH,EACA,IAAKA,EAAK,SACRA,EAAK,OAAO,CACV,MAAO,MACP,YAAa,+BACf,CAAC,CACH,EACA,MAAOA,EAAK,SACVA,EAAK,OAAO,CACV,MAAO,QACP,YAAa,iCACf,CAAC,CACH,EACA,OAAQA,EAAK,SACXA,EAAK,OAAO,CACV,MAAO,SACP,YAAa,kCACf,CAAC,CACH,EACA,MAAOA,EAAK,SACVA,EAAK,OAAO,CACV,MAAO,QACP,YAAa,iCACf,CAAC,CACH,EACA,WAAYA,EAAK,SACfA,EAAK,OAAO,CACV,MAAO,aACP,YAAa,sCACf,CAAC,CACH,EACA,WAAYA,EAAK,SACfA,EAAK,OAAO,CACV,MAAO,aACP,YAAa,sCACf,CAAC,CACH,EACA,OAAQA,EAAK,SACXA,EAAK,OAAO,CACV,MAAO,SACP,YAAa,kCACf,CAAC,CACH,CACF,CAAC,EAIYC,EAAkBC,EAAW,OAAO,KAAKC,CAAY,EAAG,CACnE,MAAO,YACT,CAAC,EAEYC,EAAcJ,EAAK,OAC9B,CACE,GAAIA,EAAK,OAAO,CACd,MAAO,KACP,YAAa,oCACf,CAAC,EACD,KAAMC,EACN,MAAOD,EAAK,IAAI,CACd,MAAO,QACP,YAAa,+EACf,CAAC,EACD,YAAaA,EAAK,SAChBA,EAAK,IAAI,CACP,MAAO,QACP,YAAa,4DACf,CAAC,CACH,CACF,EACA,CAAE,qBAAsB,EAAK,CAC/B,EAEO,SAASK,EAA0BC,EAAcC,EAAgB,CACtE,OAAOC,EACLR,EAAK,OACH,CACE,GAAIA,EAAK,OAAO,CACd,MAAO,KACP,YAAa,oCACf,CAAC,EACD,KAAMA,EAAK,QAAQM,CAAI,EACvB,MAAAC,EACA,YAAaP,EAAK,SAASA,EAAK,QAAQO,CAAK,CAAC,CAChD,EACA,CAAE,qBAAsB,EAAM,CAChC,CACF,CACF,CAOO,IAAME,EAAeT,EAAK,OAC/B,CACE,YAAaA,EAAK,SAChBU,EAAe,CACb,MAAO,OACT,CAAC,CACH,EACA,gBAAiBV,EAAK,SACpBW,EAAc,CACZ,MAAO,aACP,YACE,oHACJ,CAAC,CACH,EACA,UAAWC,EAAa,CACtB,QAAS,WACT,MAAO,YACP,YAAa,yFACb,gBAAiB,SACnB,CAAC,EACD,UAAWZ,EAAK,SACda,EAAa,CACX,MAAO,aACP,QAAS,cACT,YAAa,gCACb,WAAY,QACd,CAAC,CACH,EACA,QAASb,EAAK,SACZE,EAAW,CAAC,SAAU,SAAU,SAAS,EAAG,CAC1C,MAAO,yBACP,YAAa,sCACb,UAAW,CAAC,SAAU,SAAU,SAAS,EACzC,WAAY,SACZ,YAAa,EACf,CAAC,CACH,EACA,SAAUF,EAAK,SACbc,EAAS,YAAa,aAAc,CAClC,QAAS,CACP,CACE,MAAO,kBACP,MAAO,IACP,YAAa,0CACf,EACA,CACE,MAAO,kBACP,MAAO,IACP,YAAa,+BACf,EACA,CACE,MAAO,mBACP,MAAO,KACP,YAAa,cACf,EACA,CACE,MAAO,aACP,MAAO,OACP,YAAa,wBACf,CACF,EACA,YAAa,iDACb,kBACE,4HACF,UAAW,eACX,gBAAiB,SACnB,CAAC,CACH,EACA,eAAgBd,EAAK,SACnBe,EAAkB,CAChB,QAAS,gBACX,CAAC,CACH,EACA,WAAYf,EAAK,SACfgB,EAAc,CACZ,QAAS,cACX,CAAC,CACH,EACA,QAAShB,EAAK,SACZa,EAAa,CACX,QAAS,OACT,YAAa,8BACb,MAAO,UACP,gBAAiB,GACjB,iBAAkB,gBAClB,aAAc,gBAChB,CAAC,CACH,EACA,IAAKb,EAAK,SACRa,EAAa,CACX,MAAO,MACP,YAAa,6CACb,QAAS,OACT,aAAc,YAChB,CAAC,CACH,EACA,KAAMb,EAAK,SACTA,EAAK,QAAQ,CACX,MAAO,OACP,YAAa,4CACb,QAAS,GACT,aAAc,aAChB,CAAC,CACH,EACA,YAAaA,EAAK,SAChBA,EAAK,OAAO,CACV,YAAa,8DACb,WAAY,SACZ,YAAa,EACf,CAAC,CACH,CACF,EACA,CACE,qBAAsB,EACxB,CACF,EAEaiB,EAAgBjB,EAAK,OAChC,CACE,GAAIA,EAAK,OAAO,CACd,YAAa,mEACb,SAAU,CAAC,kBAAmB,iBAAiB,CACjD,CAAC,EACD,MAAOA,EAAK,SACVA,EAAK,OAAO,CACV,YAAa,2DACb,SAAU,CAAC,UAAW,SAAS,CACjC,CAAC,CACH,EACA,MAAOA,EAAK,OAAO,CACjB,YAAa,4EACf,CAAC,EACD,MAAOS,EACP,YAAaT,EAAK,SAASA,EAAK,QAAQS,EAAc,CAAE,qBAAsB,EAAM,CAAC,CAAC,EACtF,OAAQT,EAAK,MAAMI,CAAW,CAChC,EACA,CACE,YAAa,uEACf,CACF,EAEac,EAAwBlB,EAAK,KAAKiB,EAAe,CAAC,QAAQ,CAAC,EAEjE,SAASE,GAAgC,CAC9C,OAAOX,EAAYU,CAAqB,CAC1C,CAEO,SAASE,GAAyB,CACvC,OAAOZ,EAAYS,CAAa,CAClC,CAEA,IAAMI,EAAsBC,EAAkBL,EAAc,WAAW,MAAO,SAAS,EACjFM,EAA4BD,EAChCL,EAAc,WAAW,YACzB,QACF,EAIO,SAASO,EACdC,EACAC,EACAC,EACW,CACX,IAAMC,EAAkBC,IACf,CACL,GAAGA,EACH,MAAOC,EAAoB,CAAC,EAAuBT,EAAqBQ,EAAQ,KAAK,EACrF,YAAaC,EAAoB,CAAC,EAAGP,EAA2BM,EAAQ,aAAe,CAAC,CAAC,EACzF,OAAQA,EAAQ,OAAO,IAAIE,CAAY,EAAE,OAAO,OAAO,CACzD,GAGIC,EAAgBP,EAAS,IAAIG,CAAc,EAEjD,OAAIF,EAAe,QAAU,CAACC,EAAe,UAC3CK,EAAc,QACZJ,EAAe,CACb,MAAO,GACP,GAAI,iBACJ,MAAO,iBACP,MAAO,CACL,QAAS,SACT,UAAW,UACb,EACA,YAAa,CAAC,EACd,OAAQ,CACN,CACE,GAAI,SACJ,KAAM,SACN,MAAOF,EAAe,MACxB,CACF,CACF,CAAC,CACH,EAEEA,EAAe,QAAU,CAACC,EAAe,UAC3CK,EAAc,KACZJ,EAAe,CACb,MAAO,IACP,GAAI,iBACJ,MAAO,iBACP,MAAO,CACL,QAAS,SACT,UAAW,UACb,EACA,YAAa,CAAC,EACd,OAAQ,CACN,CACE,GAAI,SACJ,KAAM,SACN,MAAOF,EAAe,MACxB,CACF,CACF,CAAC,CACH,EAGKM,CACT,CAKO,SAASD,EAA8BE,EAAa,CACzD,IAAMC,EAAW/B,EAAa8B,EAAM,IAAI,EAcxC,MATe,CACb,GAAGA,EACH,MAAOH,EAAoB,CAAC,EAAqBI,EAAS,MAAO,CAC/D,GAAGD,EAAM,MACT,GAAIA,EAAM,MAAM,UACZ,CAAE,UAAYA,EAAM,MAAM,UAAkB,IAAIF,CAAY,EAAE,OAAO,OAAO,CAAE,EAC9E,CAAC,CACP,CAAC,CACH,CAEF,CAEO,SAASI,EAAiB7B,EAAc8B,EAAQ,GAAc,CACnE,IAAM7B,EAAQ,CAAE,GAAGJ,EAAaG,CAAI,EAAE,MAAO,MAAA8B,CAAM,EAMnD,MALiB,CACf,GAAI,KAAKvC,EAAW,CAAC,GACrB,KAAAS,EACA,MAAAC,CACF,CAEF,CAEO,IAAM8B,EAA+E,CAC1F,CACE,MAAO,wDACP,YAAa;AAAA;AAAA;AAAA;AAAA,EAKb,QAAS,CACP,GAAI,eACJ,MAAO,EACP,MAAO,CACL,YAAa,CAAE,MAAO,aAAc,EACpC,UAAW,WACX,QAAS,OACT,IAAK,OACL,eAAgB,iBAChB,WAAY,cACd,EACA,OAAQ,CACN,CACE,GAAI,OACJ,KAAM,OACN,MAAO,CACL,QAAS,wDACT,QAAS,wCACX,CACF,EACA,CACE,GAAI,aACJ,KAAM,SACN,MAAO,CACL,MAAO,cACP,KAAM,UACN,YAAa,CAAE,MAAO,cAAe,QAAS,OAAQ,CACxD,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,yCACP,YAAa;AAAA;AAAA;AAAA,EAIb,QAAS,CACP,GAAI,kBACJ,MAAO,EACP,MAAO,CACL,YAAa,CAAE,MAAO,UAAW,EACjC,UAAW,WACX,QAAS,OACT,IAAK,OACL,eAAgB,iBAChB,WAAY,cACd,EACA,OAAQ,CACN,CACE,GAAI,gBACJ,KAAM,OACN,MAAO,CACL,QAAS,uBACX,CACF,EACA,CACE,GAAI,eACJ,KAAM,OACN,MAAO,CACL,MAAO,aACP,OAAQ,CACN,CAAE,KAAM,OAAQ,MAAO,OAAQ,KAAM,OAAQ,SAAU,EAAK,EAC5D,CAAE,KAAM,QAAS,MAAO,QAAS,KAAM,QAAS,SAAU,EAAK,EAC/D,CAAE,KAAM,UAAW,MAAO,UAAW,KAAM,WAAY,SAAU,EAAK,CACxE,CACF,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,8DACP,YAAa;AAAA;AAAA,0FAGb,QAAS,CACP,GAAI,mBACJ,MAAO,EACP,MAAO,CACL,UAAW,WACX,QAAS,OACT,IAAK,OACL,SAAU,kBACV,eAAgB,iBAChB,WAAY,cACd,EACA,OAAQ,CACN,CACE,GAAI,iBACJ,KAAM,OACN,MAAO,CACL,QAAS,iDACX,CACF,EACA,CACE,GAAI,qBACJ,KAAM,MACN,MAAO,CACL,UAAW,WACX,IAAK,OACL,QAAS,OACT,UAAW,CACT,CACE,GAAI,YACJ,KAAM,OACN,MAAO,CACL,QAAS,iEACT,YAAa,CAAE,MAAO,UAAW,CACnC,CACF,EACA,CACE,GAAI,YACJ,KAAM,OACN,MAAO,CACL,QAAS,4DACT,YAAa,CAAE,MAAO,WAAY,CACpC,CACF,EACA,CACE,GAAI,YACJ,KAAM,OACN,MAAO,CACL,QAAS,+DACT,YAAa,CAAE,MAAO,YAAa,CACrC,CACF,CACF,CACF,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,sDACP,YAAa;AAAA;AAAA,6EAGb,QAAS,CACP,GAAI,gBACJ,MAAO,EACP,MAAO,CACL,UAAW,WACX,QAAS,OACT,IAAK,OACL,WAAY,eACZ,SAAU,iBACZ,EACA,YAAa,CACX,UAAW,WACX,QAAS,MACX,EACA,OAAQ,CACN,CACE,GAAI,cACJ,KAAM,QACN,MAAO,CACL,IAAK,sCACL,IAAK,oBACL,MAAO,QACP,OAAQ,OACV,CACF,EACA,CACE,GAAI,aACJ,KAAM,OACN,MAAO,CACL,QACE,gJACJ,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,uDACP,YAAa;AAAA;AAAA,6DAGb,QAAS,CACP,GAAI,yBACJ,MAAO,EACP,MAAO,CACL,UAAW,WACX,QAAS,OACT,IAAK,OACL,gBAAiB,CAAE,MAAO,4BAA6B,CACzD,EACA,OAAQ,CACN,CACE,GAAI,iBACJ,KAAM,MACN,MAAO,CACL,UAAW,WACX,IAAK,OACL,QAAS,OACT,UAAW,CACT,CACE,GAAI,cACJ,KAAM,MACN,MAAO,CACL,UAAW,WACX,IAAK,OACL,YAAa,CAAE,MAAO,SAAU,EAChC,QAAS,SACT,UAAW,CACT,CACE,GAAI,aACJ,KAAM,OACN,MAAO,CACL,QAAS,sBACX,CACF,EACA,CACE,GAAI,cACJ,KAAM,SACN,MAAO,CACL,MAAO,aACP,KAAM,SACN,YAAa,CAAE,MAAO,WAAY,QAAS,SAAU,CACvD,CACF,CACF,CACF,CACF,EACA,CACE,GAAI,eACJ,KAAM,MACN,MAAO,CACL,UAAW,WACX,IAAK,OACL,YAAa,CAAE,MAAO,SAAU,EAChC,QAAS,SACT,UAAW,CACT,CACE,GAAI,cACJ,KAAM,QACN,MAAO,CACL,IAAK,kCACL,IAAK,mBACL,MAAO,MACT,CACF,EACA,CACE,GAAI,aACJ,KAAM,OACN,MAAO,CACL,QAAS,uEACX,CACF,CACF,CACF,CACF,CACF,EACA,YAAa,CACX,UAAW,UACb,CACF,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,6CACP,YAAa;AAAA;AAAA,8EAGb,QAAS,CACP,GAAI,sBACJ,MAAO,EACP,MAAO,CACL,QAAS,SACT,UAAW,WACX,QAAS,OACT,IAAK,OACL,YAAa,CAAE,MAAO,UAAW,EACjC,eAAgB,gBAClB,EACA,YAAa,CACX,UAAW,WACX,IAAK,MACP,EACA,OAAQ,CACN,CACE,GAAI,eACJ,KAAM,OACN,MAAO,CACL,QACE,8FACJ,CACF,EACA,CACE,GAAI,eACJ,KAAM,OACN,MAAO,CACL,QACE,oGACJ,CACF,EACA,CACE,GAAI,eACJ,KAAM,OACN,MAAO,CACL,QACE,kGACJ,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,oDACP,YAAa;AAAA;AAAA,kEAGb,QAAS,CACP,GAAI,yBACJ,MAAO,EACP,MAAO,CACL,UAAW,WACX,QAAS,OACT,IAAK,OACL,YAAa,C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ACN,MAAO,CACL,QACE,+GACJ,CACF,CACF,CACF,CACF,EACA,CACE,GAAI,aACJ,KAAM,MACN,MAAO,CACL,QAAS,+CACT,KAAM,GACN,OAAQ,OACV,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,6CACP,YAAa;AAAA;AAAA,sEAGb,QAAS,CACP,GAAI,gBACJ,MAAO,GACP,MAAO,CACL,UAAW,WACX,QAAS,OACT,IAAK,OACL,YAAa,CAAE,MAAO,WAAY,kBAAmB,kBAAmB,EACxE,WAAY,cACd,EACA,OAAQ,CACN,CACE,GAAI,cACJ,KAAM,OACN,MAAO,CACL,QAAS,4DACX,CACF,EACA,CACE,GAAI,kBACJ,KAAM,MACN,MAAO,CACL,UAAW,WACX,IAAK,OACL,eAAgB,iBAChB,UAAW,CACT,CACE,GAAI,aACJ,KAAM,MACN,MAAO,CACL,UAAW,WACX,IAAK,OACL,WAAY,eACZ,UAAW,CACT,CACE,GAAI,aACJ,KAAM,OACN,MAAO,CACL,KAAM,QACN,KAAM,OACN,MAAO,OACT,CACF,EACA,CACE,GAAI,eACJ,KAAM,OACN,MAAO,CACL,QACE,gHACJ,CACF,CACF,CACF,CACF,EACA,CACE,GAAI,gBACJ,KAAM,MACN,MAAO,CACL,UAAW,WACX,IAAK,OACL,WAAY,eACZ,UAAW,CACT,CACE,GAAI,gBACJ,KAAM,OACN,MAAO,CACL,KAAM,YACN,KAAM,OACN,MAAO,OACT,CACF,EACA,CACE,GAAI,kBACJ,KAAM,OACN,MAAO,CACL,QACE,qHACJ,CACF,CACF,CACF,CACF,EACA,CACE,GAAI,oBACJ,KAAM,MACN,MAAO,CACL,UAAW,WACX,IAAK,OACL,WAAY,eACZ,UAAW,CACT,CACE,GAAI,oBACJ,KAAM,OACN,MAAO,CACL,KAAM,OACN,KAAM,OACN,MAAO,OACT,CACF,EACA,CACE,GAAI,sBACJ,KAAM,OACN,MAAO,CACL,QACE,oHACJ,CACF,CACF,CACF,CACF,CACF,EACA,YAAa,CACX,UAAW,WACX,IAAK,MACP,CACF,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,qCACP,YAAa;AAAA;AAAA,2DAGb,QAAS,CACP,GAAI,oBACJ,MAAO,GACP,MAAO,CACL,UAAW,WACX,QAAS,OACT,IAAK,OACL,YAAa,CAAE,MAAO,YAAa,EACnC,WAAY,eACZ,SAAU,iBACZ,EACA,OAAQ,CACN,CACE,GAAI,kBACJ,KAAM,OACN,MAAO,CACL,QACE,gIACJ,CACF,EACA,CACE,GAAI,eACJ,KAAM,eACN,MAAO,CACL,MAAO,CACL,CAAE,SAAU,UAAW,IAAK,6BAA8B,EAC1D,CAAE,SAAU,WAAY,IAAK,sCAAuC,EACpE,CAAE,SAAU,SAAU,IAAK,4BAA6B,EACxD,CAAE,SAAU,UAAW,IAAK,6BAA8B,CAC5D,EACA,KAAM,QACN,MAAO,QACT,CACF,EACA,CACE,GAAI,kBACJ,KAAM,OACN,MAAO,CACL,MAAO,8BACP,SAAU,oEACV,YAAa,YACb,OAAQ,CACN,CACE,KAAM,QACN,MAAO,gBACP,KAAM,QACN,SAAU,GACV,YAAa,gBACf,CACF,EACA,YAAa,CAAE,MAAO,OAAQ,EAC9B,SAAU,aACV,QAAS,OACT,OAAQ,WACV,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,sCACP,YAAa;AAAA;AAAA,0DAGb,QAAS,CACP,GAAI,kBACJ,MAAO,GACP,MAAO,CACL,UAAW,WACX,QAAS,OACT,IAAK,OACL,WAAY,cACd,EACA,OAAQ,CACN,CACE,GAAI,iBACJ,KAAM,OACN,MAAO,CACL,QACE,6HACJ,CACF,EACA,CACE,GAAI,gBACJ,KAAM,MACN,MAAO,CACL,UAAW,WACX,IAAK,OACL,eAAgB,iBAChB,UAAW,CACT,CACE,GAAI,aACJ,KAAM,OACN,MAAO,CACL,MAAO,QACP,SAAU,WACV,QAAS,6FACT,YAAa,CAAE,MAAO,OAAQ,EAC9B,OAAQ,CAAE,MAAO,WAAY,MAAO,iBAAkB,EACtD,SAAU,aACV,QAAS,OACT,OAAQ,WACV,CACF,EACA,CACE,GAAI,WACJ,KAAM,OACN,MAAO,CACL,MAAO,MACP,SAAU,YACV,QACE,wIACF,YAAa,CAAE,MAAO,UAAW,EACjC,SAAU,aACV,QAAS,OACT,OAAQ,YACR,OAAQ,CAAE,MAAO,WAAY,MAAO,iBAAkB,CACxD,CACF,EACA,CACE,GAAI,kBACJ,KAAM,OACN,MAAO,CACL,MAAO,aACP,SAAU,SACV,QACE,sJACF,YAAa,CAAE,MAAO,OAAQ,EAC9B,OAAQ,CAAE,MAAO,WAAY,MAAO,iBAAkB,EACtD,SAAU,aACV,QAAS,OACT,OAAQ,WACV,CACF,CACF,EACA,YAAa,CACX,UAAW,UACb,CACF,CACF,CACF,CACF,CACF,CACF","names":["Type","customAlphabet","generateId","customAlphabet","brickAbsolutePositionSchema","Type","brickTypeSchema","StringEnum","defaultProps","brickSchema","makeFullBrickSchemaForLLM","type","props","toLLMSchema","sectionProps","colorPresetRef","backgroundRef","directionRef","cssLengthRef","enumProp","justifyContentRef","alignItemsRef","sectionSchema","sectionSchemaNoBricks","getSectionSchemaNoBrickForLLM","getSectionSchemaForLLM","sectionDefaultprops","getSchemaDefaults","sectionMobileDefaultprops","processSections","sections","siteAttributes","pageAttributes","processSection","section","mergeIgnoringArrays","processBrick","finalSections","brick","defProps","createEmptyBrick","ghost","sectionsExamples"]}
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as t}from"@sinclair/typebox";var o=t.Object({spreadsheetId:t.String(),spreadsheetUrl:t.Optional(t.String()),spreadsheetName:t.Optional(t.String()),externalUrl:t.Optional(t.String())});export{o as a};
4
- //# sourceMappingURL=chunk-GPEMPZXK.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as r}from"@sinclair/typebox";function p(e,t={}){return r.Number({title:e,...t})}export{p as a};
4
- //# sourceMappingURL=chunk-HAGKVQOW.js.map
@@ -1,9 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{a as n}from"./chunk-KSEURRVZ.js";import{c as l}from"./chunk-3YVJ2ELD.js";import{a as c}from"./chunk-RJYZ5FAR.js";import{m as s}from"./chunk-AFVJZPLS.js";import{b as i,f as t}from"./chunk-5YRC3IT3.js";import{c as a}from"./chunk-CZRCW5EN.js";import{c as r}from"./chunk-OHNYCXPX.js";import{a as o}from"./chunk-JMN3HTZU.js";import{Type as e}from"@sinclair/typebox";import{TfiLayoutAccordionSeparated as d}from"react-icons/tfi";var k=c({type:"accordion",name:"Accordion",description:"An accordion/collapse element for expandable content",aiInstructions:`
4
- This accordion element displays content in collapsible panels.
5
- It is typically used for FAQ sections, organized documentation, or to save space.
6
- Each item has a title and expandable content area.
7
- Multiple panels can be open simultaneously or limited to one at a time.
8
- `.trim(),icon:d,defaultWidth:{desktop:"450px",mobile:"100%"},props:l({items:e.Array(e.Object({title:t({title:"Title",default:"My title",disableSizing:!0,showInSettings:!0}),content:t({title:"Content",default:"Expandable content goes here"}),defaultOpen:e.Optional(n("Open by default",!1))}),{title:"Accordion items",metadata:{category:"content"}}),fontSize:e.Optional(i({default:"inherit"})),restrictOneOpen:n("Restrict to one open item",!1,{description:"Restrict to one open item at a time. If false, multiple items can be open simultaneously."}),gap:e.Optional(r({title:"Gap",description:"The gap between the accordion items.",default:"1px","ui:styleId":"styles:gap"})),rounding:e.Optional(o(["rounded-auto","rounded-none","rounded-sm","rounded-md","rounded-lg","rounded-xl","rounded-2xl","rounded-3xl"],{title:"Corner rounding",enumNames:["Auto","None","Small","Medium","Large","Extra large","2xl","3xl"],"ui:placeholder":"Not specified","ui:field":"enum","ui:display":"select","ui:styleId":"styles:rounding",default:"rounded-auto"})),colorPreset:e.Optional(a({title:"Color",default:{color:"bg-primary-500 text-primary-500-content"}})),loop:e.Optional(s())})}),v=[{description:"FAQ section with card styling with single open",type:"accordion",props:{restrictOneOpen:!0,items:[{title:"What is included in the basic plan?",content:"The basic plan includes access to all core features, up to 10 projects, 5GB storage, email support, and basic analytics. You can upgrade at any time to access advanced features like API access, priority support, and unlimited projects.",defaultOpen:!0},{title:"How do I cancel my subscription?",content:"You can cancel your subscription at any time from your account settings. Go to Billing > Manage Subscription > Cancel. Your access will continue until the end of your current billing period, and you won't be charged for the next cycle."},{title:"Is there a free trial available?",content:"Yes! We offer a 14-day free trial with full access to all premium features. No credit card required to start. You can upgrade to a paid plan anytime during or after the trial period."},{title:"What payment methods do you accept?",content:"We accept all major credit cards (Visa, MasterCard, American Express), PayPal, and bank transfers for annual subscriptions. All payments are processed securely through our payment partners."},{title:"Do you offer refunds?",content:"We offer a 30-day money-back guarantee for all new subscriptions. If you're not satisfied with our service, contact our support team within 30 days of your purchase for a full refund."}]}},{description:"Product features accordion with multiple open panels and secondary color scheme",type:"accordion",props:{restrictOneOpen:!1,colorPreset:{color:"secondary-400"},rounding:"rounded-lg",gap:"0.5rem",items:[{title:"Advanced Analytics Dashboard",content:"Get detailed insights into your business performance with real-time analytics, custom reports, and data visualization tools. Track key metrics, monitor trends, and make data-driven decisions.",defaultOpen:!0},{title:"Team Collaboration Tools",content:"Work seamlessly with your team using built-in collaboration features including shared workspaces, real-time editing, comments, and task management. Perfect for remote and hybrid teams.",defaultOpen:!0},{title:"API Integration & Automation",content:"Connect with over 1000+ popular tools and services through our robust API. Set up automated workflows, sync data across platforms, and streamline your business processes."},{title:"Enterprise Security",content:"Bank-level security with end-to-end encryption, SSO integration, two-factor authentication, and compliance with SOC 2, GDPR, and HIPAA standards."}]}},{description:"Documentation sections with neutral styling and large font size",type:"accordion",props:{restrictOneOpen:!1,colorPreset:{color:"neutral-200"},fontSize:"text-lg",rounding:"rounded-md",gap:"2px",items:[{title:"Getting Started",content:"Learn the basics of our platform with step-by-step tutorials, setup guides, and quick start examples. Perfect for new users who want to get up and running quickly."},{title:"API Reference",content:"Complete API documentation with endpoints, parameters, response examples, and SDKs for popular programming languages including JavaScript, Python, PHP, and Ruby."},{title:"Advanced Configuration",content:"Deep dive into advanced features, custom configurations, webhooks, and enterprise-level integrations. Includes code samples and best practices."}]}},{description:"Restaurant menu sections with accent colors and extra large rounding",type:"accordion",props:{restrictOneOpen:!0,colorPreset:{color:"accent-500"},rounding:"rounded-xl",gap:"1rem",items:[{title:"Appetizers & Starters",content:"Bruschetta with Fresh Tomatoes - $8.99<br/>Calamari Rings with Marinara - $12.99<br/>Spinach & Artichoke Dip - $10.99<br/>Buffalo Wings (6 pieces) - $9.99",defaultOpen:!0},{title:"Main Courses",content:"Grilled Salmon with Herbs - $18.99<br/>Chicken Parmesan with Pasta - $16.99<br/>Ribeye Steak (12oz) - $24.99<br/>Vegetarian Lasagna - $14.99"},{title:"Desserts",content:"Tiramisu - $7.99<br/>Chocolate Lava Cake - $8.99<br/>New York Cheesecake - $6.99<br/>Gelato (3 scoops) - $5.99"}]}},{description:"Course curriculum with primary colors and minimal gap",type:"accordion",props:{restrictOneOpen:!1,colorPreset:{color:"primary-600"},rounding:"rounded-sm",gap:"1px",fontSize:"text-base",items:[{title:"Week 1: Introduction to Web Development",content:"Learn the fundamentals of HTML, CSS, and basic JavaScript. Set up your development environment and create your first web page. Includes hands-on exercises and project templates."},{title:"Week 2: Responsive Design & CSS Framework",content:"Master responsive web design principles, CSS Grid, Flexbox, and popular frameworks like Bootstrap and Tailwind CSS. Build mobile-first designs that work on all devices."},{title:"Week 3: JavaScript Fundamentals",content:"Deep dive into JavaScript programming including variables, functions, objects, arrays, DOM manipulation, and event handling. Build interactive web applications."},{title:"Week 4: Modern JavaScript & APIs",content:"Learn ES6+ features, async/await, fetch API, and how to work with external APIs. Create dynamic applications that interact with real-world data sources."}]}},{description:"Legal terms accordion with neutral dark theme and large gaps",type:"accordion",props:{restrictOneOpen:!0,colorPreset:{color:"neutral-800"},rounding:"rounded-lg",gap:"1.5rem",fontSize:"text-sm",items:[{title:"Terms of Service",content:"By accessing and using this website, you accept and agree to be bound by the terms and provision of this agreement. These terms apply to all visitors, users, and others who access or use the service."},{title:"Privacy Policy",content:"We collect information you provide directly to us, such as when you create an account, make a purchase, or contact us. We use this information to provide, maintain, and improve our services."},{title:"Cookie Policy",content:"We use cookies and similar tracking technologies to track activity on our service and hold certain information. You can instruct your browser to refuse all cookies or indicate when a cookie is being sent."}]}},{description:"Event schedule with secondary colors and 2xl rounding",type:"accordion",props:{restrictOneOpen:!1,colorPreset:{color:"secondary-300"},rounding:"rounded-2xl",gap:"0.75rem",items:[{title:"Day 1: Opening Ceremony & Keynotes",content:"9:00 AM - Registration & Welcome Coffee<br/>10:00 AM - Opening Ceremony<br/>11:00 AM - Keynote: Future of Technology<br/>12:30 PM - Networking Lunch<br/>2:00 PM - Panel Discussion<br/>4:00 PM - Closing Remarks",defaultOpen:!0},{title:"Day 2: Workshops & Technical Sessions",content:"9:00 AM - Workshop: AI in Practice<br/>11:00 AM - Technical Deep Dive: Cloud Architecture<br/>1:00 PM - Lunch Break<br/>2:30 PM - Hands-on Lab: DevOps Tools<br/>4:30 PM - Q&A Session"},{title:"Day 3: Networking & Demo Day",content:"10:00 AM - Startup Pitch Competition<br/>12:00 PM - Demo Showcase<br/>2:00 PM - Networking Session<br/>3:30 PM - Awards Ceremony<br/>5:00 PM - Closing Party"}]}},{description:"Fitness program details with accent colors and 3xl rounding",type:"accordion",props:{restrictOneOpen:!0,colorPreset:{color:"accent-400"},rounding:"rounded-3xl",gap:"1.25rem",fontSize:"text-lg",items:[{title:"Beginner Program (4 weeks)",content:"Perfect for newcomers to fitness. Includes basic bodyweight exercises, flexibility training, and cardio. 3 sessions per week, 45 minutes each. Includes nutrition guidance and progress tracking."},{title:"Intermediate Program (8 weeks)",content:"For those with some fitness experience. Combines strength training, HIIT workouts, and endurance building. 4 sessions per week, 60 minutes each. Includes meal planning and supplement recommendations."},{title:"Advanced Program (12 weeks)",content:"High-intensity program for experienced athletes. Features complex movements, periodization, and sport-specific training. 5-6 sessions per week. Includes recovery protocols and performance optimization."}]}},{description:"Support categories with primary colors and no rounding",type:"accordion",props:{restrictOneOpen:!1,colorPreset:{color:"primary-300"},rounding:"rounded-none",gap:"0px",fontSize:"text-base",items:[{title:"Account & Billing",content:"Get help with account settings, password reset, billing questions, subscription management, and payment issues. Average response time: 2 hours during business hours."},{title:"Technical Support",content:"Troubleshoot technical issues, API problems, integration questions, and performance concerns. Includes access to our knowledge base and video tutorials."},{title:"Sales & Partnerships",content:"Inquiries about enterprise solutions, custom pricing, partnership opportunities, and bulk discounts. Schedule a call with our sales team for personalized assistance."},{title:"Feature Requests",content:"Submit ideas for new features, improvements, and integrations. Our product team reviews all suggestions and provides updates on development roadmap."}]}},{description:"Company policies with neutral colors and small font size",type:"accordion",props:{restrictOneOpen:!0,colorPreset:{color:"neutral-100"},rounding:"rounded-md",gap:"0.25rem",fontSize:"text-sm",items:[{title:"Remote Work Policy",content:"All employees have the flexibility to work remotely full-time or adopt a hybrid schedule. Required equipment is provided, and employees must maintain reliable internet connection and dedicated workspace."},{title:"Professional Development",content:"Annual budget of $2,000 per employee for conferences, courses, certifications, and training materials. Time off is provided for approved learning activities and skill development."},{title:"Time Off & Benefits",content:"Unlimited PTO policy with minimum 3 weeks encouraged annually. Comprehensive health insurance, dental, vision, 401k matching, and wellness stipend included."}]}},{description:"Product comparison with secondary colors and multiple defaults open",type:"accordion",props:{restrictOneOpen:!1,colorPreset:{color:"secondary-500"},rounding:"rounded-lg",gap:"0.5rem",fontSize:"text-base",items:[{title:"Basic Plan - $9/month",content:"\u2713 Up to 5 projects<br/>\u2713 10GB storage<br/>\u2713 Email support<br/>\u2713 Basic analytics<br/>\u2713 Mobile app access<br/>\u2717 API access<br/>\u2717 Custom integrations",defaultOpen:!0},{title:"Pro Plan - $29/month",content:"\u2713 Unlimited projects<br/>\u2713 100GB storage<br/>\u2713 Priority support<br/>\u2713 Advanced analytics<br/>\u2713 API access<br/>\u2713 Custom integrations<br/>\u2713 Team collaboration",defaultOpen:!0},{title:"Enterprise Plan - Custom pricing",content:"\u2713 Everything in Pro<br/>\u2713 Unlimited storage<br/>\u2713 Dedicated support<br/>\u2713 White-label options<br/>\u2713 SSO integration<br/>\u2713 Custom contracts<br/>\u2713 On-premise deployment"}]}},{description:"Troubleshooting guide with accent colors and large font",type:"accordion",props:{restrictOneOpen:!1,colorPreset:{color:"accent-600"},rounding:"rounded-xl",gap:"1rem",fontSize:"text-lg",items:[{title:"Connection Issues",content:"1. Check your internet connection<br/>2. Clear browser cache and cookies<br/>3. Disable VPN if active<br/>4. Try incognito/private browsing mode<br/>5. Contact support if issues persist"},{title:"Login Problems",content:"1. Verify your email address and password<br/>2. Use 'Forgot Password' to reset<br/>3. Check for CAPS LOCK<br/>4. Try a different browser<br/>5. Ensure account is not suspended"},{title:"Performance Issues",content:"1. Close unnecessary browser tabs<br/>2. Update your browser to latest version<br/>3. Disable browser extensions<br/>4. Check system resources (RAM/CPU)<br/>5. Try using the mobile app instead"}]}}];export{k as a,v as b};
9
- //# sourceMappingURL=chunk-I3VL6SRH.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{c as p}from"./chunk-3YVJ2ELD.js";import{a as r}from"./chunk-RJYZ5FAR.js";import{a as e,f as a}from"./chunk-A3GF4PYW.js";import{b as n}from"./chunk-5YRC3IT3.js";import{b as c}from"./chunk-GACHLACT.js";import{b as o,d as t}from"./chunk-ZTZJHY4E.js";import{c as s}from"./chunk-CZRCW5EN.js";import{c as l}from"./chunk-OHNYCXPX.js";import{Type as i}from"@sinclair/typebox";import{TiSocialFlickr as m}from"react-icons/ti";var v=r({type:"social-links",name:"Social links",description:"A list of social media links",icon:m,defaultWidth:{mobile:"100%"},props:p({colorPreset:i.Optional(s({title:"Color"})),links:i.Array(i.Object({icon:i.Optional(a({"ui:default-icon-collection":"cib"})),label:i.Optional(e("Label")),href:e("Link")}),{title:"Social Links",description:"List of social media links",default:[{href:"https://facebook.com/company",label:"Facebook",icon:"mdi:facebook"},{href:"https://twitter.com/company",label:"Twitter",icon:"mdi:twitter"},{href:"https://instagram.com/company",label:"Instagram",icon:"mdi:instagram"}],"ui:widget":"array","ui:displayField":"label","ui:options":{orderable:!0,removable:!0,addable:!0},metadata:{category:"content"}}),direction:i.Optional(c({default:"flex-row"})),fontSize:i.Optional(n()),padding:i.Optional(l({default:"2rem",description:"Padding.","ai:instructions":"Use only a single value like '1rem' or '10px'",title:"Padding","ui:responsive":!0,"ui:placeholder":"Not specified","ui:styleId":"styles:padding"})),rounding:i.Optional(t({default:"rounded-md"})),border:i.Optional(o()),iconOnly:i.Optional(i.Boolean({title:"Only icons",description:"If set, the brick will only display the icons without labels."}))})}),T=[{description:"Social icons displayed horizontally, without labels",type:"social-links",props:{iconOnly:!0,links:[{href:"https://facebook.com/company",label:"Facebook",icon:"mdi:facebook"},{href:"https://twitter.com/company",label:"Twitter",icon:"mdi:twitter"},{href:"https://instagram.com/company",label:"Instagram",icon:"mdi:instagram"}]}},{description:"Social icons displayed vertically, without labels",type:"social-links",props:{iconOnly:!0,direction:"flex-col",links:[{href:"https://facebook.com/company",label:"Facebook",icon:"mdi:facebook"},{href:"https://twitter.com/company",label:"Twitter",icon:"mdi:twitter"},{href:"https://instagram.com/company",label:"Instagram",icon:"mdi:instagram"}]}},{description:"Social icons displayed horizontally, with labels",type:"social-links",props:{iconOnly:!1,links:[{href:"https://facebook.com/company",label:"Facebook",icon:"mdi:facebook"},{href:"https://twitter.com/company",label:"Twitter",icon:"mdi:twitter"},{href:"https://instagram.com/company",label:"Instagram",icon:"mdi:instagram"},{href:"https://linkedin.com/company/company",label:"LinkedIn",icon:"mdi:linkedin"}]}},{description:"Social icons displayed vertically, with labels",type:"social-links",props:{iconOnly:!1,direction:"flex-col",links:[{href:"https://facebook.com/company",label:"Facebook",icon:"mdi:facebook"},{href:"https://twitter.com/company",label:"Twitter",icon:"mdi:twitter"},{href:"https://instagram.com/company",label:"Instagram",icon:"mdi:instagram"},{href:"https://linkedin.com/company/company",label:"LinkedIn",icon:"mdi:linkedin"}]}},{description:"Professional social links with labels",type:"social-links",props:{iconOnly:!1,links:[{href:"https://linkedin.com/in/johndoe",label:"Connect on LinkedIn",icon:"mdi:linkedin"},{href:"https://github.com/johndoe",label:"View GitHub Profile",icon:"mdi:github"},{href:"https://twitter.com/johndoe",label:"Follow on Twitter",icon:"mdi:twitter"},{href:"mailto:john@example.com",label:"Send Email",icon:"mdi:email"}]}},{description:"Creative portfolio social links (icon-only inline)",type:"social-links",props:{iconOnly:!0,links:[{href:"https://dribbble.com/designer",label:"Dribbble",icon:"mdi:dribbble"},{href:"https://behance.net/designer",label:"Behance",icon:"mdi:behance"},{href:"https://instagram.com/designer",label:"Instagram",icon:"mdi:instagram"},{href:"https://pinterest.com/designer",label:"Pinterest",icon:"mdi:pinterest"},{href:"https://youtube.com/designer",label:"YouTube",icon:"mdi:youtube"}]}},{description:"Developer/tech social links with labels",type:"social-links",props:{iconOnly:!1,direction:"flex-col",links:[{href:"https://github.com/developer",label:"GitHub",icon:"mdi:github"},{href:"https://stackoverflow.com/users/developer",label:"Stack Overflow",icon:"mdi:stack-overflow"},{href:"https://dev.to/developer",label:"Dev.to",icon:"mdi:dev-to"},{href:"https://codepen.io/developer",label:"CodePen",icon:"mdi:codepen"}]}},{description:"Music artist social platforms (block layout)",type:"social-links",props:{iconOnly:!0,direction:"flex-col",links:[{href:"https://spotify.com/artist/musician",label:"Listen on Spotify",icon:"mdi:spotify"},{href:"https://music.apple.com/artist/musician",label:"Apple Music",icon:"mdi:apple"},{href:"https://soundcloud.com/musician",label:"SoundCloud",icon:"mdi:soundcloud"},{href:"https://youtube.com/musician",label:"YouTube Channel",icon:"mdi:youtube"},{href:"https://bandcamp.com/musician",label:"Bandcamp",icon:"mdi:bandcamp"}]}},{description:"Business contact icons only",type:"social-links",props:{iconOnly:!0,links:[{href:"tel:+1234567890",label:"Phone",icon:"mdi:phone"},{href:"mailto:contact@business.com",label:"Email",icon:"mdi:email"},{href:"https://maps.google.com/business",label:"Location",icon:"mdi:map-marker"},{href:"https://business.com",label:"Website",icon:"mdi:web"}]}},{description:"Gaming content creator links (inline with labels)",type:"social-links",props:{iconOnly:!1,links:[{href:"https://twitch.tv/gamer",label:"Twitch",icon:"mdi:twitch"},{href:"https://youtube.com/gamer",label:"YouTube",icon:"mdi:youtube"},{href:"https://discord.gg/gamer",label:"Discord",icon:"mdi:discord"},{href:"https://tiktok.com/@gamer",label:"TikTok",icon:"mdi:tiktok"}]}},{description:"Restaurant social presence (block layout)",type:"social-links",props:{iconOnly:!1,direction:"flex-col",links:[{href:"https://facebook.com/restaurant",label:"Follow us on Facebook",icon:"mdi:facebook"},{href:"https://instagram.com/restaurant",label:"See photos on Instagram",icon:"mdi:instagram"},{href:"https://yelp.com/restaurant",label:"Review us on Yelp",icon:"mdi:yelp"},{href:"https://tripadvisor.com/restaurant",label:"TripAdvisor Reviews",icon:"mdi:tripadvisor"},{href:"tel:+1234567890",label:"Call for Reservations",icon:"mdi:phone"}]}},{description:"Minimal footer social icons",type:"social-links",props:{iconOnly:!0,direction:"flex-row",links:[{href:"https://twitter.com/company",label:"Twitter",icon:"mdi:twitter"},{href:"https://linkedin.com/company/company",label:"LinkedIn",icon:"mdi:linkedin"},{href:"mailto:hello@company.com",label:"Email",icon:"mdi:email"}]}},{description:"E-commerce store social channels (inline with labels)",type:"social-links",props:{iconOnly:!1,direction:"flex-row",links:[{href:"https://facebook.com/store",label:"Facebook",icon:"mdi:facebook"},{href:"https://instagram.com/store",label:"Instagram",icon:"mdi:instagram"},{href:"https://pinterest.com/store",label:"Pinterest",icon:"mdi:pinterest"},{href:"https://youtube.com/store",label:"YouTube",icon:"mdi:youtube"},{href:"https://tiktok.com/@store",label:"TikTok",icon:"mdi:tiktok"}]}}];export{v as a,T as b};
4
- //# sourceMappingURL=chunk-IKC3FK7L.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{c as a}from"./chunk-3YVJ2ELD.js";import{a as d}from"./chunk-RJYZ5FAR.js";import{a as n,d as i}from"./chunk-A3GF4PYW.js";import{b as r}from"./chunk-5YRC3IT3.js";import{b as e,d as o}from"./chunk-ZTZJHY4E.js";import{c as l}from"./chunk-CZRCW5EN.js";import{Type as t}from"@sinclair/typebox";import{RxButton as p}from"react-icons/rx";var h=d({type:"button",name:"Button",category:"basic",description:"A button",aiInstructions:"A clickable button that can link to a URL or a page within the site. It can be styled with different colors, font sizes, and border radii. Don't use it in forms since forms have their own submit button.",resizable:"horizontal",icon:p,minWidth:{desktop:120,mobile:120},defaultWidth:{mobile:"100%"},props:a({colorPreset:t.Optional(l({default:{color:"primary-500"},title:"Color","ui:default-gradient-direction":"bg-gradient-to-b"})),label:n("Label",{default:"My button",metadata:{category:"content"}}),fontSize:t.Optional(r({title:"Font size",description:"The font size of the button text.",default:"text-base","ui:responsive":"desktop","ui:no-extra-large-sizes":!0})),rounding:t.Optional(o({default:"rounded-md"})),border:t.Optional(e({default:{width:"border-0"},"ui:responsive":"desktop"})),link:i({title:"Link","ui:placeholder":"https://example.com",metadata:{category:"content"}})},{noGrow:!0})}),x=[{description:"Primary button, full width, linking to an external URL",type:"button",props:{label:"Click me",link:"https://example.com",colorPreset:{color:"primary-500"}}},{description:"Secondary button, block width, linking to a page id",type:"button",props:{label:"Go to page",link:"page-id-123",colorPreset:{color:"secondary-500"}}},{description:"Neutral colored button with large text and rounded corners and external link",type:"button",props:{label:"Submit",fontSize:"text-lg",rounding:"rounded-full",link:"https://example.com",colorPreset:{color:"neutral-500"}}},{description:"Dynamic label from a page query alias named 'employee'",type:"button",props:{label:"Go to profile of {{employee.name}}",link:"/employees/{{employee.$slug}}",fontSize:"text-lg",rounding:"rounded-full",colorPreset:{color:"neutral-500"}}},{description:"Accent colored call-to-action button with medium text and subtle border",type:"button",props:{label:"Get Started",link:"/signup",fontSize:"text-base",rounding:"rounded-lg",colorPreset:{color:"accent-600"},border:{width:"border",color:"border-accent-700"}}},{description:"Small text button with sharp corners for minimal design",type:"button",props:{label:"Learn More",link:"/about",fontSize:"text-sm",rounding:"rounded-none",colorPreset:{color:"primary-400"}}},{description:"Large download button with thick border and rounded corners",type:"button",props:{label:"Download Now",link:"https://download.example.com/file.zip",fontSize:"text-xl",rounding:"rounded-xl",colorPreset:{color:"secondary-600"},border:{width:"border-2",color:"border-secondary-800"}}},{description:"Contact button with neutral colors and medium border radius",type:"button",props:{label:"Contact Us",link:"/contact",fontSize:"text-base",rounding:"rounded-md",colorPreset:{color:"neutral-600"},border:{width:"border",color:"border-neutral-400"}}},{description:"Newsletter signup button with gradient background and full rounding",type:"button",props:{label:"Subscribe to Newsletter",link:"/newsletter",fontSize:"text-lg",rounding:"rounded-full",colorPreset:{color:"primary-500",gradientDirection:"bg-gradient-to-r"}}},{description:"Shop now button with accent colors and extra large text",type:"button",props:{label:"Shop Now",link:"/shop",fontSize:"text-xl",rounding:"rounded-lg",colorPreset:{color:"accent-500"}}},{description:"Dynamic product button using product query data",type:"button",props:{label:"Buy {{product.name}} - ${{product.price}}",link:"/products/{{product.id}}/purchase",fontSize:"text-base",rounding:"rounded-md",colorPreset:{color:"primary-600"},border:{width:"border",color:"border-primary-800"}}},{description:"Event registration button with secondary gradient and medium text",type:"button",props:{label:"Register for Event",link:"/events/register",fontSize:"text-base",rounding:"rounded-lg",colorPreset:{color:"secondary-500",gradientDirection:"bg-gradient-to-br"},border:{width:"border",color:"border-secondary-300"}}}];export{h as a,x as b};
4
- //# sourceMappingURL=chunk-IKHZD2JH.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as t}from"@sinclair/typebox";var o=t.Object({url:t.Optional(t.String()),id:t.String({pattern:"^[A-Za-z0-9\\-]+$",description:"Notion Database ID"}),name:t.String({description:"Notion Database Name"}),properties:t.Any()});export{o as a};
4
- //# sourceMappingURL=chunk-IUXCWWGO.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as e}from"@sinclair/typebox";var i=(n,t={})=>e.Unsafe({type:"string",enum:n,...t});export{i as a};
4
- //# sourceMappingURL=chunk-JMN3HTZU.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as t}from"@sinclair/typebox";var e=t.Array(t.Object({url:t.String({format:"uri",title:"URL"}),title:t.String({title:"Title"}),description:t.Optional(t.String({title:"Description",format:"markdown"})),icon:t.Optional(t.String({title:"Icon",format:"uri"}))}),{description:"Schema representing a collection of links"});export{e as a};
4
- //# sourceMappingURL=chunk-KBHDY425.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as o}from"@sinclair/typebox";function n(e,t={}){return o.Ref(e,{...t})}export{n as a};
4
- //# sourceMappingURL=chunk-KFM6KXSE.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as e}from"@sinclair/typebox";var a=e.Transform(e.String({format:"date-time"})).Decode(t=>new Date(t)).Encode(t=>t.toISOString());export{a};
4
- //# sourceMappingURL=chunk-KLD3P5XH.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- var s=async({options:t})=>{let a=`https://mastodon.social/api/v1/accounts/lookup?${new URLSearchParams({acct:t.username}).toString()}`,o=await fetch(a);if(!o.ok)throw new Error(`fetchMastodonAccount Error: Response status: ${o.status}`);return await o.json()},e=s;export{e as a};
4
- //# sourceMappingURL=chunk-KO5FPOWZ.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as t}from"@sinclair/typebox";function a(o,n,e={}){return t.Boolean({title:o,default:n??!1,...e})}export{a};
4
- //# sourceMappingURL=chunk-KSEURRVZ.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as i}from"@sinclair/typebox";function d(e=!1,t="Fixed position"){return i.Boolean({title:t,default:e,"ui:styleId":"styles:fixedPositioned"})}export{d as a};
4
- //# sourceMappingURL=chunk-KYY3PHP7.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{c}from"./chunk-3YVJ2ELD.js";import{a as l}from"./chunk-RJYZ5FAR.js";import{m as i}from"./chunk-AFVJZPLS.js";import{b as a}from"./chunk-CCI4C3TM.js";import{a as o}from"./chunk-A3GF4PYW.js";import{d as r}from"./chunk-ZTZJHY4E.js";import{c as s}from"./chunk-CZRCW5EN.js";import{c as t}from"./chunk-OHNYCXPX.js";import{Type as e}from"@sinclair/typebox";import{TbCarouselHorizontal as n}from"react-icons/tb";var P=l({type:"carousel",name:"Carousel",description:"An image carousel with navigation arrows and dots or numbers indicator",aiInstructions:"Use this brick to create an image carousel or slideshow. It can display multiple images that users can navigate through using arrows or dots. Each image can have an optional legend or caption. This brick is ideal for showcasing portfolios, product images, or any visual content in an engaging way.",category:"media",defaultInspectorTab:"content",consumesMultipleQueryRows:!0,minHeight:{desktop:200},minWidth:{desktop:300},icon:n,props:c({colorPreset:e.Optional(s({title:"Color"})),padding:e.Optional(t({default:"1rem",description:"Padding inside the carousel.","ai:instructions":"Use only a single value like '1rem' or '10px'",title:"Padding","ui:responsive":!0,"ui:placeholder":"Not specified","ui:styleId":"styles:padding"})),images:e.Optional(e.Array(e.Object({src:a({"ui:responsive":"desktop","ui:no-alt-text":!0,"ui:no-object-options":!0}),legend:o("Legend")}),{title:"Images",default:[],maxItems:12,metadata:{category:"content"}})),borderRadius:e.Optional(r({default:"rounded-md"})),loop:e.Optional(i())})}),b=[{description:"Basic image carousel with legends",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/800x400.png?text=Slide+1",alt:"First slide"},legend:"Beautiful landscape"},{src:{src:"https://via.placeholder.com/800x400.png?text=Slide+2",alt:"Second slide"},legend:"Amazing architecture"},{src:{src:"https://via.placeholder.com/800x400.png?text=Slide+3",alt:"Third slide"},legend:"Stunning nature"}]}},{description:"Product showcase carousel with rounded corners and padding",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/600x400.png?text=Product+1",alt:"Product 1"},legend:"Premium Headphones - $199"},{src:{src:"https://via.placeholder.com/600x400.png?text=Product+2",alt:"Product 2"},legend:"Wireless Speaker - $149"},{src:{src:"https://via.placeholder.com/600x400.png?text=Product+3",alt:"Product 3"},legend:"Smart Watch - $299"},{src:{src:"https://via.placeholder.com/600x400.png?text=Product+4",alt:"Product 4"},legend:"Laptop Stand - $79"}],borderRadius:"rounded-xl",padding:"2rem",colorPreset:{color:"gray-50"}}},{description:"Portfolio carousel with minimal styling",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/900x600.png?text=Portfolio+1",alt:"Portfolio piece 1"},legend:"Web Design Project"},{src:{src:"https://via.placeholder.com/900x600.png?text=Portfolio+2",alt:"Portfolio piece 2"},legend:"Brand Identity Design"},{src:{src:"https://via.placeholder.com/900x600.png?text=Portfolio+3",alt:"Portfolio piece 3"},legend:"Mobile App Interface"}],borderRadius:"rounded-none",padding:"0"}},{description:"Event photos carousel with primary color theme",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/800x500.png?text=Event+Photo+1",alt:"Event photo 1"},legend:"Opening Ceremony"},{src:{src:"https://via.placeholder.com/800x500.png?text=Event+Photo+2",alt:"Event photo 2"},legend:"Keynote Speaker"},{src:{src:"https://via.placeholder.com/800x500.png?text=Event+Photo+3",alt:"Event photo 3"},legend:"Networking Session"},{src:{src:"https://via.placeholder.com/800x500.png?text=Event+Photo+4",alt:"Event photo 4"},legend:"Award Ceremony"},{src:{src:"https://via.placeholder.com/800x500.png?text=Event+Photo+5",alt:"Event photo 5"},legend:"Closing Remarks"}],colorPreset:{color:"primary-100"},borderRadius:"rounded-lg",padding:"1.5rem"}},{description:"Travel destinations carousel without legends",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/700x450.png?text=Paris",alt:"Paris cityscape"},legend:""},{src:{src:"https://via.placeholder.com/700x450.png?text=Tokyo",alt:"Tokyo skyline"},legend:""},{src:{src:"https://via.placeholder.com/700x450.png?text=New+York",alt:"New York streets"},legend:""},{src:{src:"https://via.placeholder.com/700x450.png?text=London",alt:"London landmarks"},legend:""}],borderRadius:"rounded-2xl",padding:"1rem"}},{description:"Team members carousel with blue color scheme",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/400x400.png?text=Team+1",alt:"Team member 1"},legend:"John Smith - CEO"},{src:{src:"https://via.placeholder.com/400x400.png?text=Team+2",alt:"Team member 2"},legend:"Sarah Johnson - CTO"},{src:{src:"https://via.placeholder.com/400x400.png?text=Team+3",alt:"Team member 3"},legend:"Mike Davis - Design Lead"},{src:{src:"https://via.placeholder.com/400x400.png?text=Team+4",alt:"Team member 4"},legend:"Emily Chen - Marketing Director"}],colorPreset:{color:"blue-50"},borderRadius:"rounded-full",padding:"2rem"}},{description:"Recipe steps carousel with detailed descriptions",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/600x400.png?text=Step+1",alt:"Recipe step 1"},legend:"Step 1: Prepare all ingredients"},{src:{src:"https://via.placeholder.com/600x400.png?text=Step+2",alt:"Recipe step 2"},legend:"Step 2: Heat oil in a large pan"},{src:{src:"https://via.placeholder.com/600x400.png?text=Step+3",alt:"Recipe step 3"},legend:"Step 3: Add vegetables and saut\xE9"},{src:{src:"https://via.placeholder.com/600x400.png?text=Step+4",alt:"Recipe step 4"},legend:"Step 4: Season and serve hot"}],colorPreset:{color:"orange-50"},borderRadius:"rounded-md",padding:"1.5rem"}},{description:"Before and after comparison carousel",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/800x400.png?text=Before+1",alt:"Before renovation 1"},legend:"Kitchen - Before Renovation"},{src:{src:"https://via.placeholder.com/800x400.png?text=After+1",alt:"After renovation 1"},legend:"Kitchen - After Renovation"},{src:{src:"https://via.placeholder.com/800x400.png?text=Before+2",alt:"Before renovation 2"},legend:"Living Room - Before"},{src:{src:"https://via.placeholder.com/800x400.png?text=After+2",alt:"After renovation 2"},legend:"Living Room - After"}],colorPreset:{color:"green-50"},borderRadius:"rounded-lg",padding:"1rem"}},{description:"Art gallery carousel with dramatic styling",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/600x800.png?text=Artwork+1",alt:"Abstract painting 1"},legend:"Abstract Composition #1 - 2023"},{src:{src:"https://via.placeholder.com/600x800.png?text=Artwork+2",alt:"Abstract painting 2"},legend:"Urban Landscape - 2023"},{src:{src:"https://via.placeholder.com/600x800.png?text=Artwork+3",alt:"Abstract painting 3"},legend:"Color Study #7 - 2024"}],colorPreset:{color:"gray-900"},borderRadius:"rounded-sm",padding:"3rem"}},{description:"Fashion lookbook carousel with purple theme",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/500x700.png?text=Look+1",alt:"Fashion look 1"},legend:"Spring Collection - Casual Chic"},{src:{src:"https://via.placeholder.com/500x700.png?text=Look+2",alt:"Fashion look 2"},legend:"Summer Vibes - Beach Ready"},{src:{src:"https://via.placeholder.com/500x700.png?text=Look+3",alt:"Fashion look 3"},legend:"Autumn Elegance - Business"},{src:{src:"https://via.placeholder.com/500x700.png?text=Look+4",alt:"Fashion look 4"},legend:"Winter Style - Cozy Comfort"},{src:{src:"https://via.placeholder.com/500x700.png?text=Look+5",alt:"Fashion look 5"},legend:"Evening Wear - Formal Event"},{src:{src:"https://via.placeholder.com/500x700.png?text=Look+6",alt:"Fashion look 6"},legend:"Weekend Casual - Relaxed Fit"}],colorPreset:{color:"purple-100"},borderRadius:"rounded-xl",padding:"2rem"}},{description:"Car showcase carousel with compact design",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/800x450.png?text=Car+1",alt:"Sports car 1"},legend:"2024 Sports Coupe"},{src:{src:"https://via.placeholder.com/800x450.png?text=Car+2",alt:"SUV model"},legend:"Family SUV"},{src:{src:"https://via.placeholder.com/800x450.png?text=Car+3",alt:"Electric vehicle"},legend:"Electric Sedan"}],colorPreset:{color:"red-50"},borderRadius:"rounded-lg",padding:"0.5rem"}},{description:"Software features carousel with large padding",type:"carousel",props:{images:[{src:{src:"https://via.placeholder.com/900x500.png?text=Feature+1",alt:"Software feature 1"},legend:"Dashboard Analytics - Real-time insights"},{src:{src:"https://via.placeholder.com/900x500.png?text=Feature+2",alt:"Software feature 2"},legend:"Team Collaboration - Work together seamlessly"},{src:{src:"https://via.placeholder.com/900x500.png?text=Feature+3",alt:"Software feature 3"},legend:"Mobile App - Access anywhere, anytime"},{src:{src:"https://via.placeholder.com/900x500.png?text=Feature+4",alt:"Software feature 4"},legend:"Security - Enterprise-grade protection"}],colorPreset:{color:"indigo-50"},borderRadius:"rounded-2xl",padding:"4rem"}},{description:"Dynamic product gallery using products query with pricing and details",type:"carousel",props:{images:[{src:{src:"{{products.image}}",alt:"{{products.name}}"},legend:"{{products.name}} - ${{products.price}}"}],colorPreset:{color:"primary-50"},borderRadius:"rounded-lg",padding:"1.5rem",loop:{over:"products"}}},{description:"Team member carousel using teamMembers query with roles and departments",type:"carousel",props:{images:[{src:{src:"{{teamMembers.photo}}",alt:"{{teamMembers.fullName}}"},legend:"{{teamMembers.fullName}} - {{teamMembers.position}}, {{teamMembers.department}}"}],colorPreset:{color:"secondary-100"},borderRadius:"rounded-xl",padding:"2rem",loop:{over:"teamMembers"}}},{description:"Portfolio showcase using portfolioProjects query with client information",type:"carousel",props:{images:[{src:{src:"{{portfolioProjects.featuredImage}}",alt:"{{portfolioProjects.projectName}}"},legend:"{{portfolioProjects.projectName}} - {{portfolioProjects.clientName}} ({{portfolioProjects.year}})"}],colorPreset:{color:"neutral-100"},borderRadius:"rounded-md",padding:"1rem",loop:{over:"portfolioProjects"}}},{description:"Event photo gallery using eventPhotos query with captions and dates",type:"carousel",props:{images:[{src:{src:"{{eventPhotos.imageUrl}}",alt:"{{eventPhotos.caption}}"},legend:"{{eventPhotos.caption}} - {{eventPhotos.eventDate}}"}],colorPreset:{color:"accent-50"},borderRadius:"rounded-lg",padding:"2rem",loop:{over:"eventPhotos"}}},{description:"Property listings carousel using realEstateProperties query with pricing",type:"carousel",props:{images:[{src:{src:"{{realEstateProperties.mainPhoto}}",alt:"{{realEstateProperties.address}}"},legend:"{{realEstateProperties.address}} - ${{realEstateProperties.price}} \u2022 {{realEstateProperties.bedrooms}}BR/{{realEstateProperties.bathrooms}}BA"}],colorPreset:{color:"primary-100"},borderRadius:"rounded-xl",padding:"1.5rem",loop:{over:"realEstateProperties"}}},{description:"Restaurant menu carousel using menuItems query with categories and prices",type:"carousel",props:{images:[{src:{src:"{{menuItems.photo}}",alt:"{{menuItems.dishName}}"},legend:"{{menuItems.dishName}} - {{menuItems.category}} \u2022 ${{menuItems.price}}"}],colorPreset:{color:"neutral-50"},borderRadius:"rounded-lg",padding:"1rem",loop:{over:"menuItems"}}},{description:"Travel destinations carousel using destinations query with country information",type:"carousel",props:{images:[{src:{src:"{{destinations.heroImage}}",alt:"{{destinations.cityName}}"},legend:"{{destinations.cityName}}, {{destinations.country}} - {{destinations.bestTimeToVisit}}"}],colorPreset:{color:"secondary-50"},borderRadius:"rounded-2xl",padding:"2.5rem",loop:{over:"destinations"}}},{description:"Art collection carousel using artworks query with artist and year information",type:"carousel",props:{images:[{src:{src:"{{artworks.imageUrl}}",alt:"{{artworks.title}}"},legend:"{{artworks.title}} by {{artworks.artist}} ({{artworks.year}}) - {{artworks.medium}}"}],colorPreset:{color:"accent-100"},borderRadius:"rounded-sm",padding:"3rem",loop:{over:"artworks"}}}];export{P as a,b};
4
- //# sourceMappingURL=chunk-NJGXC7D6.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{a as o}from"./chunk-KFM6KXSE.js";import{Type as t}from"@sinclair/typebox";function s(r,e="Text color"){return t.String({title:e,"ai:instructions":"hex/rgb/rgba color or classes like `text-<variant>-<shade>`, variants being `primary`, `secondary`, `accent` and `neutral`, and shades between 50 and 900",default:r,"ui:styleId":"styles:color","ui:field":"color","ui:color-type":"text"})}function l(r={}){return o("styles:color",{...r,"ui:styleId":"styles:color"})}function a(r,e="Border color"){return t.String({title:e,"ai:instructions":"hex/rgb/rgba color or classes like `border-<variant>-<shade>`, variants being `primary`, `secondary`, `accent` and `neutral`, and shades between 50 and 900",default:r,"ui:styleId":"styles:borderColor","ui:field":"color","ui:color-type":"border"})}function c(r={}){return o("styles:borderColor",{...r,"ui:styleId":"styles:borderColor"})}export{s as a,l as b,a as c,c as d};
4
- //# sourceMappingURL=chunk-NM5MMPCF.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{a as o}from"./chunk-AI4GHU7R.js";import{f as a}from"./chunk-GOMXZC4B.js";import{a as t}from"./chunk-AFVJZPLS.js";import{Type as e}from"@sinclair/typebox";var r=e.Object({id:e.String({description:"The unique ID of the page. Use a human readable url-safe slug",examples:["home","about-us","products-list"]}),label:e.String({description:"The label (name) of the page",examples:["Home","About us","Products"]}),sections:e.Array(a,{description:"The sections of the page. See the Section schema"}),attributes:o});function c(){return t(r)}export{r as a,c as b};
4
- //# sourceMappingURL=chunk-OGBMYMZD.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/shared/page.ts"],"sourcesContent":["import { pageAttributesSchema } from \"./attributes\";\nimport { sectionSchema } from \"./bricks\";\nimport { Type, type Static } from \"@sinclair/typebox\";\nimport { toLLMSchema } from \"./utils/llm\";\n\nexport const pageSchema = Type.Object({\n id: Type.String({\n description: \"The unique ID of the page. Use a human readable url-safe slug\",\n examples: [\"home\", \"about-us\", \"products-list\"],\n }),\n label: Type.String({\n description: \"The label (name) of the page\",\n examples: [\"Home\", \"About us\", \"Products\"],\n }),\n sections: Type.Array(sectionSchema, {\n description: \"The sections of the page. See the Section schema\",\n }),\n attributes: pageAttributesSchema,\n});\n\nexport function getPageSchemaForLLM() {\n return toLLMSchema(pageSchema);\n}\n\nexport type Page = Static<typeof pageSchema>;\nexport type VersionedPage = Page & { version: string };\n\n/**\n * Page context represents the page config PLUS:\n * - the pathParams of the actual request.\n * - the resolved data for the page.\n */\nexport type PageContext = VersionedPage & {\n pathParams?: Record<string, string>;\n data?: Record<string, unknown[]>;\n};\n"],"mappings":";;wHAEA,OAAS,QAAAA,MAAyB,oBAG3B,IAAMC,EAAaC,EAAK,OAAO,CACpC,GAAIA,EAAK,OAAO,CACd,YAAa,gEACb,SAAU,CAAC,OAAQ,WAAY,eAAe,CAChD,CAAC,EACD,MAAOA,EAAK,OAAO,CACjB,YAAa,+BACb,SAAU,CAAC,OAAQ,WAAY,UAAU,CAC3C,CAAC,EACD,SAAUA,EAAK,MAAMC,EAAe,CAClC,YAAa,kDACf,CAAC,EACD,WAAYC,CACd,CAAC,EAEM,SAASC,GAAsB,CACpC,OAAOC,EAAYL,CAAU,CAC/B","names":["Type","pageSchema","Type","sectionSchema","pageAttributesSchema","getPageSchemaForLLM","toLLMSchema"]}
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{a as n}from"./chunk-KFM6KXSE.js";import{Type as s}from"@sinclair/typebox";var e=["px","%","em","rem","vh","vw","dvh","dvw","rlh","lh","cqh","cqw"];function p(t={}){return s.String({title:"Length",description:`A CSS length value. Must be a number with a unit (e.g. "10px", "50%"). The unit can be one of the following: ${e?.join(", ")}.`,default:t.default,"ui:field":"css-length","ui:css-units":e,examples:["100px","50%","2em","1.5rem"],...t})}function c(t={}){return n("styles:cssLength",t)}function g(t){return typeof t!="string"?!1:new RegExp(`^-?\\d+(?:\\.\\d+)?\\s*(${e.join("|")})$`).test(t)}export{e as a,p as b,c,g as d};
4
- //# sourceMappingURL=chunk-OHNYCXPX.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{mergeWith as e,isArray as i}from"lodash-es";function m(r,...n){return e(r,...n,t)}function t(r,n){if(i(r))return n}export{m as a};
4
- //# sourceMappingURL=chunk-OIY3EPHO.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as n}from"@sinclair/typebox";function a(e,s,t){let o={"ui:field":"enum","ui:display":t.displayAs||"select"},{options:r,displayAs:l,...u}=t;return n.Union(r.map(i=>n.Literal(typeof i=="string"?i:i.value,{title:typeof i=="string"?i:i.title,"ui:icon":typeof i=="string"?void 0:i.icon})),{title:e,default:s,...o,...u})}export{a};
4
- //# sourceMappingURL=chunk-PIG623TZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/shared/bricks/props/enum.ts"],"sourcesContent":["import { type SchemaOptions, Type } from \"@sinclair/typebox\";\n\ntype EnumOption = {\n title?: string;\n description?: string;\n value: string;\n icon?: string;\n};\n\nexport function enumProp(\n title: string,\n defaultValue: string,\n opts: Omit<SchemaOptions, \"title\" | \"default\"> & {\n options: EnumOption[] | string[];\n displayAs?: \"radio\" | \"select\" | \"button-group\" | \"icon-group\";\n },\n) {\n const defaultOpts = {\n \"ui:field\": \"enum\",\n \"ui:display\": opts.displayAs || \"select\",\n };\n const { options, displayAs, ...commonOpts } = opts;\n\n return Type.Union(\n options.map((opt) =>\n Type.Literal(typeof opt === \"string\" ? opt : opt.value, {\n title: typeof opt === \"string\" ? opt : opt.title,\n \"ui:icon\": typeof opt === \"string\" ? undefined : opt.icon,\n }),\n ),\n {\n title,\n default: defaultValue,\n ...defaultOpts,\n ...commonOpts,\n },\n );\n}\n"],"mappings":";;AAAA,OAA6B,QAAAA,MAAY,oBASlC,SAASC,EACdC,EACAC,EACAC,EAIA,CACA,IAAMC,EAAc,CAClB,WAAY,OACZ,aAAcD,EAAK,WAAa,QAClC,EACM,CAAE,QAAAE,EAAS,UAAAC,EAAW,GAAGC,CAAW,EAAIJ,EAE9C,OAAOJ,EAAK,MACVM,EAAQ,IAAKG,GACXT,EAAK,QAAQ,OAAOS,GAAQ,SAAWA,EAAMA,EAAI,MAAO,CACtD,MAAO,OAAOA,GAAQ,SAAWA,EAAMA,EAAI,MAC3C,UAAW,OAAOA,GAAQ,SAAW,OAAYA,EAAI,IACvD,CAAC,CACH,EACA,CACE,MAAAP,EACA,QAASC,EACT,GAAGE,EACH,GAAGG,CACL,CACF,CACF","names":["Type","enumProp","title","defaultValue","opts","defaultOpts","options","displayAs","commonOpts","opt"]}
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{c as p}from"./chunk-3YVJ2ELD.js";import{a as c}from"./chunk-RJYZ5FAR.js";import{m as t}from"./chunk-AFVJZPLS.js";import{d as r,f as n}from"./chunk-A3GF4PYW.js";import{b as i}from"./chunk-NM5MMPCF.js";import{c as e}from"./chunk-OHNYCXPX.js";import{PiConfetti as s}from"react-icons/pi";import{Type as o}from"@sinclair/typebox";var g=c({type:"icon",name:"Icon",category:"basic",description:"An icon.",aiInstructions:"Uses iconify references",resizable:!1,staticClasses:"!grow-0",icon:s,props:p({icon:n({default:"mdi:heart"}),size:o.Optional(e({title:"Size",description:"The size of the icon. Can be a CSS length value (e.g. '2em', '24px')",default:"1em","ui:css-units":["em","rem","px"],"ai:instructions":"Use 'em', 'rem', or 'px' for units. Example: '2em', '24px'"})),color:o.Optional(i({title:"Color",default:"currentColor","ui:hide-color-label":!0})),link:o.Optional(r({title:"Link"})),loop:o.Optional(t())},{noGrow:!0})}),k=[{description:"Large heart icon with inherited color and size",type:"icon",props:{icon:"mdi:heart"}},{description:"Shopping cart icon",type:"icon",props:{icon:"mdi:cart",size:"1.2em"}},{description:"Social media icon with blue color and link",type:"icon",props:{icon:"mdi:facebook",size:"1.5em",color:"#1877f2",link:"https://facebook.com/yourpage"}},{description:"Warning icon with orange color for alerts",type:"icon",props:{icon:"mdi:alert-triangle",size:"1.8em",color:"#f59e0b"}},{description:"Email contact icon with link",type:"icon",props:{icon:"mdi:email",size:"1.3em",color:"#4f46e5",link:"mailto:contact@example.com"}},{description:"Phone icon with green color",type:"icon",props:{icon:"mdi:phone",size:"1.4em",color:"#10b981"}},{description:"Location pin icon with red color",type:"icon",props:{icon:"mdi:map-marker",size:"2.2em",color:"#ef4444"}},{description:"Twitter/X icon with custom color and link",type:"icon",props:{icon:"mdi:twitter",size:"1.6em",color:"#000000",link:"https://x.com/yourhandle"}},{description:"Star rating icon with gold color",type:"icon",props:{icon:"mdi:star",size:"1.2em",color:"#fbbf24"}},{description:"Download icon with link and purple color",type:"icon",props:{icon:"mdi:download",size:"1.5em",color:"#8b5cf6",link:"/files/brochure.pdf"}},{description:"Menu hamburger icon for navigation",type:"icon",props:{icon:"mdi:menu",size:"1.8em",color:"#374151"}},{description:"Search icon with dark color",type:"icon",props:{icon:"mdi:magnify",size:"1.1em",color:"#1f2937"}}];export{g as a,k as b};
4
- //# sourceMappingURL=chunk-PLSV746R.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{b as n,c as w}from"./chunk-R6ATC4TC.js";import{a as g,b as z}from"./chunk-CFF6Q7O7.js";import{a as l,b as A}from"./chunk-IKC3FK7L.js";import{a as x,b as C}from"./chunk-E6XEI7IK.js";import{a as c,b as F}from"./chunk-SQ5T4AT5.js";import{a as M,b as G}from"./chunk-G5CJU6RD.js";import{a as E,b as H}from"./chunk-PSTFJ5IJ.js";import{a as m,b as T}from"./chunk-NJGXC7D6.js";import{a as i,b as L}from"./chunk-SXHDQ64Z.js";import{a as o,b as W}from"./chunk-QX6OGRRT.js";import{a as d,b as I}from"./chunk-FLOMNC6J.js";import{a as y,b as P}from"./chunk-PLSV746R.js";import{a as r,b as j}from"./chunk-WBZW5LVH.js";import{a as f,b as q}from"./chunk-WYVJE6J5.js";import{a as t,b as v}from"./chunk-I3VL6SRH.js";import{a as p,b as D}from"./chunk-B3EATRFX.js";import{a as s,b as R}from"./chunk-IKHZD2JH.js";import{a,b as S}from"./chunk-PXI7AHWS.js";import{a as k,c as B}from"./chunk-SY6DZLTC.js";import{a as b,c as h}from"./chunk-7A2JNQX3.js";import{b as e}from"./chunk-RJYZ5FAR.js";import{a as u}from"./chunk-JMN3HTZU.js";var fe={[M.type]:M,[o.type]:o,[r.type]:r,[E.type]:E,[a.type]:a,[n.type]:n,[i.type]:i,[g.type]:g,[f.type]:f,[m.type]:m,[k.type]:k,[b.type]:b,[s.type]:s,[y.type]:y,[l.type]:l,[p.type]:p,[x.type]:x,[c.type]:c,[t.type]:t,[d.type]:d},ne={[M.type]:e(M),[o.type]:e(o),[r.type]:e(r),[E.type]:e(E),[a.type]:e(a),[g.type]:e(g),[n.type]:e(n),[i.type]:e(i),[f.type]:e(f),[m.type]:e(m),[k.type]:e(k),[b.type]:e(b),[s.type]:e(s),[y.type]:e(y),[l.type]:e(l),[p.type]:e(p),[x.type]:e(x),[c.type]:e(c),[t.type]:e(t),[d.type]:e(d)},le=u([M.type,o.type,r.type,E.type,a.type,n.type,i.type,f.type,m.type,s.type,y.type,l.type,p.type,x.type,c.type,t.type,d.type],{title:"Brick type"}),xe={[M.type]:G,[o.type]:W,[r.type]:j,[E.type]:H,[a.type]:S,[n.type]:w,[i.type]:L,[g.type]:z,[f.type]:q,[m.type]:T,[k.type]:B,[b.type]:h,[s.type]:R,[y.type]:P,[l.type]:A,[p.type]:D,[x.type]:C,[c.type]:F,[t.type]:v,[d.type]:I};export{fe as a,ne as b,le as c,xe as d};
4
- //# sourceMappingURL=chunk-PSCN3VVA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/shared/bricks/manifests/all-manifests.ts"],"sourcesContent":["import { examples as accordionExamples, manifest as accordionManifest } from \"./accordion.manifest\";\nimport { examples as boxExamples, manifest as boxManifest } from \"./box.manifest\";\nimport { examples as buttonExamples, manifest as buttonManifest } from \"./button.manifest\";\nimport { examples as cardExamples, manifest as cardManifest } from \"./card.manifest\";\nimport { examples as carouselExamples, manifest as carouselManifest } from \"./carousel.manifest\";\nimport { examples as footerExamples, manifest as footerManifest } from \"./footer.manifest\";\nimport { examples as formExamples, manifest as formManifest } from \"./form.manifest\";\nimport { examples as heroExamples, manifest as heroManifest } from \"./hero.manifest\";\nimport { examples as iconExamples, manifest as iconManifest } from \"./icon.manifest\";\nimport { examples as imageExamples, manifest as imageManifest } from \"./image.manifest\";\nimport { examples as imagesWallExamples, manifest as imagesWallManifest } from \"./images-gallery.manifest\";\nimport { examples as mapExamples, manifest as mapManifest } from \"./map.manifest\";\nimport { examples as navbarExamples, manifest as navbarManifest } from \"./navbar.manifest\";\nimport { examples as sidebarExamples, manifest as sidebarManifest } from \"./sidebar.manifest\";\nimport { examples as socialLinksExamples, manifest as socialLinksManifest } from \"./social-links.manifest\";\nimport { examples as spacerExamples, manifest as spacerManifest } from \"./spacer.manifest\";\nimport { examples as testimonialsExamples, manifest as testimonialsManifest } from \"./testimonials.manifest\";\nimport { examples as textExamples, manifest as textManifest } from \"./text.manifest\";\nimport { examples as videoExamples, manifest as videoManifest } from \"./video.manifest\";\nimport { examples as htmlExamples, manifest as htmlManifest } from \"./html.manifest\";\nimport { getBrickManifestDefaults, type BrickDefaults, type BrickManifest } from \"../../brick-manifest\";\nimport { StringEnum } from \"~/shared/utils/string-enum\";\nimport type { Static } from \"@sinclair/typebox\";\n\nexport const manifests: Record<string, BrickManifest> = {\n [textManifest.type]: textManifest,\n [heroManifest.type]: heroManifest,\n [imageManifest.type]: imageManifest,\n [videoManifest.type]: videoManifest,\n [cardManifest.type]: cardManifest,\n [mapManifest.type]: mapManifest,\n [formManifest.type]: formManifest,\n [sidebarManifest.type]: sidebarManifest,\n [imagesWallManifest.type]: imagesWallManifest,\n [carouselManifest.type]: carouselManifest,\n [navbarManifest.type]: navbarManifest,\n [footerManifest.type]: footerManifest,\n [buttonManifest.type]: buttonManifest,\n [iconManifest.type]: iconManifest,\n [socialLinksManifest.type]: socialLinksManifest,\n [boxManifest.type]: boxManifest,\n [spacerManifest.type]: spacerManifest,\n [testimonialsManifest.type]: testimonialsManifest,\n [accordionManifest.type]: accordionManifest,\n [htmlManifest.type]: htmlManifest,\n};\n\nexport const defaultProps: Record<keyof typeof manifests, BrickDefaults> = {\n [textManifest.type]: getBrickManifestDefaults(textManifest),\n [heroManifest.type]: getBrickManifestDefaults(heroManifest),\n [imageManifest.type]: getBrickManifestDefaults(imageManifest),\n [videoManifest.type]: getBrickManifestDefaults(videoManifest),\n [cardManifest.type]: getBrickManifestDefaults(cardManifest),\n [sidebarManifest.type]: getBrickManifestDefaults(sidebarManifest),\n [mapManifest.type]: getBrickManifestDefaults(mapManifest),\n [formManifest.type]: getBrickManifestDefaults(formManifest),\n [imagesWallManifest.type]: getBrickManifestDefaults(imagesWallManifest),\n [carouselManifest.type]: getBrickManifestDefaults(carouselManifest),\n [navbarManifest.type]: getBrickManifestDefaults(navbarManifest),\n [footerManifest.type]: getBrickManifestDefaults(footerManifest),\n [buttonManifest.type]: getBrickManifestDefaults(buttonManifest),\n [iconManifest.type]: getBrickManifestDefaults(iconManifest),\n [socialLinksManifest.type]: getBrickManifestDefaults(socialLinksManifest),\n [boxManifest.type]: getBrickManifestDefaults(boxManifest),\n [spacerManifest.type]: getBrickManifestDefaults(spacerManifest),\n [testimonialsManifest.type]: getBrickManifestDefaults(testimonialsManifest),\n [accordionManifest.type]: getBrickManifestDefaults(accordionManifest),\n [htmlManifest.type]: getBrickManifestDefaults(htmlManifest),\n};\n\n// Do not include footer, navbar and sidebar\nexport const brickTypes = StringEnum<(keyof typeof manifests)[]>(\n [\n textManifest.type,\n heroManifest.type,\n imageManifest.type,\n videoManifest.type,\n cardManifest.type,\n mapManifest.type,\n formManifest.type,\n imagesWallManifest.type,\n carouselManifest.type,\n buttonManifest.type,\n iconManifest.type,\n socialLinksManifest.type,\n boxManifest.type,\n spacerManifest.type,\n testimonialsManifest.type,\n accordionManifest.type,\n htmlManifest.type,\n ],\n {\n title: \"Brick type\",\n },\n);\n\nexport type BrickType = Static<typeof brickTypes>;\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\nexport const examples: Record<string, { description: string; type: string; props: any }[]> = {\n [textManifest.type]: textExamples,\n [heroManifest.type]: heroExamples,\n [imageManifest.type]: imageExamples,\n [videoManifest.type]: videoExamples,\n [cardManifest.type]: cardExamples,\n [mapManifest.type]: mapExamples,\n [formManifest.type]: formExamples,\n [sidebarManifest.type]: sidebarExamples,\n [imagesWallManifest.type]: imagesWallExamples,\n [carouselManifest.type]: carouselExamples,\n [navbarManifest.type]: navbarExamples,\n [footerManifest.type]: footerExamples,\n [buttonManifest.type]: buttonExamples,\n [iconManifest.type]: iconExamples,\n [socialLinksManifest.type]: socialLinksExamples,\n [boxManifest.type]: boxExamples,\n [spacerManifest.type]: spacerExamples,\n [testimonialsManifest.type]: testimonialsExamples,\n [accordionManifest.type]: accordionExamples,\n [htmlManifest.type]: htmlExamples,\n};\n"],"mappings":"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","names":["manifests","manifest","defaultProps","getBrickManifestDefaults","brickTypes","StringEnum","examples"]}
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{c as s}from"./chunk-3YVJ2ELD.js";import{a as p}from"./chunk-RJYZ5FAR.js";import{a as t}from"./chunk-A3GF4PYW.js";import{b as r}from"./chunk-4BTB3MU2.js";import{b as o,d as i}from"./chunk-ZTZJHY4E.js";import{c as d}from"./chunk-OHNYCXPX.js";import{RxVideo as n}from"react-icons/rx";import{Type as e}from"@sinclair/typebox";var w=p({type:"video",name:"Video",category:"media",description:"An embedded video player for YouTube / Vimeo / Wistia links",icon:n,defaultWidth:{mobile:"auto",desktop:`${360*16/9}px`},defaultHeight:{mobile:"168px",desktop:"360px"},minWidth:{mobile:300,desktop:360*16/9},minHeight:{mobile:168,desktop:360},props:s({url:t("Video URL",{description:"URL of the video to embed. It can be a YouTube link or an embed link. It also supports Vimeo and Wistia links.",default:"https://www.youtube.com/watch?v=dQw4w9WgXcQ",metadata:{category:"content","ui:responsive":"desktop"}}),padding:e.Optional(d({description:"Padding inside the video player.","ai:instructions":"Use only a single value like '1rem' or '10px'",title:"Padding","ui:responsive":!0,"ui:placeholder":"Not specified","ui:styleId":"styles:padding"})),rounding:e.Optional(i({default:"rounded-md"})),border:e.Optional(o()),shadow:e.Optional(r())})}),b=[{description:"A YouTube video",type:"video",props:{url:"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},{description:"An embedded YouTube video",type:"video",props:{url:"https://www.youtube.com/embed/dQw4w9WgXcQ"}},{description:"A Vimeo video",type:"video",props:{url:"https://vimeo.com/123456789"}},{description:"Dynamic course video using course query",type:"video",props:{url:"{{course.videoUrl}}",padding:"1rem",rounding:"rounded-lg",shadow:"shadow-md"}},{description:"Dynamic product demo video using product query",type:"video",props:{url:"{{product.demoVideoUrl}}",padding:"0.5rem",rounding:"rounded-xl",shadow:"shadow-lg",border:{width:"border-2",color:"border-primary-300"}}}];export{w as a,b};
4
- //# sourceMappingURL=chunk-PSTFJ5IJ.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{c as d}from"./chunk-3YVJ2ELD.js";import{a as c}from"./chunk-RJYZ5FAR.js";import{m as p}from"./chunk-AFVJZPLS.js";import{b as n}from"./chunk-CCI4C3TM.js";import{f as t}from"./chunk-5YRC3IT3.js";import{b as a}from"./chunk-4BTB3MU2.js";import{b as r,d as i}from"./chunk-ZTZJHY4E.js";import{c as s}from"./chunk-CZRCW5EN.js";import{a as o}from"./chunk-JMN3HTZU.js";import{BsCardText as m}from"react-icons/bs";import{Type as e}from"@sinclair/typebox";var I=c({type:"card",name:"Card",description:"A card that can have a title, image, and content.",aiInstructions:"Use this brick to create cards that contain an image, title, and text content. Cards are useful for displaying information in a concise and visually appealing way.",icon:m,defaultWidth:{desktop:"400px",mobile:"100%"},minWidth:{desktop:300},minHeight:{mobile:200,desktop:200},maxWidth:{desktop:650},props:d({colorPreset:e.Optional(s({title:"Color preset",default:{color:"base-100"}})),cardImage:e.Optional(n({"ui:responsive":"desktop",metadata:{category:"content"}})),imagePosition:e.Optional(o(["top","middle","bottom","left","right"],{enumNames:["Top","Middle","Bottom","Left","Right"],title:"Image Position",description:"Where the image should be placed in the card",default:"top","ui:responsive":"desktop",metadata:{category:"content",filter:(g,l)=>!!l.cardImage?.src}})),noTitle:e.Optional(e.Boolean({title:"No Title",description:"Whether to hide the card title",default:!1,"ui:responsive":"desktop"})),title:e.Optional(t({title:"Title"})),text:e.Optional(t({title:"Text"})),rounding:e.Optional(i({default:"rounded-md"})),border:e.Optional(r({})),shadow:e.Optional(a({default:"shadow-sm"})),loop:e.Optional(p())})}),R=[{description:"A simple card with a title and content",type:"card",props:{title:"Card Title",text:"This is the body of the card."}},{description:"Product card with image on the left",type:"card",props:{cardImage:{src:"https://via.placeholder.com/200x200",alt:"Product image"},title:"Premium Headphones",text:"High-quality wireless headphones with noise cancellation and 30-hour battery life."}},{description:"Feature card with large padding and background",type:"card",props:{title:"Key Feature",text:"This feature provides exceptional value and enhances user experience significantly."}},{description:"Blog post card with image at the bottom",type:"card",props:{title:"The Future of Technology",text:"Exploring emerging trends and innovations that will shape our digital landscape in the coming decade.",cardImage:{src:"https://via.placeholder.com/400x200",alt:"Technology concept"}}},{description:"Testimonial card with right-side image",type:"card",props:{title:"Customer Review",text:'"This product exceeded my expectations. The quality is outstanding and the customer service is top-notch!"',cardImage:{src:"https://via.placeholder.com/150x150",alt:"Customer photo"}}},{description:"Minimal centered card without image",type:"card",props:{title:"Simple Announcement",text:"Important updates will be posted here regularly."}},{description:"Event card with multiple variants",type:"card",props:{cardImage:{src:"https://via.placeholder.com/400x250",alt:"Event venue"},title:"Annual Conference 2025",text:"Join us for three days of inspiring talks, networking opportunities, and hands-on workshops."}},{description:"News article card with compact layout",type:"card",props:{cardImage:{src:"https://via.placeholder.com/120x120",alt:"News thumbnail"},title:"Breaking News Update",text:"Latest developments in the ongoing story with expert analysis and community reactions."}},{description:"Call-to-action card with prominent styling",type:"card",props:{title:"Get Started Today",text:"Transform your workflow with our powerful tools. Sign up now and get 30 days free!"}},{description:"Dynamic product card using products query with pricing and details",type:"card",props:{cardImage:{src:"{{products.image}}",alt:"{{products.name}}"},title:"{{products.name}}",text:"{{products.description}}<br><strong>Price: ${{products.price}}</strong><br>Category: {{products.category}}",colorPreset:{color:"primary-50"},border:{width:"border",color:"border-primary-200"},rounding:"rounded-lg",shadow:"shadow-md",loop:{over:"products"}}},{description:"Employee profile card using teamMembers query with contact information",type:"card",props:{cardImage:{src:"{{teamMembers.photo}}",alt:"Photo of {{teamMembers.fullName}}"},imagePosition:"top",title:"{{teamMembers.fullName}}",text:"<strong>{{teamMembers.position}}</strong><br>{{teamMembers.department}}<br>Email: {{teamMembers.email}}<br>Phone: {{teamMembers.phone}}",colorPreset:{color:"neutral-100"},rounding:"rounded-xl",shadow:"shadow-lg",loop:{over:"teamMembers"}}},{description:"Blog post card using blogPosts query with author and date",type:"card",props:{cardImage:{src:"{{blogPosts.featuredImage}}",alt:"{{blogPosts.title}}"},imagePosition:"top",title:"{{blogPosts.title}}",text:"{{blogPosts.excerpt}}<br><br><em>By {{blogPosts.author}} \u2022 {{blogPosts.publishDate}}</em><br>Tags: {{blogPosts.tags}}",colorPreset:{color:"secondary-50"},border:{width:"border",color:"border-secondary-300"},rounding:"rounded-md",shadow:"shadow-sm",loop:{over:"blogPosts"}}},{description:"Event listing card using upcomingEvents query with venue details",type:"card",props:{cardImage:{src:"{{upcomingEvents.banner}}",alt:"{{upcomingEvents.title}}"},imagePosition:"top",title:"{{upcomingEvents.title}}",text:"<strong>{{upcomingEvents.date}} at {{upcomingEvents.time}}</strong><br>{{upcomingEvents.venue}}, {{upcomingEvents.city}}<br><br>{{upcomingEvents.description}}<br><br>Tickets: ${{upcomingEvents.price}}",colorPreset:{color:"accent-100"},border:{width:"border-2",color:"border-accent-400"},rounding:"rounded-lg",shadow:"shadow-md",loop:{over:"upcomingEvents"}}},{description:"Testimonial card using customerReviews query with ratings",type:"card",props:{cardImage:{src:"{{customerReviews.customerPhoto}}",alt:"{{customerReviews.customerName}}"},imagePosition:"left",title:"{{customerReviews.customerName}}",text:'"{{customerReviews.review}}"<br><br><strong>Rating: {{customerReviews.rating}}/5 stars</strong><br>{{customerReviews.company}} \u2022 {{customerReviews.position}}',colorPreset:{color:"neutral-50"},rounding:"rounded-xl",shadow:"shadow-lg",loop:{over:"customerReviews"}}},{description:"Service offering card using companyServices query with pricing tiers",type:"card",props:{cardImage:{src:"{{companyServices.icon}}",alt:"{{companyServices.serviceName}}"},imagePosition:"top",title:"{{companyServices.serviceName}}",text:"{{companyServices.description}}<br><br><strong>Starting at ${{companyServices.startingPrice}}</strong><br>Duration: {{companyServices.duration}}<br>Includes: {{companyServices.features}}",colorPreset:{color:"primary-100"},border:{width:"border",color:"border-primary-300"},rounding:"rounded-lg",shadow:"shadow-md",loop:{over:"companyServices"}}},{description:"Portfolio project card using portfolioWork query with project details",type:"card",props:{cardImage:{src:"{{portfolioWork.thumbnail}}",alt:"{{portfolioWork.projectName}}"},imagePosition:"top",title:"{{portfolioWork.projectName}}",text:"<strong>Client:</strong> {{portfolioWork.clientName}}<br><strong>Year:</strong> {{portfolioWork.year}}<br><strong>Category:</strong> {{portfolioWork.category}}<br><br>{{portfolioWork.description}}",colorPreset:{color:"secondary-100"},rounding:"rounded-md",shadow:"shadow-sm",loop:{over:"portfolioWork"}}}];export{I as a,R as b};
4
- //# sourceMappingURL=chunk-PXI7AHWS.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{Type as i}from"@sinclair/typebox";function r(t="Date",e){return i.String({title:t,format:"date","ui:field":"date",examples:["2023-03-15"],...e})}function a(t="Date and Time",e){return i.String({title:t,format:"date-time","ui:field":"datetime",examples:["2023-03-15T12:00:00Z"],...e})}export{r as a,a as b};
4
- //# sourceMappingURL=chunk-Q4H4QEMB.js.map
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{p}from"./chunk-AFVJZPLS.js";import{Kind as l}from"@sinclair/typebox";function c(e){if(!("enum"in e))return e.anyOf??e.oneOf;let{enum:o,enumNames:a,"ui:icons":t}=e;return o.map((n,i)=>({const:n,title:a?a[i]:n,"ui:icon":t?t[i]:void 0}))}function S(e,o){if(e.type==="object"&&"properties"in e){let a=e,t={};for(let[n,i]of Object.entries(a.properties)){let r=u(i,o);r!==void 0&&(t[n]=r)}return t}if(e.type==="array"&&"items"in e){let a=e;return o&&typeof a[`default:${o}`]<"u"?a[`default:${o}`]:a.default?a.default:[]}throw new Error("Schema must be either TObject or TArray")}function u(e,o){if(o&&typeof e[`default:${o}`]<"u")return e[`default:${o}`];if("default"in e&&e.default!==void 0)return e.default;if(e.type==="object"&&"properties"in e){let a=e,t={};for(let[n,i]of Object.entries(a.properties)){let r=u(i,o);r!==void 0&&(t[n]=r)}return Object.keys(t).length>0?t:void 0}e.type==="array"&&"items"in e}function T(e,o){function a(t){let n={};for(let[i,r]of Object.entries(t.properties))if(o(r))n[i]=r;else if(r.type==="object"&&r.properties){let s=a(r);Object.keys(s).length>0&&Object.assign(n,s)}return n}return a(e)}function b(e){return f(e,new Set)}function f(e,o){if(!e||typeof e!="object")return e;if("$ref"in e&&typeof e.$ref=="string"){if(o.has(e.$ref)||e[l]==="This")return e;let t=p.getSchema(e.$ref)?.schema;if(!t)return console.error("Schema not found for reference:",e),e;o.add(e.$ref);let{$ref:n,...i}=e,r={...f(t,o),...i};return o.delete(e.$ref),r}if("type"in e&&e.type==="object"&&"properties"in e){let t={};if(e.properties&&typeof e.properties=="object")for(let[i,r]of Object.entries(e.properties))r&&typeof r=="object"?t[i]=f(r,o):t[i]=r;let n={...e};if(Object.keys(t).length>0&&(n.properties=t),"additionalProperties"in e&&e.additionalProperties&&typeof e.additionalProperties=="object"&&e.additionalProperties!==!0&&(n.additionalProperties=f(e.additionalProperties,o)),"patternProperties"in e&&e.patternProperties&&typeof e.patternProperties=="object"){let i={};for(let[r,s]of Object.entries(e.patternProperties))s&&typeof s=="object"?i[r]=f(s,o):i[r]=s;n.patternProperties=i}return n}if("type"in e&&e.type==="array"){let t={...e};return"items"in e&&e.items&&(Array.isArray(e.items)?t.items=e.items.map(n=>f(n,o)):typeof e.items=="object"&&(t.items=f(e.items,o))),"additionalItems"in e&&e.additionalItems&&typeof e.additionalItems=="object"&&e.additionalItems!==!0&&(t.additionalItems=f(e.additionalItems,o)),t}if("anyOf"in e&&Array.isArray(e.anyOf)){let t=e.anyOf.map(n=>f(n,o));return{...e,anyOf:t}}if("oneOf"in e&&Array.isArray(e.oneOf)){let t=e.oneOf.map(n=>f(n,o));return{...e,oneOf:t}}if("allOf"in e&&Array.isArray(e.allOf)){let t=e.allOf.map(n=>f(n,o));return{...e,allOf:t}}if("not"in e&&e.not&&typeof e.not=="object"){let t=f(e.not,o);return{...e,not:t}}if("if"in e||"then"in e||"else"in e){let t={...e};return"if"in e&&e.if&&typeof e.if=="object"&&(t.if=f(e.if,o)),"then"in e&&e.then&&typeof e.then=="object"&&(t.then=f(e.then,o)),"else"in e&&e.else&&typeof e.else=="object"&&(t.else=f(e.else,o)),t}if("definitions"in e||"$defs"in e){let t={...e};if("definitions"in e&&e.definitions&&typeof e.definitions=="object"){let n={};for(let[i,r]of Object.entries(e.definitions))r&&typeof r=="object"?n[i]=f(r,o):n[i]=r;t.definitions=n}if("$defs"in e&&e.$defs&&typeof e.$defs=="object"){let n={};for(let[i,r]of Object.entries(e.$defs))r&&typeof r=="object"?n[i]=f(r,o):n[i]=r;t.$defs=n}return t}let a={...e};for(let[t,n]of Object.entries(e))n&&typeof n=="object"&&!Array.isArray(n)?("type"in n||"$ref"in n||"properties"in n||"items"in n)&&(a[t]=f(n,o)):Array.isArray(n)&&n.some(r=>r&&typeof r=="object"&&("type"in r||"$ref"in r||"properties"in r||"items"in r))&&(a[t]=n.map(r=>r&&typeof r=="object"?f(r,o):r));return a}export{c as a,S as b,T as c,b as d};
4
- //# sourceMappingURL=chunk-QGYZ7CG5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/shared/utils/schema.ts"],"sourcesContent":["import { type TArray, type TObject, type TSchema, Kind } from \"@sinclair/typebox\";\nimport type { PageAttributes } from \"../attributes\";\nimport { ajv } from \"../ajv\";\n\nexport function normalizeSchemaEnum(schema: TSchema): Array<{ const: string; title: string }> {\n if (!(\"enum\" in schema)) {\n return schema.anyOf ?? schema.oneOf;\n }\n const {\n enum: enumValues,\n enumNames,\n \"ui:icons\": icons,\n } = schema as unknown as { enum: string[]; enumNames?: string[]; \"ui:icons\"?: string[] };\n // combine to key-value pairs\n return enumValues.map((value, index) => ({\n const: value,\n title: enumNames ? enumNames[index] : value,\n \"ui:icon\": icons ? icons[index] : undefined,\n }));\n}\n\nexport function getSchemaDefaults<T extends TObject | TArray>(\n schema: T,\n mode?: \"mobile\" | \"desktop\",\n): T extends TObject ? Record<string, unknown> : unknown[] {\n // Handle object schemas\n if (schema.type === \"object\" && \"properties\" in schema) {\n const objectSchema = schema as TObject;\n const defaults: Record<string, unknown> = {};\n\n for (const [key, propertySchema] of Object.entries(objectSchema.properties)) {\n const defaultValue = getNestedDefaults(propertySchema as TSchema, mode);\n\n // Only include properties that have explicit defaults\n if (defaultValue !== undefined) {\n defaults[key] = defaultValue;\n }\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n return defaults as any;\n }\n\n // Handle array schemas\n if (schema.type === \"array\" && \"items\" in schema) {\n const arraySchema = schema as TArray;\n\n if (mode && typeof arraySchema[`default:${mode}`] !== \"undefined\") {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n return arraySchema[`default:${mode}`] as any;\n }\n\n // If the array itself has an explicit default, return it\n if (arraySchema.default) {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n return arraySchema.default as any;\n }\n\n // Otherwise return empty array\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n return [] as any;\n }\n\n throw new Error(\"Schema must be either TObject or TArray\");\n}\n\n// Helper function for nested schema processing\nfunction getNestedDefaults(schema: TSchema, mode?: \"mobile\" | \"desktop\"): unknown {\n if (mode && typeof schema[`default:${mode}`] !== \"undefined\") {\n return schema[`default:${mode}`];\n }\n // Handle schemas with explicit default values\n if (\"default\" in schema && schema.default !== undefined) {\n return schema.default;\n }\n\n // Handle nested object schemas\n if (schema.type === \"object\" && \"properties\" in schema) {\n const objectSchema = schema as TObject;\n const defaults: Record<string, unknown> = {};\n\n for (const [key, propertySchema] of Object.entries(objectSchema.properties)) {\n const defaultValue = getNestedDefaults(propertySchema as TSchema, mode);\n\n // Only include properties that have explicit defaults\n if (defaultValue !== undefined) {\n defaults[key] = defaultValue;\n }\n }\n\n return Object.keys(defaults).length > 0 ? defaults : undefined;\n }\n\n // Handle nested array schemas\n if (schema.type === \"array\" && \"items\" in schema) {\n // Arrays only contribute defaults if explicitly set\n return undefined;\n }\n\n // No implicit defaults for any type\n return undefined;\n}\n\nexport type FieldFilter<\n T extends TSchema = TSchema,\n P extends Record<string, unknown> = Record<string, unknown>,\n> = (propsSchema: T, formData: P, pageAttributes: PageAttributes) => boolean;\n\nexport function filterSchemaProperties(schema: TObject, filter: (prop: TSchema) => boolean) {\n function extractProperties(schema: TObject): Record<string, TSchema> {\n const props: Record<string, TSchema> = {};\n for (const [key, prop] of Object.entries(schema.properties)) {\n if (filter(prop)) {\n props[key] = prop;\n } else if (prop.type === \"object\" && prop.properties) {\n const nestedContentProps = extractProperties(prop as TObject);\n if (Object.keys(nestedContentProps).length > 0) {\n Object.assign(props, nestedContentProps);\n }\n }\n }\n return props;\n }\n return extractProperties(schema);\n}\n\n/**\n * Resolves a JSON schema by following $ref references recursively.\n * Handles nested objects, arrays, and complex schema structures.\n */\nexport function resolveSchema<T extends TSchema = TSchema>(schema: T): T {\n return resolveSchemaRecursive(schema, new Set()) as T;\n}\n\n/**\n * Internal recursive function with circular reference detection\n */\nfunction resolveSchemaRecursive(schema: TSchema, visited: Set<string>): TSchema {\n // Handle primitive types and null\n if (!schema || typeof schema !== \"object\") {\n return schema;\n }\n\n // Handle $ref resolution\n if (\"$ref\" in schema && typeof schema.$ref === \"string\") {\n // Prevent infinite recursion with circular references\n if (visited.has(schema.$ref) || schema[Kind] === \"This\") {\n // console.warn(`Circular reference detected: ${schema.$ref}`);\n return schema; // Return original schema to avoid infinite loop\n }\n\n const resolved = ajv.getSchema(schema.$ref)?.schema as TSchema;\n if (!resolved) {\n console.error(\"Schema not found for reference:\", schema);\n return schema;\n }\n\n // Add to visited set and recursively resolve the referenced schema\n visited.add(schema.$ref);\n const { $ref, ...rest } = schema;\n const resolvedSchema = {\n ...resolveSchemaRecursive(resolved, visited),\n ...rest,\n };\n visited.delete(schema.$ref); // Remove from visited after processing\n\n return resolvedSchema as TSchema;\n }\n\n // Handle object schemas\n if (\"type\" in schema && schema.type === \"object\" && \"properties\" in schema) {\n const resolvedProperties: Record<string, TSchema> = {};\n\n if (schema.properties && typeof schema.properties === \"object\") {\n for (const [key, value] of Object.entries(schema.properties)) {\n if (value && typeof value === \"object\") {\n resolvedProperties[key] = resolveSchemaRecursive(value as TSchema, visited);\n } else {\n resolvedProperties[key] = value as TSchema;\n }\n }\n }\n\n const resolvedSchema = { ...schema };\n if (Object.keys(resolvedProperties).length > 0) {\n resolvedSchema.properties = resolvedProperties;\n }\n\n // Handle additionalProperties\n if (\n \"additionalProperties\" in schema &&\n schema.additionalProperties &&\n typeof schema.additionalProperties === \"object\" &&\n schema.additionalProperties !== true\n ) {\n resolvedSchema.additionalProperties = resolveSchemaRecursive(\n schema.additionalProperties as TSchema,\n visited,\n );\n }\n\n // Handle patternProperties\n if (\n \"patternProperties\" in schema &&\n schema.patternProperties &&\n typeof schema.patternProperties === \"object\"\n ) {\n const resolvedPatternProperties: Record<string, TSchema> = {};\n for (const [pattern, patternSchema] of Object.entries(schema.patternProperties)) {\n if (patternSchema && typeof patternSchema === \"object\") {\n resolvedPatternProperties[pattern] = resolveSchemaRecursive(patternSchema as TSchema, visited);\n } else {\n resolvedPatternProperties[pattern] = patternSchema as TSchema;\n }\n }\n resolvedSchema.patternProperties = resolvedPatternProperties;\n }\n\n return resolvedSchema as TSchema;\n }\n\n // Handle array schemas\n if (\"type\" in schema && schema.type === \"array\") {\n const resolvedSchema = { ...schema };\n\n if (\"items\" in schema && schema.items) {\n if (Array.isArray(schema.items)) {\n resolvedSchema.items = schema.items.map((item) => resolveSchemaRecursive(item as TSchema, visited));\n } else if (typeof schema.items === \"object\") {\n resolvedSchema.items = resolveSchemaRecursive(schema.items as TSchema, visited);\n }\n }\n\n // Handle additionalItems\n if (\n \"additionalItems\" in schema &&\n schema.additionalItems &&\n typeof schema.additionalItems === \"object\" &&\n schema.additionalItems !== true\n ) {\n resolvedSchema.additionalItems = resolveSchemaRecursive(schema.additionalItems as TSchema, visited);\n }\n\n return resolvedSchema as TSchema;\n }\n\n // Handle union schemas (anyOf)\n if (\"anyOf\" in schema && Array.isArray(schema.anyOf)) {\n const resolvedAnyOf = schema.anyOf.map((subSchema) => {\n return resolveSchemaRecursive(subSchema as TSchema, visited);\n });\n\n return { ...schema, anyOf: resolvedAnyOf } as TSchema;\n }\n\n // Handle union schemas (oneOf)\n if (\"oneOf\" in schema && Array.isArray(schema.oneOf)) {\n const resolvedOneOf = schema.oneOf.map((subSchema) =>\n resolveSchemaRecursive(subSchema as TSchema, visited),\n );\n\n return { ...schema, oneOf: resolvedOneOf } as TSchema;\n }\n\n // Handle intersection schemas (allOf)\n if (\"allOf\" in schema && Array.isArray(schema.allOf)) {\n const resolvedAllOf = schema.allOf.map((subSchema) =>\n resolveSchemaRecursive(subSchema as TSchema, visited),\n );\n\n return { ...schema, allOf: resolvedAllOf } as TSchema;\n }\n\n // Handle not schemas\n if (\"not\" in schema && schema.not && typeof schema.not === \"object\") {\n const resolvedNot = resolveSchemaRecursive(schema.not as TSchema, visited);\n\n return { ...schema, not: resolvedNot } as TSchema;\n }\n\n // Handle conditional schemas (if/then/else)\n if (\"if\" in schema || \"then\" in schema || \"else\" in schema) {\n const resolvedSchema = { ...schema };\n\n if (\"if\" in schema && schema.if && typeof schema.if === \"object\") {\n resolvedSchema.if = resolveSchemaRecursive(schema.if as TSchema, visited);\n }\n\n if (\"then\" in schema && schema.then && typeof schema.then === \"object\") {\n // biome-ignore lint/suspicious/noThenProperty: <explanation>\n resolvedSchema.then = resolveSchemaRecursive(schema.then as TSchema, visited);\n }\n\n if (\"else\" in schema && schema.else && typeof schema.else === \"object\") {\n resolvedSchema.else = resolveSchemaRecursive(schema.else as TSchema, visited);\n }\n\n return resolvedSchema as TSchema;\n }\n\n // Handle schemas with definitions\n if (\"definitions\" in schema || \"$defs\" in schema) {\n const resolvedSchema = { ...schema };\n\n if (\"definitions\" in schema && schema.definitions && typeof schema.definitions === \"object\") {\n const resolvedDefinitions: Record<string, TSchema> = {};\n for (const [key, def] of Object.entries(schema.definitions)) {\n if (def && typeof def === \"object\") {\n resolvedDefinitions[key] = resolveSchemaRecursive(def as TSchema, visited);\n } else {\n resolvedDefinitions[key] = def as TSchema;\n }\n }\n resolvedSchema.definitions = resolvedDefinitions;\n }\n\n if (\"$defs\" in schema && schema.$defs && typeof schema.$defs === \"object\") {\n const resolved$Defs: Record<string, TSchema> = {};\n for (const [key, def] of Object.entries(schema.$defs)) {\n if (def && typeof def === \"object\") {\n resolved$Defs[key] = resolveSchemaRecursive(def as TSchema, visited);\n } else {\n resolved$Defs[key] = def as TSchema;\n }\n }\n resolvedSchema.$defs = resolved$Defs;\n }\n\n return resolvedSchema as TSchema;\n }\n\n // Handle any other schema types that might contain nested schemas\n const resolvedSchema = { ...schema };\n\n for (const [key, value] of Object.entries(schema)) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n // Check if this looks like a schema object\n if (\"type\" in value || \"$ref\" in value || \"properties\" in value || \"items\" in value) {\n (resolvedSchema as Record<string, unknown>)[key] = resolveSchemaRecursive(value as TSchema, visited);\n }\n } else if (Array.isArray(value)) {\n // Check if array contains schemas\n const hasSchemas = value.some(\n (item) =>\n item &&\n typeof item === \"object\" &&\n (\"type\" in item || \"$ref\" in item || \"properties\" in item || \"items\" in item),\n );\n\n if (hasSchemas) {\n (resolvedSchema as Record<string, unknown>)[key] = value.map((item) =>\n item && typeof item === \"object\" ? resolveSchemaRecursive(item as TSchema, visited) : item,\n );\n }\n }\n }\n\n return resolvedSchema as TSchema;\n}\n"],"mappings":"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","names":["Kind","normalizeSchemaEnum","schema","enumValues","enumNames","icons","value","index","getSchemaDefaults","mode","objectSchema","defaults","key","propertySchema","defaultValue","getNestedDefaults","arraySchema","filterSchemaProperties","filter","extractProperties","props","prop","nestedContentProps","resolveSchema","resolveSchemaRecursive","visited","Kind","resolved","ajv","$ref","rest","resolvedSchema","resolvedProperties","resolvedPatternProperties","pattern","patternSchema","item","resolvedAnyOf","subSchema","resolvedOneOf","resolvedAllOf","resolvedNot","resolvedDefinitions","def","resolved$Defs"]}
@@ -1,4 +0,0 @@
1
- /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
-
3
- import{a as e}from"./chunk-KFM6KXSE.js";import{Type as r}from"@sinclair/typebox";function a(t){return r.Array(r.String({title:t?.title??"Tags",...t}),{"ui:field":"tags",title:t?.title??"Tags",metadata:{category:"content"},...t})}function g(t={}){return e("content:tags",{...t})}export{a,g as b};
4
- //# sourceMappingURL=chunk-QWGUMKZC.js.map