Skip to content

Commit bfabd16

Browse files
merging all conflicts
2 parents dce342f + f3d9794 commit bfabd16

29 files changed

Lines changed: 1110 additions & 93 deletions

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"@babel/preset-react": "7.28.5",
5353
"@mdx-js/mdx": "^2.1.3",
5454
"@resvg/resvg-js": "^2.6.2",
55+
"@shuding/opentype.js": "1.4.0-beta.0",
5556
"@types/body-scroll-lock": "^2.6.1",
5657
"@types/classnames": "^2.2.10",
5758
"@types/debounce": "^1.2.1",

scripts/generateOgImages.mjs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import path from 'path';
1414
import satori from 'satori';
1515
import {Resvg} from '@resvg/resvg-js';
1616
import matter from 'gray-matter';
17+
import opentype from '@shuding/opentype.js';
1718

1819
const ROOT = process.cwd();
1920
const CONTENT_DIR = path.join(ROOT, 'src', 'content');
@@ -34,6 +35,33 @@ const medium = fs.readFileSync(
3435
path.join(ROOT, 'public', 'fonts', 'Optimistic_Display_W_Md.ttf')
3536
);
3637

38+
// Title area width: card width minus the horizontal padding (80px per side).
39+
const TITLE_MAX_WIDTH = 1200 - 80 * 2;
40+
const TITLE_MAX_FONT = 96;
41+
const TITLE_MIN_FONT = 56;
42+
// Small margin so borderline titles don't wrap and orphan a single trailing
43+
// character (e.g. the "p" in "renderToStaticMarkup", which is 1px too wide
44+
// to fit on one line at 96px).
45+
const TITLE_SAFETY = 8;
46+
47+
const boldFont = opentype.parse(
48+
bold.buffer.slice(bold.byteOffset, bold.byteOffset + bold.byteLength)
49+
);
50+
51+
// Multi-word titles wrap cleanly at spaces, so a length bucket is fine for
52+
// them. Single-word titles (most API names) can only break mid-word, which
53+
// leaves an orphaned letter on its own line, so instead shrink them just
54+
// enough to fit on a single line.
55+
function titleFontSize(title) {
56+
const trimmed = title.trim();
57+
if (/\s/.test(trimmed)) {
58+
return trimmed.length > 24 ? 72 : 96;
59+
}
60+
const widthPerPx = boldFont.getAdvanceWidth(trimmed, 1);
61+
const fit = Math.floor((TITLE_MAX_WIDTH - TITLE_SAFETY) / widthPerPx);
62+
return Math.max(TITLE_MIN_FONT, Math.min(TITLE_MAX_FONT, fit));
63+
}
64+
3765
function el(type, style, children) {
3866
return {type, props: {style, children}};
3967
}
@@ -103,7 +131,7 @@ function card(title, pagePath) {
103131
flexGrow: 1,
104132
display: 'flex',
105133
alignItems: 'center',
106-
fontSize: title.length > 24 ? 72 : 96,
134+
fontSize: titleFontSize(title),
107135
fontFamily: 'Optimistic Display Bold',
108136
color: '#f6f7f9',
109137
lineHeight: 1.1,

src/content/blog/2025/04/23/react-labs-view-transitions-activity-and-more.md

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,8 +1245,8 @@ root.render(
12451245
```json package.json hidden
12461246
{
12471247
"dependencies": {
1248-
"react": "canary",
1249-
"react-dom": "canary",
1248+
"react": "19.3.0-canary-eb8feb71-20260814",
1249+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
12501250
"react-scripts": "latest"
12511251
},
12521252
"scripts": {
@@ -2442,8 +2442,8 @@ root.render(
24422442
```json package.json hidden
24432443
{
24442444
"dependencies": {
2445-
"react": "canary",
2446-
"react-dom": "canary",
2445+
"react": "19.3.0-canary-eb8feb71-20260814",
2446+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
24472447
"react-scripts": "latest"
24482448
},
24492449
"scripts": {
@@ -3670,8 +3670,8 @@ root.render(
36703670
```json package.json hidden
36713671
{
36723672
"dependencies": {
3673-
"react": "canary",
3674-
"react-dom": "canary",
3673+
"react": "19.3.0-canary-eb8feb71-20260814",
3674+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
36753675
"react-scripts": "latest"
36763676
},
36773677
"scripts": {
@@ -4879,8 +4879,8 @@ root.render(
48794879
```json package.json hidden
48804880
{
48814881
"dependencies": {
4882-
"react": "canary",
4883-
"react-dom": "canary",
4882+
"react": "19.3.0-canary-eb8feb71-20260814",
4883+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
48844884
"react-scripts": "latest"
48854885
},
48864886
"scripts": {
@@ -6195,8 +6195,8 @@ root.render(
61956195
```json package.json hidden
61966196
{
61976197
"dependencies": {
6198-
"react": "canary",
6199-
"react-dom": "canary",
6198+
"react": "19.3.0-canary-eb8feb71-20260814",
6199+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
62006200
"react-scripts": "latest"
62016201
},
62026202
"scripts": {
@@ -7493,8 +7493,8 @@ root.render(
74937493
```json package.json hidden
74947494
{
74957495
"dependencies": {
7496-
"react": "canary",
7497-
"react-dom": "canary",
7496+
"react": "19.3.0-canary-eb8feb71-20260814",
7497+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
74987498
"react-scripts": "latest"
74997499
},
75007500
"scripts": {
@@ -8814,8 +8814,8 @@ root.render(
88148814
```json package.json hidden
88158815
{
88168816
"dependencies": {
8817-
"react": "canary",
8818-
"react-dom": "canary",
8817+
"react": "19.3.0-canary-eb8feb71-20260814",
8818+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
88198819
"react-scripts": "latest"
88208820
},
88218821
"scripts": {
@@ -10155,8 +10155,8 @@ root.render(
1015510155
```json package.json hidden
1015610156
{
1015710157
"dependencies": {
10158-
"react": "canary",
10159-
"react-dom": "canary",
10158+
"react": "19.3.0-canary-eb8feb71-20260814",
10159+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
1016010160
"react-scripts": "latest"
1016110161
},
1016210162
"scripts": {
@@ -11441,8 +11441,8 @@ root.render(
1144111441
```json package.json hidden
1144211442
{
1144311443
"dependencies": {
11444-
"react": "canary",
11445-
"react-dom": "canary",
11444+
"react": "19.3.0-canary-eb8feb71-20260814",
11445+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
1144611446
"react-scripts": "latest"
1144711447
},
1144811448
"scripts": {
@@ -12840,8 +12840,8 @@ root.render(
1284012840
```json package.json hidden
1284112841
{
1284212842
"dependencies": {
12843-
"react": "canary",
12844-
"react-dom": "canary",
12843+
"react": "19.3.0-canary-eb8feb71-20260814",
12844+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
1284512845
"react-scripts": "latest"
1284612846
},
1284712847
"scripts": {
@@ -14178,8 +14178,8 @@ root.render(
1417814178
```json package.json hidden
1417914179
{
1418014180
"dependencies": {
14181-
"react": "canary",
14182-
"react-dom": "canary",
14181+
"react": "19.3.0-canary-eb8feb71-20260814",
14182+
"react-dom": "19.3.0-canary-eb8feb71-20260814",
1418314183
"react-scripts": "latest"
1418414184
},
1418514185
"scripts": {

src/content/community/conferences.md

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,41 @@ Do you know of a local React.js conference? Add it here! (Please keep the list c
1010

1111
## Upcoming Conferences {/*upcoming-conferences*/}
1212

13-
### React Paris 2026 {/*react-paris-2026*/}
14-
March 26 - 27, 2026. In-person in Paris, France (hybrid event)
13+
### ZurichJS Conf 2026 {/*zurichjs-conf-2026*/}
14+
September 10-11, 2026. In-person in Zurich, Switzerland
1515

16-
[Website](https://react.paris/) - [Twitter](https://x.com/BeJS_)
16+
[Website](https://conf.zurichjs.com?utm_campaign=ZurichJS_Conf&utm_source=referral&utm_content=reactjs_community_conferences) - [Twitter](https://x.com/zurichjs) - [LinkedIn](https://www.linkedin.com/company/zurichjs/)
1717

18-
### CityJS London 2026 {/*cityjs-london-2026*/}
19-
April 14-17, 2026. In-person in London
18+
### React Alicante 2026 {/*react-alicante-2026*/}
19+
Sep 24 - 26, 2026. In-person in Alicante
2020

21-
[Website](https://india.cityjsconf.org/) - [Twitter](https://x.com/cityjsconf) - [Bluesky](https://bsky.app/profile/cityjsconf.bsky.social)
21+
[Website](https://reactalicante.es//) - [Twitter](https://x.com/ReactAlicante)
2222

23-
### ZurichJS Conf 2026 {/*zurichjs-conf-2026*/}
24-
September 10-11, 2026. In-person in Zurich, Switzerland
23+
### CityJS Athens 2026 {/*cityjs-athens-2026*/}
24+
October 21-23, 2026. In-person in Athens
25+
26+
[Website](https://athens.cityjsconf.org/) - [Twitter](https://x.com/cityjsconf) - [Bluesky](https://bsky.app/profile/cityjsconf.bsky.social)
27+
28+
29+
## Past Conferences {/*past-conferences*/}
2530

26-
[Website](https://conf.zurichjs.com?utm_campaign=ZurichJS_Conf&utm_source=referral&utm_content=reactjs_community_conferences) - [Twitter](https://x.com/zurichjs) - [LinkedIn](https://www.linkedin.com/company/zurichjs/)
2731

2832
### React Conf Japan 2027 {/*react-conf-japan-2027*/}
2933
April 24, 2027. In-person in Tokyo, Japan
3034

3135
[Website](https://reactconf.jp/) - [Twitter](https://x.com/reactconfjp)
3236

33-
## Past Conferences {/*past-conferences*/}
37+
### CityJS London 2026 {/*cityjs-london-2026*/}
38+
April 14-17, 2026. In-person in London
39+
40+
[Website](https://india.cityjsconf.org/) - [Twitter](https://x.com/cityjsconf) - [Bluesky](https://bsky.app/profile/cityjsconf.bsky.social)
41+
42+
43+
### React Paris 2026 {/*react-paris-2026*/}
44+
March 26 - 27, 2026. In-person in Paris, France (hybrid event)
45+
46+
[Website](https://react.paris/) - [Twitter](https://x.com/BeJS_)
47+
3448

3549
### CityJS New Delhi 2026 {/*cityjs-newdelhi-2026*/}
3650
February 12-13, 2026. In-person in New Delhi, India

src/content/community/team.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ React work is organized into working groups, each responsible for an area of the
2626

2727
<TeamMember name="Moti Zilberman" permalink="moti-zilberman" photo="/images/team/gh-motiz88.jpg" github="motiz88" title="Engineer at Meta" group="DevX*" />
2828

29-
<TeamMember name="Nicola Corti" permalink="nicola-corti" photo="/images/team/gh-cortinico.jpg" github="cortinico" title="Engineer at Meta" group="React Native*, Docs & Community" />
29+
<TeamMember name="Nicola Corti" permalink="nicola-corti" photo="/images/team/gh-cortinico.jpg" github="cortinico" twitter="cortinico" title="Engineer at Meta" group="React Native*, Docs & Community" />
3030

3131
<TeamMember name="Rick Hanlon" permalink="rick-hanlon" photo="/images/team/rickhanlonii.jpg" github="rickhanlonii" twitter="rickyfm" threads="rickhanlonii" bsky="ricky.fm" title="Engineer at Meta" group="Docs & Community*, DOM, Fiber, Server, DevX">
3232
Ricky majored in theoretical math and somehow found himself on the React Native team for a couple years before joining the React team. When he's not programming you can find him snowboarding, biking, climbing, golfing, or closing GitHub issues that do not match the issue template.
@@ -38,10 +38,12 @@ React work is organized into working groups, each responsible for an area of the
3838

3939
## Working Group members {/*working-group-members*/}
4040

41-
<TeamMember name="Alex Hunt" permalink="alex-hunt" photo="/images/team/gh-huntie.jpg" github="huntie" title="Engineer at Meta" group="DevX, React Native" />
41+
<TeamMember name="Alex Hunt" permalink="alex-hunt" photo="/images/team/gh-huntie.jpg" github="huntie" twitter="huntie" title="Engineer at Meta" group="DevX, React Native" />
4242

4343
<TeamMember name="Aurora Scharff" permalink="aurora-scharff" photo="/images/team/gh-aurorascharff.jpg" github="aurorascharff" title="Engineer at Vercel" group="Docs & Community" />
4444

45+
<TeamMember name="Bartosz Kaszubowski" permalink="bartosz-kaszubowski" photo="/images/team/gh-simek.png" github="simek" bsky="simek.dev" title="Engineer" group="Docs & Community" />
46+
4547
<TeamMember name="Brent Vatne" permalink="brent-vatne" photo="/images/team/gh-brentvatne.jpg" github="brentvatne" title="Engineer at Expo" group="React Native" />
4648

4749
<TeamMember name="Dan Abramov" permalink="dan-abramov" photo="/images/team/gaearon.jpg" github="gaearon" bsky="danabra.mov" title="Engineer at Vercel" group="Docs & Community">
@@ -77,16 +79,16 @@ React work is organized into working groups, each responsible for an area of the
7779
<TeamMember name="Michał Pierzchała" permalink="michal-pierzchala" photo="/images/team/gh-thymikee.jpg" github="thymikee" title="Engineer at Callstack" group="React Native" />
7880

7981
<TeamMember name="Mike Vitousek" permalink="mike-vitousek" photo="/images/team/mike.jpg" github="mvitousek" title="Engineer at Meta" group="Compiler">
80-
Mike went to grad school dreaming of becoming a professor but realized that he liked building things a lot more than writing grant applications. Mike joined Meta to work on Javascript infrastructure, which ultimately led him to work on the React Compiler. When not hacking on either Javascript or OCaml, Mike can often be found hiking or skiing in the Pacific Northwest.
82+
Mike went to grad school dreaming of becoming a professor but realized that he liked building things a lot more than writing grant applications. Mike joined Meta to work on JavaScript infrastructure, which ultimately led him to work on the React Compiler. When not hacking on either Javascript or OCaml, Mike can often be found hiking or skiing in the Pacific Northwest.
8183
</TeamMember>
8284

8385
<TeamMember name="Pieter De Baets" permalink="pieter-de-baets" photo="/images/team/gh-javache.jpg" github="javache" title="Engineer at Meta" group="Compiler, Fiber, React Native" />
8486

85-
<TeamMember name="Riccardo Cipolleschi" permalink="riccardo-cipolleschi" photo="/images/team/gh-cipolleschi.png" github="cipolleschi" title="Engineer at Meta" group="Docs & Community, React Native" />
87+
<TeamMember name="Riccardo Cipolleschi" permalink="riccardo-cipolleschi" photo="/images/team/gh-cipolleschi.png" github="cipolleschi" twitter="CipolleschiR" title="Engineer at Meta" group="Docs & Community, React Native" />
8688

87-
<TeamMember name="Rob Hogan" permalink="rob-hogan" photo="/images/team/gh-rh389.jpg" github="rh389" title="Engineer at Meta" group="DevX" />
89+
<TeamMember name="Rob Hogan" permalink="rob-hogan" photo="/images/team/gh-robhogan.jpg" github="robhogan" twitter="robjhogan" title="Engineer at Meta" group="DevX" />
8890

89-
<TeamMember name="Rubén Norte" permalink="ruben-norte" photo="/images/team/gh-rubennorte.jpg" github="rubennorte" title="Engineer at Meta" group="Fiber" />
91+
<TeamMember name="Rubén Norte" permalink="ruben-norte" photo="/images/team/gh-rubennorte.jpg" github="rubennorte" title="Engineer at Meta" group="Fiber, React Native" />
9092

9193
<TeamMember name="Ruslan Lesiutin" permalink="ruslan-lesiutin" photo="/images/team/lesiutin.jpg" github="hoxyq" twitter="ruslanlesiutin" threads="lesiutin" title="Engineer at Meta" group="DOM, DevX">
9294
Ruslan's introduction to UI programming started when he was a kid by manually editing HTML templates for his custom gaming forums. Somehow, he ended up majoring in Computer Science. He enjoys music, games, and memes. Mostly memes.
@@ -102,8 +104,6 @@ React work is organized into working groups, each responsible for an area of the
102104

103105
<TeamMember name="Vitali Zaidman" permalink="vitali-zaidman" photo="/images/team/gh-vzaidman.jpg" github="vzaidman" title="Engineer at Meta" group="DevX" />
104106

105-
<TeamMember name="Vojtěch Šimek" permalink="vojtech-simek" photo="/images/team/gh-simek.png" github="simek" title="Developer" group="Docs & Community" />
106-
107107
## Advisors {/*advisors*/}
108108

109109
<TeamMember name="Eli White" permalink="eli-white" photo="/images/team/eli-white.jpg" github="elicwhite" twitter="Eli_White" threads="elicwhite" title="Engineer at Meta">
@@ -115,7 +115,7 @@ React work is organized into working groups, each responsible for an area of the
115115
</TeamMember>
116116

117117
<TeamMember name="Jimmy Lai" permalink="jimmy-lai" photo="/images/team/jimmy-lai.jpg" github="feedthejim" title="Engineering Director, Next.js at Vercel">
118-
Like many others, Jimmy started programming with the hopes of being able to work in the gaming industry. Fast forward a few years, he somehow decided that React and Javascript were pretty fun and that helping other developers build fast experiences was a more interesting life goal. After starting his career at Meta, working on product infrastructure and (briefly) on React Native, Jimmy now works at Vercel, where he helps his team build Next.js. He sadly does not get much time for video games anymore.
118+
Like many others, Jimmy started programming with the hopes of being able to work in the gaming industry. Fast forward a few years, he somehow decided that React and JavaScript were pretty fun and that helping other developers build fast experiences was a more interesting life goal. After starting his career at Meta, working on product infrastructure and (briefly) on React Native, Jimmy now works at Vercel, where he helps his team build Next.js. He sadly does not get much time for video games anymore.
119119
</TeamMember>
120120

121121
<TeamMember name="Seth Webster" permalink="seth-webster" photo="/images/team/seth.jpg" github="sethwebster" twitter="sethwebster" threads="sethwebster" personal="sethwebster.com" title="Executive Director, React Foundation, Chief Developer Evangelist at Expo">

0 commit comments

Comments
 (0)