@upstart.gg/sdk 0.0.130 → 0.0.131

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 (533) hide show
  1. package/dist/shared/ai/schemas.d.ts +13 -0
  2. package/dist/shared/ai/schemas.d.ts.map +1 -0
  3. package/dist/shared/ai/schemas.js +3 -0
  4. package/dist/shared/ai/types.d.ts +164 -0
  5. package/dist/shared/ai/types.d.ts.map +1 -0
  6. package/dist/shared/{chunk-EJGNYD4V.js → ai/types.js} +0 -1
  7. package/dist/shared/ajv.d.ts +2 -1
  8. package/dist/shared/ajv.d.ts.map +1 -1
  9. package/dist/shared/ajv.js +1 -1
  10. package/dist/shared/attributes.d.ts +300 -12
  11. package/dist/shared/attributes.d.ts.map +1 -1
  12. package/dist/shared/attributes.js +1 -1
  13. package/dist/shared/brick-manifest.d.ts +3 -1
  14. package/dist/shared/brick-manifest.d.ts.map +1 -1
  15. package/dist/shared/brick-manifest.js +1 -1
  16. package/dist/shared/bricks/manifests/accordion.manifest.d.ts +4 -3
  17. package/dist/shared/bricks/manifests/accordion.manifest.d.ts.map +1 -1
  18. package/dist/shared/bricks/manifests/accordion.manifest.js +1 -1
  19. package/dist/shared/bricks/manifests/all-manifests.d.ts +4 -1
  20. package/dist/shared/bricks/manifests/all-manifests.d.ts.map +1 -1
  21. package/dist/shared/bricks/manifests/all-manifests.js +1 -1
  22. package/dist/shared/bricks/manifests/box.manifest.d.ts +6 -4
  23. package/dist/shared/bricks/manifests/box.manifest.d.ts.map +1 -1
  24. package/dist/shared/bricks/manifests/box.manifest.js +1 -1
  25. package/dist/shared/bricks/manifests/button.manifest.d.ts +4 -3
  26. package/dist/shared/bricks/manifests/button.manifest.d.ts.map +1 -1
  27. package/dist/shared/bricks/manifests/button.manifest.js +1 -1
  28. package/dist/shared/bricks/manifests/card.manifest.d.ts +6 -5
  29. package/dist/shared/bricks/manifests/card.manifest.d.ts.map +1 -1
  30. package/dist/shared/bricks/manifests/card.manifest.js +1 -1
  31. package/dist/shared/bricks/manifests/carousel.manifest.d.ts +6 -5
  32. package/dist/shared/bricks/manifests/carousel.manifest.d.ts.map +1 -1
  33. package/dist/shared/bricks/manifests/carousel.manifest.js +1 -1
  34. package/dist/shared/bricks/manifests/footer.manifest.d.ts +40 -5
  35. package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
  36. package/dist/shared/bricks/manifests/footer.manifest.js +1 -1
  37. package/dist/shared/bricks/manifests/form.manifest.d.ts +6 -5
  38. package/dist/shared/bricks/manifests/form.manifest.d.ts.map +1 -1
  39. package/dist/shared/bricks/manifests/form.manifest.js +1 -1
  40. package/dist/shared/bricks/manifests/hero.manifest.d.ts +4 -3
  41. package/dist/shared/bricks/manifests/hero.manifest.d.ts.map +1 -1
  42. package/dist/shared/bricks/manifests/hero.manifest.js +1 -1
  43. package/dist/shared/bricks/manifests/html.manifest.d.ts +3 -2
  44. package/dist/shared/bricks/manifests/html.manifest.d.ts.map +1 -1
  45. package/dist/shared/bricks/manifests/html.manifest.js +1 -1
  46. package/dist/shared/bricks/manifests/icon.manifest.d.ts +3 -2
  47. package/dist/shared/bricks/manifests/icon.manifest.d.ts.map +1 -1
  48. package/dist/shared/bricks/manifests/icon.manifest.js +1 -1
  49. package/dist/shared/bricks/manifests/image.manifest.d.ts +10 -6
  50. package/dist/shared/bricks/manifests/image.manifest.d.ts.map +1 -1
  51. package/dist/shared/bricks/manifests/image.manifest.js +1 -1
  52. package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +7 -6
  53. package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts.map +1 -1
  54. package/dist/shared/bricks/manifests/images-gallery.manifest.js +1 -1
  55. package/dist/shared/bricks/manifests/map.manifest.d.ts +5 -4
  56. package/dist/shared/bricks/manifests/map.manifest.d.ts.map +1 -1
  57. package/dist/shared/bricks/manifests/map.manifest.js +1 -1
  58. package/dist/shared/bricks/manifests/navbar.manifest.d.ts +42 -8
  59. package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -1
  60. package/dist/shared/bricks/manifests/navbar.manifest.js +1 -1
  61. package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +4 -3
  62. package/dist/shared/bricks/manifests/sidebar.manifest.d.ts.map +1 -1
  63. package/dist/shared/bricks/manifests/sidebar.manifest.js +1 -1
  64. package/dist/shared/bricks/manifests/social-links.manifest.d.ts +5 -4
  65. package/dist/shared/bricks/manifests/social-links.manifest.d.ts.map +1 -1
  66. package/dist/shared/bricks/manifests/social-links.manifest.js +1 -1
  67. package/dist/shared/bricks/manifests/spacer.manifest.d.ts +3 -2
  68. package/dist/shared/bricks/manifests/spacer.manifest.d.ts.map +1 -1
  69. package/dist/shared/bricks/manifests/spacer.manifest.js +1 -1
  70. package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +6 -5
  71. package/dist/shared/bricks/manifests/testimonials.manifest.d.ts.map +1 -1
  72. package/dist/shared/bricks/manifests/testimonials.manifest.js +1 -1
  73. package/dist/shared/bricks/manifests/text.manifest.d.ts +4 -3
  74. package/dist/shared/bricks/manifests/text.manifest.d.ts.map +1 -1
  75. package/dist/shared/bricks/manifests/text.manifest.js +1 -1
  76. package/dist/shared/bricks/manifests/video.manifest.d.ts +4 -3
  77. package/dist/shared/bricks/manifests/video.manifest.d.ts.map +1 -1
  78. package/dist/shared/bricks/manifests/video.manifest.js +1 -1
  79. package/dist/shared/bricks/props/align.d.ts.map +1 -1
  80. package/dist/shared/bricks/props/align.js +1 -1
  81. package/dist/shared/bricks/props/background.d.ts +6 -9
  82. package/dist/shared/bricks/props/background.d.ts.map +1 -1
  83. package/dist/shared/bricks/props/background.js +1 -1
  84. package/dist/shared/bricks/props/border.d.ts.map +1 -1
  85. package/dist/shared/bricks/props/border.js +1 -1
  86. package/dist/shared/bricks/props/color-preset.d.ts +3 -4
  87. package/dist/shared/bricks/props/color-preset.d.ts.map +1 -1
  88. package/dist/shared/bricks/props/color-preset.js +1 -1
  89. package/dist/shared/bricks/props/color.js +1 -1
  90. package/dist/shared/bricks/props/common.d.ts +6 -6
  91. package/dist/shared/bricks/props/common.d.ts.map +1 -1
  92. package/dist/shared/bricks/props/common.js +1 -1
  93. package/dist/shared/bricks/props/css-length.d.ts.map +1 -1
  94. package/dist/shared/bricks/props/css-length.js +1 -1
  95. package/dist/shared/bricks/props/datasource.d.ts +1 -1
  96. package/dist/shared/bricks/props/datasource.js +1 -1
  97. package/dist/shared/bricks/props/date.d.ts.map +1 -1
  98. package/dist/shared/bricks/props/date.js +1 -1
  99. package/dist/shared/bricks/props/direction.d.ts.map +1 -1
  100. package/dist/shared/bricks/props/direction.js +1 -1
  101. package/dist/shared/bricks/props/dynamic.d.ts.map +1 -1
  102. package/dist/shared/bricks/props/dynamic.js +1 -1
  103. package/dist/shared/bricks/props/effects.d.ts +0 -1
  104. package/dist/shared/bricks/props/effects.d.ts.map +1 -1
  105. package/dist/shared/bricks/props/effects.js +1 -1
  106. package/dist/shared/bricks/props/file.d.ts.map +1 -1
  107. package/dist/shared/bricks/props/file.js +1 -1
  108. package/dist/shared/bricks/props/geolocation.js +1 -1
  109. package/dist/shared/bricks/props/helpers.d.ts +2 -2
  110. package/dist/shared/bricks/props/helpers.js +1 -1
  111. package/dist/shared/bricks/props/image.d.ts +4 -4
  112. package/dist/shared/bricks/props/image.d.ts.map +1 -1
  113. package/dist/shared/bricks/props/image.js +1 -1
  114. package/dist/shared/bricks/props/position.d.ts +0 -2
  115. package/dist/shared/bricks/props/position.d.ts.map +1 -1
  116. package/dist/shared/bricks/props/position.js +1 -1
  117. package/dist/shared/bricks/props/string.js +1 -1
  118. package/dist/shared/bricks/props/tags.d.ts.map +1 -1
  119. package/dist/shared/bricks/props/tags.js +1 -1
  120. package/dist/shared/bricks/props/text.js +1 -1
  121. package/dist/shared/bricks/props/types.d.ts +1 -2
  122. package/dist/shared/bricks/props/types.d.ts.map +1 -1
  123. package/dist/shared/bricks.d.ts +189 -18
  124. package/dist/shared/bricks.d.ts.map +1 -1
  125. package/dist/shared/bricks.js +1 -1
  126. package/dist/shared/chunk-2CYAFF56.js +3 -0
  127. package/dist/shared/chunk-2NLDX5FG.js +3 -0
  128. package/dist/shared/chunk-3FPFR5RA.js +3 -0
  129. package/dist/shared/chunk-3P36LG6T.js +3 -0
  130. package/dist/shared/chunk-3QOAHMV4.js +5 -0
  131. package/dist/shared/chunk-4GIZ6WSG.js +3 -0
  132. package/dist/shared/chunk-5WY7LYXK.js +3 -0
  133. package/dist/shared/chunk-5X5SX5N7.js +4 -0
  134. package/dist/shared/chunk-6L3Z5SZQ.js +3 -0
  135. package/dist/shared/{chunk-UU2MSQXY.js → chunk-6PGAWO4H.js} +1 -1
  136. package/dist/shared/chunk-6R76KIHZ.js +3 -0
  137. package/dist/shared/chunk-7UBMXMNJ.js +3 -0
  138. package/dist/shared/chunk-AB3IMRXZ.js +3 -0
  139. package/dist/shared/chunk-AMQAGDFH.js +3 -0
  140. package/dist/shared/chunk-ARMM6B47.js +3 -0
  141. package/dist/shared/chunk-ARYG4XMX.js +3 -0
  142. package/dist/shared/chunk-AZHH3XJJ.js +3 -0
  143. package/dist/shared/chunk-COT2ROEH.js +34 -0
  144. package/dist/shared/chunk-DHSWVVMI.js +3 -0
  145. package/dist/shared/chunk-DKNOZLA6.js +3 -0
  146. package/dist/shared/chunk-EVDZ2KND.js +6 -0
  147. package/dist/shared/chunk-F4JNKU7J.js +3 -0
  148. package/dist/shared/chunk-GC5OWY2Z.js +3 -0
  149. package/dist/shared/chunk-GXNHF6J5.js +3 -0
  150. package/dist/shared/chunk-HP7CZB2F.js +3 -0
  151. package/dist/shared/chunk-HSRXUIVM.js +3 -0
  152. package/dist/shared/chunk-ILIWVWHC.js +8 -0
  153. package/dist/shared/chunk-JRCVYDCD.js +3 -0
  154. package/dist/shared/chunk-L2HOZVBC.js +3 -0
  155. package/dist/shared/chunk-LEWKHCRI.js +3 -0
  156. package/dist/shared/chunk-LT4CW2F7.js +3 -0
  157. package/dist/shared/chunk-MVCVVKBY.js +3 -0
  158. package/dist/shared/chunk-NKIEDT7V.js +3 -0
  159. package/dist/shared/chunk-NQKXDMQ5.js +3 -0
  160. package/dist/shared/chunk-NXIF3UMD.js +3 -0
  161. package/dist/shared/chunk-PW5HRVMD.js +3 -0
  162. package/dist/shared/chunk-PZYX3ACO.js +3 -0
  163. package/dist/shared/chunk-QDJQAZIA.js +8 -0
  164. package/dist/shared/chunk-QGFQA7OZ.js +4 -0
  165. package/dist/shared/chunk-RJZZWCBD.js +3 -0
  166. package/dist/shared/chunk-SAJY7H6N.js +3 -0
  167. package/dist/shared/chunk-SFDRAHYP.js +3 -0
  168. package/dist/shared/chunk-STDCM2KD.js +3 -0
  169. package/dist/shared/chunk-TCTVRT4O.js +3 -0
  170. package/dist/shared/chunk-TH5SONR6.js +3 -0
  171. package/dist/shared/chunk-UCR2UZOY.js +3 -0
  172. package/dist/shared/chunk-UDQWYGSO.js +3 -0
  173. package/dist/shared/{chunk-LSPN22SI.js → chunk-URRCKLAS.js} +3 -3
  174. package/dist/shared/{chunk-OIOYMECS.js → chunk-US53TNMK.js} +1 -1
  175. package/dist/shared/chunk-VDX2J22H.js +3 -0
  176. package/dist/shared/chunk-VE3S4LGT.js +3 -0
  177. package/dist/shared/chunk-VK26ZZFR.js +3 -0
  178. package/dist/shared/chunk-VLXZMESE.js +3 -0
  179. package/dist/shared/chunk-WAML3IGZ.js +3 -0
  180. package/dist/shared/chunk-WXKRIUTA.js +3 -0
  181. package/dist/shared/chunk-X62OEAE6.js +3 -0
  182. package/dist/shared/chunk-XED6ARVN.js +3 -0
  183. package/dist/shared/chunk-Y3X4F4YJ.js +3 -0
  184. package/dist/shared/chunk-Z4YKRLOX.js +3 -0
  185. package/dist/shared/context.d.ts +4 -12
  186. package/dist/shared/context.d.ts.map +1 -1
  187. package/dist/shared/datarecords/external/airtable/handler.d.ts +22 -5
  188. package/dist/shared/datarecords/external/airtable/handler.d.ts.map +1 -1
  189. package/dist/shared/datarecords/external/airtable/handler.js +1 -1
  190. package/dist/shared/datarecords/external/airtable/oauth/config.js +3 -0
  191. package/dist/shared/datarecords/external/airtable/types.d.ts +25 -0
  192. package/dist/shared/datarecords/external/airtable/types.d.ts.map +1 -1
  193. package/dist/shared/datarecords/external/airtable/types.js +3 -0
  194. package/dist/shared/datarecords/external/generic-webhook/handler.js +3 -0
  195. package/dist/shared/datarecords/external/generic-webhook/options.js +3 -0
  196. package/dist/shared/datarecords/external/google/sheets/client.js +3 -0
  197. package/dist/shared/datarecords/external/google/sheets/handler.d.ts +29 -5
  198. package/dist/shared/datarecords/external/google/sheets/handler.d.ts.map +1 -1
  199. package/dist/shared/datarecords/external/google/sheets/handler.js +5 -4
  200. package/dist/shared/datarecords/external/google/sheets/{options.d.ts → types.d.ts} +1 -1
  201. package/dist/shared/datarecords/external/google/sheets/types.d.ts.map +1 -0
  202. package/dist/shared/datarecords/external/google/sheets/types.js +3 -0
  203. package/dist/shared/datarecords/external/notion/handler.d.ts +29 -7
  204. package/dist/shared/datarecords/external/notion/handler.d.ts.map +1 -1
  205. package/dist/shared/datarecords/external/notion/handler.js +1 -1
  206. package/dist/shared/datarecords/external/notion/oauth/config.js +3 -0
  207. package/dist/shared/datarecords/external/notion/{options.d.ts → types.d.ts} +11 -1
  208. package/dist/shared/datarecords/external/notion/types.d.ts.map +1 -0
  209. package/dist/shared/datarecords/external/notion/types.js +3 -0
  210. package/dist/shared/datarecords/types.d.ts +17 -165
  211. package/dist/shared/datarecords/types.d.ts.map +1 -1
  212. package/dist/shared/datarecords/types.js +1 -1
  213. package/dist/shared/datarecords.d.ts +2 -2
  214. package/dist/shared/datarecords.d.ts.map +1 -1
  215. package/dist/shared/datarecords.js +1 -1
  216. package/dist/shared/datasources/external/facebook/posts/fetcher.js +3 -0
  217. package/dist/shared/datasources/external/facebook/posts/schema.js +3 -0
  218. package/dist/shared/datasources/external/http-json/fetcher.js +3 -0
  219. package/dist/shared/datasources/external/http-json/options.js +3 -0
  220. package/dist/shared/datasources/external/http-json/schema.js +3 -0
  221. package/dist/shared/datasources/external/instagram/feed/fetcher.js +3 -0
  222. package/dist/shared/datasources/external/instagram/feed/schema.js +3 -0
  223. package/dist/shared/datasources/external/mastodon/account/fetcher.js +3 -0
  224. package/dist/shared/datasources/external/mastodon/account/schema.js +3 -0
  225. package/dist/shared/datasources/external/mastodon/options.js +3 -0
  226. package/dist/shared/datasources/external/mastodon/status/fetcher.js +3 -0
  227. package/dist/shared/datasources/external/mastodon/status/sample.array.js +3 -0
  228. package/dist/shared/datasources/external/mastodon/status/sample.single.js +3 -0
  229. package/dist/shared/datasources/external/mastodon/status/schema.d.ts.map +1 -1
  230. package/dist/shared/datasources/external/mastodon/status/schema.js +3 -0
  231. package/dist/shared/datasources/external/meta/options.js +3 -0
  232. package/dist/shared/datasources/external/rss/fetcher.js +3 -0
  233. package/dist/shared/datasources/external/rss/options.js +3 -0
  234. package/dist/shared/datasources/external/rss/schema.js +3 -0
  235. package/dist/shared/datasources/external/threads/media/fetcher.js +3 -0
  236. package/dist/shared/datasources/external/threads/media/schema.js +3 -0
  237. package/dist/shared/datasources/external/tiktok/video/fetcher.js +3 -0
  238. package/dist/shared/datasources/external/tiktok/video/options.js +3 -0
  239. package/dist/shared/datasources/external/tiktok/video/schema.js +3 -0
  240. package/dist/shared/datasources/external/youtube/list/fetcher.js +3 -0
  241. package/dist/shared/datasources/external/youtube/list/options.js +3 -0
  242. package/dist/shared/datasources/external/youtube/list/schema.js +3 -0
  243. package/dist/shared/datasources/fetcher.js +2 -0
  244. package/dist/shared/datasources/internal/blog/schema.js +3 -0
  245. package/dist/shared/datasources/internal/changelog/schema.js +3 -0
  246. package/dist/shared/datasources/internal/contact-info/schema.js +3 -0
  247. package/dist/shared/datasources/internal/cv/schema.js +3 -0
  248. package/dist/shared/datasources/internal/faq/schema.js +3 -0
  249. package/dist/shared/datasources/internal/job-board/schema.js +3 -0
  250. package/dist/shared/datasources/internal/links/schema.js +3 -0
  251. package/dist/shared/datasources/internal/recipes/schema.js +3 -0
  252. package/dist/shared/datasources/internal/restaurant/schema.js +3 -0
  253. package/dist/shared/datasources/samples.js +3 -0
  254. package/dist/shared/datasources/schemas.d.ts +0 -49
  255. package/dist/shared/datasources/schemas.d.ts.map +1 -1
  256. package/dist/shared/datasources/schemas.js +1 -1
  257. package/dist/shared/datasources/types.d.ts +53 -130
  258. package/dist/shared/datasources/types.d.ts.map +1 -1
  259. package/dist/shared/datasources/types.js +1 -1
  260. package/dist/shared/datasources/utils.js +3 -0
  261. package/dist/shared/datasources.d.ts +7 -4
  262. package/dist/shared/datasources.d.ts.map +1 -1
  263. package/dist/shared/datasources.js +1 -1
  264. package/dist/shared/errors.js +1 -1
  265. package/dist/shared/images.d.ts +1 -12
  266. package/dist/shared/images.d.ts.map +1 -1
  267. package/dist/shared/images.js +1 -1
  268. package/dist/shared/index.js +3 -0
  269. package/dist/shared/manifest.js +3 -0
  270. package/dist/shared/page.d.ts +143 -12
  271. package/dist/shared/page.d.ts.map +1 -1
  272. package/dist/shared/page.js +1 -1
  273. package/dist/shared/site.d.ts +224 -114
  274. package/dist/shared/site.d.ts.map +1 -1
  275. package/dist/shared/site.js +1 -1
  276. package/dist/shared/sitemap.d.ts +167 -23
  277. package/dist/shared/sitemap.d.ts.map +1 -1
  278. package/dist/shared/sitemap.js +1 -1
  279. package/dist/shared/social-icons.js +3 -0
  280. package/dist/shared/theme.d.ts +41 -4
  281. package/dist/shared/theme.d.ts.map +1 -1
  282. package/dist/shared/theme.js +1 -1
  283. package/dist/shared/utils/invariant.js +1 -1
  284. package/dist/shared/utils/llm.d.ts +19 -0
  285. package/dist/shared/utils/llm.d.ts.map +1 -0
  286. package/dist/shared/utils/llm.js +3 -0
  287. package/dist/shared/utils/schema.d.ts +6 -1
  288. package/dist/shared/utils/schema.d.ts.map +1 -1
  289. package/dist/shared/utils/schema.js +1 -1
  290. package/dist/shared/utils/tests/schema.test.d.ts +2 -0
  291. package/dist/shared/utils/tests/schema.test.d.ts.map +1 -0
  292. package/dist/shared/utils/typed-ref.d.ts +1 -6
  293. package/dist/shared/utils/typed-ref.d.ts.map +1 -1
  294. package/dist/shared/utils/typed-ref.js +1 -1
  295. package/package.json +18 -19
  296. package/src/shared/ai/schemas.ts +33 -0
  297. package/src/shared/ai/types.ts +151 -0
  298. package/src/shared/ajv.ts +123 -0
  299. package/src/shared/analytics/init.ts +14 -0
  300. package/src/shared/analytics/track.ts +21 -0
  301. package/src/shared/analytics/types.ts +13 -0
  302. package/src/shared/attributes.ts +396 -0
  303. package/src/shared/brick-manifest.ts +119 -0
  304. package/src/shared/bricks/manifests/accordion.manifest.ts +482 -0
  305. package/src/shared/bricks/manifests/all-manifests.ts +121 -0
  306. package/src/shared/bricks/manifests/box.manifest.ts +551 -0
  307. package/src/shared/bricks/manifests/button.manifest.ts +208 -0
  308. package/src/shared/bricks/manifests/card.manifest.ts +320 -0
  309. package/src/shared/bricks/manifests/carousel.manifest.ts +708 -0
  310. package/src/shared/bricks/manifests/footer.manifest.ts +509 -0
  311. package/src/shared/bricks/manifests/form.manifest.ts +226 -0
  312. package/src/shared/bricks/manifests/hero.manifest.ts +365 -0
  313. package/src/shared/bricks/manifests/html.manifest.ts +127 -0
  314. package/src/shared/bricks/manifests/icon.manifest.ts +164 -0
  315. package/src/shared/bricks/manifests/image.manifest.ts +378 -0
  316. package/src/shared/bricks/manifests/images-gallery.manifest.ts +822 -0
  317. package/src/shared/bricks/manifests/map.manifest.ts +215 -0
  318. package/src/shared/bricks/manifests/navbar.manifest.ts +361 -0
  319. package/src/shared/bricks/manifests/sidebar.manifest.ts +88 -0
  320. package/src/shared/bricks/manifests/social-links.manifest.ts +497 -0
  321. package/src/shared/bricks/manifests/spacer.manifest.ts +54 -0
  322. package/src/shared/bricks/manifests/testimonials.manifest.ts +480 -0
  323. package/src/shared/bricks/manifests/tests/header.manifest.test.ts +10 -0
  324. package/src/shared/bricks/manifests/text.manifest.ts +245 -0
  325. package/src/shared/bricks/manifests/video.manifest.ts +115 -0
  326. package/src/shared/bricks/props/align.ts +63 -0
  327. package/src/shared/bricks/props/background.ts +79 -0
  328. package/src/shared/bricks/props/boolean.ts +7 -0
  329. package/src/shared/bricks/props/border.ts +86 -0
  330. package/src/shared/bricks/props/color-preset.ts +390 -0
  331. package/src/shared/bricks/props/color.ts +40 -0
  332. package/src/shared/bricks/props/common.ts +64 -0
  333. package/src/shared/bricks/props/css-length.ts +32 -0
  334. package/src/shared/bricks/props/datarecord.ts +11 -0
  335. package/src/shared/bricks/props/datasource.ts +82 -0
  336. package/src/shared/bricks/props/date.ts +21 -0
  337. package/src/shared/bricks/props/direction.ts +21 -0
  338. package/src/shared/bricks/props/dynamic.ts +112 -0
  339. package/src/shared/bricks/props/effects.ts +71 -0
  340. package/src/shared/bricks/props/enum.ts +38 -0
  341. package/src/shared/bricks/props/file.ts +10 -0
  342. package/src/shared/bricks/props/geolocation.ts +36 -0
  343. package/src/shared/bricks/props/helpers.ts +73 -0
  344. package/src/shared/bricks/props/image.ts +96 -0
  345. package/src/shared/bricks/props/number.ts +8 -0
  346. package/src/shared/bricks/props/position.ts +11 -0
  347. package/src/shared/bricks/props/string.ts +72 -0
  348. package/src/shared/bricks/props/tags.ts +26 -0
  349. package/src/shared/bricks/props/tests/background.test.ts +90 -0
  350. package/src/shared/bricks/props/tests/border.test.ts +12 -0
  351. package/src/shared/bricks/props/tests/effects.test.ts +37 -0
  352. package/src/shared/bricks/props/tests/helpers.test.ts +98 -0
  353. package/src/shared/bricks/props/tests/image.test.ts +71 -0
  354. package/src/shared/bricks/props/tests/string.test.ts +80 -0
  355. package/src/shared/bricks/props/text.ts +107 -0
  356. package/src/shared/bricks/props/types.ts +72 -0
  357. package/src/shared/bricks.ts +1237 -0
  358. package/src/shared/context.ts +32 -0
  359. package/src/shared/datarecords/external/airtable/handler.ts +501 -0
  360. package/src/shared/datarecords/external/airtable/oauth/config.ts +11 -0
  361. package/src/shared/datarecords/external/airtable/types.ts +63 -0
  362. package/src/shared/datarecords/external/generic-webhook/handler.ts +10 -0
  363. package/src/shared/datarecords/external/generic-webhook/options.ts +13 -0
  364. package/src/shared/datarecords/external/google/oauth/config.ts +30 -0
  365. package/src/shared/datarecords/external/google/sheets/client.ts +112 -0
  366. package/src/shared/datarecords/external/google/sheets/handler.ts +253 -0
  367. package/src/shared/datarecords/external/google/sheets/types.ts +10 -0
  368. package/src/shared/datarecords/external/notion/handler.ts +469 -0
  369. package/src/shared/datarecords/external/notion/oauth/config.ts +7 -0
  370. package/src/shared/datarecords/external/notion/types.ts +28 -0
  371. package/src/shared/datarecords/types.ts +165 -0
  372. package/src/shared/datarecords.ts +5 -0
  373. package/src/shared/datasources/README.md +3 -0
  374. package/src/shared/datasources/external/facebook/posts/fetcher.ts +52 -0
  375. package/src/shared/datasources/external/facebook/posts/sample.ts +35 -0
  376. package/src/shared/datasources/external/facebook/posts/schema.ts +33 -0
  377. package/src/shared/datasources/external/facebook/posts/tests/fetcher.test.ts +73 -0
  378. package/src/shared/datasources/external/http-json/fetcher.ts +31 -0
  379. package/src/shared/datasources/external/http-json/options.ts +8 -0
  380. package/src/shared/datasources/external/http-json/schema.ts +6 -0
  381. package/src/shared/datasources/external/http-json/tests/fetcher.test.ts +70 -0
  382. package/src/shared/datasources/external/instagram/feed/fetcher.ts +33 -0
  383. package/src/shared/datasources/external/instagram/feed/sample.ts +22 -0
  384. package/src/shared/datasources/external/instagram/feed/schema.ts +23 -0
  385. package/src/shared/datasources/external/instagram/feed/tests/fetcher.test.ts +64 -0
  386. package/src/shared/datasources/external/mastodon/account/fetcher.ts +24 -0
  387. package/src/shared/datasources/external/mastodon/account/sample.ts +33 -0
  388. package/src/shared/datasources/external/mastodon/account/schema.ts +45 -0
  389. package/src/shared/datasources/external/mastodon/account/tests/fetcher.test.ts +47 -0
  390. package/src/shared/datasources/external/mastodon/options.ts +6 -0
  391. package/src/shared/datasources/external/mastodon/status/fetcher.ts +35 -0
  392. package/src/shared/datasources/external/mastodon/status/sample.array.ts +59 -0
  393. package/src/shared/datasources/external/mastodon/status/sample.single.ts +55 -0
  394. package/src/shared/datasources/external/mastodon/status/schema.ts +125 -0
  395. package/src/shared/datasources/external/mastodon/status/tests/fetcher.test.ts +74 -0
  396. package/src/shared/datasources/external/meta/oauth/config.ts +16 -0
  397. package/src/shared/datasources/external/meta/options.ts +7 -0
  398. package/src/shared/datasources/external/rss/fetcher.ts +31 -0
  399. package/src/shared/datasources/external/rss/options.ts +7 -0
  400. package/src/shared/datasources/external/rss/sample.ts +22 -0
  401. package/src/shared/datasources/external/rss/schema.ts +42 -0
  402. package/src/shared/datasources/external/threads/media/fetcher.ts +53 -0
  403. package/src/shared/datasources/external/threads/media/sample.ts +44 -0
  404. package/src/shared/datasources/external/threads/media/schema.ts +37 -0
  405. package/src/shared/datasources/external/tiktok/oauth/config.ts +17 -0
  406. package/src/shared/datasources/external/tiktok/video/fetcher.ts +39 -0
  407. package/src/shared/datasources/external/tiktok/video/options.ts +8 -0
  408. package/src/shared/datasources/external/tiktok/video/sample.ts +26 -0
  409. package/src/shared/datasources/external/tiktok/video/schema.ts +27 -0
  410. package/src/shared/datasources/external/youtube/list/fetcher.ts +37 -0
  411. package/src/shared/datasources/external/youtube/list/options.ts +11 -0
  412. package/src/shared/datasources/external/youtube/list/sample.ts +33 -0
  413. package/src/shared/datasources/external/youtube/list/schema.ts +38 -0
  414. package/src/shared/datasources/external/youtube/oauth/config.ts +15 -0
  415. package/src/shared/datasources/fetcher.ts +16 -0
  416. package/src/shared/datasources/internal/blog/schema.ts +69 -0
  417. package/src/shared/datasources/internal/changelog/schema.ts +48 -0
  418. package/src/shared/datasources/internal/contact-info/schema.ts +20 -0
  419. package/src/shared/datasources/internal/cv/schema.ts +217 -0
  420. package/src/shared/datasources/internal/faq/schema.ts +27 -0
  421. package/src/shared/datasources/internal/job-board/schema.ts +228 -0
  422. package/src/shared/datasources/internal/links/schema.ts +15 -0
  423. package/src/shared/datasources/internal/recipes/schema.ts +42 -0
  424. package/src/shared/datasources/internal/restaurant/schema.ts +225 -0
  425. package/src/shared/datasources/samples.ts +26 -0
  426. package/src/shared/datasources/schemas.ts +48 -0
  427. package/src/shared/datasources/types.ts +490 -0
  428. package/src/shared/datasources/utils.ts +17 -0
  429. package/src/shared/datasources.ts +57 -0
  430. package/src/shared/env.ts +23 -0
  431. package/src/shared/errors.ts +1 -0
  432. package/src/shared/images.ts +44 -0
  433. package/src/shared/index.ts +3 -0
  434. package/src/shared/layout-constants.ts +19 -0
  435. package/src/shared/manifest.ts +50 -0
  436. package/src/shared/oauth.ts +16 -0
  437. package/src/shared/page.ts +36 -0
  438. package/src/shared/prompt.ts +9 -0
  439. package/src/shared/responsive.ts +5 -0
  440. package/src/shared/site.ts +59 -0
  441. package/src/shared/sitemap.ts +98 -0
  442. package/src/shared/social-icons.ts +307 -0
  443. package/src/shared/tests/attributes.test.ts +31 -0
  444. package/src/shared/theme.ts +244 -0
  445. package/src/shared/themes/README.md +34 -0
  446. package/src/shared/themes/color-system.ts +146 -0
  447. package/src/shared/themes/tests/color-system.test.ts +170 -0
  448. package/src/shared/utils/canvas-data-uri.ts +2 -0
  449. package/src/shared/utils/invariant.ts +25 -0
  450. package/src/shared/utils/json-date.ts +8 -0
  451. package/src/shared/utils/llm.ts +282 -0
  452. package/src/shared/utils/merge.ts +12 -0
  453. package/src/shared/utils/object-hash.ts +7 -0
  454. package/src/shared/utils/schema.ts +359 -0
  455. package/src/shared/utils/string-enum.ts +12 -0
  456. package/src/shared/utils/tests/schema.test.ts +724 -0
  457. package/src/shared/utils/try-catch.ts +12 -0
  458. package/src/shared/utils/typed-ref.ts +53 -0
  459. package/dist/shared/bricks/props/container.d.ts +0 -11
  460. package/dist/shared/bricks/props/container.d.ts.map +0 -1
  461. package/dist/shared/bricks/props/container.js +0 -3
  462. package/dist/shared/bricks/props/gap.d.ts +0 -9
  463. package/dist/shared/bricks/props/gap.d.ts.map +0 -1
  464. package/dist/shared/bricks/props/gap.js +0 -3
  465. package/dist/shared/bricks/props/padding.d.ts +0 -5
  466. package/dist/shared/bricks/props/padding.d.ts.map +0 -1
  467. package/dist/shared/bricks/props/padding.js +0 -3
  468. package/dist/shared/bricks/props/tests/padding.d.ts +0 -2
  469. package/dist/shared/bricks/props/tests/padding.d.ts.map +0 -1
  470. package/dist/shared/chunk-2IYSJYNE.js +0 -3
  471. package/dist/shared/chunk-3EM3B4DX.js +0 -3
  472. package/dist/shared/chunk-4TH3C76A.js +0 -3
  473. package/dist/shared/chunk-5N6MBJJ4.js +0 -3
  474. package/dist/shared/chunk-6FITVVZX.js +0 -3
  475. package/dist/shared/chunk-6WCGUAQN.js +0 -3
  476. package/dist/shared/chunk-7DMUDZ4H.js +0 -3
  477. package/dist/shared/chunk-ACVLF55Q.js +0 -3
  478. package/dist/shared/chunk-AQPN5SE2.js +0 -3
  479. package/dist/shared/chunk-BZGNY7LB.js +0 -3
  480. package/dist/shared/chunk-C3VGP4CA.js +0 -3
  481. package/dist/shared/chunk-CT3EI7YN.js +0 -3
  482. package/dist/shared/chunk-DQXDGV67.js +0 -3
  483. package/dist/shared/chunk-E22E4XWE.js +0 -3
  484. package/dist/shared/chunk-ETYYRWLK.js +0 -3
  485. package/dist/shared/chunk-EYPREFMH.js +0 -3
  486. package/dist/shared/chunk-FKNNTHWX.js +0 -5
  487. package/dist/shared/chunk-HHO3ONTQ.js +0 -3
  488. package/dist/shared/chunk-I46VBMLF.js +0 -3
  489. package/dist/shared/chunk-IIFTGWFZ.js +0 -3
  490. package/dist/shared/chunk-JS4K5JRM.js +0 -5
  491. package/dist/shared/chunk-KHFNN4P3.js +0 -3
  492. package/dist/shared/chunk-L6WHBSRZ.js +0 -8
  493. package/dist/shared/chunk-LFQZRGHS.js +0 -3
  494. package/dist/shared/chunk-LGP6GWIY.js +0 -3
  495. package/dist/shared/chunk-NLEWXPVM.js +0 -3
  496. package/dist/shared/chunk-NNI225RG.js +0 -3
  497. package/dist/shared/chunk-QISTDGPP.js +0 -3
  498. package/dist/shared/chunk-QSZWDE3D.js +0 -3
  499. package/dist/shared/chunk-RGLVKILY.js +0 -3
  500. package/dist/shared/chunk-SLRU4CT6.js +0 -4
  501. package/dist/shared/chunk-T3LIA4YB.js +0 -3
  502. package/dist/shared/chunk-T4LMBG2G.js +0 -3
  503. package/dist/shared/chunk-TATG6SFZ.js +0 -3
  504. package/dist/shared/chunk-TF3JVVRU.js +0 -3
  505. package/dist/shared/chunk-TTTXV7TJ.js +0 -6
  506. package/dist/shared/chunk-TWBY2GOR.js +0 -3
  507. package/dist/shared/chunk-UAQHU6L6.js +0 -3
  508. package/dist/shared/chunk-UHF6IEKV.js +0 -3
  509. package/dist/shared/chunk-UMHXXXVP.js +0 -3
  510. package/dist/shared/chunk-VGRYSAXA.js +0 -3
  511. package/dist/shared/chunk-VPFCY4DH.js +0 -3
  512. package/dist/shared/chunk-VZPXXFVX.js +0 -3
  513. package/dist/shared/chunk-WU6Q4WYD.js +0 -3
  514. package/dist/shared/chunk-X43MB5WD.js +0 -3
  515. package/dist/shared/chunk-YBGPPF7T.js +0 -3
  516. package/dist/shared/chunk-YFFTZ5T6.js +0 -3
  517. package/dist/shared/chunk-ZQGNYK5I.js +0 -8
  518. package/dist/shared/chunk-ZTDUXSWH.js +0 -3
  519. package/dist/shared/datarecords/external/airtable/client.d.ts +0 -8
  520. package/dist/shared/datarecords/external/airtable/client.d.ts.map +0 -1
  521. package/dist/shared/datarecords/external/airtable/elements.d.ts +0 -21
  522. package/dist/shared/datarecords/external/airtable/elements.d.ts.map +0 -1
  523. package/dist/shared/datarecords/external/airtable/options.d.ts +0 -10
  524. package/dist/shared/datarecords/external/airtable/options.d.ts.map +0 -1
  525. package/dist/shared/datarecords/external/google/sheets/options.d.ts.map +0 -1
  526. package/dist/shared/datarecords/external/notion/client.d.ts +0 -8
  527. package/dist/shared/datarecords/external/notion/client.d.ts.map +0 -1
  528. package/dist/shared/datarecords/external/notion/options.d.ts.map +0 -1
  529. package/dist/shared/datarecords/external/notion/utils.d.ts +0 -5
  530. package/dist/shared/datarecords/external/notion/utils.d.ts.map +0 -1
  531. package/dist/shared/utils/schema-resolver.d.ts +0 -3
  532. package/dist/shared/utils/schema-resolver.d.ts.map +0 -1
  533. package/dist/shared/utils/schema-resolver.js +0 -3
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{a as r}from"./chunk-L2HOZVBC.js";import{b as i}from"./chunk-X62OEAE6.js";import{a}from"./chunk-NKIEDT7V.js";import{Type as e}from"@sinclair/typebox";var f=e.Union([e.Literal("airtable"),e.Literal("google-sheets"),e.Literal("notion"),e.Literal("internal")]),o=e.Object({provider:e.Literal("internal"),schema:e.Any({title:"Schema",description:"JSON Schema of the datarecord. Always of type 'object' and representing a row that will be saved in the database.",examples:[{type:"object",properties:{firstname:{type:"string",title:"Firstname"},lastname:{type:"string",title:"Lastname"},email:{type:"string",format:"email",title:"Email"}},required:["email"],title:"Newsletter Subscription"}]}),indexes:e.Array(e.Object({name:e.String({title:"Index name"}),fields:e.Array(e.String(),{title:"Fields to index"}),unique:e.Optional(e.Boolean({title:"Unique index",default:!1}))},{examples:[{name:"unique_email_index",fields:["email"],unique:!0},{name:"lastname_index",fields:["lastname"]}]}),{title:"Indexes",description:"IMPORTANT: Indexes to create on the datarecord. use it to enforce uniqueness or improve query performance."})},{examples:[{provider:"internal",schema:{type:"object",properties:{firstname:{type:"string",title:"Firstname"},lastname:{type:"string",title:"Lastname"},email:{type:"string",format:"email",title:"Email"}},required:["email"],title:"Newsletter Subscription"},indexes:[{name:"email_index",fields:["email"],unique:!0}]}]}),t=e.Object({schema:e.Any({title:"Schema",description:"JSON Schema of the datarecord. Always of type 'object' and representing a row that will be saved.",examples:[{type:"object",properties:{firstname:{type:"string",title:"Firstname"},lastname:{type:"string",title:"Lastname"},email:{type:"string",format:"email",title:"Email"}},required:["email"],title:"Newsletter Subscription"}]})}),s=e.Union([e.Composite([e.Object({provider:e.Literal("airtable"),options:i}),t]),e.Composite([e.Object({provider:e.Literal("google-sheets"),options:r}),t]),e.Composite([e.Object({provider:e.Literal("notion"),options:a}),t]),o]),n=e.Object({id:e.String({title:"Datarecord ID",comment:"A unique identifier for the datarecord, e.g., 'newsletter_subscriptions'"}),label:e.String({title:"Name of the datarecord",comment:"For example, 'Newsletter Subscriptions'"}),description:e.Optional(e.String({title:"Description of the datarecord"}))}),l=e.Composite([s,n]),y=e.Composite([n,o]),u=e.Array(l);export{f as a,s as b,y as c,u as d};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{a as d}from"./chunk-YIFNKP4J.js";import{c as p}from"./chunk-6PGAWO4H.js";import{a as c}from"./chunk-4GIZ6WSG.js";import{a as l}from"./chunk-F4JNKU7J.js";import{b as n}from"./chunk-3FPFR5RA.js";import{a as o,d as r}from"./chunk-7UBMXMNJ.js";import{b as s}from"./chunk-US53TNMK.js";import{f as t}from"./chunk-VK26ZZFR.js";import{b as a}from"./chunk-AB3IMRXZ.js";import{c as i}from"./chunk-Z4YKRLOX.js";import{Type as e}from"@sinclair/typebox";import{VscLayoutPanelOff as m}from"react-icons/vsc";var b=c({type:"navbar",name:"Navbar",category:"layout",description:"A navigation bar with logo and navigation",aiInstructions:"This brick should be used on most sites/pages. It must be placed on its own section.",isGlobalBrick:!0,duplicatable:!1,resizable:!1,movable:!1,hideInLibrary:!0,staticClasses:"flex-grow",defaultWidth:{mobile:"100%"},defaultHeight:{mobile:"60px",desktop:"60px"},icon:m,iconClassName:"rotate-180",props:p({colorPreset:e.Optional(i({title:"Color",default:{color:"primary-500"},examples:[{color:"primary-500"},{color:"neutral-900"},{color:"secondary-200"}]})),brand:e.Optional(t({title:"Brand name",default:"Acme Inc.",disableSizing:!0,"ai:instructions":"The brand name of the website, for example the company name. Please provide it even if optional.",metadata:{category:"content"},examples:["Acme Inc.","TechCorp Solutions","ShopEasy","Bella Vista"]})),logo:e.Optional(n({title:"Logo","ui:show-img-search":!1,"ui:no-object-options":!0,"ui:no-dynamic":!0,"ui:placeholder":"https://example.com/logo.png",metadata:{category:"content"},"ai:hidden":!0})),hideBrand:e.Optional(d("Hide brand name",void 0,{"ai:hidden":!0,metadata:{filter:(u,g)=>!!g.logo}})),linksTagsFilter:e.Optional(s({title:"Pages tags",description:"Filter pages links in the navbar by tags. Only pages with these tags will be shown.",default:["navbar"],metadata:{category:"content"},examples:[["navbar","main"],["top-menu"],["important-link","navbar"]]})),staticNavItems:e.Optional(e.Array(e.Object({urlOrPageId:r(),label:e.Optional(o("Label"))}),{title:"Static links",description:"Additional static navigation links to show in the navbar","ai:instructions":"Don't include pages already included by the tags filter.",default:[],metadata:{category:"content"},examples:[[{urlOrPageId:"http://example.com/",label:"Other site"},{urlOrPageId:"https://docs.example.com/",label:"External docs"}],[{urlOrPageId:"https://www.amazon.com/our-brand",label:"Buy our brand on Amazon"}]]})),linksPosition:e.Optional(e.Union([e.Literal("left",{title:"Left"}),e.Literal("center",{title:"Center"}),e.Literal("right",{title:"Right"})],{title:"Links position",default:"right","ui:responsive":"desktop"})),shadow:e.Optional(a())},{noAlignSelf:!0,noGrow:!0})});function F(){return l(b.props)}var S=[{description:"Corporate technology company navbar featuring company logo with right-aligned navigation links filtered by navbar and featured tags",type:"navbar",props:{logo:{src:"https://via.placeholder.com/120x40.png?text=TechCorp",alt:"TechCorp Solutions logo"},linksPosition:"right",linksTagsFilter:["navbar","featured"]}},{description:"Dark-themed professional navbar with centered brand text and navigation, including external site link for service companies",type:"navbar",props:{brand:"TechCorp Solutions",linksPosition:"center",linksTagsFilter:["navbar","featured"],staticNavItems:[{urlOrPageId:"http://example.com/",label:"Other site"}]}},{description:"E-commerce store navbar with primary blue branding, medium shadow effect, and right-aligned cart/account links for online shopping sites",type:"navbar",props:{brand:"ShopEasy",colorPreset:{color:"primary-500"},linksPosition:"right",linksTagsFilter:["main","shop"],shadow:"shadow-md",staticNavItems:[{urlOrPageId:"cart",label:"Cart"},{urlOrPageId:"account",label:"Account"}]}},{description:"Restaurant navbar with logo and hidden brand text, featuring secondary color scheme and left-aligned navigation with reservation booking and phone contact",type:"navbar",props:{logo:{src:"https://via.placeholder.com/100x50.png?text=Bella+Vista",alt:"Bella Vista Restaurant logo"},brand:"Bella Vista",hideBrand:!0,linksPosition:"left",linksTagsFilter:["navbar"],colorPreset:{color:"secondary-200"},staticNavItems:[{urlOrPageId:"reservations",label:"Reservations"},{urlOrPageId:"tel:+1234567890",label:"Call Us"}]}},{description:"Clean minimalist design navbar with neutral light background, centered navigation links, and subtle shadow for creative agencies and design studios",type:"navbar",props:{brand:"Minimal Studio",colorPreset:{color:"neutral-100"},linksPosition:"center",linksTagsFilter:["main"],shadow:"shadow-sm"}},{description:"Creative portfolio navbar with dark neutral background, compact logo, and external social media links to showcase professional work and attract clients",type:"navbar",props:{logo:{src:"https://via.placeholder.com/80x40.png?text=Portfolio",alt:"Creative Portfolio logo"},brand:"Creative Portfolio",colorPreset:{color:"neutral-900"},linksPosition:"right",linksTagsFilter:["portfolio","main"],staticNavItems:[{urlOrPageId:"https://dribbble.com/mywork",label:"Dribbble"},{urlOrPageId:"https://behance.net/mywork",label:"Behance"},{urlOrPageId:"contact",label:"Hire Me"}]}},{description:"Digital marketing agency navbar with horizontal gradient background, large shadow, and external consultation booking integration for lead generation",type:"navbar",props:{brand:"Digital Agency",colorPreset:{color:"primary-600",gradientDirection:"bg-gradient-to-r"},linksPosition:"right",linksTagsFilter:["services","navbar"],shadow:"shadow-lg",staticNavItems:[{urlOrPageId:"https://calendar.com/book",label:"Book Consultation"},{urlOrPageId:"case-studies",label:"Case Studies"}]}},{description:"SaaS application navbar with accent color scheme, company logo, and essential user authentication links for software platforms",type:"navbar",props:{logo:{src:"https://via.placeholder.com/120x35.png?text=CloudApp",alt:"CloudApp SaaS logo"},brand:"CloudApp",colorPreset:{color:"accent-500"},linksPosition:"right",linksTagsFilter:["features","navbar"],staticNavItems:[{urlOrPageId:"pricing",label:"Pricing"},{urlOrPageId:"login",label:"Login"},{urlOrPageId:"signup",label:"Sign Up"}]}},{description:"Nonprofit organization navbar with warm accent color, centered navigation, and donation call-to-action links for charitable foundations",type:"navbar",props:{brand:"Hope Foundation",colorPreset:{color:"accent-400"},linksPosition:"center",linksTagsFilter:["about","programs"],shadow:"shadow-md",staticNavItems:[{urlOrPageId:"donate",label:"Donate Now"},{urlOrPageId:"volunteer",label:"Volunteer"}]}},{description:"Professional law firm navbar with dark authoritative styling, professional logo, and client consultation contact information for legal services",type:"navbar",props:{logo:{src:"https://via.placeholder.com/110x45.png?text=LawFirm",alt:"Professional Law Firm logo"},brand:"Smith & Associates",colorPreset:{color:"neutral-800"},linksPosition:"right",linksTagsFilter:["practice-areas","navbar"],staticNavItems:[{urlOrPageId:"consultation",label:"Free Consultation"},{urlOrPageId:"tel:+1234567890",label:"(123) 456-7890"}]}},{description:"Event management company navbar with bold primary red gradient background, left-aligned navigation, and ticket purchasing links for entertainment venues",type:"navbar",props:{brand:"Event Masters",colorPreset:{color:"primary-500",gradientDirection:"bg-gradient-to-br"},linksPosition:"left",linksTagsFilter:["events","upcoming"],shadow:"shadow-xl",staticNavItems:[{urlOrPageId:"tickets",label:"Buy Tickets"},{urlOrPageId:"venues",label:"Venues"}]}},{description:"Fitness studio navbar with secondary purple color scheme, visible brand name alongside logo, and centered class booking navigation for health and wellness businesses",type:"navbar",props:{logo:{src:"https://via.placeholder.com/90x50.png?text=FitStudio",alt:"Fitness Studio logo"},brand:"Peak Fitness",hideBrand:!1,colorPreset:{color:"secondary-600"},linksPosition:"center",linksTagsFilter:["classes","membership"],staticNavItems:[{urlOrPageId:"book-class",label:"Book Class"},{urlOrPageId:"membership",label:"Join Now"},{urlOrPageId:"trainers",label:"Personal Training"}]}}];export{b as a,F as b,S as c};
@@ -1,6 +1,6 @@
1
1
  /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
