[{"data":1,"prerenderedAt":1269},["ShallowReactive",2],{"docs-nav:fr":3,"docs:\u002Ffr\u002Fdocs\u002Fclient\u002Fforms":137},[4],{"title":5,"path":6,"stem":7,"children":8,"page":44},"Fr","\u002Ffr","fr",[9],{"title":10,"path":11,"stem":12,"children":13},"Qu'est-ce que Fougere","\u002Ffr\u002Fdocs","fr\u002Fdocs\u002Findex",[14,15,19,23,27,45,66,95,116],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},"Démarrer","\u002Ffr\u002Fdocs\u002Fgetting-started","fr\u002Fdocs\u002F01.getting-started",{"title":20,"path":21,"stem":22},"App Nuxt existante","\u002Ffr\u002Fdocs\u002Fexisting-app","fr\u002Fdocs\u002F02.existing-app",{"title":24,"path":25,"stem":26},"La CLI","\u002Ffr\u002Fdocs\u002Fcli","fr\u002Fdocs\u002F03.cli",{"title":28,"path":29,"stem":30,"children":31,"page":44},"Concepts","\u002Ffr\u002Fdocs\u002Fconcepts","fr\u002Fdocs\u002F2.concepts",[32,36,40],{"title":33,"path":34,"stem":35},"Philosophie","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fphilosophy","fr\u002Fdocs\u002F2.concepts\u002F1.philosophy",{"title":37,"path":38,"stem":39},"La Frond","\u002Ffr\u002Fdocs\u002Fconcepts\u002Ffrond","fr\u002Fdocs\u002F2.concepts\u002F2.frond",{"title":41,"path":42,"stem":43},"Le chemin le plus court","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fshortest-path","fr\u002Fdocs\u002F2.concepts\u002F3.shortest-path",false,{"title":46,"path":47,"stem":48,"children":49,"page":44},"Schéma","\u002Ffr\u002Fdocs\u002Fschema","fr\u002Fdocs\u002F3.schema",[50,54,58,62],{"title":51,"path":52,"stem":53},"Entités","\u002Ffr\u002Fdocs\u002Fschema\u002Fentities","fr\u002Fdocs\u002F3.schema\u002F1.entities",{"title":55,"path":56,"stem":57},"Vues","\u002Ffr\u002Fdocs\u002Fschema\u002Fviews","fr\u002Fdocs\u002F3.schema\u002F2.views",{"title":59,"path":60,"stem":61},"La carte d'identité","\u002Ffr\u002Fdocs\u002Fschema\u002Fcard","fr\u002Fdocs\u002F3.schema\u002F3.card",{"title":63,"path":64,"stem":65},"Standard Schema","\u002Ffr\u002Fdocs\u002Fschema\u002Fstandard-schema","fr\u002Fdocs\u002F3.schema\u002F4.standard-schema",{"title":67,"path":68,"stem":69,"children":70,"page":44},"Métier","\u002Ffr\u002Fdocs\u002Fbusiness","fr\u002Fdocs\u002F4.business",[71,75,79,83,87,91],{"title":72,"path":73,"stem":74},"Handlers","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fhandlers","fr\u002Fdocs\u002F4.business\u002F1.handlers",{"title":76,"path":77,"stem":78},"Presenters","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fpresenters","fr\u002Fdocs\u002F4.business\u002F2.presenters",{"title":80,"path":81,"stem":82},"Collectors","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fcollectors","fr\u002Fdocs\u002F4.business\u002F3.collectors",{"title":84,"path":85,"stem":86},"Erreurs","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ferrors","fr\u002Fdocs\u002F4.business\u002F4.errors",{"title":88,"path":89,"stem":90},"Seeds","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fseeds","fr\u002Fdocs\u002F4.business\u002F5.seeds",{"title":92,"path":93,"stem":94},"Les faits","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ffacts","fr\u002Fdocs\u002F4.business\u002F6.facts",{"title":96,"path":97,"stem":98,"children":99,"page":44},"Client","\u002Ffr\u002Fdocs\u002Fclient","fr\u002Fdocs\u002F5.client",[100,104,108,112],{"title":101,"path":102,"stem":103},"Queries & commands","\u002Ffr\u002Fdocs\u002Fclient\u002Fqueries-commands","fr\u002Fdocs\u002F5.client\u002F1.queries-commands",{"title":105,"path":106,"stem":107},"Formulaires","\u002Ffr\u002Fdocs\u002Fclient\u002Fforms","fr\u002Fdocs\u002F5.client\u002F2.forms",{"title":109,"path":110,"stem":111},"Session","\u002Ffr\u002Fdocs\u002Fclient\u002Fsession","fr\u002Fdocs\u002F5.client\u002F3.session",{"title":113,"path":114,"stem":115},"invoke","\u002Ffr\u002Fdocs\u002Fclient\u002Finvoke","fr\u002Fdocs\u002F5.client\u002F4.invoke",{"title":117,"path":118,"stem":119,"children":120,"page":44},"Infrastructure","\u002Ffr\u002Fdocs\u002Finfra","fr\u002Fdocs\u002F6.infra",[121,125,129,133],{"title":122,"path":123,"stem":124},"Le gradient","\u002Ffr\u002Fdocs\u002Finfra\u002Fgradient","fr\u002Fdocs\u002F6.infra\u002F1.gradient",{"title":126,"path":127,"stem":128},"Surfaces — REST & GraphQL","\u002Ffr\u002Fdocs\u002Finfra\u002Fsurfaces","fr\u002Fdocs\u002F6.infra\u002F2.surfaces",{"title":130,"path":131,"stem":132},"Déploiement","\u002Ffr\u002Fdocs\u002Finfra\u002Fdeployment","fr\u002Fdocs\u002F6.infra\u002F3.deployment",{"title":134,"path":135,"stem":136},"Hôtes","\u002Ffr\u002Fdocs\u002Finfra\u002Fhosts","fr\u002Fdocs\u002F6.infra\u002F4.hosts",{"id":138,"title":105,"body":139,"description":1264,"extension":1265,"meta":1266,"navigation":230,"path":106,"seo":1267,"stem":107,"__hash__":1268},"docs_fr\u002Ffr\u002Fdocs\u002F5.client\u002F2.forms.md",{"type":140,"value":141,"toc":1258},"minimark",[142,146,154,622,627,684,687,838,841,978,982,1028,1035,1038,1123,1134,1138,1200,1204,1247,1254],[143,144,105],"h1",{"id":145},"formulaires",[147,148,149,153],"p",{},[150,151,152],"code",{},"useFormFor"," gère l'état, la validation, la soumission et les erreurs par champ. Il ne rend\naucun composant : la page choisit les champs et leur mise en page.",[155,156,161],"pre",{"className":157,"code":158,"language":159,"meta":160,"style":160},"language-vue shiki shiki-themes material-theme-lighter github-light github-dark","\u003Cscript setup lang=\"ts\">\nimport Post from '@frond\u002Fblog\u002Fentities\u002FPost';\n\nconst { fieldsByName, values, errors, submit, loading, error } = useFormFor\u003C{ id: string }>(Post);\n\nasync function onSubmit() {\n  const created = await submit();          \u002F\u002F null en cas d'erreur de validation\n  if (created) navigateTo(`\u002Fblog\u002Fedit\u002F${created.id}`);\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cform @submit.prevent=\"onSubmit\">\n    \u003CUFormField label=\"Titre\" :error=\"errors.title\">\n      \u003CUInput v-model=\"values.title\" v-bind=\"fieldsByName.title?.attrs\" \u002F>\n    \u003C\u002FUFormField>\n    \u003Cp v-if=\"error\">{{ error.message }}\u003C\u002Fp>          \u003C!-- échec non-validation -->\n    \u003CUButton type=\"submit\" :loading=\"loading\" \u002F>\n  \u003C\u002Fform>\n\u003C\u002Ftemplate>\n","vue","",[150,162,163,199,225,232,305,310,328,354,400,406,416,421,431,454,489,525,535,569,603,613],{"__ignoreMap":160},[164,165,168,172,176,180,183,186,190,194,196],"span",{"class":166,"line":167},"line",1,[164,169,171],{"class":170},"sP7_E","\u003C",[164,173,175],{"class":174},"sQzsp","script",[164,177,179],{"class":178},"s9AJx"," setup",[164,181,182],{"class":178}," lang",[164,184,185],{"class":170},"=",[164,187,189],{"class":188},"sjJ54","\"",[164,191,193],{"class":192},"s_sjI","ts",[164,195,189],{"class":188},[164,197,198],{"class":170},">\n",[164,200,202,206,210,213,216,219,222],{"class":166,"line":201},2,[164,203,205],{"class":204},"sVHd0","import",[164,207,209],{"class":208},"su5hD"," Post ",[164,211,212],{"class":204},"from",[164,214,215],{"class":188}," '",[164,217,218],{"class":192},"@frond\u002Fblog\u002Fentities\u002FPost",[164,220,221],{"class":188},"'",[164,223,224],{"class":170},";\n",[164,226,228],{"class":166,"line":227},3,[164,229,231],{"emptyLinePlaceholder":230},true,"\n",[164,233,235,239,242,246,249,252,254,257,259,262,264,267,269,272,275,279,283,286,290,293,297,300,303],{"class":166,"line":234},4,[164,236,238],{"class":237},"sbsja","const",[164,240,241],{"class":170}," {",[164,243,245],{"class":244},"s_hVV"," fieldsByName",[164,247,248],{"class":170},",",[164,250,251],{"class":244}," values",[164,253,248],{"class":170},[164,255,256],{"class":244}," errors",[164,258,248],{"class":170},[164,260,261],{"class":244}," submit",[164,263,248],{"class":170},[164,265,266],{"class":244}," loading",[164,268,248],{"class":170},[164,270,271],{"class":244}," error",[164,273,274],{"class":170}," }",[164,276,278],{"class":277},"smGrS"," =",[164,280,282],{"class":281},"sGLFI"," useFormFor",[164,284,285],{"class":170},"\u003C{",[164,287,289],{"class":288},"sucvu"," id",[164,291,292],{"class":277},":",[164,294,296],{"class":295},"sZMiF"," string",[164,298,299],{"class":170}," }>",[164,301,302],{"class":208},"(Post)",[164,304,224],{"class":170},[164,306,308],{"class":166,"line":307},5,[164,309,231],{"emptyLinePlaceholder":230},[164,311,313,316,319,322,325],{"class":166,"line":312},6,[164,314,315],{"class":237},"async",[164,317,318],{"class":237}," function",[164,320,321],{"class":281}," onSubmit",[164,323,324],{"class":170},"()",[164,326,327],{"class":170}," {\n",[164,329,331,334,337,339,342,344,347,350],{"class":166,"line":330},7,[164,332,333],{"class":237},"  const",[164,335,336],{"class":244}," created",[164,338,278],{"class":277},[164,340,341],{"class":204}," await",[164,343,261],{"class":281},[164,345,324],{"class":346},"skxfh",[164,348,349],{"class":170},";",[164,351,353],{"class":352},"sutJx","          \u002F\u002F null en cas d'erreur de validation\n",[164,355,357,360,363,366,369,372,375,378,381,384,386,389,392,395,398],{"class":166,"line":356},8,[164,358,359],{"class":204},"  if",[164,361,362],{"class":346}," (",[164,364,365],{"class":208},"created",[164,367,368],{"class":346},") ",[164,370,371],{"class":281},"navigateTo",[164,373,374],{"class":346},"(",[164,376,377],{"class":188},"`",[164,379,380],{"class":192},"\u002Fblog\u002Fedit\u002F",[164,382,383],{"class":188},"${",[164,385,365],{"class":208},[164,387,388],{"class":188},".",[164,390,391],{"class":208},"id",[164,393,394],{"class":188},"}`",[164,396,397],{"class":346},")",[164,399,224],{"class":170},[164,401,403],{"class":166,"line":402},9,[164,404,405],{"class":170},"}\n",[164,407,409,412,414],{"class":166,"line":408},10,[164,410,411],{"class":170},"\u003C\u002F",[164,413,175],{"class":174},[164,415,198],{"class":170},[164,417,419],{"class":166,"line":418},11,[164,420,231],{"emptyLinePlaceholder":230},[164,422,424,426,429],{"class":166,"line":423},12,[164,425,171],{"class":170},[164,427,428],{"class":174},"template",[164,430,198],{"class":170},[164,432,434,437,440,443,445,447,450,452],{"class":166,"line":433},13,[164,435,436],{"class":170},"  \u003C",[164,438,439],{"class":174},"form",[164,441,442],{"class":178}," @submit.prevent",[164,444,185],{"class":170},[164,446,189],{"class":188},[164,448,449],{"class":192},"onSubmit",[164,451,189],{"class":188},[164,453,198],{"class":170},[164,455,457,460,463,466,468,470,473,475,478,480,482,485,487],{"class":166,"line":456},14,[164,458,459],{"class":170},"    \u003C",[164,461,462],{"class":174},"UFormField",[164,464,465],{"class":178}," label",[164,467,185],{"class":170},[164,469,189],{"class":188},[164,471,472],{"class":192},"Titre",[164,474,189],{"class":188},[164,476,477],{"class":178}," :error",[164,479,185],{"class":170},[164,481,189],{"class":188},[164,483,484],{"class":192},"errors.title",[164,486,189],{"class":188},[164,488,198],{"class":170},[164,490,492,495,498,501,503,505,508,510,513,515,517,520,522],{"class":166,"line":491},15,[164,493,494],{"class":170},"      \u003C",[164,496,497],{"class":174},"UInput",[164,499,500],{"class":178}," v-model",[164,502,185],{"class":170},[164,504,189],{"class":188},[164,506,507],{"class":192},"values.title",[164,509,189],{"class":188},[164,511,512],{"class":178}," v-bind",[164,514,185],{"class":170},[164,516,189],{"class":188},[164,518,519],{"class":192},"fieldsByName.title?.attrs",[164,521,189],{"class":188},[164,523,524],{"class":170}," \u002F>\n",[164,526,528,531,533],{"class":166,"line":527},16,[164,529,530],{"class":170},"    \u003C\u002F",[164,532,462],{"class":174},[164,534,198],{"class":170},[164,536,538,540,542,545,547,549,552,554,557,560,562,564,566],{"class":166,"line":537},17,[164,539,459],{"class":170},[164,541,147],{"class":174},[164,543,544],{"class":178}," v-if",[164,546,185],{"class":170},[164,548,189],{"class":188},[164,550,551],{"class":192},"error",[164,553,189],{"class":188},[164,555,556],{"class":170},">",[164,558,559],{"class":208},"{{ error.message }}",[164,561,411],{"class":170},[164,563,147],{"class":174},[164,565,556],{"class":170},[164,567,568],{"class":352},"          \u003C!-- échec non-validation -->\n",[164,570,572,574,577,580,582,584,587,589,592,594,596,599,601],{"class":166,"line":571},18,[164,573,459],{"class":170},[164,575,576],{"class":174},"UButton",[164,578,579],{"class":178}," type",[164,581,185],{"class":170},[164,583,189],{"class":188},[164,585,586],{"class":192},"submit",[164,588,189],{"class":188},[164,590,591],{"class":178}," :loading",[164,593,185],{"class":170},[164,595,189],{"class":188},[164,597,598],{"class":192},"loading",[164,600,189],{"class":188},[164,602,524],{"class":170},[164,604,606,609,611],{"class":166,"line":605},19,[164,607,608],{"class":170},"  \u003C\u002F",[164,610,439],{"class":174},[164,612,198],{"class":170},[164,614,616,618,620],{"class":166,"line":615},20,[164,617,411],{"class":170},[164,619,428],{"class":174},[164,621,198],{"class":170},[623,624,626],"h2",{"id":625},"signature","Signature",[155,628,631],{"className":629,"code":630,"language":193,"meta":160,"style":160},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","useFormFor\u003CT>(EntityOuVue, options?)\n\u002F\u002F options: {\n\u002F\u002F   op?: string                        la command du submit — défaut 'create'\n\u002F\u002F   initial?: Record\u003Cstring, unknown>  mode édition : l'entité chargée\n\u002F\u002F   params?: Record\u003Cstring, string>    désignation de la cible — mode édition : { id }\n\u002F\u002F }\n",[150,632,633,659,664,669,674,679],{"__ignoreMap":160},[164,634,635,637,639,643,645,648,650,653,656],{"class":166,"line":167},[164,636,152],{"class":281},[164,638,171],{"class":170},[164,640,642],{"class":641},"sbgvK","T",[164,644,556],{"class":170},[164,646,647],{"class":208},"(EntityOuVue",[164,649,248],{"class":170},[164,651,652],{"class":208}," options",[164,654,655],{"class":277},"?",[164,657,658],{"class":208},")\n",[164,660,661],{"class":166,"line":201},[164,662,663],{"class":352},"\u002F\u002F options: {\n",[164,665,666],{"class":166,"line":227},[164,667,668],{"class":352},"\u002F\u002F   op?: string                        la command du submit — défaut 'create'\n",[164,670,671],{"class":166,"line":234},[164,672,673],{"class":352},"\u002F\u002F   initial?: Record\u003Cstring, unknown>  mode édition : l'entité chargée\n",[164,675,676],{"class":166,"line":307},[164,677,678],{"class":352},"\u002F\u002F   params?: Record\u003Cstring, string>    désignation de la cible — mode édition : { id }\n",[164,680,681],{"class":166,"line":312},[164,682,683],{"class":352},"\u002F\u002F }\n",[147,685,686],{},"Retour :",[688,689,690,706],"table",{},[691,692,693],"thead",{},[694,695,696,700,703],"tr",{},[697,698,699],"th",{},"Clé",[697,701,702],{},"Type",[697,704,705],{},"Notes",[707,708,709,729,744,763,777,791,804,823],"tbody",{},[694,710,711,717,722],{},[712,713,714],"td",{},[150,715,716],{},"fields",[712,718,719],{},[150,720,721],{},"FormField[]",[712,723,724,725,728],{},"dérivés des axes io — les champs ",[150,726,727],{},"readOnly"," sont exclus",[694,730,731,736,741],{},[712,732,733],{},[150,734,735],{},"fieldsByName",[712,737,738],{},[150,739,740],{},"Record\u003Cstring, FormField>",[712,742,743],{},"les mêmes champs, pour un formulaire posé à la main",[694,745,746,751,757],{},[712,747,748],{},[150,749,750],{},"values",[712,752,753,754],{},"record ",[150,755,756],{},"reactive",[712,758,759,762],{},[150,760,761],{},"initial"," en édition, le défaut déclaré du champ en création",[694,764,765,770,774],{},[712,766,767],{},[150,768,769],{},"errors",[712,771,753,772],{},[150,773,756],{},[712,775,776],{},"chemin de champ → message",[694,778,779,783,788],{},[712,780,781],{},[150,782,586],{},[712,784,785],{},[150,786,787],{},"() => Promise\u003CT | null>",[712,789,790],{},"voir le cycle",[694,792,793,797,802],{},[712,794,795],{},[150,796,598],{},[712,798,799],{},[150,800,801],{},"Ref\u003Cboolean>",[712,803],{},[694,805,806,810,815],{},[712,807,808],{},[150,809,551],{},[712,811,812],{},[150,813,814],{},"Ref\u003CFougereError | null>",[712,816,817,818,822],{},"échec ",[819,820,821],"strong",{},"non-validation"," (conflit, host mort)",[694,824,825,830,835],{},[712,826,827],{},[150,828,829],{},"valid",[712,831,832],{},[150,833,834],{},"ComputedRef\u003Cboolean>",[712,836,837],{},"aucune erreur de champ courante",[147,839,840],{},"Le mode édition se compose avec une query :",[155,842,844],{"className":629,"code":843,"language":193,"meta":160,"style":160},"const { data: post } = await useQuery\u003CPost>(Post, 'findById', { params: { id } });\nconst form = useFormFor(Post, { op: 'update', params: { id }, initial: post.value ?? undefined });\n",[150,845,846,911],{"__ignoreMap":160},[164,847,848,850,852,855,857,860,862,864,866,869,871,874,876,879,881,883,886,888,890,892,895,897,899,902,905,907,909],{"class":166,"line":167},[164,849,238],{"class":237},[164,851,241],{"class":170},[164,853,854],{"class":288}," data",[164,856,292],{"class":170},[164,858,859],{"class":244}," post",[164,861,274],{"class":170},[164,863,278],{"class":277},[164,865,341],{"class":204},[164,867,868],{"class":281}," useQuery",[164,870,171],{"class":170},[164,872,873],{"class":641},"Post",[164,875,556],{"class":170},[164,877,878],{"class":208},"(Post",[164,880,248],{"class":170},[164,882,215],{"class":188},[164,884,885],{"class":192},"findById",[164,887,221],{"class":188},[164,889,248],{"class":170},[164,891,241],{"class":170},[164,893,894],{"class":346}," params",[164,896,292],{"class":170},[164,898,241],{"class":170},[164,900,901],{"class":208}," id ",[164,903,904],{"class":170},"}",[164,906,274],{"class":170},[164,908,397],{"class":208},[164,910,224],{"class":170},[164,912,913,915,918,920,922,924,926,928,931,933,935,938,940,942,944,946,948,950,953,956,958,960,962,965,968,972,974,976],{"class":166,"line":201},[164,914,238],{"class":237},[164,916,917],{"class":244}," form",[164,919,278],{"class":277},[164,921,282],{"class":281},[164,923,878],{"class":208},[164,925,248],{"class":170},[164,927,241],{"class":170},[164,929,930],{"class":346}," op",[164,932,292],{"class":170},[164,934,215],{"class":188},[164,936,937],{"class":192},"update",[164,939,221],{"class":188},[164,941,248],{"class":170},[164,943,894],{"class":346},[164,945,292],{"class":170},[164,947,241],{"class":170},[164,949,901],{"class":208},[164,951,952],{"class":170},"},",[164,954,955],{"class":346}," initial",[164,957,292],{"class":170},[164,959,859],{"class":208},[164,961,388],{"class":170},[164,963,964],{"class":208},"value ",[164,966,967],{"class":277},"??",[164,969,971],{"class":970},"s39Yj"," undefined",[164,973,274],{"class":170},[164,975,397],{"class":208},[164,977,224],{"class":170},[623,979,981],{"id":980},"le-navigateur-juge-en-premier-et-gratuitement","Le navigateur juge en premier, et gratuitement",[147,983,984,987,988,991,992,991,995,991,998,991,1001,991,1004,991,1007,1010,1011,1014,1015,1017,1018,991,1020,1023,1024,1027],{},[150,985,986],{},"field.attrs"," est la part de la déclaration qu'un navigateur applique déjà, sous les noms\nqu'il connaît : ",[150,989,990],{},"type",", ",[150,993,994],{},"required",[150,996,997],{},"minlength",[150,999,1000],{},"maxlength",[150,1002,1003],{},"min",[150,1005,1006],{},"max",[150,1008,1009],{},"pattern",".\nRépandez-la et la page n'énonce aucune règle à elle — ",[150,1012,1013],{},"text({ min: 1, max: 200 })"," devient\n",[150,1016,997],{},"\u002F",[150,1019,1000],{},[150,1021,1022],{},"email()"," devient ",[150,1025,1026],{},"type=\"email\"",", vérifié en direct pendant la\nsaisie, sans une ligne de JavaScript.",[147,1029,1030,1031,1034],{},"C'est une projection, pas une seconde règle : le juge lit la même forme. Un formulaire qui\nignore ",[150,1032,1033],{},"attrs"," obtient le même verdict, seulement plus tard — et un lecteur d'écran ne\nl'obtient jamais.",[147,1036,1037],{},"Trois attributs sont délibérément absents, chacun là où HTML dirait autre chose que la\ndéclaration :",[688,1039,1040,1053],{},[691,1041,1042],{},[694,1043,1044,1047,1050],{},[697,1045,1046],{},"Champ",[697,1048,1049],{},"Absent",[697,1051,1052],{},"Parce que",[707,1054,1055,1077,1099],{},[694,1056,1057,1062,1066],{},[712,1058,1059],{},[150,1060,1061],{},"date()",[712,1063,1064],{},[150,1065,990],{},[712,1067,1068,1069,1072,1073,1076],{},"ni ",[150,1070,1071],{},"date"," ni ",[150,1074,1075],{},"datetime-local"," ne produit la chaîne RFC 3339 qu'attend le juge",[694,1078,1079,1084,1088],{},[712,1080,1081],{},[150,1082,1083],{},"bool()",[712,1085,1086],{},[150,1087,994],{},[712,1089,1090,1091,1094,1095,1098],{},"sur une case à cocher, cela veut dire « doit être ",[819,1092,1093],{},"cochée"," » ; la forme dit que la valeur doit être fournie, et ",[150,1096,1097],{},"false"," en est une",[694,1100,1101,1108,1112],{},[712,1102,1103,991,1106],{},[150,1104,1105],{},"oneOf(…)",[150,1107,1083],{},[712,1109,1110],{},[150,1111,990],{},[712,1113,1114,1115,1118,1119,1122],{},"ce ne sont pas des ",[150,1116,1117],{},"\u003Cinput>"," — ",[150,1120,1121],{},"field.control"," dit quel widget, la page le rend",[147,1124,1125,1126,1129,1130,1133],{},"Ce que HTML ne sait pas dire du tout — une règle inter-champs, ",[150,1127,1128],{},"format: 'uuid'",", un\n",[150,1131,1132],{},"oneOf"," hors d'un select — est attrapé par la passe ci-dessous.",[623,1135,1137],{"id":1136},"le-cycle-du-submit","Le cycle du submit",[1139,1140,1141,1161,1171,1188],"ol",{},[1142,1143,1144,1118,1147,1150,1151,1153,1154,1157,1158,388],"li",{},[819,1145,1146],{},"Validation locale",[150,1148,1149],{},"Entity.validate(payload)"," s'exécute dans le navigateur avec\nles mêmes règles que le handler. Les erreurs sont ajoutées à ",[150,1152,769],{}," sans appel réseau\net ",[150,1155,1156],{},"submit()"," renvoie ",[150,1159,1160],{},"null",[1142,1162,1163,1166,1167,1170],{},[819,1164,1165],{},"Command"," — le payload est envoyé par ",[150,1168,1169],{},"useCommand(Entity, op)",". En cas de succès, les\nqueries actives de l'entité sont revalidées.",[1142,1172,1173,1176,1177,1180,1181,1183,1184,1187],{},[819,1174,1175],{},"Validation serveur"," — un ",[150,1178,1179],{},"VALIDATION_FAILED"," est ajouté à ",[150,1182,769],{}," selon le ",[150,1185,1186],{},"path",",\ndans le même format que les erreurs locales.",[1142,1189,1190,1191,991,1194,1197,1198,388],{},"Les autres erreurs (",[150,1192,1193],{},"CONFLICT",[150,1195,1196],{},"SERVICE_UNAVAILABLE","…) sont placées dans ",[150,1199,551],{},[623,1201,1203],{"id":1202},"ce-que-le-formulaire-ne-fera-pas","Ce que le formulaire ne fera pas",[1205,1206,1207,1213,1221,1227],"ul",{},[1142,1208,1209,1212],{},[819,1210,1211],{},"Rendre des composants"," — les widgets et la mise en page restent dans l'application.",[1142,1214,1215,1220],{},[819,1216,1217,1218],{},"Montrer les champs ",[150,1219,727],{}," — ces champs sont exclus par la\nprojection io ; un statut s'affiche en badge depuis la donnée chargée, il ne s'édite pas.",[1142,1222,1223,1226],{},[819,1224,1225],{},"Définir les labels"," — ils restent dans votre i18n ; les métadonnées donnent des clés\nstables composées de l'entité et du nom du champ.",[1142,1228,1229,1232,1233,1235,1236,1238,1239,1242,1243,1246],{},[819,1230,1231],{},"Choisir une valeur supplémentaire."," ",[150,1234,750],{}," utilise ",[150,1237,761],{}," en édition et le défaut\ndéclaré du champ en création (",[150,1240,1241],{},"oneOf('public','private',{ default:'public' })"," ouvre le\nselect sur ",[150,1244,1245],{},"public","). Tout ce qui va au-delà de ces deux-là — un placeholder, une\nsuggestion calculée — est défini par la page.",[147,1248,1249,1250,1253],{},"Suite : ",[1251,1252,109],"a",{"href":110}," — partager l'identité avec les pages et les handlers.",[1255,1256,1257],"style",{},"html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .s9AJx, html code.shiki .s9AJx{--shiki-light:#9C3EDA;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sucvu, html code.shiki .sucvu{--shiki-light:#E53935;--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":160,"searchDepth":201,"depth":201,"links":1259},[1260,1261,1262,1263],{"id":625,"depth":201,"text":626},{"id":980,"depth":201,"text":981},{"id":1136,"depth":201,"text":1137},{"id":1202,"depth":201,"text":1203},"useFormFor — état, validation, soumission et erreurs par champ.","md",{},{"title":105,"description":1264},"RuiZ5ABSC_k6RL7iEptp0JxcTz8Fje31QfgmkY6ileE",1786637819936]