@upstart.gg/sdk 0.0.104 → 0.0.105

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 (225) hide show
  1. package/dist/shared/ajv.js +1 -1
  2. package/dist/shared/attributes.js +1 -1
  3. package/dist/shared/bricks/manifests/accordion.manifest.js +1 -1
  4. package/dist/shared/bricks/manifests/all-manifests.js +1 -1
  5. package/dist/shared/bricks/manifests/button.manifest.js +1 -1
  6. package/dist/shared/bricks/manifests/card.manifest.js +1 -1
  7. package/dist/shared/bricks/manifests/carousel.manifest.js +1 -1
  8. package/dist/shared/bricks/manifests/container.manifest.js +1 -1
  9. package/dist/shared/bricks/manifests/divider.manifest.js +1 -1
  10. package/dist/shared/bricks/manifests/footer.manifest.js +1 -1
  11. package/dist/shared/bricks/manifests/form.manifest.js +1 -1
  12. package/dist/shared/bricks/manifests/hero.manifest.js +1 -1
  13. package/dist/shared/bricks/manifests/icon.manifest.js +1 -1
  14. package/dist/shared/bricks/manifests/image.manifest.js +1 -1
  15. package/dist/shared/bricks/manifests/images-gallery.manifest.js +1 -1
  16. package/dist/shared/bricks/manifests/map.manifest.js +1 -1
  17. package/dist/shared/bricks/manifests/navbar.manifest.js +1 -1
  18. package/dist/shared/bricks/manifests/sidebar.manifest.js +1 -1
  19. package/dist/shared/bricks/manifests/social-links.manifest.js +1 -1
  20. package/dist/shared/bricks/manifests/testimonials.manifest.js +1 -1
  21. package/dist/shared/bricks/manifests/text.manifest.js +1 -1
  22. package/dist/shared/bricks/manifests/timeline.manifest.js +1 -1
  23. package/dist/shared/bricks/manifests/video.manifest.js +1 -1
  24. package/dist/shared/bricks.js +1 -1
  25. package/dist/shared/chunk-245ZLDVB.js +3 -0
  26. package/dist/shared/{chunk-QALNFBY7.js → chunk-2D6ZEIDX.js} +1 -1
  27. package/dist/shared/{chunk-CW5FWW5W.js → chunk-4BLCQRF5.js} +1 -1
  28. package/dist/shared/{chunk-TEPFFY32.js → chunk-5MGYT6FI.js} +1 -1
  29. package/dist/shared/{chunk-HQQYIKTE.js → chunk-CS5N4UQU.js} +1 -1
  30. package/dist/shared/{chunk-5IEGQ7YT.js → chunk-FRWB3BF3.js} +1 -1
  31. package/dist/shared/{chunk-I5S2MPPR.js → chunk-HYXCHFS5.js} +1 -1
  32. package/dist/shared/{chunk-TCZBR3ZU.js → chunk-IKSRCRZZ.js} +1 -1
  33. package/dist/shared/{chunk-LJQXN32B.js → chunk-ISF6EBPX.js} +1 -1
  34. package/dist/shared/{chunk-UK6H3FDX.js → chunk-JDBVMPSI.js} +1 -1
  35. package/dist/shared/{chunk-UISES3HA.js → chunk-M3Z3XDUC.js} +1 -1
  36. package/dist/shared/{chunk-22KRCQK5.js → chunk-MWP5IU33.js} +1 -1
  37. package/dist/shared/{chunk-7L3UOEMR.js → chunk-NCSLTHKN.js} +1 -1
  38. package/dist/shared/{chunk-O22VV7YR.js → chunk-OWON727Q.js} +1 -1
  39. package/dist/shared/{chunk-CEXHD4BO.js → chunk-P5RC56CL.js} +2 -2
  40. package/dist/shared/{chunk-ZFTWLZ3G.js → chunk-QI3BZDXL.js} +1 -1
  41. package/dist/shared/{chunk-F6MLW6DO.js → chunk-RDSK2G6V.js} +1 -1
  42. package/dist/shared/{chunk-I43NIQ2K.js → chunk-RXRPFXDF.js} +1 -1
  43. package/dist/shared/{chunk-POYVTV5F.js → chunk-VFGMOA4M.js} +1 -1
  44. package/dist/shared/{chunk-VDHLON5R.js → chunk-VPD626ML.js} +1 -1
  45. package/dist/shared/{chunk-WCNVFVDK.js → chunk-VROOAFFW.js} +1 -1
  46. package/dist/shared/{chunk-E2EBTWJI.js → chunk-WB4PGCZQ.js} +1 -1
  47. package/dist/shared/chunk-X2RJL33B.js +3 -0
  48. package/dist/shared/{chunk-OQIFFJ7I.js → chunk-X4ZBUWUL.js} +1 -1
  49. package/dist/shared/datasources/external/rss/fetcher.d.ts +1 -1
  50. package/dist/shared/datasources/external/rss/fetcher.d.ts.map +1 -1
  51. package/dist/shared/page.js +1 -1
  52. package/dist/shared/site.js +1 -1
  53. package/package.json +5 -9
  54. package/dist/shared/chunk-GPKRRX3D.js +0 -3
  55. package/dist/shared/chunk-JFDOR3UH.js +0 -3
  56. package/src/node/cli/api.ts +0 -101
  57. package/src/node/cli/commands/cmd-build.ts +0 -64
  58. package/src/node/cli/commands/login/cmd-login.ts +0 -111
  59. package/src/node/cli/commands/logout/cmd-logout.ts +0 -11
  60. package/src/node/cli/commands/publish/cmd-publish.ts +0 -135
  61. package/src/node/cli/commands/publish/parse-gitignore.ts +0 -278
  62. package/src/node/cli/commands/publish/uploader.ts +0 -333
  63. package/src/node/cli/constants.ts +0 -14
  64. package/src/node/cli/is-logged-in.ts +0 -28
  65. package/src/node/cli/program.ts +0 -77
  66. package/src/node/cli/store.ts +0 -64
  67. package/src/node/cli/tests/api.test.ts +0 -161
  68. package/src/node/cli/types.ts +0 -34
  69. package/src/node/cli/utils.ts +0 -20
  70. package/src/node/shared/config.ts +0 -69
  71. package/src/node/shared/logger.ts +0 -44
  72. package/src/shared/ajv.ts +0 -103
  73. package/src/shared/analytics/init.ts +0 -14
  74. package/src/shared/analytics/track.ts +0 -21
  75. package/src/shared/analytics/types.ts +0 -13
  76. package/src/shared/attributes.ts +0 -211
  77. package/src/shared/brick-manifest.ts +0 -110
  78. package/src/shared/bricks/manifests/accordion.manifest.ts +0 -179
  79. package/src/shared/bricks/manifests/all-manifests.ts +0 -92
  80. package/src/shared/bricks/manifests/button.manifest.ts +0 -145
  81. package/src/shared/bricks/manifests/card.manifest.ts +0 -269
  82. package/src/shared/bricks/manifests/carousel.manifest.ts +0 -106
  83. package/src/shared/bricks/manifests/container.manifest.ts +0 -357
  84. package/src/shared/bricks/manifests/divider.manifest.ts +0 -121
  85. package/src/shared/bricks/manifests/footer.manifest.ts +0 -487
  86. package/src/shared/bricks/manifests/form.manifest.ts +0 -112
  87. package/src/shared/bricks/manifests/hero.manifest.ts +0 -132
  88. package/src/shared/bricks/manifests/icon.manifest.ts +0 -130
  89. package/src/shared/bricks/manifests/image.manifest.ts +0 -203
  90. package/src/shared/bricks/manifests/images-gallery.manifest.ts +0 -227
  91. package/src/shared/bricks/manifests/map.manifest.ts +0 -75
  92. package/src/shared/bricks/manifests/navbar.manifest.ts +0 -344
  93. package/src/shared/bricks/manifests/sidebar.manifest.ts +0 -90
  94. package/src/shared/bricks/manifests/social-links.manifest.ts +0 -370
  95. package/src/shared/bricks/manifests/testimonials.manifest.ts +0 -397
  96. package/src/shared/bricks/manifests/tests/header.manifest.test.ts +0 -10
  97. package/src/shared/bricks/manifests/text.manifest.ts +0 -164
  98. package/src/shared/bricks/manifests/timeline.manifest.ts +0 -456
  99. package/src/shared/bricks/manifests/video.manifest.ts +0 -59
  100. package/src/shared/bricks/props/_style-presets.ts +0 -352
  101. package/src/shared/bricks/props/align.ts +0 -59
  102. package/src/shared/bricks/props/background.ts +0 -118
  103. package/src/shared/bricks/props/boolean.ts +0 -11
  104. package/src/shared/bricks/props/border.ts +0 -84
  105. package/src/shared/bricks/props/color.ts +0 -24
  106. package/src/shared/bricks/props/common.ts +0 -37
  107. package/src/shared/bricks/props/container.ts +0 -356
  108. package/src/shared/bricks/props/css-length.ts +0 -25
  109. package/src/shared/bricks/props/datasource.ts +0 -60
  110. package/src/shared/bricks/props/date.ts +0 -24
  111. package/src/shared/bricks/props/effects.ts +0 -123
  112. package/src/shared/bricks/props/enum.ts +0 -42
  113. package/src/shared/bricks/props/file.ts +0 -12
  114. package/src/shared/bricks/props/geolocation.ts +0 -30
  115. package/src/shared/bricks/props/helpers.ts +0 -101
  116. package/src/shared/bricks/props/image.ts +0 -90
  117. package/src/shared/bricks/props/number.ts +0 -16
  118. package/src/shared/bricks/props/padding.ts +0 -21
  119. package/src/shared/bricks/props/position.ts +0 -27
  120. package/src/shared/bricks/props/preset.ts +0 -136
  121. package/src/shared/bricks/props/string.ts +0 -56
  122. package/src/shared/bricks/props/tests/align.test.ts +0 -37
  123. package/src/shared/bricks/props/tests/background.test.ts +0 -102
  124. package/src/shared/bricks/props/tests/border.test.ts +0 -38
  125. package/src/shared/bricks/props/tests/effects.test.ts +0 -37
  126. package/src/shared/bricks/props/tests/helpers.test.ts +0 -133
  127. package/src/shared/bricks/props/tests/image.test.ts +0 -71
  128. package/src/shared/bricks/props/tests/padding.ts +0 -12
  129. package/src/shared/bricks/props/tests/string.test.ts +0 -79
  130. package/src/shared/bricks/props/text.ts +0 -66
  131. package/src/shared/bricks/props/types.ts +0 -57
  132. package/src/shared/bricks.ts +0 -232
  133. package/src/shared/context.ts +0 -39
  134. package/src/shared/datarecords/external/airtable/handler.ts +0 -21
  135. package/src/shared/datarecords/external/airtable/options.ts +0 -22
  136. package/src/shared/datarecords/external/generic-webhook/handler.ts +0 -10
  137. package/src/shared/datarecords/external/generic-webhook/options.ts +0 -13
  138. package/src/shared/datarecords/external/google/oauth/config.ts +0 -30
  139. package/src/shared/datarecords/external/google/sheets/handler.ts +0 -26
  140. package/src/shared/datarecords/external/google/sheets/options.ts +0 -9
  141. package/src/shared/datarecords/types.ts +0 -120
  142. package/src/shared/datarecords.ts +0 -5
  143. package/src/shared/datasources/README.md +0 -3
  144. package/src/shared/datasources/external/facebook/posts/fetcher.ts +0 -52
  145. package/src/shared/datasources/external/facebook/posts/sample.ts +0 -35
  146. package/src/shared/datasources/external/facebook/posts/schema.ts +0 -33
  147. package/src/shared/datasources/external/facebook/posts/tests/fetcher.test.ts +0 -73
  148. package/src/shared/datasources/external/http-json/fetcher.ts +0 -28
  149. package/src/shared/datasources/external/http-json/options.ts +0 -12
  150. package/src/shared/datasources/external/http-json/schema.ts +0 -6
  151. package/src/shared/datasources/external/http-json/tests/fetcher.test.ts +0 -70
  152. package/src/shared/datasources/external/instagram/feed/fetcher.ts +0 -33
  153. package/src/shared/datasources/external/instagram/feed/sample.ts +0 -22
  154. package/src/shared/datasources/external/instagram/feed/schema.ts +0 -23
  155. package/src/shared/datasources/external/instagram/feed/tests/fetcher.test.ts +0 -64
  156. package/src/shared/datasources/external/mastodon/account/fetcher.ts +0 -24
  157. package/src/shared/datasources/external/mastodon/account/sample.ts +0 -33
  158. package/src/shared/datasources/external/mastodon/account/schema.ts +0 -45
  159. package/src/shared/datasources/external/mastodon/account/tests/fetcher.test.ts +0 -47
  160. package/src/shared/datasources/external/mastodon/options.ts +0 -11
  161. package/src/shared/datasources/external/mastodon/status/fetcher.ts +0 -35
  162. package/src/shared/datasources/external/mastodon/status/sample.array.ts +0 -59
  163. package/src/shared/datasources/external/mastodon/status/sample.single.ts +0 -55
  164. package/src/shared/datasources/external/mastodon/status/schema.ts +0 -130
  165. package/src/shared/datasources/external/mastodon/status/tests/fetcher.test.ts +0 -74
  166. package/src/shared/datasources/external/meta/oauth/config.ts +0 -16
  167. package/src/shared/datasources/external/meta/options.ts +0 -11
  168. package/src/shared/datasources/external/rss/fetcher.ts +0 -29
  169. package/src/shared/datasources/external/rss/options.ts +0 -11
  170. package/src/shared/datasources/external/rss/sample.ts +0 -22
  171. package/src/shared/datasources/external/rss/schema.ts +0 -42
  172. package/src/shared/datasources/external/threads/media/fetcher.ts +0 -53
  173. package/src/shared/datasources/external/threads/media/sample.ts +0 -44
  174. package/src/shared/datasources/external/threads/media/schema.ts +0 -37
  175. package/src/shared/datasources/external/tiktok/oauth/config.ts +0 -17
  176. package/src/shared/datasources/external/tiktok/video/fetcher.ts +0 -39
  177. package/src/shared/datasources/external/tiktok/video/options.ts +0 -12
  178. package/src/shared/datasources/external/tiktok/video/sample.ts +0 -26
  179. package/src/shared/datasources/external/tiktok/video/schema.ts +0 -27
  180. package/src/shared/datasources/external/youtube/list/fetcher.ts +0 -37
  181. package/src/shared/datasources/external/youtube/list/options.ts +0 -15
  182. package/src/shared/datasources/external/youtube/list/sample.ts +0 -33
  183. package/src/shared/datasources/external/youtube/list/schema.ts +0 -38
  184. package/src/shared/datasources/external/youtube/oauth/config.ts +0 -15
  185. package/src/shared/datasources/fetcher.ts +0 -17
  186. package/src/shared/datasources/internal/blog/schema.ts +0 -69
  187. package/src/shared/datasources/internal/changelog/schema.ts +0 -48
  188. package/src/shared/datasources/internal/contact-info/schema.ts +0 -20
  189. package/src/shared/datasources/internal/cv/schema.ts +0 -217
  190. package/src/shared/datasources/internal/faq/schema.ts +0 -27
  191. package/src/shared/datasources/internal/job-board/schema.ts +0 -228
  192. package/src/shared/datasources/internal/links/schema.ts +0 -15
  193. package/src/shared/datasources/internal/recipes/schema.ts +0 -42
  194. package/src/shared/datasources/internal/restaurant/schema.ts +0 -225
  195. package/src/shared/datasources/provider-options.ts +0 -7
  196. package/src/shared/datasources/samples.ts +0 -26
  197. package/src/shared/datasources/schemas.ts +0 -45
  198. package/src/shared/datasources/types.ts +0 -276
  199. package/src/shared/datasources/utils.ts +0 -16
  200. package/src/shared/datasources.ts +0 -42
  201. package/src/shared/env.ts +0 -23
  202. package/src/shared/errors.ts +0 -1
  203. package/src/shared/images.ts +0 -44
  204. package/src/shared/index.ts +0 -3
  205. package/src/shared/layout-constants.ts +0 -25
  206. package/src/shared/manifest.ts +0 -50
  207. package/src/shared/oauth.ts +0 -16
  208. package/src/shared/page.ts +0 -61
  209. package/src/shared/prompt.ts +0 -9
  210. package/src/shared/responsive.ts +0 -5
  211. package/src/shared/site.ts +0 -97
  212. package/src/shared/sitemap.ts +0 -66
  213. package/src/shared/social-icons.ts +0 -307
  214. package/src/shared/tests/attributes.test.ts +0 -37
  215. package/src/shared/theme.ts +0 -245
  216. package/src/shared/themes/README.md +0 -34
  217. package/src/shared/themes/color-system.ts +0 -127
  218. package/src/shared/utils/canvas-data-uri.ts +0 -2
  219. package/src/shared/utils/invariant.ts +0 -25
  220. package/src/shared/utils/json-date.ts +0 -8
  221. package/src/shared/utils/merge.ts +0 -12
  222. package/src/shared/utils/object-hash.ts +0 -7
  223. package/src/shared/utils/schema.ts +0 -35
  224. package/src/shared/utils/try-catch.ts +0 -12
  225. package/src/shared/utils/typed-ref.ts +0 -41
