Skip to content

Commit 295fae1

Browse files
authored
doc: Add "works with" icons (#933)
* doc: Add "works with" icons * doc: UI tweaks
1 parent f9ed1a2 commit 295fae1

File tree

4 files changed

+241
-3
lines changed

4 files changed

+241
-3
lines changed

packages/docs/src/app/(pages)/_landing/hero.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { cn } from '@/src/lib/utils'
44
import { ChevronDown, Github, Library } from 'lucide-react'
55
import Link from 'next/link'
66
import { LandingDemo } from './demo'
7+
import { WorksWith } from './works-with'
78

89
export function HeroSection() {
910
return (
@@ -44,6 +45,7 @@ export function HeroSection() {
4445
GitHub
4546
</a>
4647
</nav>
48+
<WorksWith className="mt-10" />
4749
</aside>
4850
<aside className="relative my-4 xl:my-auto xl:flex-1 xl:pt-4">
4951
<LandingDemo />

packages/docs/src/app/(pages)/_landing/sponsors.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export async function SponsorsSection() {
1717
<img
1818
src={sponsor.img}
1919
alt={sponsor.name ?? sponsor.handle}
20-
className="mx-auto size-28 rounded-full"
20+
className="mx-auto size-32 rounded-full"
2121
width={128}
2222
height={128}
2323
/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
import { cn } from '@/src/lib/utils'
2+
import { ComponentProps } from 'react'
3+
4+
export function WorksWith({ className, ...props }: ComponentProps<'div'>) {
5+
return (
6+
<div
7+
className={cn('flex items-center gap-6 text-3xl', className)}
8+
{...props}
9+
>
10+
<p className="sr-only">Works with</p>
11+
{/* <Vite /> */}
12+
<ReactSPA />
13+
<ReactRouter />
14+
<NextJS />
15+
<Remix />
16+
<Vitest />
17+
</div>
18+
)
19+
}
20+
21+
// --
22+
23+
function Vite() {
24+
return (
25+
<svg
26+
aria-lable="Vite"
27+
viewBox="0 0 256 257"
28+
width="0.9em"
29+
height="0.9em"
30+
xmlns="http://www.w3.org/2000/svg"
31+
preserveAspectRatio="xMidYMid"
32+
>
33+
<defs>
34+
<linearGradient
35+
x1="-.828%"
36+
y1="7.652%"
37+
x2="57.636%"
38+
y2="78.411%"
39+
id="a"
40+
>
41+
<stop stop-color="#41D1FF" offset="0%" />
42+
<stop stop-color="#BD34FE" offset="100%" />
43+
</linearGradient>
44+
<linearGradient
45+
x1="43.376%"
46+
y1="2.242%"
47+
x2="50.316%"
48+
y2="89.03%"
49+
id="b"
50+
>
51+
<stop stop-color="#FFEA83" offset="0%" />
52+
<stop stop-color="#FFDD35" offset="8.333%" />
53+
<stop stop-color="#FFA800" offset="100%" />
54+
</linearGradient>
55+
</defs>
56+
<path
57+
d="M255.153 37.938 134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"
58+
fill="url(#a)"
59+
/>
60+
<path
61+
d="M185.432.063 96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028 72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"
62+
fill="url(#b)"
63+
/>
64+
</svg>
65+
)
66+
}
67+
68+
function ReactSPA() {
69+
return (
70+
<svg
71+
aria-label="React (Single Page Application)"
72+
width="1em"
73+
height="1em"
74+
viewBox="0 0 569 512"
75+
xmlns="http://www.w3.org/2000/svg"
76+
>
77+
<g fill="none" fillRule="evenodd">
78+
<g transform="translate(-227, -256)" fill="#58C4DC" fillRule="nonzero">
79+
<g transform="translate(227, 256)">
80+
<path d="M285.5,201 C255.400481,201 231,225.400481 231,255.5 C231,285.599519 255.400481,310 285.5,310 C315.599519,310 340,285.599519 340,255.5 C340,225.400481 315.599519,201 285.5,201" />
81+
<path d="M568.959856,255.99437 C568.959856,213.207656 529.337802,175.68144 466.251623,150.985214 C467.094645,145.423543 467.85738,139.922107 468.399323,134.521063 C474.621631,73.0415145 459.808523,28.6686204 426.709856,9.5541429 C389.677085,-11.8291748 337.36955,3.69129898 284.479928,46.0162134 C231.590306,3.69129898 179.282771,-11.8291748 142.25,9.5541429 C109.151333,28.6686204 94.3382249,73.0415145 100.560533,134.521063 C101.102476,139.922107 101.845139,145.443621 102.708233,151.02537 C97.4493791,153.033193 92.2908847,155.161486 87.3331099,157.39017 C31.0111824,182.708821 0,217.765415 0,255.99437 C0,298.781084 39.6220545,336.307301 102.708233,361.003527 C101.845139,366.565197 101.102476,372.066633 100.560533,377.467678 C94.3382249,438.947226 109.151333,483.32012 142.25,502.434597 C153.629683,508.887578 166.52439,512.186771 179.603923,511.991836 C210.956328,511.991836 247.567589,495.487529 284.479928,465.972527 C321.372196,495.487529 358.003528,511.991836 389.396077,511.991836 C402.475265,512.183856 415.36922,508.884856 426.75,502.434597 C459.848667,483.32012 474.661775,438.947226 468.439467,377.467678 C467.897524,372.066633 467.134789,366.565197 466.291767,361.003527 C529.377946,336.347457 569,298.761006 569,255.99437 M389.155214,27.1025182 C397.565154,26.899606 405.877839,28.9368502 413.241569,33.0055186 C436.223966,46.2772304 446.540955,82.2775015 441.522965,131.770345 C441.181741,135.143488 440.780302,138.556788 440.298575,141.990165 C414.066922,134.08804 387.205771,128.452154 360.010724,125.144528 C343.525021,103.224055 325.192524,82.7564475 305.214266,63.9661533 C336.586743,39.7116483 366.032313,27.1025182 389.135142,27.1025182 M378.356498,310.205598 C368.204912,327.830733 357.150626,344.919965 345.237759,361.405091 C325.045049,363.479997 304.758818,364.51205 284.459856,364.497299 C264.167589,364.51136 243.888075,363.479308 223.702025,361.405091 C211.820914,344.919381 200.80007,327.83006 190.683646,310.205598 C180.532593,292.629285 171.306974,274.534187 163.044553,255.99437 C171.306974,237.454554 180.532593,219.359455 190.683646,201.783142 C200.784121,184.229367 211.770999,167.201087 223.601665,150.764353 C243.824636,148.63809 264.145559,147.579168 284.479928,147.591877 C304.772146,147.579725 325.051559,148.611772 345.237759,150.68404 C357.109048,167.14607 368.136094,184.201112 378.27621,201.783142 C388.419418,219.363718 397.644825,237.458403 405.915303,255.99437 C397.644825,274.530337 388.419418,292.625022 378.27621,310.205598 M419.724813,290.127366 C426.09516,307.503536 431.324985,325.277083 435.380944,343.334682 C417.779633,348.823635 399.836793,353.149774 381.668372,356.285142 C388.573127,345.871232 395.263781,335.035679 401.740334,323.778483 C408.143291,312.655143 414.144807,301.431411 419.805101,290.207679 M246.363271,390.377981 C258.848032,391.140954 271.593728,391.582675 284.5,391.582675 C297.406272,391.582675 310.232256,391.140954 322.737089,390.377981 C310.880643,404.583418 298.10766,417.997563 284.5,430.534446 C270.921643,417.999548 258.18192,404.585125 246.363271,390.377981 Z M187.311556,356.244986 C169.137286,353.123646 151.187726,348.810918 133.578912,343.334682 C137.618549,325.305649 142.828222,307.559058 149.174827,290.207679 C154.754833,301.431411 160.736278,312.655143 167.239594,323.778483 C173.74291,334.901824 180.467017,345.864539 187.311556,356.285142 M149.174827,221.760984 C142.850954,204.473938 137.654787,186.794745 133.619056,168.834762 C151.18418,163.352378 169.085653,159.013101 187.211197,155.844146 C180.346585,166.224592 173.622478,176.986525 167.139234,188.210257 C160.65599,199.433989 154.734761,210.517173 149.074467,221.760984 M322.616657,121.590681 C310.131896,120.827708 297.3862,120.385987 284.379568,120.385987 C271.479987,120.385987 258.767744,120.787552 246.242839,121.590681 C258.061488,107.383537 270.801211,93.9691137 284.379568,81.4342157 C297.99241,93.9658277 310.765727,107.380324 322.616657,121.590681 Z M401.70019,188.210257 C395.196875,176.939676 388.472767,166.09743 381.527868,155.68352 C399.744224,158.819049 417.734224,163.151949 435.380944,168.654058 C431.331963,186.680673 426.122466,204.426664 419.785029,221.781062 C414.205023,210.55733 408.203506,199.333598 401.720262,188.230335 M127.517179,131.790423 C122.438973,82.3176579 132.816178,46.2973086 155.778503,33.0255968 C163.144699,28.9632474 171.455651,26.9264282 179.864858,27.1225964 C202.967687,27.1225964 232.413257,39.7317265 263.785734,63.9862316 C243.794133,82.7898734 225.448298,103.270812 208.949132,125.204763 C181.761691,128.528025 154.90355,134.14313 128.661281,141.990165 C128.199626,138.556788 127.778115,135.163566 127.456963,131.790423 M98.4529773,182.106474 C101.54406,180.767925 104.695358,179.429376 107.906872,178.090828 C114.220532,204.735668 122.781793,230.7969 133.498624,255.99437 C122.761529,281.241316 114.193296,307.357063 107.8868,334.058539 C56.7434387,313.076786 27.0971497,284.003505 27.0971497,255.99437 C27.0971497,229.450947 53.1907013,202.526037 98.4529773,182.106474 Z M155.778503,478.963143 C132.816178,465.691432 122.438973,429.671082 127.517179,380.198317 C127.838331,376.825174 128.259842,373.431953 128.721497,369.978497 C154.953686,377.878517 181.814655,383.514365 209.009348,386.824134 C225.500295,408.752719 243.832321,429.233234 263.805806,448.042665 C220.069,481.834331 180.105722,492.97775 155.838719,478.963143 M441.502893,380.198317 C446.520883,429.691161 436.203894,465.691432 413.221497,478.963143 C388.974566,493.017906 348.991216,481.834331 305.274481,448.042665 C325.241364,429.232737 343.566681,408.752215 360.050868,386.824134 C387.245915,383.516508 414.107066,377.880622 440.338719,369.978497 C440.820446,373.431953 441.221885,376.825174 441.563109,380.198317 M461.193488,334.018382 C454.869166,307.332523 446.294494,281.231049 435.561592,255.99437 C446.289797,230.744081 454.857778,204.629101 461.173416,177.930202 C512.216417,198.911955 541.942994,227.985236 541.942994,255.99437 C541.942994,284.003505 512.296705,313.076786 461.153344,334.058539" />
82+
</g>
83+
</g>
84+
</g>
85+
</svg>
86+
)
87+
}
88+
89+
function Vitest() {
90+
return (
91+
<svg
92+
aria-label="Vitest"
93+
viewBox="0 0 256 234"
94+
width="1em"
95+
height="1em"
96+
xmlns="http://www.w3.org/2000/svg"
97+
preserveAspectRatio="xMidYMid"
98+
>
99+
<path
100+
d="m192.115 70.808-61.2 88.488a5.27 5.27 0 0 1-2.673 2.002 5.285 5.285 0 0 1-3.343-.005 5.25 5.25 0 0 1-2.66-2.01 5.214 5.214 0 0 1-.903-3.203l2.45-48.854-39.543-8.386a5.256 5.256 0 0 1-2.292-1.118 5.222 5.222 0 0 1-1.83-4.581 5.226 5.226 0 0 1 .895-2.383L142.218 2.27a5.279 5.279 0 0 1 6.016-1.996 5.243 5.243 0 0 1 2.66 2.01c.643.942.96 2.066.903 3.203l-2.45 48.855 39.542 8.386a5.262 5.262 0 0 1 2.293 1.117 5.21 5.21 0 0 1 1.829 4.582 5.212 5.212 0 0 1-.896 2.382Z"
101+
fill="#FCC72B"
102+
/>
103+
<path
104+
d="M128.025 233.537a12.356 12.356 0 0 1-8.763-3.63l-57.828-57.823a12.389 12.389 0 0 1 .023-17.5 12.394 12.394 0 0 1 17.5-.024l49.068 49.061L234.917 96.733a12.39 12.39 0 0 1 17.523 17.524l-115.655 115.65a12.343 12.343 0 0 1-8.76 3.63Z"
105+
fill="#729B1B"
106+
/>
107+
<path
108+
d="M127.975 233.537a12.356 12.356 0 0 0 8.763-3.63l57.828-57.823a12.385 12.385 0 0 0 3.605-8.754 12.395 12.395 0 0 0-12.375-12.376 12.4 12.4 0 0 0-8.755 3.606l-49.066 49.061L21.082 96.733a12.392 12.392 0 0 0-17.524 17.524l115.656 115.65a12.347 12.347 0 0 0 8.76 3.63Z"
109+
fillOpacity={0.5}
110+
fill="#729B1B"
111+
/>
112+
</svg>
113+
)
114+
}
115+
116+
function NextJS() {
117+
return (
118+
<svg
119+
aria-label="Next.js (app & pages routers)"
120+
width="1em"
121+
height="1em"
122+
viewBox="0 0 180 180"
123+
fill="none"
124+
xmlns="http://www.w3.org/2000/svg"
125+
>
126+
<mask
127+
id="mask0_408_139"
128+
style={{
129+
maskType: 'alpha'
130+
}}
131+
maskUnits="userSpaceOnUse"
132+
x={0}
133+
y={0}
134+
width={180}
135+
height={180}
136+
>
137+
<circle cx={90} cy={90} r={90} fill="black" />
138+
</mask>
139+
<g mask="url(#mask0_408_139)">
140+
<circle
141+
cx={90}
142+
cy={90}
143+
r={87}
144+
fill="black"
145+
stroke="white"
146+
strokeWidth={6}
147+
/>
148+
<path
149+
d="M149.508 157.52L69.142 54H54V125.97H66.1136V69.3836L139.999 164.845C143.333 162.614 146.509 160.165 149.508 157.52Z"
150+
fill="url(#paint0_linear_408_139)"
151+
/>
152+
<rect
153+
x={115}
154+
y={54}
155+
width={12}
156+
height={72}
157+
fill="url(#paint1_linear_408_139)"
158+
/>
159+
</g>
160+
<defs>
161+
<linearGradient
162+
id="paint0_linear_408_139"
163+
x1={109}
164+
y1={116.5}
165+
x2={144.5}
166+
y2={160.5}
167+
gradientUnits="userSpaceOnUse"
168+
>
169+
<stop stopColor="white" />
170+
<stop offset={1} stopColor="white" stopOpacity={0} />
171+
</linearGradient>
172+
<linearGradient
173+
id="paint1_linear_408_139"
174+
x1={121}
175+
y1={54}
176+
x2={120.799}
177+
y2={106.875}
178+
gradientUnits="userSpaceOnUse"
179+
>
180+
<stop stopColor="white" />
181+
<stop offset={1} stopColor="white" stopOpacity={0} />
182+
</linearGradient>
183+
</defs>
184+
</svg>
185+
)
186+
}
187+
188+
function ReactRouter() {
189+
return (
190+
<svg
191+
aria-label="React Router"
192+
width="1em"
193+
height="1em"
194+
viewBox="0 0 94 61"
195+
fill="none"
196+
xmlns="http://www.w3.org/2000/svg"
197+
>
198+
<path
199+
d="M72.7315 20.9357C70.0548 20.0941 68.6725 20.3778 65.8649 20.071C61.5246 19.5976 59.7954 17.9013 59.0619 13.5356C58.6514 11.0985 59.1361 7.53022 58.0881 5.32106C56.0839 1.10875 51.3943 -0.780439 46.6828 0.297843C42.7049 1.20956 39.3951 5.18518 39.2117 9.266C39.0021 13.9254 41.657 17.901 46.2156 19.273C48.3814 19.9261 50.6825 20.2548 52.9444 20.4214C57.0925 20.7238 57.4113 23.0297 58.5335 24.9277C59.2409 26.1243 59.9264 27.3034 59.9264 30.8714C59.9264 34.4394 59.2365 35.6185 58.5335 36.8151C57.4113 38.7087 56.0271 39.9491 51.879 40.2559C49.6171 40.4225 47.3116 40.7513 45.1502 41.4044C40.5916 42.7807 37.9367 46.7519 38.1463 51.4113C38.3297 55.4921 41.6395 59.4678 45.6174 60.3795C50.3289 61.4621 55.0185 59.5686 57.0227 55.3563C58.075 53.1471 58.6514 50.6443 59.0619 48.2072C59.7998 43.8414 61.5289 42.1451 65.8649 41.6717C68.6725 41.3649 71.5783 41.6717 74.2093 40.177C76.9895 38.1456 79.4734 35.0968 79.4734 30.8714C79.4734 26.6459 76.7967 22.2156 72.7315 20.9357Z"
200+
fill="#F44250"
201+
/>
202+
<path
203+
d="M28.1997 40.7739C22.7285 40.7739 18.2656 36.3027 18.2656 30.8213C18.2656 25.3399 22.7285 20.8687 28.1997 20.8687C33.6709 20.8687 38.1338 25.3399 38.1338 30.8213C38.1338 36.2983 33.6665 40.7739 28.1997 40.7739Z"
204+
className="fill-[#121212] dark:fill-white"
205+
/>
206+
<path
207+
d="M9.899 61C4.43661 60.9868 -0.0130938 56.498 2.89511e-05 51.0122C0.0132099 45.5353 4.4936 41.0773 9.96914 41.0948C15.4359 41.108 19.8856 45.5968 19.8681 51.0825C19.8549 56.5551 15.3745 61.0131 9.899 61Z"
208+
className="fill-[#121212] dark:fill-white"
209+
/>
210+
<path
211+
d="M83.7137 60.9998C78.2339 61.0304 73.7361 56.5901 73.7052 51.122C73.6747 45.632 78.1068 41.1258 83.5646 41.0949C89.0444 41.0643 93.5423 45.5046 93.5731 50.9727C93.6036 56.4583 89.1716 60.9689 83.7137 60.9998Z"
212+
className="fill-[#121212] dark:fill-white"
213+
/>
214+
</svg>
215+
)
216+
}
217+
218+
function Remix() {
219+
return (
220+
<svg
221+
aria-label="Remix"
222+
viewBox="0 0 256 297"
223+
width="0.9em"
224+
height="0.9em"
225+
xmlns="http://www.w3.org/2000/svg"
226+
>
227+
<path
228+
d="M141.675 0C218.047 0 256 36.35 256 94.414c0 43.43-26.707 71.753-62.785 76.474 30.455 6.137 48.259 23.604 51.54 58.065l.474 6.337.415 5.924.358 5.542.249 4.179.267 4.93.138 2.814.198 4.47.159 4.222.079 2.427.107 3.888.092 4.446.033 2.148.06 6.226.02 6.496v3.885h-78.758l.004-1.62.028-3.147.047-3.065.136-7.424.035-2.489.027-3.902-.004-2.496-.023-2.617-.032-2.054-.064-2.876-.094-3.05-.125-3.242-.16-3.455-.096-1.813-.16-2.833-.186-2.976-.287-4.204-.247-3.342a116.56 116.56 0 0 0-.247-3.02l-.202-1.934c-2.6-22.827-11.655-32.157-27.163-35.269l-1.307-.245a60.184 60.184 0 0 0-2.704-.408l-1.397-.164c-.236-.025-.472-.05-.71-.073l-1.442-.127-1.471-.103-1.502-.081-1.514-.058-1.544-.039-1.574-.018L0 198.74V136.9h127.62c2.086 0 4.108-.04 6.066-.12l1.936-.095 1.893-.122 1.85-.15c.305-.028.608-.056.909-.086l1.785-.193a86.3 86.3 0 0 0 3.442-.475l1.657-.28c20.709-3.755 31.063-14.749 31.063-36.2 0-24.075-16.867-38.666-50.602-38.666H0V0h141.675ZM83.276 250.785c10.333 0 14.657 5.738 16.197 11.23l.203.79.167.782.109.617.046.306.078.603.058.59.023.29.031.569.01.278.008.54v29.507H0v-46.102h83.276Z"
229+
className="fill-black dark:fill-white"
230+
fillRule="nonzero"
231+
/>
232+
</svg>
233+
)
234+
}

packages/docs/src/app/(pages)/blog/[slug]/page.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ export default async function Page(props: {
2525
</div>
2626
<div className="container flex max-w-[900px] flex-col gap-4 px-4 text-sm sm:flex-row sm:items-center sm:justify-between lg:px-8">
2727
<a
28-
href="https://x.com/fortysevenfx"
28+
href="https://bsky.app/profile/francoisbest.com"
2929
className="flex items-center gap-3 rounded-lg px-2 py-1 hover:bg-foreground/5"
3030
aria-description="Author"
3131
>
3232
<Logo47ng size={8} />
3333
<div>
3434
<p className="font-semibold">François Best</p>
35-
<p className="text-xs text-fd-muted-foreground">@fortysevenfx</p>
35+
<p className="text-xs text-fd-muted-foreground">
36+
@francoisbest.com
37+
</p>
3638
</div>
3739
</a>
3840
{page.data.date && (

0 commit comments

Comments
 (0)