[{"data":1,"prerenderedAt":1641},["ShallowReactive",2],{"duxt-navigation-docs-docs_fr":3,"i-lucide:rocket":833,"i-lucide:compass":838,"i-lucide:book-open":840,"i-lucide:ruler":842,"i-lucide:gavel":844,"i-lucide:list":846,"i-lucide:settings":848,"i-lucide:tag":850,"i-lucide:git-branch":852,"i-lucide:blocks":854,"i-lucide:component":856,"i-lucide:function-square":858,"i-lucide:route":860,"i-lucide:wrench":862,"i-lucide:chevron-right":864,"i-lucide:plug":866,"i-lucide:file-code":868,"i-lucide:box":870,"i-lucide:send":872,"i-lucide:code":874,"i-lucide:menu":876,"i-lucide:chevron-down":878,"i-lucide:search":880,"i-simple-icons:github":882,"i-flag:fr-4x3":884,"i-lucide:moon":888,"docs-fr-FR-\u002Freference\u002Fopenapi\u002Frequest-samples":890,"i-lucide:copy":1621,"i-lucide:thumbs-up":1623,"i-lucide:thumbs-down":1625,"i-lucide:star":1627,"i-lucide:circle-alert":1629,"i-simple-icons:discord":1631,"i-lucide:book-open-text":1633,"i-lucide:arrow-up-right":1635,"i-lucide:pencil":1637,"duxt-code-ts-export default defineAppConfig({\n  duxt: {\n    requestSamples: ['curl', 'php-guzzle', 'php-laravel']\n  }\n})\n":785,"duxt-code-ts-requestSamples: [\n  'curl',\n  {\n    id: 'ruby',\n    group: 'Ruby',\n    label: 'Net::HTTP',\n    language: 'ruby',\n    generate: (request) => `\nuri = URI('${request.url}')\nNet::HTTP.get(uri)\n`.trim()\n  }\n]\n":785,"duxt-code-yaml-paths:\n  \u002Fpets:\n    get:\n      x-codeSamples:\n        - lang: ruby\n          label: Net::HTTP\n          source: |\n            Net::HTTP.get(URI('https:\u002F\u002Fapi.example.com\u002Fpets'))\n":785,"duxt-code-ts-duxt: {\n  sampleLanguages: ['ruby']\n}\n":785,"i-lucide:arrow-left":1639},[4,25,94,148,744,752,772,827],{"title":5,"path":6,"stem":7,"children":8,"description":12},"Introduction","\u002Fgetting-started","1.getting-started",[9,13,19],{"title":5,"path":6,"stem":10,"icon":11,"description":12},"1.getting-started\u002Findex","lucide:rocket","Ce qu’est duxt, et ce qui arrive avec une seule ligne de configuration.",{"title":14,"path":15,"stem":16,"icon":17,"description":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","lucide:download","Ajoutez la couche, étendez-la, écrivez du Markdown.",{"title":20,"path":21,"stem":22,"icon":23,"description":24},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F2.configuration","lucide:settings","Un fichier configure tout le site — ce qu’il contient, et comment il fusionne.",{"title":26,"path":27,"stem":28,"children":29,"description":33},"Concepts","\u002Fconcepts","2.concepts",[30,34,40,46,52,58,64,70,76,82,88],{"title":26,"path":27,"stem":31,"icon":32,"description":33},"2.concepts\u002Findex","lucide:compass","Comment fonctionne la couche — le modèle de sources, le schéma d’URL, les collections et les vérifications.",{"title":35,"path":36,"stem":37,"icon":38,"description":39},"Couches et surcharge","\u002Fconcepts\u002Flayers","2.concepts\u002F1.layers","lucide:layers","Ce qu’une couche Nuxt vous donne, ce qu’elle vous retire, et quels chemins ne se résolvent pas comme ils se lisent.",{"title":41,"path":42,"stem":43,"icon":44,"description":45},"Thématisation","\u002Fconcepts\u002Ftheming","2.concepts\u002F10.theming","lucide:palette","Comment le thème est construit — des composants possédés, une couche de jetons et un mode sombre qui bascule sur une classe.",{"title":47,"path":48,"stem":49,"icon":50,"description":51},"Sources","\u002Fconcepts\u002Fsources","2.concepts\u002F2.sources","lucide:git-branch","Une liste de sources devient chaque collection, préfixe et version que le site sert.",{"title":53,"path":54,"stem":55,"icon":56,"description":57},"URL et versions","\u002Fconcepts\u002Furls-and-versions","2.concepts\u002F3.urls-and-versions","lucide:git-compare","Comment apparaissent les segments de dépôt et de version, et ce qu’on dit à un lecteur dans une ancienne version.",{"title":59,"path":60,"stem":61,"icon":62,"description":63},"Collections","\u002Fconcepts\u002Fcollections","2.concepts\u002F4.collections","lucide:database","Ce que Content construit à partir des sources, et les quatre choses qu’ajoute le schéma.",{"title":65,"path":66,"stem":67,"icon":68,"description":69},"Sections générées","\u002Fconcepts\u002Fgenerated-sections","2.concepts\u002F5.generated-sections","lucide:file-cog","Un artefact plus un type, publiés en pages — ce qu’est le registre, et les deux politiques auxquelles un type répond.",{"title":71,"path":72,"stem":73,"icon":74,"description":75},"Ce que la compilation vérifie","\u002Fconcepts\u002Fbuild-checks","2.concepts\u002F6.build-checks","lucide:shield-check","Les échecs silencieux qu’a connus cette couche, transformés en messages.",{"title":77,"path":78,"stem":79,"icon":80,"description":81},"Lecteurs machines","\u002Fconcepts\u002Fmachine-readers","2.concepts\u002F7.machine-readers","lucide:bot","Ce qu’obtient un modèle — llms.txt, le Markdown brut de n’importe quelle page et un vrai serveur MCP.",{"title":83,"path":84,"stem":85,"icon":86,"description":87},"SEO","\u002Fconcepts\u002Fseo","2.concepts\u002F8.seo","lucide:search","Ce que chaque page émet pour les robots et les cartes sociales, quel module l'écrit, et la seule valeur que la couche ne peut pas deviner.",{"title":89,"path":90,"stem":91,"icon":92,"description":93},"Localisation","\u002Fconcepts\u002Flocalisation","2.concepts\u002F9.localisation","lucide:languages","La couche fournit sept locales, et chaque chaîne configurée prend trois formes.",{"title":95,"path":96,"stem":97,"children":98,"description":102},"Guides","\u002Fguides","3.guides",[99,103,109,114,119,124,130,136,142],{"title":95,"path":96,"stem":100,"icon":101,"description":102},"3.guides\u002Findex","lucide:book-open","Une tâche par page, du début à la fin — plusieurs dépôts, plusieurs versions, plusieurs langues et un déploiement.",{"title":104,"path":105,"stem":106,"icon":107,"description":108},"Plusieurs dépôts","\u002Fguides\u002Fseveral-repositories","3.guides\u002F1.several-repositories","lucide:folder-git","Servir la documentation de plusieurs projets depuis un seul site.",{"title":110,"path":111,"stem":112,"icon":56,"description":113},"Plusieurs versions","\u002Fguides\u002Fseveral-versions","3.guides\u002F2.several-versions","Servir la même documentation sur plusieurs refs, avec un sélecteur et un bandeau.",{"title":115,"path":116,"stem":117,"icon":92,"description":118},"Plusieurs langues","\u002Fguides\u002Fseveral-languages","3.guides\u002F3.several-languages","Servir l’interface en plusieurs langues, et traduire les pages elles-mêmes.",{"title":120,"path":121,"stem":122,"icon":44,"description":123},"Surcharger le thème","\u002Fguides\u002Foverride-the-theme","3.guides\u002F4.override-the-theme","Changer une couleur, remplacer un composant, ajouter une primitive shadcn-vue.",{"title":125,"path":126,"stem":127,"icon":128,"description":129},"Déplacer une page","\u002Fguides\u002Fmove-a-page","3.guides\u002F5.move-a-page","lucide:signpost","redirectFrom dans le frontmatter, transformé en règles de route sous chaque préfixe.",{"title":131,"path":132,"stem":133,"icon":134,"description":135},"Déployer un site","\u002Fguides\u002Fdeploy-a-site","3.guides\u002F6.deploy-a-site","lucide:cloud-upload","Où un site duxt peut tourner, ce qu’il lui faut là-bas, et pourquoi le contenu n’est pas rafraîchi à l’exécution.",{"title":137,"path":138,"stem":139,"icon":140,"description":141},"Recueillir des retours","\u002Fguides\u002Fcollect-page-feedback","3.guides\u002F7.collect-page-feedback","lucide:thumbs-up","Enveloppez DuxtPageFeedback et gardez la réponse là où vit déjà votre analytique.",{"title":143,"path":144,"stem":145,"icon":146,"description":147},"Donner son identité à votre site","\u002Fguides\u002Fbrand-your-site","3.guides\u002F8.brand-your-site","lucide:badge-check","Définir le nom, le logo et les icônes, pour que le site se lise comme le vôtre et non comme celui de la couche.",{"title":149,"path":150,"stem":151,"children":152,"description":156},"Référence","\u002Freference","4.reference",[153,157,161,193,197,203,343,490,612,657,717],{"title":149,"path":150,"stem":154,"icon":155,"description":156},"4.reference\u002Findex","lucide:list","La surface publique de la couche — clés de configuration, frontmatter, composants, composables et points de terminaison.",{"title":20,"path":158,"stem":159,"icon":23,"description":160},"\u002Freference\u002Fconfiguration","4.reference\u002F1.configuration","Chaque clé sous duxt dans app.config.ts — ce qu’elle contrôle, et quand elle est lue.",{"title":162,"path":163,"stem":164,"children":165,"icon":167,"description":168},"Journal des versions","\u002Freference\u002Fchangelog","4.reference\u002F10.changelog\u002Findex",[166,169,175,181,187],{"title":162,"path":163,"stem":164,"icon":167,"description":168},"lucide:tag","Un journal de releases, publié en pages — une chronologie, une page par version, et un flux.",{"title":170,"path":171,"stem":172,"icon":173,"description":174},"Déclarer la section","\u002Freference\u002Fchangelog\u002Fsection","4.reference\u002F10.changelog\u002F1.section","lucide:file-clock","Le type de section `changelog` — où vit le fichier, et les deux politiques auxquelles il répond.",{"title":176,"path":177,"stem":178,"icon":179,"description":180},"Granularité","\u002Freference\u002Fchangelog\u002Fgranularity","4.reference\u002F10.changelog\u002F2.granularity","lucide:split","Une page par version, ou le fichier comme l’unique page qu’il a été écrit.",{"title":182,"path":183,"stem":184,"icon":185,"description":186},"Ce qui est lu","\u002Freference\u002Fchangelog\u002Fwhat-is-read","4.reference\u002F10.changelog\u002F3.what-is-read","lucide:scan-text","Quels titres deviennent des versions, lesquels des groupes, et ce qu’il advient du reste.",{"title":188,"path":189,"stem":190,"icon":191,"description":192},"Mise en page et composants","\u002Freference\u002Fchangelog\u002Fcomponents","4.reference\u002F10.changelog\u002F4.components","lucide:box","La mise en page dans laquelle se rend un historique éclaté, et les deux composants MDC dont ses pages sont faites.",{"title":47,"path":194,"stem":195,"icon":50,"description":196},"\u002Freference\u002Fsources","4.reference\u002F2.sources","Les champs d’une entrée de source, ses refs, et les options qui façonnent les URL.",{"title":198,"path":199,"stem":200,"icon":201,"description":202},"Frontmatter","\u002Freference\u002Ffrontmatter","4.reference\u002F3.frontmatter","lucide:file-code","Les champs qu’une page peut porter au-delà du titre et de la description, et les deux que la compilation remplit.",{"title":204,"path":205,"stem":206,"children":207,"icon":209,"description":210},"Composants MDC","\u002Freference\u002Fmdc-components","4.reference\u002F4.mdc-components\u002Findex",[208,211,217,223,229,235,241,247,253,259,297,303,308,314,320,326,332,338],{"title":204,"path":205,"stem":206,"icon":209,"description":210},"lucide:blocks","Les blocs qu’une page Markdown peut appeler, une page chacun, avec leurs props.",{"title":212,"path":213,"stem":214,"icon":215,"description":216},"Callout","\u002Freference\u002Fmdc-components\u002Fcallout","4.reference\u002F4.mdc-components\u002F1.callout","lucide:message-square-warning","Un encadré où le lecteur est censé s’arrêter — une astuce, un avertissement, un danger.",{"title":218,"path":219,"stem":220,"icon":221,"description":222},"Gestionnaires de paquets","\u002Freference\u002Fmdc-components\u002Fpackage-managers","4.reference\u002F4.mdc-components\u002F10.package-managers","lucide:package","Une commande, un onglet par gestionnaire de paquets, mémorisé d’une page à l’autre.",{"title":224,"path":225,"stem":226,"icon":227,"description":228},"Arborescence de fichiers","\u002Freference\u002Fmdc-components\u002Ffile-tree","4.reference\u002F4.mdc-components\u002F11.file-tree","lucide:folder-tree","Une structure de dossiers, avec une icône par type de fichier.",{"title":230,"path":231,"stem":232,"icon":233,"description":234},"Aperçu","\u002Freference\u002Fmdc-components\u002Fpreview","4.reference\u002F4.mdc-components\u002F12.preview","lucide:eye","Un composant rendu tel que la page le rend, avec sa source à côté.",{"title":236,"path":237,"stem":238,"icon":239,"description":240},"Cartes de page","\u002Freference\u002Fmdc-components\u002Fpage-cards","4.reference\u002F4.mdc-components\u002F13.page-cards","lucide:layout-grid","Les enfants d’une section, en cartes.",{"title":242,"path":243,"stem":244,"icon":245,"description":246},"Partial","\u002Freference\u002Fmdc-components\u002Fpartial","4.reference\u002F4.mdc-components\u002F14.partial","lucide:puzzle","Un bloc écrit une fois et rendu dans chaque source qui en a besoin.",{"title":248,"path":249,"stem":250,"icon":251,"description":252},"Since","\u002Freference\u002Fmdc-components\u002Fsince","4.reference\u002F4.mdc-components\u002F15.since","lucide:milestone","La version dans laquelle une chose est arrivée, à côté d’un titre.",{"title":254,"path":255,"stem":256,"icon":257,"description":258},"Mermaid","\u002Freference\u002Fmdc-components\u002Fmermaid","4.reference\u002F4.mdc-components\u002F16.mermaid","lucide:workflow","Un diagramme depuis un bloc ou une prop.",{"title":260,"path":261,"stem":262,"children":263,"icon":265,"description":266},"Surcharges de prose","\u002Freference\u002Fmdc-components\u002Fprose","4.reference\u002F4.mdc-components\u002F17.prose\u002Findex",[264,267,273,279,285,291],{"title":260,"path":261,"stem":262,"icon":265,"description":266},"lucide:type","Ce que la couche change au Markdown ordinaire — liens, titres, images, code et tableaux.",{"title":268,"path":269,"stem":270,"icon":271,"description":272},"ProseA","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-a","4.reference\u002F4.mdc-components\u002F17.prose\u002F1.prose-a","lucide:link","Un lien, résolu selon la source dans laquelle il a été écrit.",{"title":274,"path":275,"stem":276,"icon":277,"description":278},"ProseH2, ProseH3, ProseH4","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-headings","4.reference\u002F4.mdc-components\u002F17.prose\u002F2.prose-headings","lucide:heading","Des titres, chacun avec une ancre de permalien.",{"title":280,"path":281,"stem":282,"icon":283,"description":284},"ProseImg","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-img","4.reference\u002F4.mdc-components\u002F17.prose\u002F3.prose-img","lucide:image","Une image : qui suit le thème, et zoomable.",{"title":286,"path":287,"stem":288,"icon":289,"description":290},"ProsePre","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-pre","4.reference\u002F4.mdc-components\u002F17.prose\u002F4.prose-pre","lucide:terminal","Le bloc de code : nom de fichier, icône de langage, bouton de copie.",{"title":292,"path":293,"stem":294,"icon":295,"description":296},"ProseTable","\u002Freference\u002Fmdc-components\u002Fprose\u002Fprose-table","4.reference\u002F4.mdc-components\u002F17.prose\u002F5.prose-table","lucide:table","Un tableau qui défile à la place de la page.",{"title":298,"path":299,"stem":300,"icon":301,"description":302},"Étapes","\u002Freference\u002Fmdc-components\u002Fsteps","4.reference\u002F4.mdc-components\u002F2.steps","lucide:list-ordered","Une liste ordonnée dessinée en étapes numérotées sur un rail.",{"title":304,"path":305,"stem":306,"icon":201,"description":307},"Groupe de code","\u002Freference\u002Fmdc-components\u002Fcode-group","4.reference\u002F4.mdc-components\u002F3.code-group","Plusieurs blocs de code en un seul bloc à onglets, étiquetés par nom de fichier.",{"title":309,"path":310,"stem":311,"icon":312,"description":313},"Groupe d'onglets","\u002Freference\u002Fmdc-components\u002Ftab-group","4.reference\u002F4.mdc-components\u002F4.tab-group","lucide:panels-top-left","Des onglets pour tout ce qui n’est pas du code.",{"title":315,"path":316,"stem":317,"icon":318,"description":319},"Tab","\u002Freference\u002Fmdc-components\u002Ftab","4.reference\u002F4.mdc-components\u002F5.tab","lucide:square","Un panneau d’un groupe d’onglets.",{"title":321,"path":322,"stem":323,"icon":324,"description":325},"Accordion","\u002Freference\u002Fmdc-components\u002Faccordion","4.reference\u002F4.mdc-components\u002F6.accordion","lucide:chevrons-up-down","Des sections repliables — une FAQ, ou des réponses parmi lesquelles le lecteur choisit.",{"title":327,"path":328,"stem":329,"icon":330,"description":331},"Élément d'accordéon","\u002Freference\u002Fmdc-components\u002Faccordion-item","4.reference\u002F4.mdc-components\u002F7.accordion-item","lucide:chevron-down","Une section repliable.",{"title":333,"path":334,"stem":335,"icon":336,"description":337},"Groupe de champs","\u002Freference\u002Fmdc-components\u002Ffield-group","4.reference\u002F4.mdc-components\u002F8.field-group","lucide:list-tree","Une liste de champs, en un seul bloc.",{"title":339,"path":340,"stem":341,"icon":167,"description":342},"Champ","\u002Freference\u002Fmdc-components\u002Ffield","4.reference\u002F4.mdc-components\u002F9.field","Un paramètre, une propriété ou une option, avec son type et sa valeur par défaut.",{"title":344,"path":345,"stem":346,"children":347,"icon":349,"description":350},"Composants","\u002Freference\u002Fcomponents","4.reference\u002F5.components\u002Findex",[348,351,371,412,459],{"title":344,"path":345,"stem":346,"icon":349,"description":350},"lucide:component","Les composants propres à la couche, une page chacun — à quoi sert chacun, et ce qu’il prend.",{"title":352,"path":353,"stem":354,"children":355,"icon":357,"description":358},"Mise en page","\u002Freference\u002Fcomponents\u002Flayout","4.reference\u002F5.components\u002F1.layout\u002Findex",[356,359,365],{"title":352,"path":353,"stem":354,"icon":357,"description":358},"lucide:layout-panel-top","Les deux composants qui encadrent une page — la barre de navigation et le pied de page.",{"title":360,"path":361,"stem":362,"icon":363,"description":364},"DuxtHeader","\u002Freference\u002Fcomponents\u002Flayout\u002Fduxt-header","4.reference\u002F5.components\u002F1.layout\u002F1.duxt-header","lucide:panel-top","La barre de navigation : titre, navigation, recherche et liens en icônes.",{"title":366,"path":367,"stem":368,"icon":369,"description":370},"DuxtFooter","\u002Freference\u002Fcomponents\u002Flayout\u002Fduxt-footer","4.reference\u002F5.components\u002F1.layout\u002F2.duxt-footer","lucide:panel-bottom","Le pied de page : le nom du site, ses liens légaux, et la ligne propre à la couche.",{"title":372,"path":373,"stem":374,"children":375,"icon":32,"description":377},"Navigation","\u002Freference\u002Fcomponents\u002Fnavigation","4.reference\u002F5.components\u002F2.navigation\u002Findex",[376,378,384,389,395,401,406],{"title":372,"path":373,"stem":374,"icon":32,"description":377},"Se déplacer — la rangée des sections, la barre latérale, le fil d’Ariane, le sommaire et précédent\u002Fsuivant.",{"title":379,"path":380,"stem":381,"icon":382,"description":383},"DuxtSections","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-sections","4.reference\u002F5.components\u002F2.navigation\u002F1.duxt-sections","lucide:rows-3","La deuxième rangée de la barre de navigation — les parties de premier niveau de la documentation.",{"title":385,"path":386,"stem":387,"icon":336,"description":388},"DuxtNavigation","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-navigation","4.reference\u002F5.components\u002F2.navigation\u002F2.duxt-navigation","L’arbre de la barre latérale.",{"title":390,"path":391,"stem":392,"icon":393,"description":394},"DuxtNavigationLink","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-navigation-link","4.reference\u002F5.components\u002F2.navigation\u002F3.duxt-navigation-link","lucide:link-2","Une entrée de la barre latérale.",{"title":396,"path":397,"stem":398,"icon":399,"description":400},"DuxtBreadcrumb","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-breadcrumb","4.reference\u002F5.components\u002F2.navigation\u002F4.duxt-breadcrumb","lucide:chevrons-right","Le fil au-dessus du titre de page.",{"title":402,"path":403,"stem":404,"icon":155,"description":405},"DuxtToc","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-toc","4.reference\u002F5.components\u002F2.navigation\u002F5.duxt-toc","Le sommaire, et l’encart en dessous.",{"title":407,"path":408,"stem":409,"icon":410,"description":411},"DuxtPageNav","\u002Freference\u002Fcomponents\u002Fnavigation\u002Fduxt-page-nav","4.reference\u002F5.components\u002F2.navigation\u002F6.duxt-page-nav","lucide:arrow-left-right","Précédent et suivant, bornés par la section.",{"title":413,"path":414,"stem":415,"children":416,"icon":418,"description":419},"Contrôles","\u002Freference\u002Fcomponents\u002Fcontrols","4.reference\u002F5.components\u002F3.controls\u002Findex",[417,420,425,430,436,441,447,453],{"title":413,"path":414,"stem":415,"icon":418,"description":419},"lucide:sliders-horizontal","Ce qu’actionne un lecteur — la recherche, les sélecteurs, la fiche des raccourcis et deux indicateurs.",{"title":421,"path":422,"stem":423,"icon":86,"description":424},"DuxtSearch","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-search","4.reference\u002F5.components\u002F3.controls\u002F1.duxt-search","La recherche sur toutes les sources, avec des résultats classés ensemble.",{"title":426,"path":427,"stem":428,"icon":38,"description":429},"DuxtVersion","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-version","4.reference\u002F5.components\u002F3.controls\u002F2.duxt-version","Le badge de version, et le sélecteur quand il y en a plusieurs.",{"title":431,"path":432,"stem":433,"icon":434,"description":435},"DuxtVersionBanner","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-version-banner","4.reference\u002F5.components\u002F3.controls\u002F3.duxt-version-banner","lucide:triangle-alert","Le bandeau qui dit au lecteur que cette version n’est pas la version courante.",{"title":437,"path":438,"stem":439,"icon":92,"description":440},"DuxtLocale","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-locale","4.reference\u002F5.components\u002F3.controls\u002F4.duxt-locale","Le sélecteur de langue.",{"title":442,"path":443,"stem":444,"icon":445,"description":446},"DuxtProgress","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-progress","4.reference\u002F5.components\u002F3.controls\u002F5.duxt-progress","lucide:loader","Jusqu’où le lecteur est descendu dans la page.",{"title":448,"path":449,"stem":450,"icon":451,"description":452},"DuxtShortcuts","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-shortcuts","4.reference\u002F5.components\u002F3.controls\u002F6.duxt-shortcuts","lucide:keyboard","La fiche des raccourcis clavier, sur ?.",{"title":454,"path":455,"stem":456,"icon":457,"description":458},"DuxtSkipLink","\u002Freference\u002Fcomponents\u002Fcontrols\u002Fduxt-skip-link","4.reference\u002F5.components\u002F3.controls\u002F7.duxt-skip-link","lucide:skip-forward","Le premier élément focalisable de la page.",{"title":460,"path":461,"stem":462,"children":463,"icon":465,"description":466},"Page","\u002Freference\u002Fcomponents\u002Fpage","4.reference\u002F5.components\u002F4.page\u002Findex",[464,467,473,479,484],{"title":460,"path":461,"stem":462,"icon":465,"description":466},"lucide:file-text","Les composants qui appartiennent à la page elle-même.",{"title":468,"path":469,"stem":470,"icon":471,"description":472},"DuxtPageInfo","\u002Freference\u002Fcomponents\u002Fpage\u002Fduxt-page-info","4.reference\u002F5.components\u002F4.page\u002F1.duxt-page-info","lucide:git-commit-horizontal","D’où vient la page : lien d’édition, dernière mise à jour, contributeurs.",{"title":474,"path":475,"stem":476,"icon":477,"description":478},"DuxtCopyPage","\u002Freference\u002Fcomponents\u002Fpage\u002Fduxt-copy-page","4.reference\u002F5.components\u002F4.page\u002F2.duxt-copy-page","lucide:clipboard-copy","Donnez cette page à un modèle, ou lisez sa source.",{"title":480,"path":481,"stem":482,"icon":140,"description":483},"DuxtPageFeedback","\u002Freference\u002Fcomponents\u002Fpage\u002Fduxt-page-feedback","4.reference\u002F5.components\u002F4.page\u002F3.duxt-page-feedback","« Cette page vous a-t-elle été utile ? » — un événement, et pas de backend.",{"title":485,"path":486,"stem":487,"icon":488,"description":489},"DuxtCodeBlock","\u002Freference\u002Fcomponents\u002Fpage\u002Fduxt-code-block","4.reference\u002F5.components\u002F4.page\u002F4.duxt-code-block","lucide:code","La carte autour d’un bloc de code.",{"title":491,"path":492,"stem":493,"children":494,"icon":496,"description":497},"Composables","\u002Freference\u002Fcomposables","4.reference\u002F6.composables\u002Findex",[495,498,532,561],{"title":491,"path":492,"stem":493,"icon":496,"description":497},"lucide:function-square","Les fonctions que la couche expose à vos propres composants, une page chacune.",{"title":499,"path":500,"stem":501,"children":502,"icon":62,"description":504},"Configuration et contenu","\u002Freference\u002Fcomposables\u002Fconfig-and-content","4.reference\u002F6.composables\u002F1.config-and-content\u002Findex",[503,505,510,516,521,527],{"title":499,"path":500,"stem":501,"icon":62,"description":504},"La configuration fusionnée, et quelle collection sert la page en cours de lecture.",{"title":506,"path":507,"stem":508,"icon":23,"description":509},"useDuxtConfig()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-config","4.reference\u002F6.composables\u002F1.config-and-content\u002F1.use-duxt-config","La configuration fusionnée, chaque champ de texte déjà résolu.",{"title":511,"path":512,"stem":513,"icon":514,"description":515},"useDuxtCollection()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-collection","4.reference\u002F6.composables\u002F1.config-and-content\u002F2.use-duxt-collection","lucide:library","Quelle collection sert cette route.",{"title":517,"path":518,"stem":519,"icon":336,"description":520},"useDuxtNavigation()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-navigation","4.reference\u002F6.composables\u002F1.config-and-content\u002F3.use-duxt-navigation","L’arbre de navigation de la collection qui sert cette route.",{"title":522,"path":523,"stem":524,"icon":525,"description":526},"useDuxtSection()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-section","4.reference\u002F6.composables\u002F1.config-and-content\u002F4.use-duxt-section","lucide:folder-open","La partie de la documentation dans laquelle se trouve cette page.",{"title":528,"path":529,"stem":530,"icon":399,"description":531},"useDuxtBreadcrumb()","\u002Freference\u002Fcomposables\u002Fconfig-and-content\u002Fuse-duxt-breadcrumb","4.reference\u002F6.composables\u002F1.config-and-content\u002F5.use-duxt-breadcrumb","Le fil qui descend de la section jusqu’à une page.",{"title":533,"path":534,"stem":535,"children":536,"icon":538,"description":539},"Chemins et versions","\u002Freference\u002Fcomposables\u002Fpaths-and-versions","4.reference\u002F6.composables\u002F2.paths-and-versions\u002Findex",[537,540,545,550,555],{"title":533,"path":534,"stem":535,"icon":538,"description":539},"lucide:route","Lire une URL, en écrire une en retour, et savoir quelle version est lue.",{"title":541,"path":542,"stem":543,"icon":251,"description":544},"useDuxtPath()","\u002Freference\u002Fcomposables\u002Fpaths-and-versions\u002Fuse-duxt-path","4.reference\u002F6.composables\u002F2.paths-and-versions\u002F1.use-duxt-path","Le chemin où se trouve la documentation, locale retirée.",{"title":546,"path":547,"stem":548,"icon":271,"description":549},"useDuxtLink()","\u002Freference\u002Fcomposables\u002Fpaths-and-versions\u002Fuse-duxt-link","4.reference\u002F6.composables\u002F2.paths-and-versions\u002F2.use-duxt-link","Un chemin de documentation, réécrit en lien.",{"title":551,"path":552,"stem":553,"icon":38,"description":554},"useDuxtVersion()","\u002Freference\u002Fcomposables\u002Fpaths-and-versions\u002Fuse-duxt-version","4.reference\u002F6.composables\u002F2.paths-and-versions\u002F3.use-duxt-version","Ce que montre le sélecteur, ce que dit la bannière, s’il faut indexer.",{"title":556,"path":557,"stem":558,"icon":559,"description":560},"useDuxtSiteUrl()","\u002Freference\u002Fcomposables\u002Fpaths-and-versions\u002Fuse-duxt-site-url","4.reference\u002F6.composables\u002F2.paths-and-versions\u002F4.use-duxt-site-url","lucide:globe","L’origine configurée, et les chemins rendus absolus.",{"title":562,"path":563,"stem":564,"children":565,"icon":101,"description":567},"Expérience de lecture","\u002Freference\u002Fcomposables\u002Freading","4.reference\u002F6.composables\u002F3.reading\u002Findex",[566,568,573,579,584,590,596,601,607],{"title":562,"path":563,"stem":564,"icon":101,"description":567},"La recherche, les titres, le focus, l’historique, et les choix que fait un lecteur.",{"title":569,"path":570,"stem":571,"icon":86,"description":572},"useDuxtSearch()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-duxt-search","4.reference\u002F6.composables\u002F3.reading\u002F1.use-duxt-search","La recherche sur toutes les sources, classées ensemble.",{"title":574,"path":575,"stem":576,"icon":577,"description":578},"useFuzzySearch()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-fuzzy-search","4.reference\u002F6.composables\u002F3.reading\u002F2.use-fuzzy-search","lucide:spell-check","La tolérance aux fautes de frappe, à côté de l’index exact.",{"title":580,"path":581,"stem":582,"icon":277,"description":583},"useActiveHeading()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-active-heading","4.reference\u002F6.composables\u002F3.reading\u002F3.use-active-heading","Le titre actuellement en vue.",{"title":585,"path":586,"stem":587,"icon":588,"description":589},"useDuxtPageFocus()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-duxt-page-focus","4.reference\u002F6.composables\u002F3.reading\u002F4.use-duxt-page-focus","lucide:focus","Déplace le focus vers le titre après une navigation côté client.",{"title":591,"path":592,"stem":593,"icon":594,"description":595},"useRecentPages()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-recent-pages","4.reference\u002F6.composables\u002F3.reading\u002F5.use-recent-pages","lucide:history","Les cinq dernières pages que ce lecteur a ouvertes.",{"title":597,"path":598,"stem":599,"icon":221,"description":600},"usePackageManager()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-package-manager","4.reference\u002F6.composables\u002F3.reading\u002F6.use-package-manager","Le gestionnaire de paquets qu’un lecteur a choisi.",{"title":602,"path":603,"stem":604,"icon":605,"description":606},"useDuxtToast()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-duxt-toast","4.reference\u002F6.composables\u002F3.reading\u002F7.use-duxt-toast","lucide:bell","Les notifications, enveloppées pour qu’aucun composant n’importe la bibliothèque.",{"title":608,"path":609,"stem":610,"icon":451,"description":611},"useDuxtShortcuts()","\u002Freference\u002Fcomposables\u002Freading\u002Fuse-duxt-shortcuts","4.reference\u002F6.composables\u002F3.reading\u002F8.use-duxt-shortcuts","Les touches que le thème écoute.",{"title":613,"path":614,"stem":615,"children":616,"icon":538,"description":618},"Points de terminaison","\u002Freference\u002Fendpoints","4.reference\u002F7.endpoints\u002Findex",[617,619,624,630,635,640,645,651],{"title":613,"path":614,"stem":615,"icon":538,"description":618},"Tout ce que le site sert en dehors des pages, une page pour chacun.",{"title":620,"path":621,"stem":622,"icon":465,"description":623},"\u002Fllms.txt","\u002Freference\u002Fendpoints\u002Fllms-txt","4.reference\u002F7.endpoints\u002F1.llms-txt","La documentation en index Markdown, selon llmstxt.org.",{"title":625,"path":626,"stem":627,"icon":628,"description":629},"\u002Fllms-full.txt","\u002Freference\u002Fendpoints\u002Fllms-full-txt","4.reference\u002F7.endpoints\u002F2.llms-full-txt","lucide:file-stack","Les mêmes pages, entières, en un seul fichier Markdown.",{"title":631,"path":632,"stem":633,"icon":201,"description":634},"\u003Cpage>.md","\u002Freference\u002Fendpoints\u002Fpage-markdown","4.reference\u002F7.endpoints\u002F3.page-markdown","La source de n’importe quelle page, à son URL suivie de .md.",{"title":636,"path":637,"stem":638,"icon":80,"description":639},"\u002Fmcp","\u002Freference\u002Fendpoints\u002Fmcp","4.reference\u002F7.endpoints\u002F4.mcp","Un serveur MCP sur le même contenu.",{"title":641,"path":642,"stem":643,"icon":86,"description":644},"\u002Fsitemap.xml et \u002Frobots.txt","\u002Freference\u002Fendpoints\u002Fsitemap-and-robots","4.reference\u002F7.endpoints\u002F5.sitemap-and-robots","Ce vers quoi un robot est dirigé, et ce dont on le tient à l’écart.",{"title":646,"path":647,"stem":648,"icon":649,"description":650},"\u002Frss.xml","\u002Freference\u002Fendpoints\u002Frss-xml","4.reference\u002F7.endpoints\u002F6.rss-xml","lucide:rss","Le flux, une fois qu’une section est nommée.",{"title":652,"path":653,"stem":654,"icon":655,"description":656},"\u002F_duxt\u002Fdevtools","\u002Freference\u002Fendpoints\u002Fdevtools","4.reference\u002F7.endpoints\u002F7.devtools","lucide:wrench","La route depuis laquelle le panneau Nuxt Devtools est servi. En développement seulement.",{"title":658,"path":659,"stem":660,"children":661,"icon":655,"description":663},"Devtools","\u002Freference\u002Fdevtools","4.reference\u002F8.devtools\u002Findex",[662,664,668,673,678,684,690,696,701,706,711],{"title":658,"path":659,"stem":660,"icon":655,"description":663},"Dix panneaux qui montrent ce que vos sources sont devenues. En développement seulement.",{"title":47,"path":665,"stem":666,"icon":514,"description":667},"\u002Freference\u002Fdevtools\u002Fsources","4.reference\u002F8.devtools\u002F1.sources","Ce que `duxt.sources` est devenu — une collection par source, version et langue.",{"title":669,"path":670,"stem":671,"icon":128,"description":672},"Redirections","\u002Freference\u002Fdevtools\u002Fredirects","4.reference\u002F8.devtools\u002F10.redirects","Chaque redirection que sert le serveur, et lesquelles la couche a écrites.",{"title":674,"path":675,"stem":676,"icon":538,"description":677},"Chemins","\u002Freference\u002Fdevtools\u002Fpaths","4.reference\u002F8.devtools\u002F2.paths","Collez une URL et voyez quelle source la revendique et ce qu’elle y trouve.",{"title":679,"path":680,"stem":681,"icon":682,"description":683},"Pages","\u002Freference\u002Fdevtools\u002Fpages","4.reference\u002F8.devtools\u002F3.pages","lucide:files","Chaque page de chaque collection, avec son frontmatter et ses métadonnées git.",{"title":685,"path":686,"stem":687,"icon":688,"description":689},"Versions","\u002Freference\u002Fdevtools\u002Fversions","4.reference\u002F8.devtools\u002F4.versions","lucide:columns-3","Quelle version — et quelle langue — porte quelle page.",{"title":691,"path":692,"stem":693,"icon":694,"description":695},"Vérifications","\u002Freference\u002Fdevtools\u002Fchecks","4.reference\u002F8.devtools\u002F5.checks","lucide:check-check","Le validateur du build, appliqué à ce que le site sert en ce moment.",{"title":697,"path":698,"stem":699,"icon":86,"description":700},"Recherche","\u002Freference\u002Fdevtools\u002Fsearch","4.reference\u002F8.devtools\u002F6.search","Ce que contient l’index de recherche, via la requête même que lance la boîte de dialogue.",{"title":702,"path":703,"stem":704,"icon":418,"description":705},"Config","\u002Freference\u002Fdevtools\u002Fconfig","4.reference\u002F8.devtools\u002F7.config","La configuration `duxt` fusionnée, et de quel côté de la fusion vient chaque valeur.",{"title":707,"path":708,"stem":709,"icon":92,"description":710},"i18n","\u002Freference\u002Fdevtools\u002Fi18n","4.reference\u002F8.devtools\u002F8.i18n","Clés de message par langue, face à la langue de base.",{"title":712,"path":713,"stem":714,"icon":715,"description":716},"Cache","\u002Freference\u002Fdevtools\u002Fcache","4.reference\u002F8.devtools\u002F9.cache","lucide:hard-drive","Le cache de téléchargement de Content, et un moyen d’en jeter une entrée.",{"title":718,"path":719,"stem":720,"children":721,"icon":723,"description":724},"Référence de l’API","\u002Freference\u002Fopenapi","4.reference\u002F9.openapi\u002Findex",[722,725,729,733,739],{"title":718,"path":719,"stem":720,"icon":723,"description":724},"lucide:plug","Un document OpenAPI, publié en pages de référence avec un client qui envoie de vraies requêtes.",{"title":170,"path":726,"stem":727,"icon":201,"description":728},"\u002Freference\u002Fopenapi\u002Fsection","4.reference\u002F9.openapi\u002F1.section","Le type de section `openapi` — où vit le document, et ce qu’il devient.",{"title":344,"path":730,"stem":731,"icon":191,"description":732},"\u002Freference\u002Fopenapi\u002Fcomponents","4.reference\u002F9.openapi\u002F2.components","Les trois composants MDC dont est faite une page de référence générée.",{"title":734,"path":735,"stem":736,"icon":737,"description":738},"Le client d’essai","\u002Freference\u002Fopenapi\u002Ftry-it","4.reference\u002F9.openapi\u002F3.try-it","lucide:send","Une vraie requête, envoyée par le navigateur du lecteur lui-même.",{"title":740,"path":741,"stem":742,"icon":488,"description":743},"Échantillons de requête","\u002Freference\u002Fopenapi\u002Frequest-samples","4.reference\u002F9.openapi\u002F4.request-samples","La même requête dans douze clients, et comment ajouter le vôtre.",{"title":745,"path":746,"stem":747,"children":748,"icon":750,"description":751},"Crédits","\u002Fcredits","5.credits\u002Findex",[749],{"title":745,"path":746,"stem":747,"icon":750,"description":751},"lucide:heart","Ce sur quoi duxt est construit, et ce d’après quoi il l’a été.",{"title":753,"path":754,"stem":755,"children":756,"description":760},"Conventions","\u002Fconventions","6.conventions",[757,761,767],{"title":753,"path":754,"stem":758,"icon":759,"description":760},"6.conventions\u002Findex","lucide:ruler","Règles propres au projet — celles qu'on ne peut pas déduire du code.",{"title":762,"path":763,"stem":764,"icon":765,"description":766},"Identité visuelle","\u002Fconventions\u002Fbranding","6.conventions\u002F1.branding","lucide:shapes","La marque [d]uxt — où sert chaque ressource, pourquoi les crochets de l'icône sont redessinés, et quelles couleurs sont fixes.",{"title":768,"path":769,"stem":770,"icon":283,"description":771},"Icônes","\u002Fconventions\u002Ficons","6.conventions\u002F2.icons","Quatre jeux d'icônes, et la seule question qui décide lequel dessine une marque.",{"title":773,"path":774,"stem":775,"children":776,"description":780},"Décisions d’architecture","\u002Fadr","99.adr",[777,781,787,792,797,802,807,812,817,822],{"title":773,"path":774,"stem":778,"icon":779,"description":780},"99.adr\u002Findex","lucide:gavel","Le journal des décisions — chaque décision d’architecture consignée pour duxt.",{"title":782,"path":783,"stem":784,"icon":785,"description":786},"Construire duxt comme une couche portant un module","\u002Fadr\u002F0001-build-duxt-as-a-layer-carrying-a-module","99.adr\u002F0001-build-duxt-as-a-layer-carrying-a-module",null,"Distribuer le thème comme une couche Nuxt dont la racine est le paquet, plutôt que comme un modèle de départ.",{"title":788,"path":789,"stem":790,"icon":785,"description":791},"Générer les collections à partir d’une seule liste de sources","\u002Fadr\u002F0002-generate-the-collections-from-one-source-list","99.adr\u002F0002-generate-the-collections-from-one-source-list","Calculer les collections Content à partir d’une liste de sources compacte au chargement de la configuration, au lieu de les faire déclarer par les consommateurs.",{"title":793,"path":794,"stem":795,"icon":785,"description":796},"Décider les préfixes d’URL à la compilation","\u002Fadr\u002F0003-decide-the-url-prefixes-at-build-time","99.adr\u002F0003-decide-the-url-prefixes-at-build-time","L’apparition d’un segment de dépôt ou de version est tranchée par la liste des sources avant la première requête, jamais par requête.",{"title":798,"path":799,"stem":800,"icon":785,"description":801},"Rendre les composants Markdown avec MDC","\u002Fadr\u002F0004-render-markdown-components-with-mdc","99.adr\u002F0004-render-markdown-components-with-mdc","Utiliser la syntaxe MDC propre à Content pour les composants dans le Markdown plutôt que d’adopter MDX.",{"title":803,"path":804,"stem":805,"icon":785,"description":806},"Livrer la couche sans liens propres à un propriétaire","\u002Fadr\u002F0005-ship-the-layer-without-owner-specific-links","99.adr\u002F0005-ship-the-layer-without-owner-specific-links","Toute valeur par défaut qui nommerait un projet précis — dépôt, gestionnaire de tickets, communauté, mentions légales — est livrée vide.",{"title":808,"path":809,"stem":810,"icon":785,"description":811},"Recompiler de façon planifiée plutôt que rafraîchir à l’exécution","\u002Fadr\u002F0006-rebuild-on-a-schedule-rather-than-refresh-at-runtime","99.adr\u002F0006-rebuild-on-a-schedule-rather-than-refresh-at-runtime","Un site qui lit un autre dépôt en récupère les changements quand il compile, et aucun rafraîchissement à l’exécution n’est proposé.",{"title":813,"path":814,"stem":815,"icon":785,"description":816},"Servir les traductions comme des collections à part","\u002Fadr\u002F0007-serve-translations-as-collections-of-their-own","99.adr\u002F0007-serve-translations-as-collections-of-their-own","Ajouter une dimension de locale à une source plutôt qu’un segment de locale au chemin de contenu.",{"title":818,"path":819,"stem":820,"icon":785,"description":821},"Bâtir le thème sur des composants shadcn-vue possédés","\u002Fadr\u002F0008-build-the-theme-on-owned-shadcn-vue-components","99.adr\u002F0008-build-the-theme-on-owned-shadcn-vue-components","La couche détient le code source de ses composants d'interface plutôt que de les importer d'une bibliothèque de composants ou d'un thème de documentation tout fait.",{"title":823,"path":824,"stem":825,"icon":785,"description":826},"Prendre le socle SEO dans le bundle Nuxt SEO","\u002Fadr\u002F0009-take-the-seo-stack-from-the-nuxt-seo-bundle","99.adr\u002F0009-take-the-seo-stack-from-the-nuxt-seo-bundle","La couche installe @nuxtjs\u002Fseo et lui confie les balises de head et les données structurées qu'elle écrivait à la main, ne gardant que les règles qui dépendent des versions et des traductions.",{"title":828,"path":829,"stem":830,"icon":831,"description":832},"Documentation","\u002F","index","lucide:book-open-text","Une couche Nuxt qui transforme le dossier docs d’un dépôt en un site de documentation versionné et multi-dépôts.",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":837},0,24,false,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\"\u002F>\u003Cpath d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\"\u002F>\u003Cpath d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":839},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"m16.24 7.76l-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":841},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v16m8.001-2A2 2 0 0 0 22 17V5a2 2 0 0 0-1.999-2L16 3.002A5 5 0 0 0 12 5a5 5 0 0 0-4-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 1.999 2H8a5 5 0 0 1 4 2a5 5 0 0 1 4-2z\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":843},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Zm-6.8-2.8l2-2m-5-1l2-2m-5-1l2-2m7 11l2-2\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":845},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m14 13l-8.381 8.38a1 1 0 0 1-3.001-3l8.384-8.381M16 16l6-6m-.5.5l-8-8M8 8l6-6M8.5 7.5l8 8\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":847},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 5h.01M3 12h.01M3 19h.01M8 5h13M8 12h13M8 19h13\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":849},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0a2.34 2.34 0 0 0 3.319 1.915a2.34 2.34 0 0 1 2.33 4.033a2.34 2.34 0 0 0 0 3.831a2.34 2.34 0 0 1-2.33 4.033a2.34 2.34 0 0 0-3.319 1.915a2.34 2.34 0 0 1-4.659 0a2.34 2.34 0 0 0-3.32-1.915a2.34 2.34 0 0 1-2.33-4.033a2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"\u002F>\u003Ccircle cx=\"12\" cy=\"12\" r=\"3\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":851},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\"\u002F>\u003Ccircle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":853},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 6a9 9 0 0 0-9 9V3\"\u002F>\u003Ccircle cx=\"18\" cy=\"6\" r=\"3\"\u002F>\u003Ccircle cx=\"6\" cy=\"18\" r=\"3\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":855},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2\"\u002F>\u003Crect width=\"8\" height=\"8\" x=\"14\" y=\"2\" rx=\"1\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":857},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.536 11.293a1 1 0 0 0 0 1.414l2.376 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0zm-13.239 0a1 1 0 0 0 0 1.414l2.377 2.377a1 1 0 0 0 1.414 0l2.377-2.377a1 1 0 0 0 0-1.414L6.088 8.916a1 1 0 0 0-1.414 0zm6.619 6.619a1 1 0 0 0 0 1.415l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.415l-2.377-2.376a1 1 0 0 0-1.414 0zm0-13.238a1 1 0 0 0 0 1.414l2.377 2.376a1 1 0 0 0 1.414 0l2.377-2.376a1 1 0 0 0 0-1.414l-2.377-2.377a1 1 0 0 0-1.414 0z\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":859},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3m-6 4.2h5.7\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":861},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"6\" cy=\"19\" r=\"3\"\u002F>\u003Cpath d=\"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15\"\u002F>\u003Ccircle cx=\"18\" cy=\"5\" r=\"3\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":863},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":865},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m9 18l6-6l-6-6\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":867},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 22v-5m3-9V2m2 6a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1zM9 8V2\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":869},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"\u002F>\u003Cpath d=\"M14 2v5a1 1 0 0 0 1 1h5m-10 4.5L8 15l2 2.5m4-5l2 2.5l-2 2.5\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":871},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\"\u002F>\u003Cpath d=\"m3.3 7l8.7 5l8.7-5M12 22V12\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":873},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11zm7.318-19.539l-10.94 10.939\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":875},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m16 18l6-6l-6-6M8 6l-6 6l6 6\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":877},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":879},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m6 9l6 6l6-6\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":881},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m21 21l-4.34-4.34\"\u002F>\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":883},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":834,"top":834,"width":885,"height":886,"rotate":834,"vFlip":836,"hFlip":836,"body":887},640,480,"\u003Cpath fill=\"#000091\" d=\"M0 0h213.3v480H0z\"\u002F>\u003Cpath fill=\"#fff\" d=\"M213.3 0h213.4v480H213.3z\"\u002F>\u003Cpath fill=\"#e1000f\" d=\"M426.7 0H640v480H426.7z\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":889},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\u002F>",{"page":891,"from":1619,"asked":1620},{"id":892,"title":740,"body":893,"compare":785,"contributors":1609,"date":785,"description":743,"extension":1612,"icon":488,"lastUpdated":1613,"layout":785,"meta":1614,"navigation":836,"path":741,"rawbody":1615,"redirectFrom":785,"seo":1616,"sitemap":1617,"stem":742,"__hash__":1618},"docs_fr\u002F4.reference\u002F9.openapi\u002F4.request-samples.md",{"type":894,"value":895,"toc":1598},"minimark",[896,900,905,984,999,1003,1006,1010,1080,1119,1126,1130,1133,1267,1356,1376,1381,1403,1409,1426,1430,1436,1443,1447,1450,1457,1461,1475,1551,1558,1561,1591,1594],[897,898,899],"p",{},"À côté du client, la requête que le lecteur a construite — écrite dans le langage\ndans lequel il travaille, et réécrite à chaque frappe.",[901,902,904],"h2",{"id":903},"ce-qui-est-livré","Ce qui est livré",[906,907,908,922],"table",{},[909,910,911],"thead",{},[912,913,914,919],"tr",{},[915,916,918],"th",{"align":917},"left","Groupe",[915,920,921],{"align":917},"Clients",[923,924,925,936,954,962,972],"tbody",{},[912,926,927,934],{},[928,929,930],"td",{"align":917},[931,932,933],"code",{},"curl",[928,935,933],{"align":917},[912,937,938,941],{},[928,939,940],{"align":917},"TypeScript",[928,942,943,946,947,946,950,953],{"align":917},[931,944,945],{},"fetch",", ",[931,948,949],{},"$fetch",[931,951,952],{},"useFetch",", axios",[912,955,956,959],{},[928,957,958],{"align":917},"Python",[928,960,961],{"align":917},"requests, httpx, urllib",[912,963,964,967],{},[928,965,966],{"align":917},"Go",[928,968,969],{"align":917},[931,970,971],{},"net\u002Fhttp",[912,973,974,977],{},[928,975,976],{"align":917},"PHP",[928,978,979,980,983],{"align":917},"Guzzle, Laravel ",[931,981,982],{},"Http",", extension curl",[897,985,986,990,991,946,993,995,996,998],{},[987,988,989],"strong",{},"Sept sont actifs par défaut :"," curl, ",[931,992,945],{},[931,994,949],{},", Python requests, Go,\nGuzzle et Laravel ",[931,997,982],{},". Les cinq autres sont le second client d’un langage qui\nen a déjà un à l’écran, et un sélecteur sert à choisir, pas à lister tout ce qui\nexiste.",[901,1000,1002],{"id":1001},"deux-niveaux","Deux niveaux",[897,1004,1005],{},"Le langage est l’onglet et le client un sélecteur dedans : PHP avec trois clients\ncoûte donc un onglet. Un site qui en ajoute trois à lui pour un langage en coûte\ntoujours un. Le choix du lecteur est retenu d’une page à l’autre : qui travaille en\ncurl travaille en curl sur l’endpoint suivant aussi.",[901,1007,1009],{"id":1008},"configurer-la-liste","Configurer la liste",[1011,1012,1017],"pre",{"className":1013,"code":1014,"language":1015,"meta":1016,"style":1016},"language-ts shiki shiki-themes github-light github-dark","export default defineAppConfig({\n  duxt: {\n    requestSamples: ['curl', 'php-guzzle', 'php-laravel']\n  }\n})\n","ts","",[931,1018,1019,1039,1045,1068,1074],{"__ignoreMap":1016},[1020,1021,1024,1028,1031,1035],"span",{"class":1022,"line":1023},"line",1,[1020,1025,1027],{"class":1026},"szBVR","export",[1020,1029,1030],{"class":1026}," default",[1020,1032,1034],{"class":1033},"sScJk"," defineAppConfig",[1020,1036,1038],{"class":1037},"sVt8B","({\n",[1020,1040,1042],{"class":1022,"line":1041},2,[1020,1043,1044],{"class":1037},"  duxt: {\n",[1020,1046,1048,1051,1055,1057,1060,1062,1065],{"class":1022,"line":1047},3,[1020,1049,1050],{"class":1037},"    requestSamples: [",[1020,1052,1054],{"class":1053},"sZZnC","'curl'",[1020,1056,946],{"class":1037},[1020,1058,1059],{"class":1053},"'php-guzzle'",[1020,1061,946],{"class":1037},[1020,1063,1064],{"class":1053},"'php-laravel'",[1020,1066,1067],{"class":1037},"]\n",[1020,1069,1071],{"class":1022,"line":1070},4,[1020,1072,1073],{"class":1037},"  }\n",[1020,1075,1077],{"class":1022,"line":1076},5,[1020,1078,1079],{"class":1037},"})\n",[897,1081,1082,1083,946,1085,946,1087,1090,1091,946,1094,946,1097,946,1100,946,1103,946,1106,1090,1109,946,1112,946,1115,1118],{},"Une chaîne choisit l’un des livrés ; les ids sont ",[931,1084,933],{},[931,1086,945],{},[931,1088,1089],{},"ofetch",",\n",[931,1092,1093],{},"use-fetch",[931,1095,1096],{},"axios",[931,1098,1099],{},"python-requests",[931,1101,1102],{},"python-httpx",[931,1104,1105],{},"python-urllib",[931,1107,1108],{},"go",[931,1110,1111],{},"php-guzzle",[931,1113,1114],{},"php-laravel",[931,1116,1117],{},"php-curl",".",[897,1120,1121,1122,1125],{},"La liste ",[987,1123,1124],{},"remplace"," au lieu d’étendre, comme toute autre liste de la\nconfiguration : sinon un site documentant une API en PHP pourrait ajouter ses\nclients mais jamais retirer ceux dont il ne veut pas. L’ordre est l’ordre dans\nlequel ils apparaissent.",[901,1127,1129],{"id":1128},"votre-propre-générateur","Votre propre générateur",[897,1131,1132],{},"Un objet en ajoute un à vous — ou remplace un livré, en réutilisant son id.",[1011,1134,1136],{"className":1013,"code":1135,"language":1015,"meta":1016,"style":1016},"requestSamples: [\n  'curl',\n  {\n    id: 'ruby',\n    group: 'Ruby',\n    label: 'Net::HTTP',\n    language: 'ruby',\n    generate: (request) => `\nuri = URI('${request.url}')\nNet::HTTP.get(uri)\n`.trim()\n  }\n]\n",[931,1137,1138,1146,1153,1158,1168,1178,1189,1199,1221,1237,1243,1257,1262],{"__ignoreMap":1016},[1020,1139,1140,1143],{"class":1022,"line":1023},[1020,1141,1142],{"class":1033},"requestSamples",[1020,1144,1145],{"class":1037},": [\n",[1020,1147,1148,1151],{"class":1022,"line":1041},[1020,1149,1150],{"class":1053},"  'curl'",[1020,1152,1090],{"class":1037},[1020,1154,1155],{"class":1022,"line":1047},[1020,1156,1157],{"class":1037},"  {\n",[1020,1159,1160,1163,1166],{"class":1022,"line":1070},[1020,1161,1162],{"class":1037},"    id: ",[1020,1164,1165],{"class":1053},"'ruby'",[1020,1167,1090],{"class":1037},[1020,1169,1170,1173,1176],{"class":1022,"line":1076},[1020,1171,1172],{"class":1037},"    group: ",[1020,1174,1175],{"class":1053},"'Ruby'",[1020,1177,1090],{"class":1037},[1020,1179,1181,1184,1187],{"class":1022,"line":1180},6,[1020,1182,1183],{"class":1037},"    label: ",[1020,1185,1186],{"class":1053},"'Net::HTTP'",[1020,1188,1090],{"class":1037},[1020,1190,1192,1195,1197],{"class":1022,"line":1191},7,[1020,1193,1194],{"class":1037},"    language: ",[1020,1196,1165],{"class":1053},[1020,1198,1090],{"class":1037},[1020,1200,1202,1205,1208,1212,1215,1218],{"class":1022,"line":1201},8,[1020,1203,1204],{"class":1033},"    generate",[1020,1206,1207],{"class":1037},": (",[1020,1209,1211],{"class":1210},"s4XuR","request",[1020,1213,1214],{"class":1037},") ",[1020,1216,1217],{"class":1026},"=>",[1020,1219,1220],{"class":1053}," `\n",[1020,1222,1224,1227,1229,1231,1234],{"class":1022,"line":1223},9,[1020,1225,1226],{"class":1053},"uri = URI('${",[1020,1228,1211],{"class":1037},[1020,1230,1118],{"class":1053},[1020,1232,1233],{"class":1037},"url",[1020,1235,1236],{"class":1053},"}')\n",[1020,1238,1240],{"class":1022,"line":1239},10,[1020,1241,1242],{"class":1053},"Net::HTTP.get(uri)\n",[1020,1244,1246,1249,1251,1254],{"class":1022,"line":1245},11,[1020,1247,1248],{"class":1053},"`",[1020,1250,1118],{"class":1037},[1020,1252,1253],{"class":1033},"trim",[1020,1255,1256],{"class":1037},"()\n",[1020,1258,1260],{"class":1022,"line":1259},12,[1020,1261,1073],{"class":1037},[1020,1263,1265],{"class":1022,"line":1264},13,[1020,1266,1067],{"class":1037},[906,1268,1269,1281],{},[909,1270,1271],{},[912,1272,1273,1275,1278],{},[915,1274,339],{"align":917},[915,1276,1277],{"align":917},"Type",[915,1279,1280],{"align":917},"Remarques",[923,1282,1283,1298,1313,1327,1341],{},[912,1284,1285,1290,1295],{},[928,1286,1287],{"align":917},[931,1288,1289],{},"id",[928,1291,1292],{"align":917},[931,1293,1294],{},"string",[928,1296,1297],{"align":917},"Stable : c’est aussi la valeur retenue",[912,1299,1300,1305,1310],{},[928,1301,1302],{"align":917},[931,1303,1304],{},"group",[928,1306,1307],{"align":917},[931,1308,1309],{},"DuxtText",[928,1311,1312],{"align":917},"L’onglet",[912,1314,1315,1320,1324],{},[928,1316,1317],{"align":917},[931,1318,1319],{},"label",[928,1321,1322],{"align":917},[931,1323,1309],{},[928,1325,1326],{"align":917},"L’entrée dans l’onglet",[912,1328,1329,1334,1338],{},[928,1330,1331],{"align":917},[931,1332,1333],{},"language",[928,1335,1336],{"align":917},[931,1337,1294],{},[928,1339,1340],{"align":917},"Un id Shiki — il décide de la grammaire",[912,1342,1343,1348,1353],{},[928,1344,1345],{"align":917},[931,1346,1347],{},"generate",[928,1349,1350],{"align":917},[931,1351,1352],{},"(request) => string",[928,1354,1355],{"align":917},"Synchrone, pur, sans réseau, sans DOM",[897,1357,1358,1360,1361,1364,1365,1367,1368,1371,1372,1375],{},[931,1359,1347],{}," tourne dans le ",[987,1362,1363],{},"navigateur",", à chaque frappe, parce que\nl’échantillon doit suivre la requête en cours d’édition. ",[931,1366,1211],{}," vaut\n",[931,1369,1370],{},"{ method, url, headers, body?, responseType? }",", où ",[931,1373,1374],{},"body"," est le texte de l’éditeur et n’est pas\nparsé — un générateur qui le veut en données le parse lui-même, et décide quoi\nfaire quand ce n’est pas du JSON.",[1377,1378,1380],"h3",{"id":1379},"pourquoi-typescript-et-pas-javascript","Pourquoi TypeScript et pas JavaScript",[897,1382,1383,946,1385,1387,1388,1391,1392,1395,1396,1398,1399,1402],{},[931,1384,949],{},[931,1386,952],{}," et axios prennent la forme de la réponse en paramètre de\ntype, et ",[931,1389,1390],{},"responseType"," est ce qui le remplit : ",[931,1393,1394],{},"$fetch\u003CWidget>(…)"," est la ligne\nque quelqu’un écrit vraiment. ",[931,1397,945],{}," n’en a aucun — il renvoie un ",[931,1400,1401],{},"Response","\nquel que soit le corps — son échantillon est donc le même dans les deux langages.",[897,1404,1405,1406,1408],{},"C’est aussi pourquoi il y a un groupe et non deux. Un groupe JavaScript à côté\nporterait un ",[931,1407,945],{}," qui ne diffère jamais et trois clients qui ne diffèrent que\nlà où le document a nommé son schéma de réponse, pour deux fois les onglets.",[897,1410,1411,1413,1414,1417,1418,1421,1422,1425],{},[931,1412,1390],{}," est le nom du composant que renvoie une réponse réussie —\n",[931,1415,1416],{},"Widget",", ou ",[931,1419,1420],{},"Widget[]"," pour une liste. Il est absent là où le schéma de réponse\nest en ligne plutôt que derrière un ",[931,1423,1424],{},"$ref",", et l’échantillon n’a alors tout\nsimplement pas de paramètre de type : rien ici n’invente un nom que le document\nn’a pas donné.",[901,1427,1429],{"id":1428},"ce-que-montre-un-échantillon","Ce que montre un échantillon",[897,1431,1432,1435],{},[987,1433,1434],{},"La requête, et rien après."," La réponse est déjà à l’écran, dans le panneau sous\nl’éditeur ; un échantillon qui irait la chercher une seconde fois montrerait au\nlecteur quelque chose qu’il voit — au prix d’une branche d’erreur dans chaque\nlangage qui en a une.",[897,1437,1438,1439,1442],{},"Go est l’exception et garde ses vérifications de ",[931,1440,1441],{},"err"," : sans elles ce n’est pas du\nGo, et un extrait qui ne compile pas est pire qu’un long.",[901,1444,1446],{"id":1445},"les-grammaires-se-paient-elles-ne-se-supposent-pas","Les grammaires se paient, elles ne se supposent pas",[897,1448,1449],{},"Ces échantillons sont colorés dans le navigateur : chaque langage est donc des\noctets qu’un lecteur télécharge — contrairement à un bloc Markdown, dont la\ngrammaire est un coût de build et n’atteint jamais un navigateur.",[897,1451,1452,1453,1456],{},"Le jeu de grammaires est donc ",[987,1454,1455],{},"généré depuis la liste ci-dessus"," : un site livre\nexactement les langages que ses échantillons nomment. Les sept par défaut en\ndemandent six. Charger la table paresseuse de Shiki coûterait 3 Ko et ferait\némettre 242 fragments de grammaire à chaque build.",[901,1458,1460],{"id":1459},"échantillons-venus-du-document","Échantillons venus du document",[897,1462,1463,1466,1467,1470,1471,1474],{},[931,1464,1465],{},"x-codeSamples"," — dans l’une ou l’autre orthographe, l’ancienne ",[931,1468,1469],{},"x-code-samples","\ncomprise — est lu sur une opération et ",[987,1472,1473],{},"remplace les échantillons générés pour\nson langage",". Celui qui possède l’API connaît ses idiomes mieux qu’un générateur.",[1011,1476,1480],{"className":1477,"code":1478,"language":1479,"meta":1016,"style":1016},"language-yaml shiki shiki-themes github-light github-dark","paths:\n  \u002Fpets:\n    get:\n      x-codeSamples:\n        - lang: ruby\n          label: Net::HTTP\n          source: |\n            Net::HTTP.get(URI('https:\u002F\u002Fapi.example.com\u002Fpets'))\n","yaml",[931,1481,1482,1491,1498,1505,1512,1526,1536,1546],{"__ignoreMap":1016},[1020,1483,1484,1488],{"class":1022,"line":1023},[1020,1485,1487],{"class":1486},"s9eBZ","paths",[1020,1489,1490],{"class":1037},":\n",[1020,1492,1493,1496],{"class":1022,"line":1041},[1020,1494,1495],{"class":1486},"  \u002Fpets",[1020,1497,1490],{"class":1037},[1020,1499,1500,1503],{"class":1022,"line":1047},[1020,1501,1502],{"class":1486},"    get",[1020,1504,1490],{"class":1037},[1020,1506,1507,1510],{"class":1022,"line":1070},[1020,1508,1509],{"class":1486},"      x-codeSamples",[1020,1511,1490],{"class":1037},[1020,1513,1514,1517,1520,1523],{"class":1022,"line":1076},[1020,1515,1516],{"class":1037},"        - ",[1020,1518,1519],{"class":1486},"lang",[1020,1521,1522],{"class":1037},": ",[1020,1524,1525],{"class":1053},"ruby\n",[1020,1527,1528,1531,1533],{"class":1022,"line":1180},[1020,1529,1530],{"class":1486},"          label",[1020,1532,1522],{"class":1037},[1020,1534,1535],{"class":1053},"Net::HTTP\n",[1020,1537,1538,1541,1543],{"class":1022,"line":1191},[1020,1539,1540],{"class":1486},"          source",[1020,1542,1522],{"class":1037},[1020,1544,1545],{"class":1026},"|\n",[1020,1547,1548],{"class":1022,"line":1201},[1020,1549,1550],{"class":1053},"            Net::HTTP.get(URI('https:\u002F\u002Fapi.example.com\u002Fpets'))\n",[897,1552,1553,1554,1557],{},"Un tel échantillon est ",[987,1555,1556],{},"statique"," — il ne peut pas suivre les modifications du\nlecteur — c’est pourquoi le panneau dit qui l’a écrit et qu’il ne suit pas les\nmodifications ci-dessus. Un lecteur qui a changé le corps puis y est passé\nconclurait sinon que l’éditeur est cassé plutôt que que cet échantillon est fixe.",[897,1559,1560],{},"Son langage n’est pas visible là où le jeu de grammaires est écrit : une source\ndistante n’est pas encore clonée. Nommez-le donc :",[1011,1562,1564],{"className":1013,"code":1563,"language":1015,"meta":1016,"style":1016},"duxt: {\n  sampleLanguages: ['ruby']\n}\n",[931,1565,1566,1574,1586],{"__ignoreMap":1016},[1020,1567,1568,1571],{"class":1022,"line":1023},[1020,1569,1570],{"class":1033},"duxt",[1020,1572,1573],{"class":1037},": {\n",[1020,1575,1576,1579,1582,1584],{"class":1022,"line":1041},[1020,1577,1578],{"class":1033},"  sampleLanguages",[1020,1580,1581],{"class":1037},": [",[1020,1583,1165],{"class":1053},[1020,1585,1067],{"class":1037},[1020,1587,1588],{"class":1022,"line":1047},[1020,1589,1590],{"class":1037},"}\n",[897,1592,1593],{},"Sans cela l’échantillon est rendu en texte brut.",[1595,1596,1597],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":1016,"searchDepth":1041,"depth":1041,"links":1599},[1600,1601,1602,1603,1606,1607,1608],{"id":903,"depth":1041,"text":904},{"id":1001,"depth":1041,"text":1002},{"id":1008,"depth":1041,"text":1009},{"id":1128,"depth":1041,"text":1129,"children":1604},[1605],{"id":1379,"depth":1047,"text":1380},{"id":1428,"depth":1041,"text":1429},{"id":1445,"depth":1041,"text":1446},{"id":1459,"depth":1041,"text":1460},[1610],{"name":1611,"commits":1041},"Titus Kirch","md","2026-09-09T12:55:29+02:00",{},"---\ntitle: Échantillons de requête\ndescription: La même requête dans douze clients, et comment ajouter le vôtre.\nicon: lucide:code\n---\n\nÀ côté du client, la requête que le lecteur a construite — écrite dans le langage\ndans lequel il travaille, et réécrite à chaque frappe.\n\n## Ce qui est livré\n\n| Groupe       | Clients                                  |\n| :----------- | :--------------------------------------- |\n| `curl`       | curl                                     |\n| TypeScript   | `fetch`, `$fetch`, `useFetch`, axios     |\n| Python       | requests, httpx, urllib                  |\n| Go           | `net\u002Fhttp`                               |\n| PHP          | Guzzle, Laravel `Http`, extension curl   |\n\n**Sept sont actifs par défaut :** curl, `fetch`, `$fetch`, Python requests, Go,\nGuzzle et Laravel `Http`. Les cinq autres sont le second client d’un langage qui\nen a déjà un à l’écran, et un sélecteur sert à choisir, pas à lister tout ce qui\nexiste.\n\n## Deux niveaux\n\nLe langage est l’onglet et le client un sélecteur dedans : PHP avec trois clients\ncoûte donc un onglet. Un site qui en ajoute trois à lui pour un langage en coûte\ntoujours un. Le choix du lecteur est retenu d’une page à l’autre : qui travaille en\ncurl travaille en curl sur l’endpoint suivant aussi.\n\n## Configurer la liste\n\n```ts\nexport default defineAppConfig({\n  duxt: {\n    requestSamples: ['curl', 'php-guzzle', 'php-laravel']\n  }\n})\n```\n\nUne chaîne choisit l’un des livrés ; les ids sont `curl`, `fetch`, `ofetch`,\n`use-fetch`, `axios`, `python-requests`, `python-httpx`, `python-urllib`, `go`,\n`php-guzzle`, `php-laravel`, `php-curl`.\n\nLa liste **remplace** au lieu d’étendre, comme toute autre liste de la\nconfiguration : sinon un site documentant une API en PHP pourrait ajouter ses\nclients mais jamais retirer ceux dont il ne veut pas. L’ordre est l’ordre dans\nlequel ils apparaissent.\n\n## Votre propre générateur\n\nUn objet en ajoute un à vous — ou remplace un livré, en réutilisant son id.\n\n```ts\nrequestSamples: [\n  'curl',\n  {\n    id: 'ruby',\n    group: 'Ruby',\n    label: 'Net::HTTP',\n    language: 'ruby',\n    generate: (request) => `\nuri = URI('${request.url}')\nNet::HTTP.get(uri)\n`.trim()\n  }\n]\n```\n\n| Champ      | Type                  | Remarques                                     |\n| :--------- | :-------------------- | :-------------------------------------------- |\n| `id`       | `string`              | Stable : c’est aussi la valeur retenue        |\n| `group`    | `DuxtText`            | L’onglet                                      |\n| `label`    | `DuxtText`            | L’entrée dans l’onglet                        |\n| `language` | `string`              | Un id Shiki — il décide de la grammaire       |\n| `generate` | `(request) => string` | Synchrone, pur, sans réseau, sans DOM         |\n\n`generate` tourne dans le **navigateur**, à chaque frappe, parce que\nl’échantillon doit suivre la requête en cours d’édition. `request` vaut\n`{ method, url, headers, body?, responseType? }`, où `body` est le texte de l’éditeur et n’est pas\nparsé — un générateur qui le veut en données le parse lui-même, et décide quoi\nfaire quand ce n’est pas du JSON.\n\n\n### Pourquoi TypeScript et pas JavaScript\n\n`$fetch`, `useFetch` et axios prennent la forme de la réponse en paramètre de\ntype, et `responseType` est ce qui le remplit : `$fetch\u003CWidget>(…)` est la ligne\nque quelqu’un écrit vraiment. `fetch` n’en a aucun — il renvoie un `Response`\nquel que soit le corps — son échantillon est donc le même dans les deux langages.\n\nC’est aussi pourquoi il y a un groupe et non deux. Un groupe JavaScript à côté\nporterait un `fetch` qui ne diffère jamais et trois clients qui ne diffèrent que\nlà où le document a nommé son schéma de réponse, pour deux fois les onglets.\n\n`responseType` est le nom du composant que renvoie une réponse réussie —\n`Widget`, ou `Widget[]` pour une liste. Il est absent là où le schéma de réponse\nest en ligne plutôt que derrière un `$ref`, et l’échantillon n’a alors tout\nsimplement pas de paramètre de type : rien ici n’invente un nom que le document\nn’a pas donné.\n\n## Ce que montre un échantillon\n\n**La requête, et rien après.** La réponse est déjà à l’écran, dans le panneau sous\nl’éditeur ; un échantillon qui irait la chercher une seconde fois montrerait au\nlecteur quelque chose qu’il voit — au prix d’une branche d’erreur dans chaque\nlangage qui en a une.\n\nGo est l’exception et garde ses vérifications de `err` : sans elles ce n’est pas du\nGo, et un extrait qui ne compile pas est pire qu’un long.\n\n## Les grammaires se paient, elles ne se supposent pas\n\nCes échantillons sont colorés dans le navigateur : chaque langage est donc des\noctets qu’un lecteur télécharge — contrairement à un bloc Markdown, dont la\ngrammaire est un coût de build et n’atteint jamais un navigateur.\n\nLe jeu de grammaires est donc **généré depuis la liste ci-dessus** : un site livre\nexactement les langages que ses échantillons nomment. Les sept par défaut en\ndemandent six. Charger la table paresseuse de Shiki coûterait 3 Ko et ferait\némettre 242 fragments de grammaire à chaque build.\n\n## Échantillons venus du document\n\n`x-codeSamples` — dans l’une ou l’autre orthographe, l’ancienne `x-code-samples`\ncomprise — est lu sur une opération et **remplace les échantillons générés pour\nson langage**. Celui qui possède l’API connaît ses idiomes mieux qu’un générateur.\n\n```yaml\npaths:\n  \u002Fpets:\n    get:\n      x-codeSamples:\n        - lang: ruby\n          label: Net::HTTP\n          source: |\n            Net::HTTP.get(URI('https:\u002F\u002Fapi.example.com\u002Fpets'))\n```\n\nUn tel échantillon est **statique** — il ne peut pas suivre les modifications du\nlecteur — c’est pourquoi le panneau dit qui l’a écrit et qu’il ne suit pas les\nmodifications ci-dessus. Un lecteur qui a changé le corps puis y est passé\nconclurait sinon que l’éditeur est cassé plutôt que que cet échantillon est fixe.\n\nSon langage n’est pas visible là où le jeu de grammaires est écrit : une source\ndistante n’est pas encore clonée. Nommez-le donc :\n\n```ts\nduxt: {\n  sampleLanguages: ['ruby']\n}\n```\n\nSans cela l’échantillon est rendu en texte brut.\n",{"title":740,"description":743},{"loc":741},"fopwUXNXRbH0HnX_4idAicIrM4EDuf_IDF93Y_hf3OY","fr","fr-FR",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1622},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1624},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 5.88L14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88M7 10v12\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1626},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 18.12L10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88M17 14V2\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1628},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.12 2.12 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.12 2.12 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.12 2.12 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.12 2.12 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.12 2.12 0 0 0 1.597-1.16z\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1630},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 8v4m0 4h.01\"\u002F>\u003C\u002Fg>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1632},"\u003Cpath fill=\"currentColor\" d=\"M20.317 4.37a19.8 19.8 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.3 18.3 0 0 0-5.487 0a13 13 0 0 0-.617-1.25a.08.08 0 0 0-.079-.037A19.7 19.7 0 0 0 3.677 4.37a.1.1 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.08.08 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.08.08 0 0 0 .084-.028a14 14 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13 13 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10 10 0 0 0 .372-.292a.07.07 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.07.07 0 0 1 .078.01q.181.149.373.292a.077.077 0 0 1-.006.127a12.3 12.3 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.08.08 0 0 0 .084.028a19.8 19.8 0 0 0 6.002-3.03a.08.08 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.06.06 0 0 0-.031-.03M8.02 15.33c-1.182 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418m7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1634},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v16m4-8h2m-2-4h2m2.001 10A2 2 0 0 0 22 17V5a2 2 0 0 0-1.999-2L16 3.002A5 5 0 0 0 12 5a5 5 0 0 0-4-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 1.999 2H8a5 5 0 0 1 4 2a5 5 0 0 1 4-2zM6 13h2M6 9h2\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1636},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1638},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497zM15 5l4 4\"\u002F>",{"left":834,"top":834,"width":835,"height":835,"rotate":834,"vFlip":836,"hFlip":836,"body":1640},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 19l-7-7l7-7m7 7H5\"\u002F>",1789035383452]