2
 
3
- import{b as l}from"./chunk-QSZWDE3D.js";import{d as t}from"./chunk-VPFCY4DH.js";import{b as r}from"./chunk-T4LMBG2G.js";import{b as o}from"./chunk-ACVLF55Q.js";import{a as e,c as s}from"./chunk-UU2MSQXY.js";import{a,d as n}from"./chunk-T3LIA4YB.js";import{a as p}from"./chunk-VGRYSAXA.js";import{VscLayoutSidebarLeftOff as d}from"react-icons/vsc";import{Type as i}from"@sinclair/typebox";var k=p({type:"sidebar",category:"layout",name:"Sidebar",description:"A sidebard element",inlineDragDisabled:!0,aiInstructions:`
4
- This brick should be used on most sites/pages for navigation. By deault, it will display links
3
+ import{a as l}from"./chunk-HP7CZB2F.js";import{a as e,c as p}from"./chunk-6PGAWO4H.js";import{a as s}from"./chunk-4GIZ6WSG.js";import{a,d as n}from"./chunk-7UBMXMNJ.js";import{b as r}from"./chunk-AB3IMRXZ.js";import{d as t}from"./chunk-GC5OWY2Z.js";import{b as o}from"./chunk-DHSWVVMI.js";import{VscLayoutSidebarLeftOff as d}from"react-icons/vsc";import{Type as i}from"@sinclair/typebox";var O=s({type:"sidebar",category:"layout",name:"Sidebar",description:"A sidebar element",inlineDragDisabled:!0,isGlobalBrick:!0,duplicatable:!1,resizable:!1,movable:!1,aiInstructions:`
4
+ This brick should be used on most sites/pages for navigation. By default, it will display links
5
5
  to the main pages of the site. You can customize the links by using the 'navigation.navItems' prop.
6
- `.trim(),icon:d,props:s({container:i.Optional(e({title:"Main element",children:{backgroundColor:i.Optional(t()),border:i.Optional(o()),shadow:i.Optional(r()),fixedPositioned:i.Optional(l())},metadata:{"ui:responsive":!0}})),navigation:i.Optional(e({title:"Links",children:{navItems:i.Optional(i.Array(i.Object({urlOrPageId:n(),label:i.Optional(a("Label"))}),{title:"Navigation items",default:[]}))}}))})}),v=[{description:"Standard sidebar with navigation links base on site pages",type:"sidebar",props:{}},{description:"Sidebar with specified navigation links",type:"sidebar",props:{container:{backgroundColor:"#f0f0f0"},navigation:{navItems:[{urlOrPageId:"https://google.com",label:"Google"},{urlOrPageId:"https://bing.com",label:"Bing"}]}}}];export{k as a,v as b};
6
+ `.trim(),icon:d,props:p({container:i.Optional(e({title:"Main element",children:{backgroundColor:i.Optional(t()),border:i.Optional(o()),shadow:i.Optional(r()),fixedPositioned:i.Optional(l())},metadata:{"ui:responsive":!0}})),navigation:i.Optional(e({title:"Links",children:{navItems:i.Optional(i.Array(i.Object({urlOrPageId:n(),label:i.Optional(a("Label"))}),{title:"Navigation items",default:[]}))}}))})}),v=[{description:"Standard sidebar with navigation links base on site pages",type:"sidebar",props:{}},{description:"Sidebar with specified navigation links",type:"sidebar",props:{container:{backgroundColor:"#f0f0f0"},navigation:{navItems:[{urlOrPageId:"https://google.com",label:"Google"},{urlOrPageId:"https://bing.com",label:"Bing"}]}}}];export{O as a,v as b};
@@ -1,3 +1,3 @@
1
1
  /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
