@upstart.gg/sdk 0.0.129 → 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 (529) 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 +6 -15
  186. package/dist/shared/context.d.ts.map +1 -1
  187. package/dist/shared/datarecords/external/airtable/handler.d.ts +24 -7
  188. package/dist/shared/datarecords/external/airtable/handler.d.ts.map +1 -1
  189. package/dist/shared/datarecords/external/airtable/handler.js +3 -0
  190. package/dist/shared/datarecords/external/airtable/oauth/config.js +3 -0
  191. package/dist/shared/datarecords/external/airtable/types.d.ts +40 -0
  192. package/dist/shared/datarecords/external/airtable/types.d.ts.map +1 -0
  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.d.ts +14 -0
  197. package/dist/shared/datarecords/external/google/sheets/client.d.ts.map +1 -0
  198. package/dist/shared/datarecords/external/google/sheets/client.js +3 -0
  199. package/dist/shared/datarecords/external/google/sheets/handler.d.ts +27 -5
  200. package/dist/shared/datarecords/external/google/sheets/handler.d.ts.map +1 -1
  201. package/dist/shared/datarecords/external/google/sheets/handler.js +7 -0
  202. package/dist/shared/datarecords/external/google/sheets/{options.d.ts → types.d.ts} +1 -1
  203. package/dist/shared/datarecords/external/google/sheets/types.d.ts.map +1 -0
  204. package/dist/shared/datarecords/external/google/sheets/types.js +3 -0
  205. package/dist/shared/datarecords/external/notion/handler.d.ts +31 -0
  206. package/dist/shared/datarecords/external/notion/handler.d.ts.map +1 -0
  207. package/dist/shared/datarecords/external/notion/handler.js +3 -0
  208. package/dist/shared/datarecords/external/notion/oauth/config.js +3 -0
  209. package/dist/shared/datarecords/external/notion/{options.d.ts → types.d.ts} +11 -1
  210. package/dist/shared/datarecords/external/notion/types.d.ts.map +1 -0
  211. package/dist/shared/datarecords/external/notion/types.js +3 -0
  212. package/dist/shared/datarecords/types.d.ts +17 -18
  213. package/dist/shared/datarecords/types.d.ts.map +1 -1
  214. package/dist/shared/datarecords/types.js +1 -1
  215. package/dist/shared/datarecords.d.ts +2 -2
  216. package/dist/shared/datarecords.d.ts.map +1 -1
  217. package/dist/shared/datarecords.js +1 -1
  218. package/dist/shared/datasources/external/facebook/posts/fetcher.js +3 -0
  219. package/dist/shared/datasources/external/facebook/posts/schema.js +3 -0
  220. package/dist/shared/datasources/external/http-json/fetcher.js +3 -0
  221. package/dist/shared/datasources/external/http-json/options.js +3 -0
  222. package/dist/shared/datasources/external/http-json/schema.js +3 -0
  223. package/dist/shared/datasources/external/instagram/feed/fetcher.js +3 -0
  224. package/dist/shared/datasources/external/instagram/feed/schema.js +3 -0
  225. package/dist/shared/datasources/external/mastodon/account/fetcher.js +3 -0
  226. package/dist/shared/datasources/external/mastodon/account/schema.js +3 -0
  227. package/dist/shared/datasources/external/mastodon/options.js +3 -0
  228. package/dist/shared/datasources/external/mastodon/status/fetcher.js +3 -0
  229. package/dist/shared/datasources/external/mastodon/status/sample.array.js +3 -0
  230. package/dist/shared/datasources/external/mastodon/status/sample.single.js +3 -0
  231. package/dist/shared/datasources/external/mastodon/status/schema.d.ts.map +1 -1
  232. package/dist/shared/datasources/external/mastodon/status/schema.js +3 -0
  233. package/dist/shared/datasources/external/meta/options.js +3 -0
  234. package/dist/shared/datasources/external/rss/fetcher.js +3 -0
  235. package/dist/shared/datasources/external/rss/options.js +3 -0
  236. package/dist/shared/datasources/external/rss/schema.js +3 -0
  237. package/dist/shared/datasources/external/threads/media/fetcher.js +3 -0
  238. package/dist/shared/datasources/external/threads/media/schema.js +3 -0
  239. package/dist/shared/datasources/external/tiktok/video/fetcher.js +3 -0
  240. package/dist/shared/datasources/external/tiktok/video/options.js +3 -0
  241. package/dist/shared/datasources/external/tiktok/video/schema.js +3 -0
  242. package/dist/shared/datasources/external/youtube/list/fetcher.js +3 -0
  243. package/dist/shared/datasources/external/youtube/list/options.js +3 -0
  244. package/dist/shared/datasources/external/youtube/list/schema.js +3 -0
  245. package/dist/shared/datasources/fetcher.js +2 -0
  246. package/dist/shared/datasources/internal/blog/schema.js +3 -0
  247. package/dist/shared/datasources/internal/changelog/schema.js +3 -0
  248. package/dist/shared/datasources/internal/contact-info/schema.js +3 -0
  249. package/dist/shared/datasources/internal/cv/schema.js +3 -0
  250. package/dist/shared/datasources/internal/faq/schema.js +3 -0
  251. package/dist/shared/datasources/internal/job-board/schema.js +3 -0
  252. package/dist/shared/datasources/internal/links/schema.js +3 -0
  253. package/dist/shared/datasources/internal/recipes/schema.js +3 -0
  254. package/dist/shared/datasources/internal/restaurant/schema.js +3 -0
  255. package/dist/shared/datasources/samples.js +3 -0
  256. package/dist/shared/datasources/schemas.d.ts +0 -49
  257. package/dist/shared/datasources/schemas.d.ts.map +1 -1
  258. package/dist/shared/datasources/schemas.js +1 -1
  259. package/dist/shared/datasources/types.d.ts +53 -130
  260. package/dist/shared/datasources/types.d.ts.map +1 -1
  261. package/dist/shared/datasources/types.js +1 -1
  262. package/dist/shared/datasources/utils.js +3 -0
  263. package/dist/shared/datasources.d.ts +7 -4
  264. package/dist/shared/datasources.d.ts.map +1 -1
  265. package/dist/shared/datasources.js +1 -1
  266. package/dist/shared/errors.js +1 -1
  267. package/dist/shared/images.d.ts +1 -12
  268. package/dist/shared/images.d.ts.map +1 -1
  269. package/dist/shared/images.js +1 -1
  270. package/dist/shared/index.js +3 -0
  271. package/dist/shared/manifest.js +3 -0
  272. package/dist/shared/page.d.ts +155 -50
  273. package/dist/shared/page.d.ts.map +1 -1
  274. package/dist/shared/page.js +1 -1
  275. package/dist/shared/site.d.ts +322 -113
  276. package/dist/shared/site.d.ts.map +1 -1
  277. package/dist/shared/site.js +1 -1
  278. package/dist/shared/sitemap.d.ts +313 -13
  279. package/dist/shared/sitemap.d.ts.map +1 -1
  280. package/dist/shared/sitemap.js +1 -1
  281. package/dist/shared/social-icons.js +3 -0
  282. package/dist/shared/theme.d.ts +41 -4
  283. package/dist/shared/theme.d.ts.map +1 -1
  284. package/dist/shared/theme.js +1 -1
  285. package/dist/shared/utils/invariant.js +1 -1
  286. package/dist/shared/utils/llm.d.ts +19 -0
  287. package/dist/shared/utils/llm.d.ts.map +1 -0
  288. package/dist/shared/utils/llm.js +3 -0
  289. package/dist/shared/utils/schema.d.ts +6 -1
  290. package/dist/shared/utils/schema.d.ts.map +1 -1
  291. package/dist/shared/utils/schema.js +1 -1
  292. package/dist/shared/utils/tests/schema.test.d.ts +2 -0
  293. package/dist/shared/utils/tests/schema.test.d.ts.map +1 -0
  294. package/dist/shared/utils/typed-ref.d.ts +1 -6
  295. package/dist/shared/utils/typed-ref.d.ts.map +1 -1
  296. package/dist/shared/utils/typed-ref.js +1 -1
  297. package/package.json +19 -19
  298. package/src/shared/ai/schemas.ts +33 -0
  299. package/src/shared/ai/types.ts +151 -0
  300. package/src/shared/ajv.ts +123 -0
  301. package/src/shared/analytics/init.ts +14 -0
  302. package/src/shared/analytics/track.ts +21 -0
  303. package/src/shared/analytics/types.ts +13 -0
  304. package/src/shared/attributes.ts +396 -0
  305. package/src/shared/brick-manifest.ts +119 -0
  306. package/src/shared/bricks/manifests/accordion.manifest.ts +482 -0
  307. package/src/shared/bricks/manifests/all-manifests.ts +121 -0
  308. package/src/shared/bricks/manifests/box.manifest.ts +551 -0
  309. package/src/shared/bricks/manifests/button.manifest.ts +208 -0
  310. package/src/shared/bricks/manifests/card.manifest.ts +320 -0
  311. package/src/shared/bricks/manifests/carousel.manifest.ts +708 -0
  312. package/src/shared/bricks/manifests/footer.manifest.ts +509 -0
  313. package/src/shared/bricks/manifests/form.manifest.ts +226 -0
  314. package/src/shared/bricks/manifests/hero.manifest.ts +365 -0
  315. package/src/shared/bricks/manifests/html.manifest.ts +127 -0
  316. package/src/shared/bricks/manifests/icon.manifest.ts +164 -0
  317. package/src/shared/bricks/manifests/image.manifest.ts +378 -0
  318. package/src/shared/bricks/manifests/images-gallery.manifest.ts +822 -0
  319. package/src/shared/bricks/manifests/map.manifest.ts +215 -0
  320. package/src/shared/bricks/manifests/navbar.manifest.ts +361 -0
  321. package/src/shared/bricks/manifests/sidebar.manifest.ts +88 -0
  322. package/src/shared/bricks/manifests/social-links.manifest.ts +497 -0
  323. package/src/shared/bricks/manifests/spacer.manifest.ts +54 -0
  324. package/src/shared/bricks/manifests/testimonials.manifest.ts +480 -0
  325. package/src/shared/bricks/manifests/tests/header.manifest.test.ts +10 -0
  326. package/src/shared/bricks/manifests/text.manifest.ts +245 -0
  327. package/src/shared/bricks/manifests/video.manifest.ts +115 -0
  328. package/src/shared/bricks/props/align.ts +63 -0
  329. package/src/shared/bricks/props/background.ts +79 -0
  330. package/src/shared/bricks/props/boolean.ts +7 -0
  331. package/src/shared/bricks/props/border.ts +86 -0
  332. package/src/shared/bricks/props/color-preset.ts +390 -0
  333. package/src/shared/bricks/props/color.ts +40 -0
  334. package/src/shared/bricks/props/common.ts +64 -0
  335. package/src/shared/bricks/props/css-length.ts +32 -0
  336. package/src/shared/bricks/props/datarecord.ts +11 -0
  337. package/src/shared/bricks/props/datasource.ts +82 -0
  338. package/src/shared/bricks/props/date.ts +21 -0
  339. package/src/shared/bricks/props/direction.ts +21 -0
  340. package/src/shared/bricks/props/dynamic.ts +112 -0
  341. package/src/shared/bricks/props/effects.ts +71 -0
  342. package/src/shared/bricks/props/enum.ts +38 -0
  343. package/src/shared/bricks/props/file.ts +10 -0
  344. package/src/shared/bricks/props/geolocation.ts +36 -0
  345. package/src/shared/bricks/props/helpers.ts +73 -0
  346. package/src/shared/bricks/props/image.ts +96 -0
  347. package/src/shared/bricks/props/number.ts +8 -0
  348. package/src/shared/bricks/props/position.ts +11 -0
  349. package/src/shared/bricks/props/string.ts +72 -0
  350. package/src/shared/bricks/props/tags.ts +26 -0
  351. package/src/shared/bricks/props/tests/background.test.ts +90 -0
  352. package/src/shared/bricks/props/tests/border.test.ts +12 -0
  353. package/src/shared/bricks/props/tests/effects.test.ts +37 -0
  354. package/src/shared/bricks/props/tests/helpers.test.ts +98 -0
  355. package/src/shared/bricks/props/tests/image.test.ts +71 -0
  356. package/src/shared/bricks/props/tests/string.test.ts +80 -0
  357. package/src/shared/bricks/props/text.ts +107 -0
  358. package/src/shared/bricks/props/types.ts +72 -0
  359. package/src/shared/bricks.ts +1237 -0
  360. package/src/shared/context.ts +32 -0
  361. package/src/shared/datarecords/external/airtable/handler.ts +501 -0
  362. package/src/shared/datarecords/external/airtable/oauth/config.ts +11 -0
  363. package/src/shared/datarecords/external/airtable/types.ts +63 -0
  364. package/src/shared/datarecords/external/generic-webhook/handler.ts +10 -0
  365. package/src/shared/datarecords/external/generic-webhook/options.ts +13 -0
  366. package/src/shared/datarecords/external/google/oauth/config.ts +30 -0
  367. package/src/shared/datarecords/external/google/sheets/client.ts +112 -0
  368. package/src/shared/datarecords/external/google/sheets/handler.ts +253 -0
  369. package/src/shared/datarecords/external/google/sheets/types.ts +10 -0
  370. package/src/shared/datarecords/external/notion/handler.ts +469 -0
  371. package/src/shared/datarecords/external/notion/oauth/config.ts +7 -0
  372. package/src/shared/datarecords/external/notion/types.ts +28 -0
  373. package/src/shared/datarecords/types.ts +165 -0
  374. package/src/shared/datarecords.ts +5 -0
  375. package/src/shared/datasources/README.md +3 -0
  376. package/src/shared/datasources/external/facebook/posts/fetcher.ts +52 -0
  377. package/src/shared/datasources/external/facebook/posts/sample.ts +35 -0
  378. package/src/shared/datasources/external/facebook/posts/schema.ts +33 -0
  379. package/src/shared/datasources/external/facebook/posts/tests/fetcher.test.ts +73 -0
  380. package/src/shared/datasources/external/http-json/fetcher.ts +31 -0
  381. package/src/shared/datasources/external/http-json/options.ts +8 -0
  382. package/src/shared/datasources/external/http-json/schema.ts +6 -0
  383. package/src/shared/datasources/external/http-json/tests/fetcher.test.ts +70 -0
  384. package/src/shared/datasources/external/instagram/feed/fetcher.ts +33 -0
  385. package/src/shared/datasources/external/instagram/feed/sample.ts +22 -0
  386. package/src/shared/datasources/external/instagram/feed/schema.ts +23 -0
  387. package/src/shared/datasources/external/instagram/feed/tests/fetcher.test.ts +64 -0
  388. package/src/shared/datasources/external/mastodon/account/fetcher.ts +24 -0
  389. package/src/shared/datasources/external/mastodon/account/sample.ts +33 -0
  390. package/src/shared/datasources/external/mastodon/account/schema.ts +45 -0
  391. package/src/shared/datasources/external/mastodon/account/tests/fetcher.test.ts +47 -0
  392. package/src/shared/datasources/external/mastodon/options.ts +6 -0
  393. package/src/shared/datasources/external/mastodon/status/fetcher.ts +35 -0
  394. package/src/shared/datasources/external/mastodon/status/sample.array.ts +59 -0
  395. package/src/shared/datasources/external/mastodon/status/sample.single.ts +55 -0
  396. package/src/shared/datasources/external/mastodon/status/schema.ts +125 -0
  397. package/src/shared/datasources/external/mastodon/status/tests/fetcher.test.ts +74 -0
  398. package/src/shared/datasources/external/meta/oauth/config.ts +16 -0
  399. package/src/shared/datasources/external/meta/options.ts +7 -0
  400. package/src/shared/datasources/external/rss/fetcher.ts +31 -0
  401. package/src/shared/datasources/external/rss/options.ts +7 -0
  402. package/src/shared/datasources/external/rss/sample.ts +22 -0
  403. package/src/shared/datasources/external/rss/schema.ts +42 -0
  404. package/src/shared/datasources/external/threads/media/fetcher.ts +53 -0
  405. package/src/shared/datasources/external/threads/media/sample.ts +44 -0
  406. package/src/shared/datasources/external/threads/media/schema.ts +37 -0
  407. package/src/shared/datasources/external/tiktok/oauth/config.ts +17 -0
  408. package/src/shared/datasources/external/tiktok/video/fetcher.ts +39 -0
  409. package/src/shared/datasources/external/tiktok/video/options.ts +8 -0
  410. package/src/shared/datasources/external/tiktok/video/sample.ts +26 -0
  411. package/src/shared/datasources/external/tiktok/video/schema.ts +27 -0
  412. package/src/shared/datasources/external/youtube/list/fetcher.ts +37 -0
  413. package/src/shared/datasources/external/youtube/list/options.ts +11 -0
  414. package/src/shared/datasources/external/youtube/list/sample.ts +33 -0
  415. package/src/shared/datasources/external/youtube/list/schema.ts +38 -0
  416. package/src/shared/datasources/external/youtube/oauth/config.ts +15 -0
  417. package/src/shared/datasources/fetcher.ts +16 -0
  418. package/src/shared/datasources/internal/blog/schema.ts +69 -0
  419. package/src/shared/datasources/internal/changelog/schema.ts +48 -0
  420. package/src/shared/datasources/internal/contact-info/schema.ts +20 -0
  421. package/src/shared/datasources/internal/cv/schema.ts +217 -0
  422. package/src/shared/datasources/internal/faq/schema.ts +27 -0
  423. package/src/shared/datasources/internal/job-board/schema.ts +228 -0
  424. package/src/shared/datasources/internal/links/schema.ts +15 -0
  425. package/src/shared/datasources/internal/recipes/schema.ts +42 -0
  426. package/src/shared/datasources/internal/restaurant/schema.ts +225 -0
  427. package/src/shared/datasources/samples.ts +26 -0
  428. package/src/shared/datasources/schemas.ts +48 -0
  429. package/src/shared/datasources/types.ts +490 -0
  430. package/src/shared/datasources/utils.ts +17 -0
  431. package/src/shared/datasources.ts +57 -0
  432. package/src/shared/env.ts +23 -0
  433. package/src/shared/errors.ts +1 -0
  434. package/src/shared/images.ts +44 -0
  435. package/src/shared/index.ts +3 -0
  436. package/src/shared/layout-constants.ts +19 -0
  437. package/src/shared/manifest.ts +50 -0
  438. package/src/shared/oauth.ts +16 -0
  439. package/src/shared/page.ts +36 -0
  440. package/src/shared/prompt.ts +9 -0
  441. package/src/shared/responsive.ts +5 -0
  442. package/src/shared/site.ts +59 -0
  443. package/src/shared/sitemap.ts +98 -0
  444. package/src/shared/social-icons.ts +307 -0
  445. package/src/shared/tests/attributes.test.ts +31 -0
  446. package/src/shared/theme.ts +244 -0
  447. package/src/shared/themes/README.md +34 -0
  448. package/src/shared/themes/color-system.ts +146 -0
  449. package/src/shared/themes/tests/color-system.test.ts +170 -0
  450. package/src/shared/utils/canvas-data-uri.ts +2 -0
  451. package/src/shared/utils/invariant.ts +25 -0
  452. package/src/shared/utils/json-date.ts +8 -0
  453. package/src/shared/utils/llm.ts +282 -0
  454. package/src/shared/utils/merge.ts +12 -0
  455. package/src/shared/utils/object-hash.ts +7 -0
  456. package/src/shared/utils/schema.ts +359 -0
  457. package/src/shared/utils/string-enum.ts +12 -0
  458. package/src/shared/utils/tests/schema.test.ts +724 -0
  459. package/src/shared/utils/try-catch.ts +12 -0
  460. package/src/shared/utils/typed-ref.ts +53 -0
  461. package/dist/shared/bricks/props/container.d.ts +0 -11
  462. package/dist/shared/bricks/props/container.d.ts.map +0 -1
  463. package/dist/shared/bricks/props/container.js +0 -3
  464. package/dist/shared/bricks/props/gap.d.ts +0 -9
  465. package/dist/shared/bricks/props/gap.d.ts.map +0 -1
  466. package/dist/shared/bricks/props/gap.js +0 -3
  467. package/dist/shared/bricks/props/padding.d.ts +0 -5
  468. package/dist/shared/bricks/props/padding.d.ts.map +0 -1
  469. package/dist/shared/bricks/props/padding.js +0 -3
  470. package/dist/shared/bricks/props/tests/padding.d.ts +0 -2
  471. package/dist/shared/bricks/props/tests/padding.d.ts.map +0 -1
  472. package/dist/shared/chunk-2IYSJYNE.js +0 -3
  473. package/dist/shared/chunk-3EM3B4DX.js +0 -3
  474. package/dist/shared/chunk-4TH3C76A.js +0 -3
  475. package/dist/shared/chunk-5N6MBJJ4.js +0 -3
  476. package/dist/shared/chunk-6FITVVZX.js +0 -3
  477. package/dist/shared/chunk-6K3KZDFC.js +0 -3
  478. package/dist/shared/chunk-6WCGUAQN.js +0 -3
  479. package/dist/shared/chunk-7DMUDZ4H.js +0 -3
  480. package/dist/shared/chunk-ACVLF55Q.js +0 -3
  481. package/dist/shared/chunk-AQPN5SE2.js +0 -3
  482. package/dist/shared/chunk-BZGNY7LB.js +0 -3
  483. package/dist/shared/chunk-C2S243PB.js +0 -8
  484. package/dist/shared/chunk-C3VGP4CA.js +0 -3
  485. package/dist/shared/chunk-CT3EI7YN.js +0 -3
  486. package/dist/shared/chunk-DQXDGV67.js +0 -3
  487. package/dist/shared/chunk-E22E4XWE.js +0 -3
  488. package/dist/shared/chunk-ETYYRWLK.js +0 -3
  489. package/dist/shared/chunk-EYPREFMH.js +0 -3
  490. package/dist/shared/chunk-FKNNTHWX.js +0 -5
  491. package/dist/shared/chunk-HHO3ONTQ.js +0 -3
  492. package/dist/shared/chunk-I46VBMLF.js +0 -3
  493. package/dist/shared/chunk-IIFTGWFZ.js +0 -3
  494. package/dist/shared/chunk-JS4K5JRM.js +0 -5
  495. package/dist/shared/chunk-KHFNN4P3.js +0 -3
  496. package/dist/shared/chunk-LFQZRGHS.js +0 -3
  497. package/dist/shared/chunk-LGP6GWIY.js +0 -3
  498. package/dist/shared/chunk-NLEWXPVM.js +0 -3
  499. package/dist/shared/chunk-NNI225RG.js +0 -3
  500. package/dist/shared/chunk-QISTDGPP.js +0 -3
  501. package/dist/shared/chunk-QSZWDE3D.js +0 -3
  502. package/dist/shared/chunk-RGLVKILY.js +0 -3
  503. package/dist/shared/chunk-SLRU4CT6.js +0 -4
  504. package/dist/shared/chunk-T3LIA4YB.js +0 -3
  505. package/dist/shared/chunk-T4LMBG2G.js +0 -3
  506. package/dist/shared/chunk-TATG6SFZ.js +0 -3
  507. package/dist/shared/chunk-TF3JVVRU.js +0 -3
  508. package/dist/shared/chunk-TTTXV7TJ.js +0 -6
  509. package/dist/shared/chunk-TWBY2GOR.js +0 -3
  510. package/dist/shared/chunk-UHF6IEKV.js +0 -3
  511. package/dist/shared/chunk-UMHXXXVP.js +0 -3
  512. package/dist/shared/chunk-VGRYSAXA.js +0 -3
  513. package/dist/shared/chunk-VPFCY4DH.js +0 -3
  514. package/dist/shared/chunk-VTBI7WX3.js +0 -3
  515. package/dist/shared/chunk-VZPXXFVX.js +0 -3
  516. package/dist/shared/chunk-WU6Q4WYD.js +0 -3
  517. package/dist/shared/chunk-X43MB5WD.js +0 -3
  518. package/dist/shared/chunk-YBGPPF7T.js +0 -3
  519. package/dist/shared/chunk-ZQGNYK5I.js +0 -8
  520. package/dist/shared/chunk-ZTDUXSWH.js +0 -3
  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/options.d.ts.map +0 -1
  527. package/dist/shared/utils/schema-resolver.d.ts +0 -3
  528. package/dist/shared/utils/schema-resolver.d.ts.map +0 -1
  529. package/dist/shared/utils/schema-resolver.js +0 -3
