Skip to content

Commit 15e5823

Browse files
authored
Merge pull request #626 from reactjs/sync-2372ecf9
Sync with react.dev @ 2372ecf
2 parents 010ce1e + 0ebbac6 commit 15e5823

28 files changed

+1837
-36
lines changed

.github/ISSUE_TEMPLATE/0-bug.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: "🐛 Signaler un bug"
2+
description: "Signale un bug sur le site web."
3+
title: "[Bug]: "
4+
labels: ["bug: unconfirmed"]
5+
body:
6+
- type: textarea
7+
attributes:
8+
label: Résumé
9+
description: |
10+
Un résumé clair et concis du bug.
11+
placeholder: |
12+
Exemple de rapport de bug :
13+
Lorsque je clique sur le bouton « Envoyer » des retours, rien ne se passe.
14+
validations:
15+
required: true
16+
- type: input
17+
attributes:
18+
label: Page
19+
description: |
20+
Sur quelle page avez-vous constaté le bug ?
21+
placeholder: |
22+
https://fr.react.dev/
23+
validations:
24+
required: true
25+
- type: textarea
26+
attributes:
27+
label: Détails
28+
description: |
29+
Veuillez fournir tout détail complémentaire utile sur ce bug.
30+
placeholder: |
31+
Exemples de détails :
32+
Le bouton « Envoyer » ne réagit pas. J'ai tenté de rafraîchir la page et d'utiliser un autre navigateur, mais le problème persiste.
33+
validations:
34+
required: false

