[{"data":1,"prerenderedAt":929},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002File-d-application":3,"section:\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002File-d-application":928},{"id":4,"title":5,"body":6,"description":912,"extension":913,"meta":914,"navigation":187,"path":924,"seo":925,"stem":926,"__hash__":927},"docs\u002F2.next\u002F3.dodock\u002F10.developpeurs\u002File-d-application.md","Îlot d'application",{"type":7,"value":8,"toc":905},"minimark",[9,13,22,26,97,106,111,258,291,295,486,501,512,523,526,530,533,676,683,686,770,777,781,784,810,824,828,850,891,901],[10,11,5],"h1",{"id":12},"îlot-dapplication",[14,15,16,17,21],"p",{},"Un îlot (island) est une interface Vue qu'une application construit et qu'un hôte monte dans un ",[18,19,20],"em",{},"shadow root",". L'hôte est le bureau (desk) ou une autre application frappe-ui. L'îlot apporte sa propre copie de Vue et de frappe-ui : les styles de l'îlot et ceux du bureau ne se mélangent pas.",[23,24,25],"mermaid",{},"\nflowchart LR\n    A[Application : build-islands.mjs] --> B[assets.json : nom.island.js \u002F nom.island.css]\n    B --> C[Bureau : frappe.ui.mount_island]\n    B --> D[App Vue : composant Island]\n    C --> E[Shadow root + application Vue]\n    D --> E\n",[27,28,29,42],"table",{},[30,31,32],"thead",{},[33,34,35,39],"tr",{},[36,37,38],"th",{},"Élément",[36,40,41],{},"Import",[43,44,45,60,73,84],"tbody",{},[33,46,47,55],{},[48,49,50,54],"td",{},[51,52,53],"code",{},"mountVueIsland"," : contrat de montage",[48,56,57],{},[51,58,59],{},"@framework\u002Fui\u002Fisland",[33,61,62,68],{},[48,63,64,67],{},[51,65,66],{},"buildIslands"," : construction",[48,69,70],{},[51,71,72],{},"@framework\u002Fui\u002Fvite\u002Fisland",[33,74,75,81],{},[48,76,77,80],{},[51,78,79],{},"frappe.ui.mount_island"," : chargement dans le bureau",[48,82,83],{},"Dodock (bureau)",[33,85,86,92],{},[48,87,88,91],{},[51,89,90],{},"\u003CIsland>"," : hôte Vue",[48,93,94],{},[51,95,96],{},"@framework\u002Fui\u002Fisland\u002FIsland.vue",[14,98,99,100,105],{},"Pour une page du bureau entièrement dessinée par une île, voir ",[101,102,104],"a",{"href":103},"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Files","Îles (Islands)",".",[107,108,110],"h2",{"id":109},"_1-écrire-le-point-dentrée","1. Écrire le point d'entrée",[112,113,118],"pre",{"className":114,"code":115,"language":116,"meta":117,"style":117},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F apps\u002Fmon_app\u002Ffrontend\u002Fsrc\u002Fislands\u002Fapercu.js\nimport { mountVueIsland } from \"@framework\u002Fui\u002Fisland\";\nimport Apercu from \".\u002FApercu.vue\";\n\nexport const mount = (el, context) => mountVueIsland(el, { ...context, component: Apercu });\n","js","",[51,119,120,129,162,182,189],{"__ignoreMap":117},[121,122,125],"span",{"class":123,"line":124},"line",1,[121,126,128],{"class":127},"sHwdD","\u002F\u002F apps\u002Fmon_app\u002Ffrontend\u002Fsrc\u002Fislands\u002Fapercu.js\n",[121,130,132,136,140,144,147,150,153,156,159],{"class":123,"line":131},2,[121,133,135],{"class":134},"s7zQu","import",[121,137,139],{"class":138},"sMK4o"," {",[121,141,143],{"class":142},"sTEyZ"," mountVueIsland",[121,145,146],{"class":138}," }",[121,148,149],{"class":134}," from",[121,151,152],{"class":138}," \"",[121,154,59],{"class":155},"sfazB",[121,157,158],{"class":138},"\"",[121,160,161],{"class":138},";\n",[121,163,165,167,170,173,175,178,180],{"class":123,"line":164},3,[121,166,135],{"class":134},[121,168,169],{"class":142}," Apercu ",[121,171,172],{"class":134},"from",[121,174,152],{"class":138},[121,176,177],{"class":155},".\u002FApercu.vue",[121,179,158],{"class":138},[121,181,161],{"class":138},[121,183,185],{"class":123,"line":184},4,[121,186,188],{"emptyLinePlaceholder":187},true,"\n",[121,190,192,195,199,202,205,208,212,215,218,221,224,227,230,232,234,237,240,242,246,249,251,254,256],{"class":123,"line":191},5,[121,193,194],{"class":134},"export",[121,196,198],{"class":197},"spNyl"," const",[121,200,201],{"class":142}," mount ",[121,203,204],{"class":138},"=",[121,206,207],{"class":138}," (",[121,209,211],{"class":210},"sHdIc","el",[121,213,214],{"class":138},",",[121,216,217],{"class":210}," context",[121,219,220],{"class":138},")",[121,222,223],{"class":197}," =>",[121,225,143],{"class":226},"s2Zo4",[121,228,229],{"class":142},"(el",[121,231,214],{"class":138},[121,233,139],{"class":138},[121,235,236],{"class":138}," ...",[121,238,239],{"class":142},"context",[121,241,214],{"class":138},[121,243,245],{"class":244},"swJcz"," component",[121,247,248],{"class":138},":",[121,250,169],{"class":142},[121,252,253],{"class":138},"}",[121,255,220],{"class":142},[121,257,161],{"class":138},[14,259,260,262,263,266,267,270,271,274,275,278,279,278,282,278,285,278,288,105],{},[51,261,53],{}," ouvre le shadow root, charge la feuille de style de l'application et suit le thème de l'hôte. Passez ",[51,264,265],{},"configure(app)"," pour enregistrer des plugins, et ",[51,268,269],{},"routes"," si l'île a sa propre navigation. Dans un composant, ",[51,272,273],{},"useHost()"," renvoie le contexte de l'hôte : ",[51,276,277],{},"locale",", ",[51,280,281],{},"timezone",[51,283,284],{},"user",[51,286,287],{},"theme",[51,289,290],{},"navigate",[107,292,294],{"id":293},"_2-construire-lîle","2. Construire l'île",[112,296,298],{"className":114,"code":297,"language":116,"meta":117,"style":117},"\u002F\u002F apps\u002Fmon_app\u002Ffrontend\u002Fbuild-islands.mjs\nimport { buildIslands } from \"@framework\u002Fui\u002Fvite\u002Fisland\";\n\nawait buildIslands({\n    app: \"mon_app\",\n    root: import.meta.dirname,\n    entries: { \"mon_app.apercu\": \"src\u002Fislands\u002Fapercu.js\" },\n    production: process.argv.includes(\"--production\"),\n    watch: process.argv.includes(\"--watch\"),\n});\n",[51,299,300,305,326,330,343,360,383,412,446,477],{"__ignoreMap":117},[121,301,302],{"class":123,"line":124},[121,303,304],{"class":127},"\u002F\u002F apps\u002Fmon_app\u002Ffrontend\u002Fbuild-islands.mjs\n",[121,306,307,309,311,314,316,318,320,322,324],{"class":123,"line":131},[121,308,135],{"class":134},[121,310,139],{"class":138},[121,312,313],{"class":142}," buildIslands",[121,315,146],{"class":138},[121,317,149],{"class":134},[121,319,152],{"class":138},[121,321,72],{"class":155},[121,323,158],{"class":138},[121,325,161],{"class":138},[121,327,328],{"class":123,"line":164},[121,329,188],{"emptyLinePlaceholder":187},[121,331,332,335,337,340],{"class":123,"line":184},[121,333,334],{"class":134},"await",[121,336,313],{"class":226},[121,338,339],{"class":142},"(",[121,341,342],{"class":138},"{\n",[121,344,345,348,350,352,355,357],{"class":123,"line":191},[121,346,347],{"class":244},"    app",[121,349,248],{"class":138},[121,351,152],{"class":138},[121,353,354],{"class":155},"mon_app",[121,356,158],{"class":138},[121,358,359],{"class":138},",\n",[121,361,363,366,368,371,373,376,378,381],{"class":123,"line":362},6,[121,364,365],{"class":244},"    root",[121,367,248],{"class":138},[121,369,370],{"class":134}," import",[121,372,105],{"class":138},[121,374,375],{"class":142},"meta",[121,377,105],{"class":138},[121,379,380],{"class":142},"dirname",[121,382,359],{"class":138},[121,384,386,389,391,393,395,398,400,402,404,407,409],{"class":123,"line":385},7,[121,387,388],{"class":244},"    entries",[121,390,248],{"class":138},[121,392,139],{"class":138},[121,394,152],{"class":138},[121,396,397],{"class":244},"mon_app.apercu",[121,399,158],{"class":138},[121,401,248],{"class":138},[121,403,152],{"class":138},[121,405,406],{"class":155},"src\u002Fislands\u002Fapercu.js",[121,408,158],{"class":138},[121,410,411],{"class":138}," },\n",[121,413,415,418,420,423,425,428,430,433,435,437,440,442,444],{"class":123,"line":414},8,[121,416,417],{"class":244},"    production",[121,419,248],{"class":138},[121,421,422],{"class":142}," process",[121,424,105],{"class":138},[121,426,427],{"class":142},"argv",[121,429,105],{"class":138},[121,431,432],{"class":226},"includes",[121,434,339],{"class":142},[121,436,158],{"class":138},[121,438,439],{"class":155},"--production",[121,441,158],{"class":138},[121,443,220],{"class":142},[121,445,359],{"class":138},[121,447,449,452,454,456,458,460,462,464,466,468,471,473,475],{"class":123,"line":448},9,[121,450,451],{"class":244},"    watch",[121,453,248],{"class":138},[121,455,422],{"class":142},[121,457,105],{"class":138},[121,459,427],{"class":142},[121,461,105],{"class":138},[121,463,432],{"class":226},[121,465,339],{"class":142},[121,467,158],{"class":138},[121,469,470],{"class":155},"--watch",[121,472,158],{"class":138},[121,474,220],{"class":142},[121,476,359],{"class":138},[121,478,480,482,484],{"class":123,"line":479},10,[121,481,253],{"class":138},[121,483,220],{"class":142},[121,485,161],{"class":138},[14,487,488,489,492,493,496,497,500],{},"Le nom de l'entrée est le nom de l'île. Le build écrit ",[51,490,491],{},"mon_app.apercu.island.js"," et ",[51,494,495],{},"mon_app.apercu.island.css"," dans ",[51,498,499],{},"assets.json"," : c'est l'enregistrement de l'île. Aucun hook n'est nécessaire. Préfixez le nom par celui de l'application : tous les noms partagent un même espace sur le bench.",[14,502,503,504,507,508,511],{},"Ajoutez aussi le correctif de ",[51,505,506],{},"reka-ui"," livré par le paquet, dans le ",[51,509,510],{},"package.json"," du frontend :",[112,513,517],{"className":514,"code":515,"language":516,"meta":117,"style":117},"language-jsonc shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"postinstall\": \"patch-package && patch-package --patch-dir node_modules\u002F@framework\u002Fui\u002Fpatches\"\n","jsonc",[51,518,519],{"__ignoreMap":117},[121,520,521],{"class":123,"line":124},[121,522,515],{},[14,524,525],{},"Sans lui, un popover ouvert au-dessus d'une boîte de dialogue ferme la boîte.",[107,527,529],{"id":528},"_3-monter-lîle","3. Monter l'île",[14,531,532],{},"Dans le bureau :",[112,534,536],{"className":114,"code":535,"language":116,"meta":117,"style":117},"const island = frappe.ui.mount_island(\"mon_app.apercu\", el, {\n    invoice: frm.doc.name,\n    onTitle: (title) => frappe.utils.set_title(title),\n});\nisland.update({ invoice: autre_facture });\n\u002F\u002F island.unmount() pour libérer\n",[51,537,538,579,601,634,642,671],{"__ignoreMap":117},[121,539,540,543,546,548,551,553,556,558,561,563,565,567,569,571,574,576],{"class":123,"line":124},[121,541,542],{"class":197},"const",[121,544,545],{"class":142}," island ",[121,547,204],{"class":138},[121,549,550],{"class":142}," frappe",[121,552,105],{"class":138},[121,554,555],{"class":142},"ui",[121,557,105],{"class":138},[121,559,560],{"class":226},"mount_island",[121,562,339],{"class":142},[121,564,158],{"class":138},[121,566,397],{"class":155},[121,568,158],{"class":138},[121,570,214],{"class":138},[121,572,573],{"class":142}," el",[121,575,214],{"class":138},[121,577,578],{"class":138}," {\n",[121,580,581,584,586,589,591,594,596,599],{"class":123,"line":131},[121,582,583],{"class":244},"    invoice",[121,585,248],{"class":138},[121,587,588],{"class":142}," frm",[121,590,105],{"class":138},[121,592,593],{"class":142},"doc",[121,595,105],{"class":138},[121,597,598],{"class":142},"name",[121,600,359],{"class":138},[121,602,603,606,608,610,613,615,617,619,621,624,626,629,632],{"class":123,"line":164},[121,604,605],{"class":226},"    onTitle",[121,607,248],{"class":138},[121,609,207],{"class":138},[121,611,612],{"class":210},"title",[121,614,220],{"class":138},[121,616,223],{"class":197},[121,618,550],{"class":142},[121,620,105],{"class":138},[121,622,623],{"class":142},"utils",[121,625,105],{"class":138},[121,627,628],{"class":226},"set_title",[121,630,631],{"class":142},"(title)",[121,633,359],{"class":138},[121,635,636,638,640],{"class":123,"line":184},[121,637,253],{"class":138},[121,639,220],{"class":142},[121,641,161],{"class":138},[121,643,644,647,649,652,654,657,660,662,665,667,669],{"class":123,"line":191},[121,645,646],{"class":142},"island",[121,648,105],{"class":138},[121,650,651],{"class":226},"update",[121,653,339],{"class":142},[121,655,656],{"class":138},"{",[121,658,659],{"class":244}," invoice",[121,661,248],{"class":138},[121,663,664],{"class":142}," autre_facture ",[121,666,253],{"class":138},[121,668,220],{"class":142},[121,670,161],{"class":138},[121,672,673],{"class":123,"line":362},[121,674,675],{"class":127},"\u002F\u002F island.unmount() pour libérer\n",[14,677,678,679,682],{},"Le troisième argument est l'objet des propriétés de l'île. ",[51,680,681],{},"island.ready"," est une promesse rejetée si l'île ne se charge pas. Une île n'est disponible que si son application est installée sur le site.",[14,684,685],{},"Dans une application frappe-ui :",[112,687,691],{"className":688,"code":689,"language":690,"meta":117,"style":117},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003CIsland name=\"mon_app.apercu\" :invoice=\"invoice\" :context=\"{ user, locale }\" @title=\"title = $event\" \u002F>\n","vue",[51,692,693],{"__ignoreMap":117},[121,694,695,698,701,704,706,708,710,712,715,718,720,722,724,726,728,730,732,734,736,739,741,744,746,748,751,753,755,757,760,762,765,767],{"class":123,"line":124},[121,696,697],{"class":138},"\u003C",[121,699,700],{"class":244},"Island",[121,702,703],{"class":197}," name",[121,705,204],{"class":138},[121,707,158],{"class":138},[121,709,397],{"class":155},[121,711,158],{"class":138},[121,713,714],{"class":138}," :",[121,716,717],{"class":197},"invoice",[121,719,204],{"class":138},[121,721,158],{"class":138},[121,723,717],{"class":142},[121,725,158],{"class":138},[121,727,714],{"class":138},[121,729,239],{"class":197},[121,731,204],{"class":138},[121,733,158],{"class":138},[121,735,656],{"class":138},[121,737,738],{"class":142}," user",[121,740,214],{"class":138},[121,742,743],{"class":142}," locale ",[121,745,253],{"class":138},[121,747,158],{"class":138},[121,749,750],{"class":138}," @",[121,752,612],{"class":197},[121,754,204],{"class":138},[121,756,158],{"class":138},[121,758,759],{"class":142},"title ",[121,761,204],{"class":138},[121,763,764],{"class":142}," $event",[121,766,158],{"class":138},[121,768,769],{"class":138}," \u002F>\n",[14,771,772,773,105],{},"Pour afficher une île dans un formulaire sans code, utilisez un ",[101,774,776],{"href":775},"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fchamp-vue-component","champ « Composant Vue »",[107,778,780],{"id":779},"titre-et-actions-dune-île-de-page","Titre et actions d'une île de page",[14,782,783],{},"Une île qui remplit une page ne dessine pas d'en-tête. Elle signale deux valeurs, et l'hôte construit le titre et le menu de la page :",[785,786,787,797],"ul",{},[788,789,790,792,793,796],"li",{},[51,791,612],{}," : texte ou ",[51,794,795],{},"null"," ;",[788,798,799,802,803,806,807,105],{},[51,800,801],{},"actions"," : liste de ",[51,804,805],{},"{ label, icon?, onClick }"," ou ",[51,808,809],{},"{ label, icon?, href }",[14,811,812,813,492,816,819,820,823],{},"Dans le bureau, passez ",[51,814,815],{},"onTitle",[51,817,818],{},"onActions",". Une action avec ",[51,821,822],{},"href"," s'ouvre dans un nouvel onglet.",[107,825,827],{"id":826},"dessiner-un-document-du-bureau-avec-une-île","Dessiner un document du bureau avec une île",[14,829,830,831,492,835,838,839,842,843,846,847,714],{},"Le bureau dessine lui-même les documents ",[832,833,834],"strong",{},"Dashboard",[832,836,837],{},"Dashboard Chart",". Une application peut les dessiner avec son île. Elle place ",[51,840,841],{},"__onload.island"," depuis un gestionnaire ",[51,844,845],{},"onload"," déclaré dans ",[51,848,849],{},"doc_events",[112,851,855],{"className":852,"code":853,"language":854,"meta":117,"style":117},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# mon_app\u002Fhooks.py\ndoc_events = {\"Dashboard\": {\"onload\": \"mon_app.desk.island.dashboard\"}}\n\n# mon_app\u002Fdesk\u002Fisland.py\ndef dashboard(doc, method=None):\n    if doc.get(\"mon_app_dashboard\"):\n        doc.set_onload(\"island\", {\"name\": \"mon_app.dashboard\", \"props\": {\"dashboard\": doc.mon_app_dashboard}})\n","python",[51,856,857,862,867,871,876,881,886],{"__ignoreMap":117},[121,858,859],{"class":123,"line":124},[121,860,861],{},"# mon_app\u002Fhooks.py\n",[121,863,864],{"class":123,"line":131},[121,865,866],{},"doc_events = {\"Dashboard\": {\"onload\": \"mon_app.desk.island.dashboard\"}}\n",[121,868,869],{"class":123,"line":164},[121,870,188],{"emptyLinePlaceholder":187},[121,872,873],{"class":123,"line":184},[121,874,875],{},"# mon_app\u002Fdesk\u002Fisland.py\n",[121,877,878],{"class":123,"line":191},[121,879,880],{},"def dashboard(doc, method=None):\n",[121,882,883],{"class":123,"line":362},[121,884,885],{},"    if doc.get(\"mon_app_dashboard\"):\n",[121,887,888],{"class":123,"line":385},[121,889,890],{},"        doc.set_onload(\"island\", {\"name\": \"mon_app.dashboard\", \"props\": {\"dashboard\": doc.mon_app_dashboard}})\n",[14,892,893,894,897,898,900],{},"Exemple fictif : ",[51,895,896],{},"mon_app_dashboard"," est un champ personnalisé de votre application. Sans la clé ",[51,899,646],{},", le bureau affiche le document normalement. Dans un widget de graphique, le bureau garde le cadre (titre, menu, erreurs) et l'île dessine le corps.",[902,903,904],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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);}",{"title":117,"searchDepth":124,"depth":131,"links":906},[907,908,909,910,911],{"id":109,"depth":131,"text":110},{"id":293,"depth":131,"text":294},{"id":528,"depth":131,"text":529},{"id":779,"depth":131,"text":780},{"id":826,"depth":131,"text":827},"Construire une île Vue dans une application et la monter dans le bureau, dans une application frappe-ui ou à la place d'un document du bureau.","md",{"reviewed":187,"last_verified":915,"sources":916},"2026-11-04",[917,918,919,920,921,922,923],"dodock@develop:ui\u002FREADME.md","dodock@develop:ui\u002Fisland\u002Fmount.js","dodock@develop:ui\u002Fisland\u002Fhost.js","dodock@develop:ui\u002Fvite\u002Fisland\u002Findex.js","dodock@develop:ui\u002Fisland\u002Fdecisions\u002F0011-an-app-claims-a-desk-document-with-doc-events.md","dodock@develop:frappe\u002Fpublic\u002Fjs\u002Ffrappe\u002Fui\u002Fisland\u002Floader.js","dodock@develop:frappe\u002Futils\u002Fisland.py","\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002File-d-application",{"title":5,"description":912},"2.next\u002F3.dodock\u002F10.developpeurs\u002File-d-application","nN3Qy71QV5mfBDgZoIpio0_mlE4YQRB0BFu8-9T8Mj4",{},1793871745885]