@@ -1,307 +0,0 @@
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
- ];
@@ -1,37 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { defineAttributes, resolveAttributes } from "../attributes";
3
- import { string, url } from "../bricks/props/string";
4
- import { number } from "../bricks/props/number";
5
- import { boolean } from "../bricks/props/boolean";
6
- import { date } from "../bricks/props/date";
7
- import { Type } from "@sinclair/typebox";
8
-
9
- describe("Attributes test suite", () => {
10
- describe("defineAttributes", () => {
11
- it("should define custom attributes", () => {
12
- const attributes = defineAttributes({
13
- name: string("Name"),
14
- age: number("Age"),
15
- isStudent: boolean("Is Student"),
16
- createdAt: date("Created At"),
17
- });
18
- expect(attributes.type).toBe("object");
19
- expect(attributes.properties).toBeTypeOf("object");
20
- expect(attributes.properties).toHaveProperty("name");
21
- expect(attributes.properties).toHaveProperty("age");
22
- expect(attributes.properties).toHaveProperty("isStudent");
23
- expect(attributes.properties).toHaveProperty("createdAt");
24
- });
25
- });
26
- describe("resolveAttributes", () => {
27
- it("should resolve attributes with default values", () => {
28
- const attributes = Type.Object({
29
- mainButtonUrl: url("Main Button URL", "https://facebook.com"),
30
- testBoolTrue: boolean("Test Bool True", true),
31
- customerId: string("Customer ID"),
32
- testUrl: url("Test URL", "https://upstart.gg"),
33
- });
34
- expect(resolveAttributes(attributes)).toBeTruthy();
35
- });
36
- });
37
- });
@@ -1,245 +0,0 @@
1
- import { Type, type Static } from "@sinclair/typebox";
2
- import chroma from "chroma-js";
3
- import { StringEnum } from "./utils/schema";
4
- import { colorPalette } from "@upstart.gg/style-system/colors";
5
-
6
- export const fontStacks = [
7
- { value: "system-ui", label: "System UI" },
8
- { value: "transitional", label: "Transitional" },
9
- { value: "old-style", label: "Old style" },
10
- { value: "humanist", label: "Humanist" },
11
- { value: "geometric-humanist", label: "Geometric humanist" },
12
- { value: "classical-humanist", label: "Classical humanist" },
13
- { value: "neo-grotesque", label: "Neo-grotesque" },
14
- { value: "monospace-slab-serif", label: "Monospace slab serif" },
15
- { value: "monospace-code", label: "Monospace code" },
16
- { value: "industrial", label: "Industrial" },
17
- { value: "rounded-sans", label: "Rounded sans" },
18
- { value: "slab-serif", label: "Slab serif" },
19
- { value: "antique", label: "Antique" },
20
- { value: "didone", label: "Didone" },
21
- { value: "handwritten", label: "Handwritten" },
22
- ];
23
-
24
- const headingFont = Type.Object(
25
- {
26
- type: StringEnum(["stack", "theme", "google"], {
27
- title: "Type of font",
28
- description: "The type of font. Can be a font stack, a theme font or a Google font",
29
- }),
30
- family: Type.String({
31
- title: "Family",
32
- description: "The font family (eg. the name of the font)",
33
- }),
34
- },
35
- {
36
- title: "Headings font",
37
- description: "Used for titles and headings",
38
- additionalProperties: false,
39
- },
40
- );
41
-
42
- const bodyFont = Type.Object(
43
- {
44
- type: StringEnum(["stack", "theme", "google"], {
45
- title: "Type of font",
46
- description: "The type of font. Can be a font stack, a theme font or a Google font",
47
- }),
48
- family: Type.String({
49
- title: "Family",
50
- description: "The font family (eg. the name of the font)",
51
- }),
52
- },
53
- {
54
- title: "Body font",
55
- description: "Used for paragraphs and body text",
56
- additionalProperties: false,
57
- },
58
- );
59
-
60
- export const themeSchema = Type.Object(
61
- {
62
- id: Type.String({ title: "ID", description: "The unique identifier of the theme" }),
63
- name: Type.String({ title: "Name", description: "The name of the theme" }),
64
- description: Type.String({ title: "Description", description: "The description of the theme" }),
65
- tags: Type.Array(Type.String({ title: "Tag" }), { title: "Tags", description: "The tags of the theme" }),
66
- browserColorScheme: Type.String({
67
- title: "Browser scheme",
68
- description: "Color of browser-provided UI. Either 'light' or 'dark'",
69
- }),
70
- // Define the theme colors
71
- colors: Type.Object(
72
- {
73
- primary: Type.String({
74
- title: "Primary",
75
- description: "The brand's primary color.",
76
- }),
77
- primaryContent: Type.String({
78
- title: "Primary content",
79
- description: "Text color on primary background",
80
- }),
81
- secondary: Type.String({
82
- title: "Secondary",
83
- description: "The brand's second most used color",
84
- }),
85
- secondaryContent: Type.String({
86
- title: "Secondary content",
87
- description: "Text color on secondary background",
88
- }),
89
- accent: Type.String({
90
- title: "Accent",
91
- description: "The brand's least used color",
92
- }),
93
- accentContent: Type.String({
94
- title: "Accent content",
95
- description: "Text color on accent background",
96
- }),
97
- neutral: Type.String({
98
- title: "Neutral",
99
- description: "The base neutral color",
100
- }),
101
- neutralContent: Type.String({
102
- title: "Neutral content",
103
- description: "Text color on neutral background",
104
- }),
105
- base100: Type.String({
106
- title: "Base",
107
- description: "Base surface color of page, used for blank backgrounds. Should be very light.",
108
- }),
109
- base200: Type.String({
110
- title: "Base 2",
111
- description:
112
- "Base color, darker shade, to create elevations. Should be darker than base100 but still light.",
113
- }),
114
- base300: Type.String({
115
- title: "Base 3",
116
- description:
117
- "Base color, even more darker shade, to create elevations. Should be darker than base200 but still light.",
118
- }),
119
- baseContent: Type.String({
120
- title: "Base content",
121
- description: "Text color to use on base colors",
122
- }),
123
- },
124
- {
125
- title: "Theme base colors",
126
- description: "The base colors of the theme. Each theme must declare all these colors",
127
- "ai:instructions":
128
- "You can use CSS notations like rgb #hex, hsl() oklab() or any tailwind color like slate-500 or red-200",
129
- additionalProperties: false,
130
- },
131
- ),
132
-
133
- // Define the theme typography
134
- typography: Type.Object(
135
- {
136
- base: Type.Number({
137
- title: "Base font size",
138
- description: "The base font size in pixels. It is safe to keep it as is",
139
- }),
140
- heading: headingFont,
141
- body: bodyFont,
142
- alternatives: Type.Array(
143
- Type.Object(
144
- {
145
- body: bodyFont,
146
- heading: headingFont,
147
- },
148
- { additionalProperties: false },
149
- ),
150
- {
151
- title: "Alternative fonts",
152
- description: "Alternative fonts that can be suggested to the user. Takes the same shape",
153
- },
154
- ),
155
- },
156
- { additionalProperties: false },
157
- ),
158
- },
159
- {
160
- additionalProperties: false,
161
- },
162
- );
163
-
164
- export type Theme = Static<typeof themeSchema>;
165
- export const themeArray = Type.Array(themeSchema);
166
- export type ThemeArray = Static<typeof themeArray>;
167
- export type FontType = Theme["typography"]["body"];
168
-
169
- export const defaultTheme: Theme = {
170
- id: "_default_",
171
- name: "default",
172
- description: "Default Upstart theme",
173
- tags: ["gradient", "vibrant", "modern", "creative", "dynamic", "artistic", "bold"],
174
- browserColorScheme: "light",
175
- colors: {
176
- base100: "oklch(0.99 0.005 85)", // Warm white background
177
- base200: "oklch(0.97 0.008 85)", // Soft cream
178
- base300: "oklch(0.94 0.01 85)", // Light warm gray
179
- baseContent: "oklch(0.18 0.025 80)", // Rich dark brown-gray
180
- primary: "oklch(0.68 0.28 340)",
181
- primaryContent: "oklch(0.99 0.005 340)", // White text on primary
182
- secondary: "oklch(0.65 0.22 185)",
183
- secondaryContent: "oklch(0.98 0.005 185)", // White text on secondary
184
- accent: "oklch(0.82 0.18 85)",
185
- accentContent: "oklch(0.18 0.02 85)", // Dark text on accent
186
- neutral: "oklch(0.38 0.08 280)",
187
- neutralContent: "oklch(0.96 0.005 280)", // Light text on neutral
188
- },
189
- typography: {
190
- base: 16,
191
- heading: { type: "stack", family: "system-ui" },
192
- body: { type: "stack", family: "system-ui" },
193
- alternatives: [],
194
- },
195
- };
196
-
197
- export function isDefaultTheme(theme: Theme): boolean {
198
- return theme.id === defaultTheme.id;
199
- }
200
-
201
- /**
202
- * Process a theme, eventually fixing colors and translating them to oklch notations
203
- * @param theme
204
- */
205
- export function processTheme(theme: Theme): Theme {
206
- return {
207
- ...theme,
208
- colors: Object.entries(theme.colors).reduce(
209
- (acc, [key, value]) => {
210
- const fixedColor = fixOklchColor(value);
211
- return {
212
- // biome-ignore lint/performance/noAccumulatingSpread: <explanation>
213
- ...acc,
214
- [key]: fixedColor,
215
- };
216
- },
217
- {} as typeof theme.colors,
218
- ),
219
- };
220
- }
221
-
222
- function fixOklchColor(color: string) {
223
- const valid = chroma.valid(color);
224
- if (valid) {
225
- return color;
226
- }
227
- // Try to fix the color if it looks like oklch
228
- const oklchRegex = /ok(lch|lab)\(([^)]+)\)/;
229
- if (oklchRegex.test(color)) {
230
- const withoutComma = color.replace(/,/g, " ");
231
- if (chroma.valid(withoutComma)) {
232
- return withoutComma;
233
- }
234
- }
235
- // tailwind colors
236
- if (/^([a-z]+)-([0-9]+)$/.test(color)) {
237
- const [name, shade] = color.split("-");
238
- // @ts-ignore
239
- const twColor = colorPalette[name]?.[shade] as string | undefined;
240
- if (twColor) {
241
- return twColor;
242
- }
243
- }
244
- return color;
245
- }