2
 
3
- import{a as e}from"./chunk-EJGNYD4V.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};
3
+ import{a as e}from"./chunk-5WY7LYXK.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};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{a as s}from"./chunk-IFEIRRZ2.js";import{c as n}from"./chunk-6PGAWO4H.js";import{a}from"./chunk-4GIZ6WSG.js";import{a as o}from"./chunk-7UBMXMNJ.js";import{b as i}from"./chunk-AB3IMRXZ.js";import{d as t}from"./chunk-DHSWVVMI.js";import{LiaMapMarkedAltSolid as d}from"react-icons/lia";import{Type as e}from"@sinclair/typebox";var r={lat:48.8566,lng:2.3522,zoom:15},f=a({type:"map",name:"Map",description:"A map element showing a location",aiInstructions:"This brick can be used to show a location on a map. Use the 'location' prop to set the coordinates and an optional tooltip.",minWidth:{desktop:280,mobile:280},minHeight:{desktop:200,mobile:120},defaultHeight:{desktop:"320px",mobile:"280px"},defaultWidth:{desktop:"380px",mobile:"100%"},icon:d,props:n({lat:o("Latitude",{"ui:field":"hidden"}),lng:o("Longitude",{"ui:field":"hidden"}),address:o("Address",{"ui:field":"geoaddress",metadata:{category:"content"}}),tooltip:e.Optional(o("Tooltip",{metadata:{category:"content"}})),zoom:e.Optional(s("Zoom",{description:"Zoom level for the map","ui:instructions":"The zoom level should be between 0 (world view) and 21 (street view).","ui:field":"slider",minimum:12,maximum:18,default:r.zoom,metadata:{category:"content"}})),rounding:e.Optional(t({default:"rounded-xl"})),shadow:e.Optional(i())})}),y=[{description:"Map showing a specific location",type:"map",props:{lat:"37.7749",lng:"-122.4194",address:"San Francisco, CA",tooltip:"San Francisco, CA",shadow:"shadow-md",width:"40%",height:"250px"}},{description:"Map with custom styles",type:"map",props:{lat:"40.7128",lng:"-74.0060",address:"New York, NY",tooltip:"New York, NY",shadow:"shadow-lg",width:"100%",height:"400px"}},{description:"Business location map with high zoom level and rounded corners",type:"map",props:{lat:"34.0522",lng:"-118.2437",address:"Los Angeles, CA",tooltip:"Our Los Angeles Office",zoom:18,rounding:"rounded-2xl",shadow:"shadow-xl"}},{description:"Event venue map with medium zoom and subtle shadow",type:"map",props:{lat:"41.8781",lng:"-87.6298",address:"Chicago, IL",tooltip:"Conference Center - Chicago",zoom:16,rounding:"rounded-lg",shadow:"shadow-sm"}},{description:"Restaurant location with default zoom and sharp corners",type:"map",props:{lat:"25.7617",lng:"-80.1918",address:"Miami, FL",tooltip:"Oceanview Restaurant & Bar",zoom:15,rounding:"rounded-none",shadow:"shadow-md"}},{description:"Hotel location with low zoom for area overview",type:"map",props:{lat:"36.1699",lng:"-115.1398",address:"Las Vegas, NV",tooltip:"Downtown Las Vegas Hotel",zoom:13,rounding:"rounded-xl",shadow:"shadow-lg"}},{description:"Store location with maximum zoom for street view detail",type:"map",props:{lat:"47.6062",lng:"-122.3321",address:"Seattle, WA",tooltip:"Seattle Flagship Store",zoom:18,rounding:"rounded-md",shadow:"shadow-sm"}},{description:"Park location with moderate zoom and minimal styling",type:"map",props:{lat:"39.7392",lng:"-104.9903",address:"Denver, CO",tooltip:"City Park Recreation Area",zoom:14,rounding:"rounded-sm"}},{description:"Dynamic business location using company query",type:"map",props:{lat:"{{company.latitude}}",lng:"{{company.longitude}}",address:"{{company.address}}",tooltip:"{{company.name}} - {{company.address}}",zoom:16,rounding:"rounded-lg",shadow:"shadow-md"}},{description:"Dynamic event venue using event query",type:"map",props:{lat:"{{event.venueLatitude}}",lng:"{{event.venueLongitude}}",address:"{{event.venueAddress}}",tooltip:"{{event.title}} - {{event.venueName}}",zoom:17,rounding:"rounded-xl",shadow:"shadow-lg"}}];export{r as a,f as b,y as c};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{c as p}from"./chunk-6PGAWO4H.js";import{a as c}from"./chunk-4GIZ6WSG.js";import{m as t}from"./chunk-F4JNKU7J.js";import{d as r,f as n}from"./chunk-7UBMXMNJ.js";import{b as i}from"./chunk-SFDRAHYP.js";import{c as e}from"./chunk-HSRXUIVM.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};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{a as e}from"./chunk-5WY7LYXK.js";import{a as n}from"./chunk-SFKZAUPW.js";import{Type as s}from"@sinclair/typebox";function f(t={}){return n(["inherit","text-xs","text-sm","text-base","text-lg","text-xl"],{enumNames:["Same as parent","Extra small","Small","Medium","Large","Extra large"],default:"inherit",title:"Font size","ui:styleId":"styles:fontSize","ui:field":"enum","ui:display":"select",...t})}function g(t={}){return e("styles:fontSize",t)}function S(t={}){return n(["inherit","text-xs","text-sm","text-base","text-lg","text-xl","text-2xl","text-3xl","text-4xl","text-5xl","text-6xl","text-7xl"],{enumNames:["Same as parent","Extra small","Small","Medium","Large","Extra large","Extra large (2x)","Extra large (3x)","Extra large (4x)","Extra large (5x)","Extra large (6x)","Extra large (7x)"],default:"inherit",title:"Font size","ui:styleId":"styles:fontSize","ui:field":"enum","ui:display":"select",...t})}function m(t={}){return e("styles:fontSizeXL",t)}function d({title:t="Text",default:i,showInSettings:o,disableSizing:a=!1,disableAlignment:r=!1,...l}={}){return s.String({title:t,description:"Text content. Can contain basic HTML tags like `<strong>`, `<em>`, `<br>` and `<a>` as well as `<p>` and `<span>` and lists <ul> <ol> <li>.",default:i??"My text","ui:disable-sizing":a,"ui:disable-alignment":r,...l,"ui:field":o?"string":"hidden"})}function y(t={}){return e("content:text",t)}export{f as a,g as b,S as c,m as d,d as e,y as f};
@@ -0,0 +1,3 @@
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};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{get as i}from"lodash-es";function a(t){return Object.fromEntries(Object.entries(t).map(([r,e])=>[r,e.toString()]))}function c(t){return function(e,n){let o=n.trim();return String(i(t,o))??""}}var g=/{{(.+?)}}/g;export{a,c as b,g as c};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ var i="Invariant failed";function e(r,n){if(r)return;let t=typeof n=="function"?n():n,o=t?`${i}: ${t}`:i;throw new Error(o)}export{e as a};
@@ -0,0 +1,3 @@
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 t=e.Array(e.Object({id:e.String(),name:e.String(),type:e.String()})),a=e.Object({id:e.String(),name:e.String(),description:e.String(),primaryFieldId:e.String(),fields:t}),r=e.Object({externalUrl:e.Optional(e.String()),baseId:e.String({pattern:"^app[A-Za-z0-9]+$",description:'Airtable Base ID starting with "app"'}),baseName:e.Optional(e.String({description:"Airtable Base Name"})),tableId:e.String({pattern:"^tbl[A-Za-z0-9]+$",description:'Airtable Table ID starting with "tbl"'}),tableName:e.Optional(e.String({description:"Table name as shown in Airtable interface"})),fields:e.Optional(t)}),l=e.Union([e.Literal("number"),e.Literal("checkbox"),e.Literal("date"),e.Literal("dateTime"),e.Literal("email"),e.Literal("url"),e.Literal("singleLineText"),e.Literal("multilineText"),e.Literal("singleSelect"),e.Literal("multipleSelects")]);export{t as a,r as b,l as c};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{c as p}from"./chunk-6PGAWO4H.js";import{a as e}from"./chunk-4GIZ6WSG.js";import{CgSpaceBetween as t}from"react-icons/cg";var o=e({type:"spacer",name:"Spacer",category:"container",description:"A flexible element to create space between bricks.",staticClasses:"self-stretch",minWidth:{desktop:50},defaultWidth:{mobile:"auto",desktop:"50px"},minHeight:{mobile:30},icon:t,props:p({})}),n=[{description:"Transparent spacer of 100px wide",type:"spacer",props:{width:"100px"}},{description:"Transparent spacer of 20px wide",type:"spacer",props:{width:"20px"}},{description:"Transparent spacer set in % (percentage)",type:"spacer",props:{width:"20%"}}];export{o as a,n as b};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{c as m}from"./chunk-6PGAWO4H.js";import{a as n}from"./chunk-4GIZ6WSG.js";import{m as d}from"./chunk-F4JNKU7J.js";import{b as s}from"./chunk-3FPFR5RA.js";import{a as o}from"./chunk-7UBMXMNJ.js";import{b as i}from"./chunk-AB3IMRXZ.js";import{b as r,d as t}from"./chunk-DHSWVVMI.js";import{c as p}from"./chunk-Z4YKRLOX.js";import{c as a}from"./chunk-HSRXUIVM.js";import{RxImage as l}from"react-icons/rx";import{Type as e}from"@sinclair/typebox";var I=n({type:"image",name:"Image",category:"media",description:"An image brick",aiInstructions:"An image brick that can display an image with optional styling such as padding, border radius, and shadow. It supports giving credit to the image author and specifying the image provider.",defaultWidth:{desktop:"auto",mobile:"100%"},icon:l,props:m({image:s({metadata:{category:"content"}}),colorPreset:e.Optional(p()),padding:e.Optional(a({description:"Padding inside the image.",title:"Padding","ai:instructions":"Use only a single value like '1rem' or '10px'","ui:responsive":!0,"ui:placeholder":"Not specified","ui:styleId":"styles:padding"})),rounding:e.Optional(t({default:"rounded-md"})),border:e.Optional(r()),shadow:e.Optional(i()),blurHash:e.Optional(o("Blur Hash",{"ui:field":"hidden",description:"A placeholder for the image while it is loading. Use a blur hash string."})),author:e.Optional(e.Object({name:o("Image Author",{description:"Image author. Use this to give credit to the author"}),url:o("Image Author URL",{description:"Image author URL. Use this to give credit to the author"})},{"ui:field":"hidden"})),provider:e.Optional(o("Image Provider",{"ui:field":"hidden","ai:instructions":"The provider of the image, e.g. 'unsplash', 'pexels', etc."})),loop:e.Optional(d())})}),R=[{description:"Hero landscape image with large shadow",type:"image",props:{image:{src:"https://via.placeholder.com/800x400.png?text=Hero+Landscape",alt:"Beautiful landscape view for hero section"},shadow:"shadow-lg"}},{description:"Team member profile photo, full rounded",type:"image",props:{image:{src:"https://via.placeholder.com/300x300.png?text=Profile+Photo",alt:"Team member profile photo"},shadow:"shadow-md",rounding:"rounded-full"}},{description:"Product showcase image",type:"image",props:{image:{src:"https://via.placeholder.com/400x400.png?text=Product+Image",alt:"Premium product showcase"},shadow:"shadow-sm"}},{description:"Blog article featured image with medium shadow and full author info",type:"image",props:{image:{src:"https://via.placeholder.com/600x300.png?text=Article+Featured",alt:"Featured image for blog article"},author:{name:"John Photographer",url:"https://example.com/john"},provider:"unsplash",shadow:"shadow-md"}},{description:"Logo image with padding and small shadow",type:"image",props:{image:{src:"https://via.placeholder.com/200x80.png?text=Company+Logo",alt:"Company logo"},padding:"p-8",shadow:"shadow-sm"}},{description:"Testimonial customer photo with large shadow and small padding",type:"image",props:{image:{src:"https://via.placeholder.com/120x120.png?text=Customer",alt:"Happy customer testimonial photo"},shadow:"shadow-lg",padding:"p-2"}},{description:"Event banner image with neutral-500 background",type:"image",props:{colorPreset:{color:"neutral-500"},image:{src:"https://via.placeholder.com/800x200.png?text=Event+Banner",alt:"Annual conference event banner"},shadow:"shadow-xl",author:{name:"Event Photographer",url:"https://example.com/photographer"},provider:"pexels"}},{description:"Illustration with background and padding",type:"image",props:{image:{src:"https://via.placeholder.com/150x150.png?text=Blabla+Feature",alt:"Feature illustration"},padding:"p-8",shadow:"shadow-sm"}},{description:"Image with blurHash",type:"image",props:{image:{src:"https://via.placeholder.com/300x200.png?text=Card+Image",alt:"My image"},shadow:"shadow-md",blurHash:"L6PZfSi_.AyE_3t7t7R**0o#DgR4"}},{description:"Dynamic employee photo using employee query",type:"image",props:{image:{src:"{{employee.photo}}",alt:"Photo of {{employee.fullName}}"},rounding:"rounded-full",shadow:"shadow-lg",padding:"1rem"}},{description:"Dynamic product image using product query with author attribution",type:"image",props:{image:{src:"{{product.featuredImage}}",alt:"{{product.name}} - {{product.category}}"},author:{name:"{{product.photographer}}",url:"{{product.photographerUrl}}"},provider:"company-assets",shadow:"shadow-md",rounding:"rounded-lg"}},{description:"Dynamic company logo using company query",type:"image",props:{image:{src:"{{company.logo}}",alt:"{{company.name}} logo"},padding:"2rem",shadow:"shadow-sm",colorPreset:{color:"neutral-100"}}},{description:"Dynamic event banner using event query",type:"image",props:{image:{src:"{{event.bannerImage}}",alt:"{{event.title}} event banner"},shadow:"shadow-xl",rounding:"rounded-xl",author:{name:"{{event.photographer}}",url:"{{event.photographerProfile}}"},provider:"event-photography"}},{description:"Dynamic article featured image using article query",type:"image",props:{image:{src:"{{article.featuredImage}}",alt:"Featured image for {{article.title}}"},author:{name:"{{article.imageCredit}}",url:"{{article.imageCreditUrl}}"},provider:"{{article.imageProvider}}",shadow:"shadow-md",rounding:"rounded-lg"}},{description:"Dynamic property photo using property query",type:"image",props:{image:{src:"{{property.mainPhoto}}",alt:"{{property.address}} - {{property.propertyType}}"},shadow:"shadow-lg",rounding:"rounded-xl",colorPreset:{color:"primary-50"},padding:"1rem"}},{description:"Dynamic portfolio piece using portfolio query",type:"image",props:{image:{src:"{{portfolio.imageUrl}}",alt:"{{portfolio.projectName}} for {{portfolio.clientName}}"},author:{name:"{{portfolio.photographer}}",url:"{{portfolio.photographerWebsite}}"},provider:"portfolio-assets",shadow:"shadow-md",rounding:"rounded-lg",padding:"0.5rem"}},{description:"Dynamic service illustration using service query",type:"image",props:{image:{src:"{{service.illustration}}",alt:"{{service.name}} service illustration"},colorPreset:{color:"secondary-100"},padding:"2rem",shadow:"shadow-sm",rounding:"rounded-full"}},{description:"Dynamic testimonial customer photo using testimonial query",type:"image",props:{image:{src:"{{testimonial.customerPhoto}}",alt:"{{testimonial.customerName}} from {{testimonial.company}}"},rounding:"rounded-full",shadow:"shadow-lg",padding:"0.25rem",colorPreset:{color:"accent-50"}}},{description:"Product gallery using products query with loop",type:"image",props:{image:{src:"{{products.mainImage}}",alt:"{{products.name}} - {{products.category}}"},author:{name:"{{products.photographer}}",url:"{{products.photographerUrl}}"},provider:"product-catalog",shadow:"shadow-md",rounding:"rounded-lg",padding:"0.5rem",colorPreset:{color:"primary-50"},loop:{over:"products"}}},{description:"Team member photos using teamMembers query with loop",type:"image",props:{image:{src:"{{teamMembers.profilePhoto}}",alt:"{{teamMembers.fullName}} - {{teamMembers.position}}"},rounding:"rounded-full",shadow:"shadow-lg",padding:"0.75rem",colorPreset:{color:"secondary-100"},loop:{over:"teamMembers"}}}];export{I as a,R as b};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{a as r}from"./chunk-5WY7LYXK.js";import{a}from"./chunk-SFKZAUPW.js";import{Type as n}from"@sinclair/typebox";var t={"primary-50":{className:"bg-primary-50 text-primary-50-content",label:"Primary 50"},"primary-100":{className:"bg-primary-100 text-primary-100-content",label:"Primary 100"},"primary-200":{className:"bg-primary-200 text-primary-200-content",label:"Primary 200"},"primary-300":{className:"bg-primary-300 text-primary-300-content",label:"Primary 300"},"primary-400":{className:"bg-primary-400 text-primary-400-content",label:"Primary 400"},"primary-500":{className:"bg-primary-500 text-primary-500-content",label:"Primary 500"},"primary-600":{className:"bg-primary-600 text-primary-600-content",label:"Primary 600"},"primary-700":{className:"bg-primary-700 text-primary-700-content",label:"Primary 700"},"primary-800":{className:"bg-primary-800 text-primary-800-content",label:"Primary 800"},"primary-900":{className:"bg-primary-900 text-primary-900-content",label:"Primary 900"},"secondary-50":{className:"bg-secondary-50 text-secondary-50-content",label:"Secondary 50"},"secondary-100":{className:"bg-secondary-100 text-secondary-100-content",label:"Secondary 100"},"secondary-200":{className:"bg-secondary-200 text-secondary-200-content",label:"Secondary 200"},"secondary-300":{className:"bg-secondary-300 text-secondary-300-content",label:"Secondary 300"},"secondary-400":{className:"bg-secondary-400 text-secondary-400-content",label:"Secondary 400"},"secondary-500":{className:"bg-secondary-500 text-secondary-500-content",label:"Secondary 500"},"secondary-600":{className:"bg-secondary-600 text-secondary-600-content",label:"Secondary 600"},"secondary-700":{className:"bg-secondary-700 text-secondary-700-content",label:"Secondary 700"},"secondary-800":{className:"bg-secondary-800 text-secondary-800-content",label:"Secondary 800"},"secondary-900":{className:"bg-secondary-900 text-secondary-900-content",label:"Secondary 900"},"accent-50":{className:"bg-accent-50 text-accent-50-content",label:"Accent 50"},"accent-100":{className:"bg-accent-100 text-accent-100-content",label:"Accent 100"},"accent-200":{className:"bg-accent-200 text-accent-200-content",label:"Accent 200"},"accent-300":{className:"bg-accent-300 text-accent-300-content",label:"Accent 300"},"accent-400":{className:"bg-accent-400 text-accent-400-content",label:"Accent 400"},"accent-500":{className:"bg-accent-500 text-accent-500-content",label:"Accent 500"},"accent-600":{className:"bg-accent-600 text-accent-600-content",label:"Accent 600"},"accent-700":{className:"bg-accent-700 text-accent-700-content",label:"Accent 700"},"accent-800":{className:"bg-accent-800 text-accent-800-content",label:"Accent 800"},"accent-900":{className:"bg-accent-900 text-accent-900-content",label:"Accent 900"},"neutral-50":{className:"bg-neutral-50 text-neutral-50-content",label:"Neutral 50"},"neutral-100":{className:"bg-neutral-100 text-neutral-100-content",label:"Neutral 100"},"neutral-200":{className:"bg-neutral-200 text-neutral-200-content",label:"Neutral 200"},"neutral-300":{className:"bg-neutral-300 text-neutral-300-content",label:"Neutral 300"},"neutral-400":{className:"bg-neutral-400 text-neutral-400-content",label:"Neutral 400"},"neutral-500":{className:"bg-neutral-500 text-neutral-500-content",label:"Neutral 500"},"neutral-600":{className:"bg-neutral-600 text-neutral-600-content",label:"Neutral 600"},"neutral-700":{className:"bg-neutral-700 text-neutral-700-content",label:"Neutral 700"},"neutral-800":{className:"bg-neutral-800 text-neutral-800-content",label:"Neutral 800"},"neutral-900":{className:"bg-neutral-900 text-neutral-900-content",label:"Neutral 900"},"base-100":{className:"bg-base-100 text-base-100-content",label:"Base 100"},"base-200":{className:"bg-base-200 text-base-200-content",label:"Base 200"},"base-300":{className:"bg-base-300 text-base-300-content",label:"Base 300"},"primary-gradient-100":{className:"from-primary-100 to-primary-200 text-primary-100-content",label:"Primary gradient 1"},"primary-gradient-200":{className:"from-primary-200 to-primary-300 text-primary-200-content",label:"Primary gradient 2"},"primary-gradient-300":{className:"from-primary-300 to-primary-400 text-primary-300-content",label:"Primary gradient 3"},"primary-gradient-400":{className:"from-primary-400 to-primary-500 text-primary-400-content",label:"Primary gradient 4"},"primary-gradient-500":{className:"from-primary-500 to-primary-600 text-primary-500-content",label:"Primary gradient 5"},"primary-gradient-600":{className:"from-primary-600 to-primary-700 text-primary-600-content",label:"Primary gradient 6"},"primary-gradient-700":{className:"from-primary-700 to-primary-800 text-primary-700-content",label:"Primary gradient 7"},"primary-gradient-800":{className:"from-primary-800 to-primary-900 text-primary-800-content",label:"Primary gradient 8"},"secondary-gradient-100":{className:"from-secondary-100 to-secondary-200 text-secondary-100-content",label:"Secondary gradient 1"},"secondary-gradient-200":{className:"from-secondary-200 to-secondary-300 text-secondary-200-content",label:"Secondary gradient 2"},"secondary-gradient-300":{className:"from-secondary-300 to-secondary-400 text-secondary-300-content",label:"Secondary gradient 3"},"secondary-gradient-400":{className:"from-secondary-400 to-secondary-500 text-secondary-400-content",label:"Secondary gradient 4"},"secondary-gradient-500":{className:"from-secondary-500 to-secondary-600 text-secondary-500-content",label:"Secondary gradient 5"},"secondary-gradient-600":{className:"from-secondary-600 to-secondary-700 text-secondary-600-content",label:"Secondary gradient 6"},"secondary-gradient-700":{className:"from-secondary-700 to-secondary-800 text-secondary-700-content",label:"Secondary gradient 7"},"secondary-gradient-800":{className:"from-secondary-800 to-secondary-900 text-secondary-800-content",label:"Secondary gradient 8"},"accent-gradient-100":{className:"from-accent-100 to-accent-200 text-accent-100-content",label:"Accent gradient 1"},"accent-gradient-200":{className:"from-accent-200 to-accent-300 text-accent-200-content",label:"Accent gradient 2"},"accent-gradient-300":{className:"from-accent-300 to-accent-400 text-accent-300-content",label:"Accent gradient 3"},"accent-gradient-400":{className:"from-accent-400 to-accent-500 text-accent-400-content",label:"Accent gradient 4"},"accent-gradient-500":{className:"from-accent-500 to-accent-600 text-accent-500-content",label:"Accent gradient 5"},"accent-gradient-600":{className:"from-accent-600 to-accent-700 text-accent-600-content",label:"Accent gradient 6"},"accent-gradient-700":{className:"from-accent-700 to-accent-800 text-accent-700-content",label:"Accent gradient 7"},"accent-gradient-800":{className:"from-accent-800 to-accent-900 text-accent-800-content",label:"Accent gradient 8"},"neutral-gradient-100":{className:"from-neutral-100 to-neutral-200 text-neutral-100-content",label:"Neutral gradient 1"},"neutral-gradient-200":{className:"from-neutral-200 to-neutral-300 text-neutral-200-content",label:"Neutral gradient 2"},"neutral-gradient-300":{className:"from-neutral-300 to-neutral-400 text-neutral-300-content",label:"Neutral gradient 3"},"neutral-gradient-400":{className:"from-neutral-400 to-neutral-500 text-neutral-400-content",label:"Neutral gradient 4"},"neutral-gradient-500":{className:"from-neutral-500 to-neutral-600 text-neutral-500-content",label:"Neutral gradient 5"},"neutral-gradient-600":{className:"from-neutral-600 to-neutral-700 text-neutral-600-content",label:"Neutral gradient 6"},"neutral-gradient-700":{className:"from-neutral-700 to-neutral-800 text-neutral-700-content",label:"Neutral gradient 7"},"neutral-gradient-800":{className:"from-neutral-800 to-neutral-900 text-neutral-800-content",label:"Neutral gradient 8"},"base-gradient-100":{className:"from-base-100 to-base-200 text-base-100-content",label:"Base gradient 1"},"base-gradient-200":{className:"from-base-200 to-base-300 text-base-200-content",label:"Base gradient 2"},none:{className:"",label:"None"}};function d(e={}){return n.Object({color:a(Object.keys(t),{title:"Color preset",description:"Color preset to apply to background and text",enumNames:Object.keys(t).map(c=>t[c].label),"ai:instructions":"Presets are predefined color combinations of background and text colors that can be applied to elements. They include various shades of primary, secondary, accent, and neutral colors, as well as gradients. You can also select 'none' to remove any preset.","ui:styleId":"presets:color","ui:responsive":!0,default:e.default?.color}),gradientDirection:n.Optional(l(e))},{"ui:field":"color-preset",title:"Color preset","ui:presets":t,default:e.default,examples:[{color:"primary-500"},{color:"secondary-500"},{color:"accent-800",gradientDirection:"bg-gradient-to-t"}],"ui:default-gradient-direction":e["ui:default-gradient-direction"]??"bg-gradient-to-br"})}function y(e={}){return r("presets:color",e)}function l(e={}){return a(["bg-gradient-to-t","bg-gradient-to-r","bg-gradient-to-b","bg-gradient-to-l","bg-gradient-to-tl","bg-gradient-to-tr","bg-gradient-to-br","bg-gradient-to-bl"],{title:"Gradient direction",description:"The direction of the gradient. Only applies when color preset is a gradient.",enumNames:["Top","Right","Bottom","Left","Top left","Top right","Bottom right","Bottom left"],default:"bg-gradient-to-br","ui:responsive":"desktop","ui:styleId":"styles:gradientDirection",...e})}export{t as a,d as b,y as c};
@@ -1,30 +1,21 @@
1
+ import type { ImageSearchResultsType } from "./images";
1
2
  import type { VersionedPage } from "./page";