@@ -0,0 +1,50 @@
1
+ import { Type, type Static } from "@sinclair/typebox";
2
+
3
+ export const manifestSchema = Type.Object({
4
+ id: Type.Optional(
5
+ Type.String({
6
+ title: "Template ID",
7
+ description: "A unique identifier for the template. Can be any string, but should be unique.",
8
+ }),
9
+ ),
10
+ name: Type.String({
11
+ title: "Template Name",
12
+ }),
13
+ description: Type.Optional(
14
+ Type.String({
15
+ title: "Show template description",
16
+ }),
17
+ ),
18
+ readme: Type.Optional(
19
+ Type.Record(
20
+ Type.RegExp(/^[a-z]{2}$/), // language code
21
+ Type.String(),
22
+ {
23
+ title: "Readme texts.",
24
+ description:
25
+ "A dictionary of readme files for different languages (iso 2 letters code). Currently on supported for 'en' and 'fr'.",
26
+ },
27
+ ),
28
+ ),
29
+ tags: Type.Optional(Type.Array(Type.String(), { title: "Tags" })),
30
+ author: Type.Optional(
31
+ Type.String({
32
+ title: "Author name",
33
+ }),
34
+ ),
35
+ thumbnail: Type.Optional(
36
+ Type.String({
37
+ title: "Thumbnail",
38
+ description: "A URL to the thumbnail image for the template.",
39
+ }),
40
+ ),
41
+ homepage: Type.Optional(
42
+ Type.String({
43
+ title: "Homepage",
44
+ description: "A URL to the homepage of the template.",
45
+ }),
46
+ ),
47
+ });
48
+
49
+ export type TemplateManifest = Static<typeof manifestSchema>;
50
+ export type PublishedTemplateManifest = TemplateManifest & Required<Pick<TemplateManifest, "id">>;
@@ -0,0 +1,16 @@
1
+ import { Type, type TSchema, type StaticDecode } from "@sinclair/typebox";
2
+ import { jsonDate } from "./utils/json-date";
3
+
4
+ export const buildOAuthConfigSchema = <T extends TSchema>(T: T) =>
5
+ Type.Object({
6
+ siteId: Type.String(),
7
+ siteDatasourceId: Type.String(),
8
+ config: T,
9
+ oauthTokenExpireAt: jsonDate,
10
+ oauthRefreshTokenExpireAt: Type.Optional(jsonDate),
11
+ nextRefreshTokenAt: Type.Optional(jsonDate),
12
+ });
13
+
14
+ export type OAuthConfig<T extends TSchema = TSchema> = StaticDecode<
15
+ ReturnType<typeof buildOAuthConfigSchema<T>>
16
+ >;
@@ -0,0 +1,36 @@
1
+ import { pageAttributesSchema } from "./attributes";
2
+ import { sectionSchema } from "./bricks";
3
+ import { Type, type Static } from "@sinclair/typebox";
4
+ import { toLLMSchema } from "./utils/llm";
5
+
6
+ export const pageSchema = Type.Object({
7
+ id: Type.String({
8
+ description: "The unique ID of the page. Use a human readable url-safe slug",
9
+ examples: ["home", "about-us", "products-list"],
10
+ }),
11
+ label: Type.String({
12
+ description: "The label (name) of the page",
13
+ examples: ["Home", "About us", "Products"],
14
+ }),
15
+ sections: Type.Array(sectionSchema, {
16
+ description: "The sections of the page. See the Section schema",
17
+ }),
18
+ attributes: pageAttributesSchema,
19
+ });
20
+
21
+ export function getPageSchemaForLLM() {
22
+ return toLLMSchema(pageSchema);
23
+ }
24
+
25
+ export type Page = Static<typeof pageSchema>;
26
+ export type VersionedPage = Page & { version: string };
27
+
28
+ /**
29
+ * Page context represents the page config PLUS:
30
+ * - the pathParams of the actual request.
31
+ * - the resolved data for the page.
32
+ */
33
+ export type PageContext = VersionedPage & {
34
+ pathParams?: Record<string, string>;
35
+ data?: Record<string, unknown[]>;
36
+ };
@@ -0,0 +1,9 @@
1
+ import { type Static, Type } from "@sinclair/typebox";
2
+
3
+ export const sitePrompt = Type.String({
4
+ minLength: 30,
5
+ maxLength: 500,
6
+ description: "User prompt for the site, describing the purpose and main features of the site.",
7
+ });
8
+
9
+ export type SitePrompt = Static<typeof sitePrompt>;
@@ -0,0 +1,5 @@
1
+ import type { Static } from "@sinclair/typebox";
2
+ import { StringEnum } from "./utils/string-enum";
3
+
4
+ export const resolution = StringEnum(["mobile", "desktop"]);
5
+ export type Resolution = Static<typeof resolution>;
@@ -0,0 +1,59 @@
1
+ import { Type, type Static } from "@sinclair/typebox";
2
+ import { datarecordsList } from "./datarecords/types";
3
+ import { datasourcesList } from "./datasources/types";
4
+ import { pageSchema } from "./page";
5
+ import { sitePrompt } from "./prompt";
6
+ import { sitemapSchema } from "./sitemap";
7
+ import { defaultTheme, themeSchema } from "./theme";
8
+ import { resolvePageAttributes, resolveSiteAttributes, siteAttributesSchema } from "./attributes";
9
+
10
+ export const siteSchema = Type.Object({
11
+ id: Type.String(),
12
+ label: Type.String(),
13
+ hostname: Type.String(),
14
+ attributes: siteAttributesSchema,
15
+ datasources: datasourcesList,
16
+ datarecords: datarecordsList,
17
+ themes: Type.Array(themeSchema),
18
+ theme: themeSchema,
19
+ sitemap: sitemapSchema,
20
+ sitePrompt,
21
+ });
22
+
23
+ export type Site = Static<typeof siteSchema>;
24
+ export type PublicSite = Omit<Site, "sitePrompt">;
25
+
26
+ const siteAndPagesSchema = Type.Object({
27
+ site: siteSchema,
28
+ pages: Type.Array(pageSchema),
29
+ });
30
+
31
+ export type SiteAndPagesConfig = Static<typeof siteAndPagesSchema>;
32
+
33
+ export function createEmptyConfig(sitePrompt: string): SiteAndPagesConfig {
34
+ return {
35
+ site: {
36
+ id: crypto.randomUUID(),
37
+ label: "My site",
38
+ hostname: "example.com",
39
+ sitePrompt,
40
+ theme: defaultTheme,
41
+ themes: [],
42
+ sitemap: [],
43
+ attributes: resolveSiteAttributes(),
44
+ datarecords: [],
45
+ datasources: [],
46
+ },
47
+ // we need a fake page
48
+ pages: [
49
+ {
50
+ id: "_default_",
51
+ label: "First page with really really long name that should be truncated",
52
+ sections: [],
53
+ attributes: resolvePageAttributes({
54
+ path: "/",
55
+ }),
56
+ },
57
+ ],
58
+ };
59
+ }
@@ -0,0 +1,98 @@
1
+ import { Type, type Static } from "@sinclair/typebox";
2
+ import { StringEnum } from "./utils/string-enum";
3
+ import { pageSchema } from "./page";
4
+ import { toLLMSchema } from "./utils/llm";
5
+
6
+ export const sitemapPageEntry = Type.Pick(pageSchema, ["id", "label", "path", "attributes"]);
7
+ export type SitemapPageEntry = Static<typeof sitemapPageEntry>;
8
+
9
+ export const sectionsPlanSchema = Type.Array(
10
+ Type.Object(
11
+ {
12
+ id: Type.String({
13
+ title: "Section ID",
14
+ examples: ["header-section", "hero-section", "features-section"],
15
+ format: "slug",
16
+ }),
17
+ name: Type.String({ title: "Section name", examples: ["Header", "Hero", "Features"] }),
18
+ description: Type.String({
19
+ title: "A long description of the section",
20
+ description: `You must elaborate a clear and detailled plan that describes:
21
+ - The section purpose in the page, in detail.
22
+ - The section structure, look & feel, and structural/design organization, in detail
23
+ - the types of bricks (e.g. "container", "text", "video", "carousel", etc) that will be used and their purpose, in detail
24
+
25
+ IMPORTANT: be very descriptive and precise in your plan. The more details you provide, the better the generated page will be.`,
26
+
27
+ examples: [
28
+ "This section contains a `hero` and a call-to-action `button`. All of theme aligned horizontally. The section should market a coffee shop.",
29
+ "This section should contain a `hero` text and an `image`.",
30
+ ],
31
+ }),
32
+ },
33
+ { additionalProperties: false },
34
+ ),
35
+ {
36
+ title: "Sections plan",
37
+ description: "A plan for the sections of the page. Used to generate the page content.",
38
+ examples: [
39
+ [
40
+ {
41
+ id: "header-section",
42
+ name: "Header",
43
+ description: "This section only contains a header brick",
44
+ },
45
+ {
46
+ id: "hero-section",
47
+ name: "Hero",
48
+ description:
49
+ "This is the hero section of the page. It should display a marketing message using a hero brick, as well as a button (CTA). The section should center bricks horizontally.",
50
+ },
51
+ ],
52
+ ],
53
+ },
54
+ );
55
+
56
+ export const sitemapEntry = Type.Composite(
57
+ [
58
+ sitemapPageEntry,
59
+ Type.Object({
60
+ status: Type.Optional(
61
+ StringEnum(["draft", "published"], {
62
+ title: "Page status",
63
+ enumNames: ["Draft", "Published"],
64
+ default: "draft",
65
+ "ai:hidden": true,
66
+ description:
67
+ "The status of the page. Can be draft or published. [AI instructions: Dont generate this.]",
68
+ "ai:instructions": "Upsie: Never generate this optional field.",
69
+ }),
70
+ ),
71
+ }),
72
+ ],
73
+ {
74
+ description: "Pages map. The complete list of site pages & their metadata",
75
+ additionalProperties: false,
76
+ },
77
+ );
78
+
79
+ export const sitemapSchema = Type.Array(sitemapEntry);
80
+ export type Sitemap = Static<typeof sitemapSchema>;
81
+
82
+ export function getSitemapSchemaForLLM() {
83
+ return toLLMSchema(
84
+ Type.Array(
85
+ Type.Composite([
86
+ sitemapEntry,
87
+ Type.Object({
88
+ // Sections plan helps agents to the structure and content of the page
89
+ sectionsPlan: sectionsPlanSchema,
90
+ }),
91
+ ]),
92
+ ),
93
+ );
94
+ }
95
+
96
+ export function getSitemapSchemaNoPlansForLLM() {
97
+ return toLLMSchema(sitemapSchema);
98
+ }
@@ -0,0 +1,307 @@
1
+ // TODO move to bricks
2
+ export const socialIcons = [
3
+ {
4
+ label: "YouTube",
5
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon></svg>',
6
+ },
7
+ {
8
+ label: "Twitter/X",
9
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path></svg>',
10
+ },
11
+ {
12
+ label: "Instagram",
13
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line></svg>',
14
+ },
15
+ {
16
+ label: "TikTok",
17
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 12A4 4 0 1 0 9 20 4 4 0 1 0 9 12z"></path><path d="M15 8a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"></path><path d="M15 8v8c0 1 1 4 4 4"></path></svg>',
18
+ },
19
+ {
20
+ label: "Facebook",
21
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path></svg>',
22
+ },
23
+ {
24
+ label: "OnlyFans",
25
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z"></path><path d="M12 8v8"></path><path d="M8 12h8"></path></svg>',
26
+ },
27
+ {
28
+ label: "LinkedIn",
29
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg>',
30
+ },
31
+ {
32
+ label: "Pinterest",
33
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 12a4 4 0 1 1 8 0 4 4 0 0 1-8 0z"></path><path d="M3 12h1m17 0h1M12 3v1m0 17v1m-.5-3.5L9 17m7.5 0L14 20.5M7.5 6.5L4 11m16-4.5L16.5 11"></path></svg>',
34
+ },
35
+ {
36
+ label: "Flickr",
37
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
38
+ },
39
+ {
40
+ label: "Reddit",
41
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"></circle><path d="M15 14a3 3 0 0 1-3 3m-3-3a3 3 0 0 0 3 3"></path><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>',
42
+ },
43
+ {
44
+ label: "Snapchat",
45
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2a10 10 0 0 0-10 10c0 1.8.5 3.5 1.3 5l-1.2 4.7 4.7-1.2c1.5.8 3.2 1.3 5 1.3a10 10 0 0 0 10-10 10 10 0 0 0-10-10z"></path><path d="M8.5 15.5c.8-2.3 2.5-3 3.5-3s2.7.7 3.5 3"></path></svg>',
46
+ },
47
+ {
48
+ label: "Twitch",
49
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"></path></svg>',
50
+ },
51
+ {
52
+ label: "Discord",
53
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"></path></svg>',
54
+ },
55
+ {
56
+ label: "WhatsApp",
57
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"></path></svg>',
58
+ },
59
+ {
60
+ label: "Medium",
61
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
62
+ },
63
+ {
64
+ label: "Vimeo",
65
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 3a10.9 10.9 0 0 1-3.14 1.53A4.48 4.48 0 0 0 18.3 6a9.72 9.72 0 0 1-6.16-2.36A4.48 4.48 0 0 0 12 4v1a4.48 4.48 0 0 0 1.88 3.69A4.48 4.48 0 0 1 15 9.5h1a4.48 4.48 0 0 0 3.69-1.88A9.72 9.72 0 0 1 23 3z"></path></svg>',
66
+ },
67
+ {
68
+ label: "Quora",
69
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
70
+ },
71
+ {
72
+ label: "Github",
73
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 0 0-3.8 23.4c.6.1.8-.3.8-.6v-2.2c-3.4.7-4.1-1.6-4.1-1.6-.5-1.3-1.3-1.6-1.3-1.6-1-.7.1-.7.1-.7 1.2.1 1.8 1.3 1.8 1.3 1 1.8 2.6 1.3 3.2 1 .1-.7.4-1.3.7-1.6-2.7-.3-5.6-1.3-5.6-5.9 0-1.3.5-2.4 1.2-3.2-.1-.3-.5-1.4.1-3 0 0 1-.3 3.2 1.2a11 11 0 0 1 5.8 0c2.2-1.5 3.2-1.2 3.2-1.2.6 1.6.2 2.7.1 3a4.6 4.6 0 0 1 1.2 3.2c0 4.6-2.9 5.6-5.7 5.9.4.3.8 1 .8 2.1v3.1c0 .3.2.7.8.6A12 12 0 0 0 12 0"></path></svg>',
74
+ },
75
+ {
76
+ label: "GitLab",
77
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="9.9,2 2,22 12,17 22,22 14.1,2"></polygon></svg>',
78
+ },
79
+ {
80
+ label: "Bitbucket",
81
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 2H2v20h20V2zM10 20H2v-7.6h8v7.6zm12-3.4h-8v-8h8v8z"></path></svg>',
82
+ },
83
+ {
84
+ label: "Stack Overflow",
85
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 22h16v-2H4v2zM4 17h16v-2H4v2zM8 12h8v2H8v-2zM12 7l4 4-4 4-4-4 4-4z"></path></svg>',
86
+ },
87
+ {
88
+ label: "Behance",
89
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8h4v2h-4z"></path><path d="M16 12h4v2h-4z"></path><path d="M4 2h16v16H4z"></path></svg>',
90
+ },
91
+ {
92
+ label: "Dribbble",
93
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm2.5 3.5C16.5 7.5 18 9 18 9s-1.5 2-2 3.5c-1-1.5-2.5-2.5-4.5-3.5-1-1-2.5-2.5-2.5-2.5s1.5-1 2.5-2c1 0 2.5 1 2.5 1zm-5 0c0 1.5-.5 3-.5 3S6.5 10 6.5 10c0-2 2-3.5 2-3.5zm0 6c.5 1 1 2 1.5 3s.5 1.5 1.5 3-1 3.5-1 3.5 1.5 1 1.5 1 3-2 3-3.5-2-4.5-2-4.5-2 1.5-3.5 0zm8 4.5c-.5-1-1.5-3-3-4s-2-1-3-1 0 0 0 0c-1 0-2 0-3 1-1 1-2 3-2 4 0 1 0 2 1 2 1 0 3 0 4-1 1 0 3 0 4-1z"></path></svg>',
94
+ },
95
+ {
96
+ label: "DeviantArt",
97
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0L2 10h7v4H2l10 10 10-10h-7v-4h7L12 0z"></path></svg>',
98
+ },
99
+ {
100
+ label: "CodePen",
101
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0L2 6l10 6 10-6-10-6zm0 22.5L1.5 16l10-6 10 6-10 6.5zm-10-12L12 0v22L2 10.5zM12 0v22l10-12L12 0z"></path></svg>',
102
+ },
103
+ {
104
+ label: "Dev.to",
105
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M0 0v24h24V0H0zm10.75 18.63c0 .13-.09.27-.27.36-1.34.54-2.74.78-4.25.78C3.36 19.77 2 18.41 2 17V7c0-1.4 1.36-2.77 4.25-2.77 1.5 0 2.91.25 4.25.79.18.09.27.23.27.36v13.25zm3.5-7.5v5.5c0 1.02-.92 2.26-4.02 2.26-1.09 0-2.09-.19-3.02-.55v-10c.93-.36 1.93-.55 3.02-.55 3.1 0 4.02 1.24 4.02 2.26zm6.5 7.5c0 .13-.09.27-.27.36-1.34.54-2.74.78-4.25.78-1.5 0-2.91-.25-4.25-.79-.18-.09-.27-.23-.27-.36V4.88c0-.13.09-.27.27-.36 1.34-.54 2.74-.78 4.25-.78 1.5 0 2.91.25 4.25.78.18.09.27.23.27.36v12.5z"></path></svg>',
106
+ },
107
+ {
108
+ label: "Slack",
109
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.5 3a1.5 1.5 0 1 1 0 3H10a1.5 1.5 0 0 1 0-3z"></path><path d="M14.5 21a1.5 1.5 0 1 1 0 3H10a1.5 1.5 0 0 1 0-3z"></path><path d="M17 12.5a1.5 1.5 0 1 1 0-3H21a1.5 1.5 0 0 1 0 3z"></path><path d="M7 12.5a1.5 1.5 0 1 1 0-3H11a1.5 1.5 0 0 1 0 3z"></path><path d="M12.5 17a1.5 1.5 0 1 1 3 0V21a1.5 1.5 0 0 1-3 0z"></path><path d="M12.5 7a1.5 1.5 0 1 1 3 0V11a1.5 1.5 0 0 1-3 0z"></path><path d="M7 3a1.5 1.5 0 1 1 3 0V7a1.5 1.5 0 0 1-3 0z"></path><path d="M3 17a1.5 1.5 0 1 1 3 0V21a1.5 1.5 0 0 1-3 0z"></path></svg>',
110
+ },
111
+ {
112
+ label: "Spotify",
113
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 21 3z"></path></svg>',
114
+ },
115
+ {
116
+ label: "SoundCloud",
117
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15.5a3.5 3.5 0 0 0-3.5-3.5H8a4 4 0 0 0 0 8h10a3.5 3.5 0 0 0 3-3.5z"></path><path d="M8 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"></path></svg>',
118
+ },
119
+ {
120
+ label: "Line",
121
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18.5 3A4.5 4.5 0 0 1 23 7.5v9A4.5 4.5 0 0 1 18.5 21h-13A4.5 4.5 0 0 1 1 16.5v-9A4.5 4.5 0 0 1 5.5 3z"></path><path d="M12 17l-3.5 3v-3H8a4.5 4.5 0 0 1 0-9h7a4.5 4.5 0 0 1 0 9h-1.5v3z"></path></svg>',
122
+ },
123
+ {
124
+ label: "KakaoTalk",
125
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 0 0-12 12c0 6.63 9 12 12 12s12-5.37 12-12S18.63 0 12 0zm0 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12z"></path></svg>',
126
+ },
127
+ {
128
+ label: "Viber",
129
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 3a10.9 10.9 0 0 1-3.14 1.53A4.48 4.48 0 0 0 15 6v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 21 3z"></path></svg>',
130
+ },
131
+ {
132
+ label: "Periscope",
133
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 0 0-12 12c0 6.63 9 12 12 12s12-5.37 12-12S18.63 0 12 0zm0 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12z"></path></svg>',
134
+ },
135
+ {
136
+ label: "Mix",
137
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 3a10.9 10.9 0 0 1-3.14 1.53A4.48 4.48 0 0 0 15 6v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 21 3z"></path></svg>',
138
+ },
139
+ {
140
+ label: "Goodreads",
141
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18.5 3A4.5 4.5 0 0 1 23 7.5v9A4.5 4.5 0 0 1 18.5 21h-13A4.5 4.5 0 0 1 1 16.5v-9A4.5 4.5 0 0 1 5.5 3z"></path><path d="M12 12.5c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3z"></path></svg>',
142
+ },
143
+ {
144
+ label: "Patreon",
145
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18.5 3A4.5 4.5 0 0 1 23 7.5v9A4.5 4.5 0 0 1 18.5 21h-13A4.5 4.5 0 0 1 1 16.5v-9A4.5 4.5 0 0 1 5.5 3z"></path><path d="M15 15.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z"></path></svg>',
146
+ },
147
+ {
148
+ label: "PayPal",
149
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon></svg>',
150
+ },
151
+ {
152
+ label: "GoFundMe",
153
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12a10 10 0 1 0-10 10A10 10 0 0 0 22 12z"></path><circle cx="12" cy="12" r="3"></circle><line x1="2" y1="2" x2="22" y2="22"></line></svg>',
154
+ },
155
+ {
156
+ label: "OpenCollective",
157
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a10 10 0 0 0 0 20 10 10 0 0 0 0-20z"></path></svg>',
158
+ },
159
+ {
160
+ label: "Ko-fi",
161
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M8 10h8l1 6H7l1-6zM9 6h6v4H9V6z"></path></svg>',
162
+ },
163
+ {
164
+ label: "Buy Me a Coffee",
165
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 8H4v12h16V8zm0 0H4l-2 2h20l-2-2z"></path><path d="M8 18h8v4H8v-4z"></path></svg>',
166
+ },
167
+ {
168
+ label: "Liberapay",
169
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M15 9a3 3 0 0 0-6 0 3 3 0 0 0 6 0z"></path><path d="M9 9a3 3 0 0 1 6 0v6a3 3 0 0 1-6 0V9z"></path></svg>',
170
+ },
171
+ {
172
+ label: "Gratipay",
173
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 6a6 6 0 0 0 0 12 6 6 0 0 0 0-12z"></path></svg>',
174
+ },
175
+ {
176
+ label: "BountySource",
177
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M15 9a3 3 0 0 0-6 0 3 3 0 0 0 6 0z"></path><path d="M9 9a3 3 0 0 1 6 0v6a3 3 0 0 1-6 0V9z"></path></svg>',
178
+ },
179
+ {
180
+ label: "Tidelift",
181
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 6V2h-2v4H7l5 6h4v4h2v-4h-3l5-6h-4V2h-2v4h-2z"></path><path d="M12 12h4l-4 4h-4l4-4z"></path></svg>',
182
+ },
183
+ {
184
+ label: "Indiegogo",
185
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
186
+ },
187
+ {
188
+ label: "Kickstarter",
189
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
190
+ },
191
+ {
192
+ label: "JustGiving",
193
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 0 0-12 12c0 6.63 9 12 12 12s12-5.37 12-12S18.63 0 12 0zm0 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12z"></path></svg>',
194
+ },
195
+ {
196
+ label: "Donorbox",
197
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 0 0-12 12c0 6.63 9 12 12 12s12-5.37 12-12S18.63 0 12 0zm0 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12z"></path></svg>',
198
+ },
199
+ {
200
+ label: "Tiltify",
201
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
202
+ },
203
+ {
204
+ label: "GlobalGiving",
205
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12a10 10 0 1 0-10 10A10 10 0 0 0 22 12z"></path><circle cx="12" cy="12" r="3"></circle><line x1="2" y1="2" x2="22" y2="22"></line></svg>',
206
+ },
207
+ {
208
+ label: "Network for Good",
209
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18.5 3A4.5 4.5 0 0 1 23 7.5v9A4.5 4.5 0 0 1 18.5 21h-13A4.5 4.5 0 0 1 1 16.5v-9A4.5 4.5 0 0 1 5.5 3z"></path><path d="M12 12.5c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3z"></path></svg>',
210
+ },
211
+ {
212
+ label: "Fundly",
213
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
214
+ },
215
+ {
216
+ label: "FundRazr",
217
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
218
+ },
219
+ {
220
+ label: "GiveLively",
221
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
222
+ },
223
+ {
224
+ label: "Causes",
225
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 0 0-12 12c0 6.63 9 12 12 12s12-5.37 12-12S18.63 0 12 0zm0 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12z"></path></svg>',
226
+ },
227
+ {
228
+ label: "Clubhouse",
229
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18.5 3A4.5 4.5 0 0 1 23 7.5v9A4.5 4.5 0 0 1 18.5 21h-13A4.5 4.5 0 0 1 1 16.5v-9A4.5 4.5 0 0 1 5.5 3z"></path><path d="M12 8.5c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3z"></path></svg>',
230
+ },
231
+ {
232
+ label: "Mastodon",
233
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 0 0-12 12c0 6.63 9 12 12 12s12-5.37 12-12S18.63 0 12 0zm0 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12z"></path></svg>',
234
+ },
235
+ {
236
+ label: "ManyVids",
237
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
238
+ },
239
+ {
240
+ label: "JustForFans",
241
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 2H3v20h18V2zM16 12.3C16 15.4 13.4 18 10.3 18 7.2 18 4.7 15.4 4.7 12.3 4.7 9.2 7.2 6.6 10.3 6.6 13.4 6.6 16 9.2 16 12.3z"></path><path d="M12 4V0"></path></svg>',
242
+ },
243
+ {
244
+ label: "QQ",
245
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 1 0 12 12A12 12 0 0 0 12 0zm0 22a10 10 0 1 1 10-10A10 10 0 0 1 12 22z"></path><path d="M12 5a7 7 0 1 1-7 7 7 7 0 0 1 7-7m0-1A8 8 0 1 0 20 12 8 8 0 0 0 12 4z"></path></svg>',
246
+ },
247
+ {
248
+ label: "Weibo",
249
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 1 0 12 12A12 12 0 0 0 12 0zm0 22a10 10 0 1 1 10-10A10 10 0 0 1 12 22z"></path><path d="M12 5a7 7 0 1 1-7 7 7 7 0 0 1 7-7m0-1A8 8 0 1 0 20 12 8 8 0 0 0 12 4z"></path></svg>',
250
+ },
251
+ {
252
+ label: "Qzone",
253
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 1 0 12 12A12 12 0 0 0 12 0zm0 22a10 10 0 1 1 10-10A10 10 0 0 1 12 22z"></path><path d="M12 5a7 7 0 1 1-7 7 7 7 0 0 1 7-7m0-1A8 8 0 1 0 20 12 8 8 0 0 0 12 4z"></path></svg>',
254
+ },
255
+ {
256
+ label: "Sina Weibo",
257
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 1 0 12 12A12 12 0 0 0 12 0zm0 22a10 10 0 1 1 10-10A10 10 0 0 1 12 22z"></path><path d="M12 5a7 7 0 1 1-7 7 7 7 0 0 1 7-7m0-1A8 8 0 1 0 20 12 8 8 0 0 0 12 4z"></path></svg>',
258
+ },
259
+ {
260
+ label: "Douyin",
261
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 2H3v20h18V2zm-7 14c-1 0-1.75.75-1.75 1.75S13 19.5 14 19.5s1.75-.75 1.75-1.75S15 16 14 16z"></path><path d="M10 2v12a2 2 0 0 1-2 2h-6a2 2 0 0 1-2-2V2h10z"></path></svg>',
262
+ },
263
+ {
264
+ label: "Kuaishou",
265
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 2H3v20h18V2zm-7 14c-1 0-1.75.75-1.75 1.75S13 19.5 14 19.5s1.75-.75 1.75-1.75S15 16 14 16z"></path><path d="M10 2v12a2 2 0 0 1-2 2h-6a2 2 0 0 1-2-2V2h10z"></path></svg>',
266
+ },
267
+ {
268
+ label: "Baidu Tieba",
269
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 0a12 12 0 1 0 12 12A12 12 0 0 0 12 0zm0 22a10 10 0 1 1 10-10A10 10 0 0 1 12 22z"></path><path d="M12 5a7 7 0 1 1-7 7 7 7 0 0 1 7-7m0-1A8 8 0 1 0 20 12 8 8 0 0 0 12 4z"></path></svg>',
270
+ },
271
+ {
272
+ label: "Nextdoor",
273
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10V6c0-1.1-.9-2-2-2h-1V3a2 2 0 0 0-2-2h-8a2 2 0 0 0-2 2v1H5c-1.1 0-2 .9-2 2v4H1v11a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10h-2zm-1 11H4v-9h16v9zm-9-8h-2v6h2v-6zm4 0h-2v6h2v-6zm-8 0H7v6h2v-6z"></path></svg>',
274
+ },
275
+ {
276
+ label: "Parler",
277
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21.9 8.6c.4-1.4.6-2.9.6-4.5 0-2.8-1-5.3-2.7-7.2-1.7-1.9-4-2.9-6.6-2.9s-5 .9-6.6 2.8c-1.7 1.9-2.7 4.4-2.7 7.2 0 1.6.2 3.1.6 4.5L.1 14.9v6.8L3.7 24H7v-6.9L4.2 14.6zM8 19v5H5.3l-1.7-1.6V15l2.7 2.7zm-1.6-7c-1.1-.9-1.8-2.2-1.8-3.8 0-2.8 1.5-5.1 3.5-5.1s3.5 2.3 3.5 5.1c0 1.6-.7 2.9-1.8 3.8l1.6 1.4c1.4-1.2 2.3-3 2.3-5.2 0-3.7-2.1-6.8-4.6-6.8S5.4 7.3 5.4 11c0 2.1.9 4 2.3 5.2z"></path></svg>',
278
+ },
279
+ {
280
+ label: "Gab",
281
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z"></path><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"></polygon></svg>',
282
+ },
283
+ {
284
+ label: "MeWe",
285
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18.5 3A4.5 4.5 0 0 1 23 7.5v9A4.5 4.5 0 0 1 18.5 21h-13A4.5 4.5 0 0 1 1 16.5v-9A4.5 4.5 0 0 1 5.5 3z"></path><path d="M12 12.5c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3z"></path></svg>',
286
+ },
287
+ {
288
+ label: "Vero",
289
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm4.2 13.6l-4.2-4.2-4.2 4.2H12l4.2-4.2 4.2 4.2h-4.2z"></path></svg>',
290
+ },
291
+ {
292
+ label: "Ello",
293
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M14.31 14.31a4 4 0 0 1-5.62 0"></path></svg>',
294
+ },
295
+ {
296
+ label: "Threads",
297
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2v20"></path><path d="M2 12h20"></path></svg>',
298
+ },
299
+ {
300
+ label: "Anchor",
301
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2a1 1 0 0 1 1 1v1h-2V3a1 1 0 0 1 1-1z"></path><path d="M5 8a1 1 0 0 1 1 1v5a1 1 0 0 1-2 0V9a1 1 0 0 1 1-1z"></path><path d="M18 8a1 1 0 0 1 1 1v5a1 1 0 0 1-2 0V9a1 1 0 0 1 1-1z"></path><path d="M9 21a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v1h-6v-1z"></path><path d="M12 12a2 2 0 1 1-2-2 2 2 0 0 1 2 2z"></path><path d="M19 21h-1v-6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v6H5"></path></svg>',
302
+ },
303
+ {
304
+ label: "Substack",
305
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08c0 .6-.41 1.11-.99 1.25a1.64 1.64 0 0 1-.71.02c-.6-.11-1.12-.61-1.19-1.23-.03-.28.02-.56.17-.8a1.15 1.15 0 0 1 1.73-.26c.28.25.44.6.44.98v0h0z"></path><path d="M2 9h20v12H2z"></path><path d="M5 6h14v3H5z"></path><path d="M5 3h14v3H5z"></path></svg>',
306
+ },
307
+ ];