Skip to content

Commit 49b1e8e

Browse files
authored
Merge pull request #223 from reactjs/sync-7c90c6eb
Sync with react.dev @ 7c90c6e
2 parents 5cf388e + 67a73d0 commit 49b1e8e

File tree

2 files changed

+82
-34
lines changed

2 files changed

+82
-34
lines changed

src/components/PageHeading.tsx

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@ import Tag from 'components/Tag';
1414
import {H1} from './MDX/Heading';
1515
import type {RouteTag, RouteItem} from './Layout/getRouteMeta';
1616
import * as React from 'react';
17+
import {useState, useEffect} from 'react';
18+
import {useRouter} from 'next/router';
1719
import {IconCanary} from './Icon/IconCanary';
1820
import {IconExperimental} from './Icon/IconExperimental';
21+
import {IconCopy} from './Icon/IconCopy';
22+
import {Button} from './Button';
1923

2024
interface PageHeadingProps {
2125
title: string;
@@ -27,6 +31,44 @@ interface PageHeadingProps {
2731
breadcrumbs: RouteItem[];
2832
}
2933

34+
function CopyAsMarkdownButton() {
35+
const {asPath} = useRouter();
36+
const [copied, setCopied] = useState(false);
37+
38+
useEffect(() => {
39+
if (!copied) return;
40+
const timer = setTimeout(() => setCopied(false), 2000);
41+
return () => clearTimeout(timer);
42+
}, [copied]);
43+
44+
async function handleCopy() {
45+
const cleanPath = asPath.split(/[?#]/)[0];
46+
try {
47+
const res = await fetch(cleanPath + '.md');
48+
if (!res.ok) return;
49+
const text = await res.text();
50+
await navigator.clipboard.writeText(text);
51+
setCopied(true);
52+
} catch {
53+
// Silently fail
54+
}
55+
}
56+
57+
return (
58+
<Button onClick={handleCopy} className="text-sm py-1 px-3">
59+
<IconCopy className="w-3.5 h-3.5 me-1.5" />
60+
{copied ? (
61+
'Copied!'
62+
) : (
63+
<>
64+
<span className="hidden sm:inline">Copy page</span>
65+
<span className="sm:hidden">Copy</span>
66+
</>
67+
)}
68+
</Button>
69+
);
70+
}
71+
3072
function PageHeading({
3173
title,
3274
status,
@@ -37,7 +79,12 @@ function PageHeading({
3779
return (
3880
<div className="px-5 sm:px-12 pt-3.5">
3981
<div className="max-w-4xl ms-0 2xl:mx-auto">
40-
{breadcrumbs ? <Breadcrumbs breadcrumbs={breadcrumbs} /> : null}
82+
<div className="flex justify-between items-start">
83+
<div className="flex-1">
84+
{breadcrumbs ? <Breadcrumbs breadcrumbs={breadcrumbs} /> : null}
85+
</div>
86+
<CopyAsMarkdownButton />
87+
</div>
4188
<H1 className="mt-0 text-primary dark:text-primary-dark -mx-.5 break-words">
4289
{title}
4390
{version === 'canary' && (

src/content/community/conferences.md

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,66 +10,67 @@ 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 Universe Conf 2025 {/*react-universe-conf-2025*/}
14-
September 2-4, 2025. Wrocław, Poland.
15-
16-
[Website](https://www.reactuniverseconf.com/) - [Twitter](https://twitter.com/react_native_eu) - [LinkedIn](https://www.linkedin.com/events/reactuniverseconf7163919537074118657/)
13+
### React Paris 2026 {/*react-paris-2026*/}
14+
March 26 - 27, 2026. In-person in Paris, France (hybrid event)
1715

18-
### React Alicante 2025 {/*react-alicante-2025*/}
19-
October 2-4, 2025. Alicante, Spain.
16+
[Website](https://react.paris/) - [Twitter](https://x.com/BeJS_)
2017

21-
[Website](https://reactalicante.es/) - [Twitter](https://x.com/ReactAlicante) - [Bluesky](https://bsky.app/profile/reactalicante.es) - [YouTube](https://www.youtube.com/channel/UCaSdUaITU1Cz6PvC97A7e0w)
18+
### CityJS London 2026 {/*cityjs-london-2026*/}
19+
April 14-17, 2026. In-person in London
2220

23-
### RenderCon Kenya 2025 {/*rendercon-kenya-2025*/}
24-
October 04, 2025. Nairobi, Kenya
21+
[Website](https://india.cityjsconf.org/) - [Twitter](https://x.com/cityjsconf) - [Bluesky](https://bsky.app/profile/cityjsconf.bsky.social)
2522

26-
[Website](https://rendercon.org/) - [Twitter](https://twitter.com/renderconke) - [LinkedIn](https://www.linkedin.com/company/renderconke/) - [YouTube](https://www.youtube.com/channel/UC0bCcG8gHUL4njDOpQGcMIA)
23+
### ZurichJS Conf 2026 {/*zurichjs-conf-2026*/}
24+
September 10-11, 2026. In-person in Zurich, Switzerland
2725

28-
### React Conf 2025 {/*react-conf-2025*/}
29-
October 7-8, 2025. Henderson, Nevada, USA and free livestream
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/)
3027

31-
[Website](https://conf.react.dev/) - [Twitter](https://x.com/reactjs) - [Bluesky](https://bsky.app/profile/react.dev)
28+
## Past Conferences {/*past-conferences*/}
3229

33-
### React India 2025 {/*react-india-2025*/}
34-
October 31 - November 01, 2025. In-person in Goa, India (hybrid event) + Oct 15 2025 - remote day
30+
### CityJS New Delhi 2026 {/*cityjs-newdelhi-2026*/}
31+
February 12-13, 2026. In-person in New Delhi, India
3532

36-
[Website](https://www.reactindia.io) - [Twitter](https://twitter.com/react_india) - [Facebook](https://www.facebook.com/ReactJSIndia) - [Youtube](https://www.youtube.com/channel/UCaFbHCBkPvVv1bWs_jwYt3w)
33+
[Website](https://india.cityjsconf.org/) - [Twitter](https://x.com/cityjsconf) - [Bluesky](https://bsky.app/profile/cityjsconf.bsky.social)
3734

38-
### React Summit US 2025 {/*react-summit-us-2025*/}
39-
November 18 - 21, 2025. In-person in New York, USA + remote (hybrid event)
35+
### CityJS Singapore 2026 {/*cityjs-singapore-2026*/}
36+
February 4-6, 2026. In-person in Singapore
4037

41-
[Website](https://reactsummit.us/) - [Twitter](https://x.com/reactsummit)
38+
[Website](https://india.cityjsconf.org/) - [Twitter](https://x.com/cityjsconf) - [Bluesky](https://bsky.app/profile/cityjsconf.bsky.social)
4239

4340
### React Advanced London 2025 {/*react-advanced-london-2025*/}
4441
November 28 & December 1, 2025. In-person in London, UK + online (hybrid event)
4542

4643
[Website](https://reactadvanced.com/) - [Twitter](https://x.com/reactadvanced)
4744

48-
### CityJS Singapore 2026 {/*cityjs-singapore-2026*/}
49-
February 4-6, 2026. In-person in Singapore
50-
51-
[Website](https://india.cityjsconf.org/) - [Twitter](https://x.com/cityjsconf) - [Bluesky](https://bsky.app/profile/cityjsconf.bsky.social)
45+
### React Summit US 2025 {/*react-summit-us-2025*/}
46+
November 18 - 21, 2025. In-person in New York, USA + remote (hybrid event)
5247

53-
### CityJS New Delhi 2026 {/*cityjs-newdelhi-2026*/}
54-
February 12-13, 2026. In-person in New Delhi, India
48+
[Website](https://reactsummit.us/) - [Twitter](https://x.com/reactsummit)
5549

56-
[Website](https://india.cityjsconf.org/) - [Twitter](https://x.com/cityjsconf) - [Bluesky](https://bsky.app/profile/cityjsconf.bsky.social)
50+
### React India 2025 {/*react-india-2025*/}
51+
October 31 - November 01, 2025. In-person in Goa, India (hybrid event) + Oct 15 2025 - remote day
5752

53+
[Website](https://www.reactindia.io) - [Twitter](https://twitter.com/react_india) - [Facebook](https://www.facebook.com/ReactJSIndia) - [Youtube](https://www.youtube.com/channel/UCaFbHCBkPvVv1bWs_jwYt3w)
5854

59-
### React Paris 2026 {/*react-paris-2026*/}
60-
March 26 - 27, 2026. In-person in Paris, France (hybrid event)
55+
### React Conf 2025 {/*react-conf-2025*/}
56+
October 7-8, 2025. Henderson, Nevada, USA and free livestream
6157

62-
[Website](https://react.paris/) - [Twitter](https://x.com/BeJS_)
58+
[Website](https://conf.react.dev/) - [Twitter](https://x.com/reactjs) - [Bluesky](https://bsky.app/profile/react.dev)
6359

60+
### RenderCon Kenya 2025 {/*rendercon-kenya-2025*/}
61+
October 04, 2025. Nairobi, Kenya
6462

65-
### CityJS London 2026 {/*cityjs-london-2026*/}
66-
April 14-17, 2026. In-person in London
63+
[Website](https://rendercon.org/) - [Twitter](https://twitter.com/renderconke) - [LinkedIn](https://www.linkedin.com/company/renderconke/) - [YouTube](https://www.youtube.com/channel/UC0bCcG8gHUL4njDOpQGcMIA)
6764

68-
[Website](https://india.cityjsconf.org/) - [Twitter](https://x.com/cityjsconf) - [Bluesky](https://bsky.app/profile/cityjsconf.bsky.social)
65+
### React Alicante 2025 {/*react-alicante-2025*/}
66+
October 2-4, 2025. Alicante, Spain.
6967

68+
[Website](https://reactalicante.es/) - [Twitter](https://x.com/ReactAlicante) - [Bluesky](https://bsky.app/profile/reactalicante.es) - [YouTube](https://www.youtube.com/channel/UCaSdUaITU1Cz6PvC97A7e0w)
7069

71-
## Past Conferences {/*past-conferences*/}
70+
### React Universe Conf 2025 {/*react-universe-conf-2025*/}
71+
September 2-4, 2025. Wrocław, Poland.
7272

73+
[Website](https://www.reactuniverseconf.com/) - [Twitter](https://twitter.com/react_native_eu) - [LinkedIn](https://www.linkedin.com/events/reactuniverseconf7163919537074118657/)
7374

7475
### React Nexus 2025 {/*react-nexus-2025*/}
7576
July 03 - 05, 2025. In-person in Bangalore, India

0 commit comments

Comments
 (0)