2
3
  import type { Site } from "./site";
3
- import type { Sitemap } from "./sitemap";
4
4
  export type GenerationState = {
5
5
  isReady: boolean;
6
+ isSetup: boolean;
6
7
  hasSitemap: boolean;
7
8
  hasThemesGenerated: boolean;
8
- sitemap: Sitemap;
9
9
  };
10
10
  export type CallContextProps = {
11
11
  /**
12
12
  * The site object
13
13
  */
14
14
  site: Site;
15
- /**
16
- * Sitemap
17
- */
18
- sitemap: Sitemap;
19
15
  /**
20
16
  * Current page. Undefined if flow is "setup" and no page has been created yet.
21
17
  */
22
- page?: VersionedPage;
23
- /**
24
- * When generating a new site, the flow should be "setup".
25
- * Otherwise, it should be "edit".
26
- */
27
- flow: "setup" | "edit";
18
+ page: VersionedPage;
28
19
  /**
29
20
  * The current generation state of the site. Only used when flow is "setup".
30
21
  */
@@ -33,5 +24,6 @@ export type CallContextProps = {
33
24
  * The user language guessed from the sitePrompt, if available.
34
25
  */
35
26
  userLanguage?: string;
27
+ assets: ImageSearchResultsType;
36
28
  };
37
29
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/shared/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC;IACX;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/shared/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,aAAa,CAAC;IAEpB;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,MAAM,EAAE,sBAAsB,CAAC;CAChC,CAAC"}
@@ -1,8 +1,25 @@
1
- import type { Schema } from "../../types";
2
- import type { AirtableOptions } from "./options";
3
- import type { CreateAirtableTableResponse } from "./types";
4
- export declare function saveRecord(formData: FormData, options: AirtableOptions, accessToken: string): Promise<{
1
+ import type { TObject, TProperties } from "@sinclair/typebox";
2
+ import type { AirtableBases, AirtableOptions } from "./types";
3
+ export declare function saveRecord({ formData, options, properties, accessToken, }: {
4
+ formData: FormData;
5
+ options: AirtableOptions;
6
+ properties: TProperties;
7
+ accessToken: string;
8
+ }): Promise<{
5
9
  id: string;
6
10
  } | null>;
7
- export declare function createTable(name: string, schema: Schema, baseId: string, accessToken: string): Promise<CreateAirtableTableResponse | null>;
11
+ export declare function createTable({ name, schema, baseId, accessToken, }: {
12
+ name: string;
13
+ schema: TObject;
14
+ baseId: string;
15
+ accessToken: string;
16
+ }): Promise<AirtableOptions | null>;
17
+ export declare function updateTable({ baseId, tableId, newName, newProperties, accessToken, }: {
18
+ baseId: string;
19
+ tableId: string;
20
+ newName: string;
21
+ newProperties?: TProperties;
22
+ accessToken: string;
23
+ }): Promise<AirtableOptions | null>;
24
+ export declare function fetchAirtableBases(accessToken: string): Promise<AirtableBases>;
8
25
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../src/shared/datarecords/external/airtable/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE3D,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA6BhC;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC,CA8F7C"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../src/shared/datarecords/external/airtable/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAqB,eAAe,EAAE,MAAM,SAAS,CAAC;AA6JjF,wBAAsB,UAAU,CAAC,EAC/B,QAAQ,EACR,OAAO,EACP,UAAU,EACV,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgDjC;AA+HD,wBAAsB,WAAW,CAAC,EAChC,IAAI,EACJ,MAAM,EACN,MAAM,EACN,WAAW,GACZ,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAgDlC;AAED,wBAAsB,WAAW,CAAC,EAChC,MAAM,EACN,OAAO,EACP,OAAO,EACP,aAAa,EACb,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmElC;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBpF"}
@@ -1,3 +1,3 @@
1
1
  /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
2
 
3
- var m=a=>new Promise(i=>setTimeout(i,a));function c(a){if(!a)throw new Error("Missing Airtable API token");return{async callApi(i,l="GET",s=null){let o=`https://api.airtable.com/${i}`,e=5,n=3e4;for(let t=1;t<=e;t++)try{let r=await fetch(o,{method:l,headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:s?JSON.stringify(s):void 0});if(r.status===429&&t<e){console.warn(`Airtable rate limit hit (429) on attempt ${t}/${e}. Waiting ${n/1e3}s before retry...`),await m(n);continue}return{status:r.status,success:r.ok,data:await r.json()}}catch(r){if(t<e){console.warn(`Network error on attempt ${t}/${e}. Waiting ${n/1e3}s before retry...`,r),await m(n);continue}throw console.error(`Error on attempt ${t}/${e}:`,r),r}throw new Error(`Airtable API rate limit exceeded after ${e} attempts`)}}}async function y(a,i,l){try{let s=c(l),o={};for(let[n,t]of a.entries())o[n]=t;let e=await s.callApi(`v0/${i.baseId}/${i.tableId}`,"POST",{records:[{fields:o}]});if(!e.success)throw new Error(`Failed to push data to Airtable: ${e.status} - ${JSON.stringify(e.data)}`);return e.data.records[0]?{id:e.data.records[0].id}:null}catch(s){console.error("Error pushing data to Airtable:",s)}return null}async function d(a,i,l,s){let o=Object.entries(i.properties).map(([n,t])=>{if(t.type==="string")return t.format==="email"?{name:t.title,type:"email"}:t.format==="url"?{name:t.title,type:"url"}:t.format==="date"?{name:t.title,type:"date"}:t.format==="date-time"?{name:t.title,type:"dateTime"}:t.metadata?.["ui:multiline"]?{name:t.title,type:"multilineText"}:t.enum?{name:t.title,type:"singleSelect",options:t.enum.map(r=>({id:r,name:r}))}:{name:t.title,type:"singleLineText"};if(t.type==="boolean")return{name:t.title,type:"checkbox"};if(t.type==="number")return{name:t.title,type:"number"}}),e={name:a,description:`Table created by Upstart for ${a}`,fields:o};try{let t=await c(s).callApi(`v0/meta/bases/${l}/tables`,"POST",e);if(!t.success)throw new Error(`Failed to create Airtable table: ${t.status} - ${JSON.stringify(t.data)}`);return t.data}catch(n){console.error("Error creating Airtable table:",n)}return null}export{d as createTable,y as saveRecord};
3
+ var u=e=>new Promise(n=>setTimeout(n,e));function d(e){if(!e)throw new Error("Missing Airtable API token");return{async callApi(n,s="GET",o=null){let a=`https://api.airtable.com/${n}`,i=5,t=3e4;for(let r=1;r<=i;r++)try{let c=await fetch(a,{method:s,headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"},body:o?JSON.stringify(o):void 0});if(c.status===429&&r<i){console.warn(`Airtable rate limit hit (429) on attempt ${r}/${i}. Waiting ${t/1e3}s before retry...`),await u(t);continue}let l=await c.json();return{status:c.status,success:c.ok,data:l}}catch(c){if(r<i){console.warn(`Network error on attempt ${r}/${i}. Waiting ${t/1e3}s before retry...`,c),await u(t);continue}throw console.error(`Error on attempt ${r}/${i}:`,c),c}throw new Error(`Airtable API rate limit exceeded after ${i} attempts`)}}}function f(e,n){switch(n){case"checkbox":return e==="true"||e==="1"||e.toLowerCase()==="on";case"number":{let s=Number(e);return Number.isNaN(s)?e:s}case"date":case"dateTime":return e;case"email":case"url":case"singleLineText":case"multilineText":return e;case"singleSelect":return e;case"multipleSelects":{if(e.startsWith("[")&&e.endsWith("]"))try{return JSON.parse(e)}catch{return[e]}return e.includes(",")?e.split(",").map(s=>s.trim()).filter(s=>s.length>0):[e]}default:return console.warn(`Unknown Airtable field type: ${n}, treating as text`),e}}function b(e){if(e==="true"||e==="false")return e==="true";if(/^\d+\.?\d*$/.test(e)){let n=Number(e);if(!Number.isNaN(n))return n}if(/^\d{4}-\d{2}-\d{2}$/.test(e)||/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(e))return e;if(e.includes(",")){let n=e.split(",").map(s=>s.trim()).filter(s=>s.length>0);if(n.length>1)return n}return e}async function g({formData:e,options:n,properties:s,accessToken:o}){try{let a=d(o),i={};for(let[r,c]of e.entries()){if(c==null||c==="")continue;if(c instanceof File){console.warn(`File upload not yet supported for field: ${r}`);continue}let l=n.fields?.find(m=>m.name===r);l?i[r]=f(c,l.type):i[r]=b(c)}let t=await a.callApi(`v0/${n.baseId}/${n.tableId}`,"POST",{records:[{fields:i}]});if(!t.success)throw new Error(`Failed to push data to Airtable: ${t.status} - ${JSON.stringify(t.data)}`);return t.data.records[0]?{id:t.data.records[0].id}:null}catch(a){console.error("Error pushing data to Airtable:",a)}return null}function p(e){return Object.entries(e).sort(([,o],[,a])=>{let i=o.metadata?.order,t=a.metadata?.order;return i!==void 0&&t!==void 0?i-t:i!==void 0&&t===void 0?-1:i===void 0&&t!==void 0?1:0}).map(([o,a])=>{if(a.type==="string")return a.format==="email"?{name:o,type:"email"}:a.format==="uri"?{name:o,type:"url"}:a.format==="date"?{name:o,type:"date",options:{dateFormat:{name:"local"}}}:a.format==="date-time"?{name:o,type:"dateTime",options:{dateFormat:{name:"local"},timeFormat:{name:"24hour"},timeZone:"client"}}:a.metadata?.["ui:multiline"]?{name:o,type:"multilineText"}:a.enum?a.metadata?.["ui:widget"]==="checkbox"?{name:o,type:"multipleSelects",options:{choices:a.enum.map(i=>({name:i}))}}:{name:o,type:"singleSelect",options:{choices:a.enum.map(i=>({name:i}))}}:{name:o,type:"singleLineText"};if(a.type==="boolean")return{name:o,type:"checkbox",options:{icon:"check",color:"grayBright"}};if(a.type==="number")return{name:o,type:"number",options:{precision:8}}})}async function y({name:e,schema:n,baseId:s,accessToken:o}){let a=p(n.properties),i={name:e,description:`Table created by Upstart for ${e}`,fields:a};try{let r=await d(o).callApi(`v0/meta/bases/${s}/tables`,"POST",i);if(!r.success)throw console.error("Error while creating Airtable table with:",JSON.stringify(i,null,2),"from schema: ",JSON.stringify(n,null,2)),new Error(`Failed to create Airtable table: ${r.status} - ${JSON.stringify(r.data)}`);return{tableId:r.data.id,fields:r.data.fields,tableName:r.data.name,externalUrl:`https://airtable.com/${s}/${r.data.id}`}}catch(t){throw t instanceof Error?console.error(t.message):console.error("Unknown error occurred while creating Airtable table",t),t}}async function w({baseId:e,tableId:n,newName:s,newProperties:o,accessToken:a}){let i=d(a);if(o)try{let t=p(o);for(let r of t){let c=await i.callApi(`v0/meta/bases/${e}/tables/${n}/fields`,"POST",r);if(!c.success)throw console.error("Error while adding field to Airtable table with:",JSON.stringify(r,null,2)),new Error(`Failed to update Airtable table: ${c.status} - ${JSON.stringify(c.data)}`)}}catch(t){throw t instanceof Error?console.error(t.message):console.error("Unknown error occurred while updating Airtable table",t),t}try{let t={name:s,description:`Table updated by Upstart for ${s}`},r=await i.callApi(`v0/meta/bases/${e}/tables/${n}`,"PATCH",t);if(!r.success)throw console.error("Error while updating Airtable table with:",JSON.stringify(t,null,2)),new Error(`Failed to update Airtable table: ${r.status} - ${JSON.stringify(r.data)}`);return{tableId:r.data.id,fields:r.data.fields,tableName:r.data.name,externalUrl:`https://airtable.com/${e}/${r.data.id}`}}catch(t){throw t instanceof Error?console.error(t.message):console.error("Unknown error occurred while creating Airtable table",t),t}}async function h(e){try{let s=await d(e).callApi("v0/meta/bases");if(s.success)return s.data.bases;throw new Error(`Failed to fetch bases: ${s.status}`)}catch(n){return console.error("Error fetching Airtable bases:",n),[]}}export{y as createTable,h as fetchAirtableBases,g as saveRecord,w as updateTable};
@@ -0,0 +1,3 @@
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 r=e.Object({scope:e.String(),token_type:e.String(),expires_in:e.Number(),access_token:e.String(),refresh_token:e.String(),refresh_expires_in:e.Number()});export{r as airtableOAuthTokenSchema};
@@ -1,4 +1,10 @@
1
1
  import { type Static } from "@sinclair/typebox";
2
+ export declare const airtableFields: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
3
+ id: import("@sinclair/typebox").TString;
4
+ name: import("@sinclair/typebox").TString;
5
+ type: import("@sinclair/typebox").TString;
6
+ }>>;
7
+ export type AirtableFields = Static<typeof airtableFields>;
2
8
  declare const createAirtableTableResponseSchema: import("@sinclair/typebox").TObject<{
3
9
  id: import("@sinclair/typebox").TString;
4
10
  name: import("@sinclair/typebox").TString;
@@ -11,5 +17,24 @@ declare const createAirtableTableResponseSchema: import("@sinclair/typebox").TOb
11
17
  }>>;
12
18
  }>;
13
19
  export type CreateAirtableTableResponse = Static<typeof createAirtableTableResponseSchema>;
20
+ export declare const airtableOptions: import("@sinclair/typebox").TObject<{
21
+ externalUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
22
+ baseId: import("@sinclair/typebox").TString;
23
+ baseName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
24
+ tableId: import("@sinclair/typebox").TString;
25
+ tableName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
26
+ fields: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
27
+ id: import("@sinclair/typebox").TString;
28
+ name: import("@sinclair/typebox").TString;
29
+ type: import("@sinclair/typebox").TString;
30
+ }>>>;
31
+ }>;
32
+ export type AirtableOptions = Static<typeof airtableOptions>;
33
+ export type AirtableBases = {
34
+ id: string;
35
+ name: string;
36
+ }[];
37
+ export declare const AirtableFieldTypes: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"number">, import("@sinclair/typebox").TLiteral<"checkbox">, import("@sinclair/typebox").TLiteral<"date">, import("@sinclair/typebox").TLiteral<"dateTime">, import("@sinclair/typebox").TLiteral<"email">, import("@sinclair/typebox").TLiteral<"url">, import("@sinclair/typebox").TLiteral<"singleLineText">, import("@sinclair/typebox").TLiteral<"multilineText">, import("@sinclair/typebox").TLiteral<"singleSelect">, import("@sinclair/typebox").TLiteral<"multipleSelects">]>;
38
+ export type AirtableFieldType = Static<typeof AirtableFieldTypes>;
14
39
  export {};
15
40
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/shared/datarecords/external/airtable/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEtD,QAAA,MAAM,iCAAiC;;;;;;;;;;EAYrC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAAC,OAAO,iCAAiC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/shared/datarecords/external/airtable/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,cAAc;;;;GAM1B,CAAC;AACF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC;AAE3D,QAAA,MAAM,iCAAiC;;;;;;;;;;EAMrC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE3F,eAAO,MAAM,eAAe;;;;;;;;;;;EAqB1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd,EAAE,CAAC;AAEJ,eAAO,MAAM,kBAAkB,kiBAW7B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{a,b,c}from"../../../chunk-X62OEAE6.js";export{c as AirtableFieldTypes,a as airtableFields,b as airtableOptions};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ async function r(o,e){return(await fetch(e.url,{method:"POST",body:JSON.stringify(o),headers:e.headers})).ok}export{r as default};
@@ -0,0 +1,3 @@
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 o=e.Object({url:e.String({format:"uri",title:"Webhook URL"}),headers:e.Optional(e.Record(e.String(),e.String(),{title:"Headers",description:"Additional headers to include in the webhook request"}))});export{o as genericWebhookOptions};
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{a}from"../../../../chunk-2CYAFF56.js";export{a as default};
@@ -1,6 +1,30 @@
1
- import type { TablesList } from "../../../types";
2
- import type { GoogleSheetsOptions } from "./options";
3
- export declare function saveRecord(formData: FormData, options: GoogleSheetsOptions, accessToken: string): Promise<boolean>;
4
- export declare function getSchema(accessToken: string, options: GoogleSheetsOptions): Promise<Record<string, unknown> | null>;
5
- export declare function listTables(accessToken: string): Promise<TablesList>;
1
+ import type { TObject, TProperties } from "@sinclair/typebox";
2
+ import type { GoogleSheetsOptions } from "./types";
3
+ export declare function saveRecord({ formData, options, properties, accessToken, }: {
4
+ formData: FormData;
5
+ options: GoogleSheetsOptions;
6
+ properties: TProperties;
7
+ accessToken: string;
8
+ }): Promise<boolean>;
9
+ /**
10
+ * Create a spreadsheet in Google Sheets
11
+ * @param title
12
+ * @param schema
13
+ * @param accessToken
14
+ * @returns
15
+ */
16
+ export declare function createTable({ name, schema, accessToken, }: {
17
+ name: string;
18
+ schema: TObject;
19
+ accessToken: string;
20
+ }): Promise<{
21
+ spreadsheetId: string;
22
+ spreadsheetUrl: string;
23
+ }>;
24
+ export declare function updateTable({ spreadsheetId, newName, newProperties, accessToken, }: {
25
+ spreadsheetId: string;
26
+ newName?: string;
27
+ newProperties?: TProperties;
28
+ accessToken: string;
29
+ }): Promise<void>;
6
30
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../../src/shared/datarecords/external/google/sheets/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAkGlB;AAED,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAiBzC;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA4CzE"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../../src/shared/datarecords/external/google/sheets/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA+DnD,wBAAsB,UAAU,CAAC,EAC/B,QAAQ,EACR,OAAO,EACP,UAAU,EACV,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,OAAO,CAAC,CAyCnB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,EAChC,IAAI,EACJ,MAAM,EACN,WAAW,GACZ,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAkC7D;AAgCD,wBAAsB,WAAW,CAAC,EAChC,aAAa,EACb,OAAO,EACP,aAAa,EACb,WAAW,GACZ,EAAE;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ChB"}
@@ -1,6 +1,7 @@
1
1
  /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
2
 
3
- var h=class{accessToken;constructor(s){this.accessToken=s}async callDriveApi(s,o="GET",t){let r=t instanceof ArrayBuffer||t instanceof Uint8Array,u={Authorization:`Bearer ${this.accessToken}`};r?u["Content-Type"]="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":u["Content-Type"]="application/json";let e=await fetch(s,{method:o,headers:u,body:r?t:t?JSON.stringify(t):void 0});if(s.includes("export")&&s.includes("mimeType=text/csv")){let i=await e.text();return{success:e.ok,data:i,status:e.status,headers:e.headers}}if(s.includes("export")&&s.includes("mimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")){let i=await e.arrayBuffer();return{success:e.ok,data:i,status:e.status,headers:e.headers}}if(s.includes("upload/")&&e.ok)try{let i=await e.json();return{success:e.ok,data:i,status:e.status,headers:e.headers}}catch{return{success:!0,data:{message:"Upload successful"},status:e.status,headers:e.headers}}if(!e.ok&&e.headers.get("content-type")?.includes("text/html"))return{success:!1,data:{error:"HTML error response",details:(await e.text()).substring(0,200)},status:e.status,headers:e.headers};let c=await e.json();return{success:e.ok,data:c,status:e.status,headers:e.headers}}};function p(n){return new h(n)}async function x(n,s,o){try{if(!o)throw new Error("Access token is required");if(!s.spreadsheetId)throw new Error("Spreadsheet ID is required");let t=p(o),r=await t.callDriveApi(`https://www.googleapis.com/drive/v3/files/${s.spreadsheetId}/export?mimeType=text/csv`,"GET");if(!r.success)throw new Error(`Failed to download spreadsheet: ${r.status}`);let e=r.data.trim().split(`
4
- `),c={};for(let[l,a]of n.entries())c[l]=a;let i=Object.keys(c),d=[];e.length===0||e[0].trim()===""?d.push(i.join(",")):d=[...e];let g=[i.map(l=>{let a=c[l]?.toString()||"";return a.includes(",")||a.includes('"')||a.includes(`
5
- `)?`"${a.replace(/"/g,'""')}"`:a}).join(",")];d.push(...g);let w=d.join(`
6
- `),m=await t.callDriveApi(`https://www.googleapis.com/upload/drive/v3/files/${s.spreadsheetId}?uploadType=resumable`,"PATCH",{mimeType:"application/vnd.google-apps.spreadsheet"});if(!m.success){let l=await m.data;throw new Error(`Failed to initiate upload: ${m.status} - ${l}`)}let f=m.headers.get("Location");if(!f)throw new Error("No upload URL returned from Google Drive");return(await fetch(f,{method:"PUT",headers:{"Content-Type":"text/csv"},body:w})).ok}catch(t){return console.error("Error pushing data to Google Sheets:",t),!1}}async function k(n,s){try{let t=await p(n).callDriveApi(`files/${s.spreadsheetId}/export?mimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,"GET");if(!t.success)throw new Error(`Failed to get spreadsheet schema: ${t.status}`);return t.data}catch(o){return console.error("Error getting Google Sheets schema:",o),null}}async function E(n){try{if(!n)throw new Error("Access token is required");let o=await p(n).callDriveApi("https://www.googleapis.com/drive/v3/files?q=mimeType='application/vnd.google-apps.spreadsheet'&fields=files(id,name,mimeType,createdTime,modifiedTime,webViewLink)","GET");if(!o.success)throw new Error(`Failed to list Google Sheets: ${o.status}`);return o.data.files.map(r=>({id:r.id,name:r.name,data:{mimeType:r.mimeType,createdTime:r.createdTime,modifiedTime:r.modifiedTime,webViewLink:r.webViewLink}}))}catch(s){return console.error("Error listing Google Sheets:",s),[]}}export{k as getSchema,E as listTables,x as saveRecord};
3
+ import{a as p}from"../../../../chunk-2CYAFF56.js";async function w(o,n){try{let e=await p(n).callDriveApi(`https://www.googleapis.com/drive/v3/files/${o}/export?mimeType=text/csv`,"GET");if(!e.success)throw new Error(`Failed to download spreadsheet: ${e.status}`);return e.data}catch(s){throw console.error("Error downloading Google Sheets data:",s),s}}async function u(o,n,s){try{let r=await p(s).callDriveApi(`https://www.googleapis.com/upload/drive/v3/files/${o}?uploadType=resumable`,"PATCH",{mimeType:"application/vnd.google-apps.spreadsheet"});if(!r.success){let c=r.data;throw new Error(`Failed to initiate upload: ${r.status} - ${c}`)}let t=r.headers.get("Location");if(!t)throw new Error("No upload URL returned from Google Drive");return(await fetch(t,{method:"PUT",headers:{"Content-Type":"text/csv"},body:n.map(c=>c.replace("\r","")).join(`
4
+ `)})).ok}catch(e){throw console.error("Error uploading Google Sheets data:",e),e}}async function v({formData:o,options:n,properties:s,accessToken:e}){try{if(!e)throw new Error("Access token is required");if(!n.spreadsheetId)throw new Error("Spreadsheet ID is required");let t=(await w(n.spreadsheetId,e)).trim().split(`
5
+ `),i={};for(let[l,a]of o.entries())i[l]=a;let d=g(s).map(l=>{let a=i[l]?.toString()||"";return a.includes(",")||a.includes('"')||a.includes(`
6
+ `)?`"${a.replace(/"/g,'""')}"`:a}).join(",");return t.push(d),u(n.spreadsheetId,t,e)}catch(r){return console.error("Error pushing data to Google Sheets:",r),!1}}async function y({name:o,schema:n,accessToken:s}){try{let r=await p(s).callDriveApi("https://www.googleapis.com/drive/v3/files","POST",{name:o,mimeType:"application/vnd.google-apps.spreadsheet"});if(!r.success)throw new Error(`Failed to create spreadsheet: ${r.status}`);let t=r.data.id,i=`https://docs.google.com/spreadsheets/d/${t}/edit`,d=g(n.properties).join(",");return await u(t,[d],s),{spreadsheetId:t,spreadsheetUrl:i}}catch(e){throw console.error("Error creating Google Sheets spreadsheet:",e),e}}function g(o){return Object.entries(o).sort(([,e],[,r])=>{let t=e.metadata?.order,i=r.metadata?.order;return t!==void 0&&i!==void 0?t-i:t!==void 0&&i===void 0?-1:t===void 0&&i!==void 0?1:0}).map(([e,r])=>e)}async function T({spreadsheetId:o,newName:n,newProperties:s,accessToken:e}){try{if(n&&await p(e).callDriveApi(`https://www.googleapis.com/drive/v3/files/${o}`,"PATCH",{name:n}),s){let r=g(s),c=(await w(o,e)).split(`
7
+ `).map((d,l)=>{if(l===0)return[...d.split(","),...r].join(",");{let a=d.split(","),h=r.map(()=>"");return[...a,...h].join(",")}});await u(o,c,e)}}catch(r){throw console.error("Error updating Google Sheets spreadsheet:",r),r}}export{y as createTable,v as saveRecord,T as updateTable};
@@ -6,4 +6,4 @@ export declare const googleSheetsOptions: import("@sinclair/typebox").TObject<{
6
6
  externalUrl: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
7
7
  }>;
8
8
  export type GoogleSheetsOptions = Static<typeof googleSheetsOptions>;
9
- //# sourceMappingURL=options.d.ts.map
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/shared/datarecords/external/google/sheets/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEtD,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
+
3
+ import{a}from"../../../../chunk-L2HOZVBC.js";export{a as googleSheetsOptions};
@@ -1,9 +1,31 @@
1
1
  import { type CreateDatabaseResponse, type DatabaseObjectResponse } from "@notionhq/client";
2
- import type { Schema, TablesList } from "../../types";
3
- import type { NotionOptions } from "./options";
4
- export type { CreateDatabaseResponse, DatabaseObjectResponse };
5
- export declare function saveRecord(formData: FormData, options: NotionOptions, accessToken: string): Promise<import("@notionhq/client").CreatePageResponse>;
6
- export declare function listTables(accessToken: string): Promise<TablesList>;
7
- export declare function listPages(accessToken: string): Promise<TablesList>;
8
- export declare function createTable(name: string, schema: Schema, pageId: string, accessToken: string): Promise<NotionOptions>;
2
+ import type { TObject, TProperties } from "@sinclair/typebox";
3
+ import type { ListPagesResponse, NotionOptions, NotionPage } from "./types";
4
+ export type { CreateDatabaseResponse, DatabaseObjectResponse, ListPagesResponse };
5
+ export declare function saveRecord({ formData, options, properties, accessToken, }: {
6
+ formData: FormData;
7
+ options: NotionOptions;
8
+ properties: TProperties;
9
+ accessToken: string;
10
+ }): Promise<import("@notionhq/client").PartialPageObjectResponse | undefined>;
11
+ export declare function listPages(accessToken: string, parameters?: {
12
+ maxResults?: number;
13
+ maxCalls?: number;
14
+ }): Promise<ListPagesResponse>;
15
+ export declare function updateTable({ id, newName, newProperties, accessToken, }: {
16
+ id: string;
17
+ newName?: string;
18
+ newProperties?: TProperties;
19
+ accessToken: string;
20
+ }): Promise<NotionOptions>;
21
+ export declare function createTable({ name, schema, pageId, accessToken, }: {
22
+ name: string;
23
+ schema: TObject;
24
+ pageId: string;
25
+ accessToken: string;
26
+ }): Promise<NotionOptions>;
27
+ export declare function checkPage({ pageId, accessToken, }: {
28
+ pageId: string;
29
+ accessToken: string;
30
+ }): Promise<NotionPage | undefined>;
9
31
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../src/shared/datarecords/external/notion/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAE5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAS,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,CAAC;AAE/D,wBAAsB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0DAe/F;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAgCzE;AAED,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsCxE;AAoCD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CA+BxB"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../../src/shared/datarecords/external/notion/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAG5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAe,MAAM,SAAS,CAAC;AAKzF,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;AAElF,wBAAsB,UAAU,CAAC,EAC/B,QAAQ,EACR,OAAO,EACP,UAAU,EACV,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,6EAgBA;AA6ED,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AA4FD,wBAAsB,WAAW,CAAC,EAChC,EAAE,EACF,OAAO,EACP,aAAa,EACb,WAAW,GACZ,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,aAAa,CAAC,CA+BzB;AAED,wBAAsB,WAAW,CAAC,EAChC,IAAI,EACJ,MAAM,EACN,MAAM,EACN,WAAW,GACZ,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,aAAa,CAAC,CA+BzB;AAED,wBAAsB,SAAS,CAAC,EAC9B,MAAM,EACN,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CA4BlC"}
@@ -1,3 +1,3 @@
1
1
  /*! Upstart.gg - Copyright (C) 2024 Flippable - https://github.com/upstart-gg/upstart/blob/main/LICENSE */
2
2
 
3
- import{Client as c}from"@notionhq/client";function l(s,r){let e={};for(let[t,a]of s.entries())if(!(a==null||a==="")&&t in r)switch(r[t].type){case"title":e[t]={title:[{text:{content:String(a)}}]};break;case"rich_text":e[t]={rich_text:[{text:{content:String(a)}}]};break;case"email":e[t]={email:String(a)};break;case"phone_number":e[t]={phone_number:String(a)};break;case"url":e[t]={url:String(a)};break;case"number":e[t]={number:Number(a)};break;case"checkbox":e[t]={checkbox:!!a};break;case"date":e[t]={date:a?{start:String(a)}:null};break;default:console.warn(`Unsupported property type for key "${t}": ${r[t].type}`),e[t]={rich_text:[{text:{content:String(a)}}]}}return e}async function f(s,r,e){let t=new c({auth:e}),a=l(s,r.properties),o=await t.pages.create({parent:{database_id:r.id},properties:{...a}});if(!o)throw new Error("Failed to push data to Notion");return o}async function m(s){try{let e=await new c({auth:s}).search({filter:{property:"object",value:"database"}}),t=[];for(let a in e.results){let o=e.results[a],i={id:o.id,name:o.title[0]?.plain_text,properties:o.properties,url:o.url},p={id:o.id,name:o.title[0]?.plain_text,data:i};t.push(p)}return t}catch(r){throw console.error("Error listing Notion databases:",r),r}}async function g(s){try{let e=await new c({auth:s}).search({filter:{property:"object",value:"page"}}),t=[];for(let a in e.results){let o=e.results[a];if(o.parent.type!=="database_id"){let i={id:o.id,name:o.properties.title&&o.properties.title.type==="title"&&Array.isArray(o.properties.title.title)&&o.properties.title.title[0]?.plain_text?o.properties.title.title[0].plain_text:"No Title",data:o.properties};t.push(i)}}return t}catch(r){throw console.error("Error listing Notion databases:",r),r}}function b(s){let r={};for(let[e,t]of Object.entries(s.properties))t.type==="string"&&(e===s.required?.[0]?r[e]={title:{},name:e,type:"title"}:r[e]={rich_text:{},name:e,type:"rich_text"}),t.type==="number"&&(r[e]={number:{}}),t.type==="boolean"&&(r[e]={checkbox:{}});return r}async function h(s,r,e,t){let a=b(r),o={parent:{type:"page_id",page_id:e},title:[{type:"text",text:{content:s}}],properties:a},i=new c({auth:t}),p=await i.databases.create(o);if(!p)throw new Error("Failed to create Notion database");let n=await i.databases.retrieve({database_id:p.id});if(!n)throw new Error("Failed to retrieve Notion database after creation");return{id:n.id,name:n.title[0]?.plain_text,properties:n.properties,url:n.url}}export{h as createTable,g as listPages,m as listTables,f as saveRecord};
3
+ import{Client as c}from"@notionhq/client";import{nanoid as d}from"nanoid";var g=10,b=1e3;async function h({formData:o,options:s,properties:r,accessToken:e}){let t=new c({auth:e}),p=f(o,s.properties);try{return t.pages.create({parent:{database_id:s.id},properties:{...p}})}catch{return}}async function l(o,s,r,e,t){let p=t?t+1:1;if(p>(r?.maxCalls??g))return{status:"max_call_reached",pages:s};try{let n=await o.search({filter:{property:"object",value:"page"},start_cursor:e,page_size:100});if(!n)return{status:"error",pages:s};for(let a in n.results){let i=n.results[a];if(i.parent.type!=="database_id"){let m={id:i.id,name:i.properties.title&&i.properties.title.type==="title"&&Array.isArray(i.properties.title.title)&&i.properties.title.title[0]?.plain_text?i.properties.title.title[0].plain_text:"No Title"};if(s.push(m),s.length>=(r?.maxResults??b))return{status:"max_pages_reached",pages:s}}}if(n.has_more&&n.next_cursor){let a=await l(o,s,r,n.next_cursor,p);return a.status!=="success"?{status:a.status,pages:s}:a}}catch(n){console.error("Error searching Notion pages:",n)}return{status:"success",pages:s}}async function _(o,s){try{let r=new c({auth:o});return await l(r,[],{...s})}catch(r){throw console.error("Error listing Notion databases:",r),r}}function u(o,s=[]){let r={};for(let[e,t]of Object.entries(o))t.type==="string"?e in(s??[])&&e==="id"?r[e]={title:{},name:e,type:"title"}:t.format==="email"?r[e]={type:"email",name:e,email:{}}:t.format==="uri"?r[e]={type:"url",name:e,url:{}}:t.format==="date"||t.format==="date-time"?r[e]={type:"date",name:e,date:{}}:t.enum&&Array.isArray(t.enum)&&t.enum.length>0?t.metadata?.["ui:widget"]==="checkbox"?r[e]={type:"multi_select",name:e,multi_select:{options:t.enum.map(p=>({name:p}))}}:r[e]={type:"select",name:e,select:{options:t.enum.map(p=>({name:p}))}}:r[e]={rich_text:{},name:e,type:"rich_text"}:t.type==="number"?r[e]={number:{}}:t.type==="boolean"&&(r[e]={checkbox:{}});return r.id||(r.id={title:{},name:"id",type:"title"}),r}async function P({id:o,newName:s,newProperties:r,accessToken:e}){let t=new c({auth:e}),p=r?u(r):{},n=await t.databases.update({database_id:o,...s?{title:[{type:"text",text:{content:s}}]}:{},...Object.keys(p).length>0?{properties:p}:{}});if(!n)throw new Error("Failed to update Notion database");return{id:n.id,name:n.title[0]?.plain_text,properties:n.properties,url:n.url}}async function R({name:o,schema:s,pageId:r,accessToken:e}){let t=u(s.properties,s.required),p={parent:{type:"page_id",page_id:r},title:[{type:"text",text:{content:o}}],properties:t},n=new c({auth:e}),a=await n.databases.create(p);if(!a)throw new Error("Failed to create Notion database");let i=await n.databases.retrieve({database_id:a.id});if(!i)throw new Error("Failed to retrieve Notion database after creation");return{id:i.id,name:i.title[0]?.plain_text,properties:i.properties,url:i.url}}async function k({pageId:o,accessToken:s}){let r=new c({auth:s});try{let e=await r.pages.retrieve({page_id:o});if(!e){console.log("Failed to retrieve Notion page");return}if(e){let t=e;return{id:t.id,name:t.properties.title&&t.properties.title.type==="title"&&Array.isArray(t.properties.title.title)&&t.properties.title.title[0]?.plain_text?t.properties.title.title[0].plain_text:"No Title"}}}catch(e){console.error("Error retrieving Notion page:",e)}}function f(o,s){let r={};for(let[e,t]of o.entries())if(!(t==null||t==="")&&e in s)switch(s[e].type){case"title":r[e]={title:[{text:{content:String(t)}}]};break;case"rich_text":r[e]={rich_text:[{text:{content:String(t)}}]};break;case"email":r[e]={email:String(t)};break;case"phone_number":r[e]={phone_number:String(t)};break;case"url":r[e]={url:String(t)};break;case"number":r[e]={number:Number(t)};break;case"checkbox":r[e]={checkbox:t==="true"||t==="1"};break;case"date":r[e]={date:t?{start:String(t)}:null};break;case"select":r[e]={select:{name:String(t)}};break;case"multi_select":{let n=(a=>{if(a.startsWith("[")&&a.endsWith("]"))try{return JSON.parse(a)}catch{return[a]}return a.includes(",")?a.split(",").map(i=>i.trim()).filter(i=>i.length>0):[a]})(String(t));r[e]={multi_select:n.map(a=>({name:a}))};break}default:console.warn(`Unsupported property type for key "${e}": ${s[e].type}`),r[e]={rich_text:[{text:{content:String(t)}}]}}return"id"in r||(r.id={title:[{text:{content:d(5)}}]}),r}export{k as checkPage,R as createTable,_ as listPages,h as saveRecord,P as updateTable};
@@ -0,0 +1,3 @@
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({access_token:t.String(),refresh_token:t.String()});export{o as notionOAuthTokenSchema};