.github/ISSUE_TEMPLATE/1-typo.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: "🤦 Typo ou erreur"
2+
description: "Signale une typo ou une erreur dans les docs."
3+
title: "[Typo]: "
4+
labels: ["type: typos"]
5+
body:
6+
- type: textarea
7+
attributes:
8+
label: Résumé
9+
description: |
10+
Un résumé clair et concis du bug.
11+
placeholder: |
12+
Exemple :
13+
L'exemple de code sur la page "useReducer" comporte une variable `nextId` inutilisée.
14+
validations:
15+
required: true
16+
- type: input
17+
attributes:
18+
label: Page
19+
description: |
20+
Sur quelle page avez-vous constaté la typo ?
21+
placeholder: |
22+
https://fr.react.dev/
23+
validations:
24+
required: true
25+
- type: textarea
26+
attributes:
27+
label: Détails
28+
description: |
29+
Veuillez fournir tout détail complémentaire utile pour comprendre la nature de l'erreur.
30+
placeholder: |
31+
Exemple d'erreur :
32+
Dans la section « useReducer » de la page « Référence de l'API », l'exemple de code pour la partie « Écrire la fonction de réduction » comporte une variable `nextId` qui devrait être retirée.
33+
validations:
34+
required: false
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: "💡 Suggestions"
2+
description: "Suggère une nouvelle page, section ou mise à jour d'une page existante."
3+
title: "[Suggestion]: "
4+
labels: ["type: documentation"]
5+
body:
6+
- type: textarea
7+
attributes:
8+
label: Résumé
9+
description: |
10+
Un résumé clair et concis de ce que nous devrions ajouter.
11+
placeholder: |
12+
Exemple :
13+
Ajouter une page décrivant l'utilisation de React avec TypeScript.
14+
validations:
15+
required: true
16+
- type: input
17+
attributes:
18+
label: Page
19+
description: |
20+
De quelle page s'agit-il ?
21+
placeholder: |
22+
https://fr.react.dev/
23+
validations:
24+
required: false
25+
- type: textarea
26+
attributes:
27+
label: Détails
28+
description: |
29+
Veuillez nous expliquer ce que vous suggérez.
30+
placeholder: |
31+
Exemple :
32+
Je pense qu'il serait utile d'avoir une page expliquant comment utiliser React avec TypeScript. Elle pourrait inclure un exemple simple de composant écrit en TypeScript, et faire les liens adéquats vers la documentation de TypeScript.
33+
validations:
34+
required: true
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
name: "📄 Suggérer un nouveau framework"
2+
description: "Je suis l'auteur·e d'unframework et j'aimerais qu'il fasse partie des frameworks recommandés."
3+
title: "[Framework]: "
4+
labels: ["type: framework"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
## Candidature pour l'inclusion d'un framework React recommandé
10+
11+
_Ce formulaire s'adresse aux auteur·es de framework qui souhaitent candidater pour qu'il fasse partie de la liste des [frameworks React](https://react.dev/learn/start-a-new-react-project) recommandés. Si vous n'êtes pas l'auteur·e du framework, contactez ses auteur·es pour leur suggérer de candidater._
12+
13+
Lorsque nous recommandons un framework, nous le faisons afin que les développeur·ses puissent démarrer avec un projet React qui s'occupe d'entrée de jeu de sujets récurrents tels que la découpe de code, le chargement de données, le routage et la génération du HTML, sans avoir à fournir un travail complémentaire. Nous estimons que ça permettra aux gens de démarrer plus vite avec React, et de faire monter leur application à l'échelle en production.
14+
15+
Même si nous comprenons bien que de nombreux frameworks aimeraient être inclus dans la liste, cette page n'est pas là pour faire la publicité de tous les frameworks React potentiels, ou de tous les frameworks auxquels React peut être intégré. Il existe de nombreux superbes frameworks capables d'intégrer React mais que nous ne listons pas dans nos guides. Les frameworks que nous recommandons ont investi de façon significative dans l'écosystème React, et collaboré avec l'équipe React pour être compatible avec notre [vision d'une architecture React full-stack](https://fr.react.dev/learn/start-a-new-react-project#which-features-make-up-the-react-teams-full-stack-architecture-vision).
16+
17+
Pour être inclus dans la liste, un framework doit satisfaire les critères suivants :
18+
19+
- **Open-source et gratuit** : il doit être en logiciel libre et son utilisation gratuite.
20+
- **Bonne maintenance** : il doit être activement maintenu, avec correctifs et améliorations.
21+
- **Communauté active** : il doit disposer d'une communauté suffisamment large et vivante pour aider ses utilisateurs.
22+
- **Adoption facile** : il doit disposer d'étapes claires pour l'installation de la version React du framework.
23+
- **Compatible avec l'écosystème** : il doit prendre en charge l'ensemble des bibliothèques et outils de l'écosystème React.
24+
- **Auto-hébergement possible** : il doit permettre l'auto-hébergement d'applications sans que cela en limite les fonctionnalités.
25+
- **Expérience de développement (DX)** : il doit permettre aux développeur·ses d'être productif·ves grâce à des fonctionnalités telles que _Fast Refresh_.
26+
- **Expérience utilisateur (UX)** : il doit fournir des solutions intégrées aux problématiques usuelles telles que le routage et le chargement de données.
27+
- **Compatible avec notre vision de l'avenir de React**. React évolue avec le temps, et les frameworks qui ne s'alignent pas avec la direction que prend React risquent au fil du temps d'isoler leurs utilisateurs de l'écosystème React principal. Pour vous inclure sur cette page, nous devons être confiants dans la capacité du framework à placer ses utilisateurs durablement sur le chemin du succès avec React.
28+
29+
Notez bien que nous avons déjà passé en revue la plupart des frameworks populaires disponibles pour le moment, il est donc peu probable que nous n'ayons pas encore examiné votre framework. Mais si vous pensez que nous avons loupé quelque chose, veuillez remplir le formulaire ci-dessous.
30+
- type: input
31+
attributes:
32+
label: Nom
33+
description: |
34+
Quel est le nom de votre framework ?
35+
validations:
36+
required: true
37+
- type: input
38+
attributes:
39+
label: Page d'accueil
40+
description: |
41+
Quelle est l'URL de votre page d'accueil ?
42+
validations:
43+
required: true
44+
- type: input
45+
attributes:
46+
label: Instructions d'installation
47+
description: |
48+
Quelle est l'URL de votre guide de démarrage ?
49+
validations:
50+
required: true
51+
- type: dropdown
52+
attributes:
53+
label: Votre framework est-il open source ?
54+
description: |
55+
Nous ne recommandons que les frameworks open source et gratuits.
56+
options:
57+
- 'Non'
58+
- 'Oui'
59+
validations:
60+
required: true
61+
- type: textarea
62+
attributes:
63+
label: Maintenance active
64+
description: |
65+
Veuillez décrire (en anglais) en quoi votre framework est activement maintenu. Fournissez des exemples récents de versions publiées, correctifs et améliorations.
66+
validations:
67+
required: true
68+
- type: textarea
69+
attributes:
70+
label: Communauté active
71+
description: |
72+
Veuillez décrire (en anglais) votre communauté. Indiquez-en la taille et fournissez des liens sur les ressoures communautaires.
73+
validations:
74+
required: true
75+
- type: textarea
76+
attributes:
77+
label: Adoption facile
78+
description: |
79+
Veuillez décrire (en anglais) comment une personne peut installer votre framework avec React. Fournissez les liens adéquats vers votre documentation.
80+
validations:
81+
required: true
82+
- type: textarea
83+
attributes:
84+
label: Compatibilité avec l'écosystème
85+
description: |
86+
Veuillez décrire (en anglais) toute limite connue que votre framework aurait vis-à-vis de l'écosystème React. Indiquez toute bibliothèque ou tout outil dont vous savez qu'il n'est pas compatible avec votre framework.
87+
validations:
88+
required: true
89+
- type: textarea
90+
attributes:
91+
label: Auto-hébergement
92+
description: |
93+
Veuillez décrire (en anglais) en quoi votre framework permet l'auto-hébergement. Indiquez toute limitation connue de fonctionnalités dans le cadre de l'auto-hébergement. Indiquez aussi s'il faut un serveur pour déployer votre framework.
94+
validations:
95+
required: true
96+
- type: textarea
97+
attributes:
98+
label: Expérience de développement (DX)
99+
description: |
100+
Veuillez décrire (en anglais) en quoi votre framework permet une super expérience de développeemnt. Indiquez toute limite connue aux fonctionnalités telles que les outils de développement React, ceux de Chrome ou encore le Fast Refresh.
101+
validations:
102+
required: true
103+
- type: textarea
104+
attributes:
105+
label: Expérience utilisateur (UX)
106+
description: |
107+
Veuillez décrire (en anglais) en quoi votre framework aide les gens à créer une expérience utilisateur de grande qualité, en s'occupant directement des problématiques courantes. Indiquez par exemple en quoi vous gérez nativement la découpe de code, le routage, la génération de HTML ou le chargement de données d'une façon qui évite par défaut les cascades de requêtes client/serveur. Détaillez la façon dont vous permettez des approches telles que SSG ou SSR.
108+
validations:
109+
required: true
110+
- type: textarea
111+
attributes:
112+
label: Compatible avec notre vision de l'avenir de React
113+
description: |
114+
Veuillez décrire (en anglais) en quoi votre framework est aligné avec notre vision de l'avenir de React. Indiquez comment votre framework évoluera avec React, et quels sont vos plans pour prendre en charge les fonctionnalités à venir de React telles que les React Server Components.
115+
validations:
116+
required: true

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
contact_links:
2+
- name: 📃 Bugs dans React
3+
url: https://github.com/facebook/react/issues/new/choose
4+
about: Ce suivi de tickets ne sert pas aux bugs dans React. Déposez vos tickets React plutôt là-bas.
5+
- name: 🤔 Questions et Aide
6+
url: https://react.dev/community
7+
about: Ce suivi de tickets ne sert pas au support technique. Consultez plutôt l'aide communautaire de React et les forums de discussion.

src/components/MDX/InlineCode.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import cn from 'classnames';
66

77
interface InlineCodeProps {
8-
isLink: boolean;
8+
isLink?: boolean;
9+
meta?: string;
910
}
1011
function InlineCode({
1112
isLink,

src/components/MDX/MDXComponents.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import Link from './Link';
1919
import {PackageImport} from './PackageImport';
2020
import Recap from './Recap';
2121
import Sandpack from './Sandpack';
22+
import SandpackWithHTMLOutput from './SandpackWithHTMLOutput';
2223
import Diagram from './Diagram';
2324
import DiagramGroup from './DiagramGroup';
2425
import SimpleCallout from './SimpleCallout';
@@ -434,6 +435,7 @@ export const MDXComponents = {
434435
Recap,
435436
Recipes,
436437
Sandpack,
438+
SandpackWithHTMLOutput,
437439
TeamMember,
438440
TerminalBlock,
439441
YouWillLearn,

src/components/MDX/Sandpack/Preview.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ export function Preview({
188188
? 'absolute opacity-0 pointer-events-none duration-75'
189189
: 'opacity-100 duration-150'
190190
)}
191-
title="Sandbox Preview"
191+
title="Prévisualisation de la sandbox"
192192
style={{
193193
height: iframeComputedHeight || '15px',
194194
zIndex: isExpanded ? 'initial' : -1,

src/components/MDX/Sandpack/createFileMap.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ export const SUPPORTED_FILES = [AppJSPath, StylesCSSPath];
1111
export const createFileMap = (codeSnippets: any) => {
1212
return codeSnippets.reduce(
1313
(result: Record<string, SandpackFile>, codeSnippet: React.ReactElement) => {
14-
if ((codeSnippet.type as any).mdxName !== 'pre') {
14+
if (
15+
(codeSnippet.type as any).mdxName !== 'pre' &&
16+
codeSnippet.type !== 'pre'
17+
) {
1518
return result;
1619
}
1720
const {props} = codeSnippet.props.children;
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import {Children, memo} from 'react';
2+
import InlineCode from './InlineCode';
3+
import Sandpack from './Sandpack';
4+
5+
const ShowRenderedHTML = `
6+
import { renderToStaticMarkup } from 'react-dom/server';
7+
import formatHTML from './formatHTML.js';
8+
9+
export default function ShowRenderedHTML({children}) {
10+
const markup = renderToStaticMarkup(
11+
<html>
12+
<head />
13+
<body>{children}</body>
14+
</html>
15+
);
16+
return (
17+
<>
18+
<h1>HTML produit :</h1>
19+
<pre>
20+
{formatHTML(markup)}
21+
</pre>
22+
</>
23+
);
24+
}`;
25+
26+
const formatHTML = `
27+
import format from 'html-format';
28+
29+
export default function formatHTML(markup) {
30+
// Bidouilles pour formatter lisiblement le HTML -- je n'ai pas
31+
// réussi à trouver un module tournant côté navigateur qui nettoie
32+
// le HTML s'il n'a pas de retours-chariot.
33+
return format(markup
34+
.replace('<html>', '<html>\\n')
35+
.replace('<head>', '<head>\\n')
36+
.replaceAll(/<\\/script>/g, '<\\/script>\\n')
37+
.replaceAll(/<style([^>]*)\\/>/g, '<style $1/>\\n\\n')
38+
.replaceAll(/<\\/style>/g, '\\n <\\/style>\\n')
39+
.replaceAll(/<link([^>]*)\\/>/g, '<link $1/>\\n')
40+
.replaceAll(/<meta([^/]*)\\/>/g, '<meta $1/>\\n')
41+
.replace('</head>', '</head>\\n')
42+
.replace('<body>', '<body>\\n')
43+
.replace('</body>', '\\n</body>\\n')
44+
.replace('</h1>', '</h1>\\n')
45+
);
46+
}
47+
`;
48+
49+
const packageJSON = `
50+
{
51+
"dependencies": {
52+
"react": "18.3.0-canary-6db7f4209-20231021",
53+
"react-dom": "18.3.0-canary-6db7f4209-20231021",
54+
"react-scripts": "^5.0.0",
55+
"html-format": "^1.1.2"
56+
},
57+
"main": "/index.js",
58+
"devDependencies": {}
59+
}
60+
`;
61+
62+
// Intentionally not a React component because <Sandpack> will read
63+
// through its childrens' props. This imitates the output of ```
64+
// codeblocks in MDX.
65+
function createFile(meta: string, source: string) {
66+
return (
67+
<pre key={meta}>
68+
<InlineCode meta={meta} className="language-js">
69+
{source}
70+
</InlineCode>
71+
</pre>
72+
);
73+
}
74+
75+
export default memo(function SandpackWithHTMLOutput(
76+
props: React.ComponentProps<typeof Sandpack>
77+
) {
78+
const children = [
79+
...Children.toArray(props.children),
80+
createFile('ShowRenderedHTML.js', ShowRenderedHTML),
81+
createFile('formatHTML.js hidden', formatHTML),
82+
createFile('package.json hidden', packageJSON),
83+
];
84+
return <Sandpack {...props}>{children}</Sandpack>;
85+
});

0 commit comments

Comments
 (0)